您的位置:首页 > 其它

操作系统学习笔记——保护模式——分页机制

2012-07-06 10:11 155 查看
在保护模式下,提供了分段和分页两种内存管理机制。这两种机制的内存寻址方式,都可以归结为查表。

如何开启分页机制:

通过设置CR0寄存器的PG位(即第31位),来启用分页机制。注意:启用分页机制之前,CPU必须已经进入到保护模式下,如果CPU仍工作在实模式下,开启分页机制是无效的。

分页机制:

开启分页机制后,分页机制会将线性地址空和物理地址空间都划分成页面,每个页面4KB,从而将线性地址空间的页面按照任意的方式映射到物理地址空间当中。每个页面4KB,并且对齐于4KB地址边界,故分页机制将2^32的地址空间划分成了2^20个页面。就一句话:分页机制就是将线性地址的高20位,通过查表(页目录表和页表),转换为物理地址的高20位。

页表结构:

页表中的一个页表项是32位,其中高20位用于存放页面的物理基地址,低12位存放页面的属性。

页表可以含有2^20个页表项,每个页表项4B,这样页表就会占用4MB的内存空间。因此,为了节省内存空间,可以使用二级页表,即页目录、页表,页目录用于映射页表物理首地址,页表用于映射内存页的物理首地址。

到了linux2.6.10操作系统,采用的是三级页表;到linux2.6.11操作系统,为了提供能够兼容32bit和64bit操作系统,linux采用了四级页表。

分页寻址:





分段机制将逻辑地址转换为线性地址,分页机制将线性地址转换为物理地址。注:分段和分页机制均采用查表的方式寻址。

寄存器CR3中,存放的是页目录的物理首地址。

线性地址中,最高10bit,用于索引页目录中的页表项,取出页表的物理首地址。接下来的10bit和页表的首地址结合,用于索引页表中的页,找到内存中页的物理首地址。最后和线性地址的第12bit结合,确定物理地址。

分段机制和分页机制的主要不同点:

(1)最大的不同点即分页使用了固定长度的页面(4KB),段的长度是不固定的,一般和存放在其中的代码或数据结构具有相同的长度。

(2)分段机制,段作为一个整体存在于内存中;分页机制将线性地址空间划分为4KB大小的页,一个段可以分成若干个页,这就为虚拟存储提供了支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐