Linux2.6虚拟内存管理

除了分段管理中的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.内存寻址过程中出现页面异常时的处理过程:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值