Linux2.6虚拟内存管理

news/2024/7/20 15:52:45 标签: 内存管理, 操作系统

除了分段管理中的LDT和GDT有较大改动,分页管理中增加了三级分页模型以外,大部分内容可以参考Linux0.12-内存寻址


一、分段管理:

1.Linux中,段基址总是0,逻辑地址与线性地址是一致的。

或者说,在Linux中,没有实际上地使用分段机制


2.一个进程可以使用一个GDT和一个LDT

GDT包含:

(1)LDT在GDT中的描述符

(2)3个局部段描述符

(3)3个与高级电源管理相关的段

(4)5个PnP的BIOS服务程序相关的段

(5)1个特殊的TSS段

(6)1个任务状态段TSS

(7)内核态和用户态的代码段和数据段(共4个)

LDT包含:8191个段

大多数用户态下的Linux程序不使用KDT,因此内核定义了一个缺省的LDT供大多数进程共享。


3.GDT第0项不用,因为防止在加电后段寄存器未经初始化就进入保护模式并使用GDT


二、分页管理:

1.几种分页模型的比较

 二级分页模型三级分页模型四级分页模型
操作系统支持Linux2.6.10以前Linux2.6.10Linux2.6.11
物理支持32位启用物理地址扩展(PAE)的32位(物理地址36位,线性地址32位)64位
线性地址格式10位PD + 10位PT + 12位offset2位PGD + 9位PMD + 9位PT + 12位offset9位PGD + 9位PUD + 9位PMD + 9位PT + 12位offset
页表项结构20位物理地址 + 12位标志位24位物理地址 + 12位标志位 
页面大小4K4K 
页框数2^202^24 
页表项大小4B8B 
页表总大小4MB128MB 
一页页表包含的页表项数1024512 

计算方法:

页框大小 = 2 ^ offset

页框数 = 物理内存大小 / 页框大小

页表项大小 = 页表长度 / 8

页表总大小 = 页框数 * 页表项大小

一页页表包含的页表项 = 页面大小 / 页表项大小

几级分布就要访问几次内存


2.为了缓解CPU与RAM之间的速度不匹配,在分页单元与主内存之间,插入一个高速缓存单元cache。

N路组关联的高速缓存:主存中的任意一个行可以存放在高速缓存N行中的任意一行。

访问一个RAM存储单元时,先与高速缓存中的这N行进行匹配


3.为了加快线性地址的转换,引入了TLB

当CPU的cr3寄存器被修改时,本地TLB自动无效

cr3存放的是PD的基址(这是一个物理地址)、

分段没有类似的机制,因为段址是二维的。


4.为了使二级页表模型与三级页表模型兼容,当使用二级页表时,页中间目录仅含有一个指向下属页表的目录项


5.主内核页全局目录:

内核维持着一组自己使用的页表,驻留在主内核页全局目录中

主内核页全局目录的最高目录项部分作为参考模型,为系统中的每个普通进程对应的页全局目录项提供参考模型

内核页表的初始化是的实模式下进行的,此时分页功能还没有启用。具体过程参见Linux2.6物理内存管理


6.内核线程并不拥有自己的页表集,它们使用刚在CPU上执行过的普通进程的页表集

内核线程不访问用户态地址空间。


7.内存寻址过程中出现页面异常时的处理过程:

图中的连线没画箭头,都是从左往右指

转载于:https://www.cnblogs.com/windmissing/archive/2012/04/27/2559832.html


http://www.niftyadmin.cn/n/826428.html

相关文章

mesh 协调器 路由器_双模网络协调器、双模路由器和双模mesh组网系统的制作方法...

双模网络协调器、双模路由器和双模mesh组网系统的制作方法【技术领域】[0001]本实用新型涉及电子通信领域,特别涉及双模网络协调器、双模路由器、双模mesh组网系统。【背景技术】[0002]无线mesh是一种非常适合于覆盖大面积开放区城(包括室外和室内)的无线区域网络解…

Django框架的ORM操作

一、修改setting中的设置 修改连接到MySQL数据库 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME:dj3,USER: root,PASSWORD: 20001101pyj,HOST: localhost,PORT: 3306,} } 二、在当前项目下的__init__.py添加代码 将Django默认的以MySQLdb连接数据库的方式改…

高级java复习笔记(期末不要挂啦)

老师:就看看基本的设计模式 序列化 注册监听器 对象实例化方法 反射的作用 切面编程 套接字 同步 连接池 线程池 比较接口 再看看代理模式 策略模式有什么应用 然后复习一下多线程编程 就好了 肯定还有个重点叫数据库连接吧!( 行叭 虽然并不…

for xml path语句的应用(转)

大家都知道在sql server中利用for xml path语句能够把查询的数据生成xml数据,下面是他的一些应用实例: DECLARE TempTable table(UserID int , UserName nvarchar(50));insert into TempTable (UserID,UserName) values (1,a)insert into TempTable (Use…

boot定时任务开启和关闭 spring_SpringBoot开启定时任务

1、创建一个Springboot工程,在它的程序入口加上EnableScheduling,开启调度任务。//开启定时任务EnableSchedulingSpringBootApplicationpublic class SpringBootTimerTasksApplication { public static void main(String[] args) { SpringApplication.run…

图形界限命令在命令行输入_CAD命令使用教程之CAD软件中拉伸命令的巧用

在使用浩辰CAD软件绘制图纸的过程中,首先要对常用的CAD命令及功能足够了解才能更好的绘图,CAD拉伸命令就是其中之一。一般在只改变图形某个方向尺寸的时候,可以用拉伸STRETCH命令来调整图形部分顶点的位置,接下来给大家介绍一下CA…

angular 定义对象_手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件

DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师。官方网站:devui.designNg组件库:ng-devui(欢迎Star)引言“他在正午、黄昏&#x…

分页操作模块

逻辑处理 class PageControl(object):#参数分别代表当前页数、每一页的页数、总的页数、当前页面的路径def __init__(self,current_page,per_page,all_count,url):self.current_page int(current_page)self.per_page per_pageself.all_count all_counta,b divmod(all_coun…