// 主题:80386读书笔记
// 作者:kevinjz2010@gmail.com
// 版权:kevinjz原创
// 平台:80386
// 发布日期:2011-07-25
// 最后修改:2011-07-25
// 注意事项:欢迎转载,但不得在转载的时候擅自修改、删除文章的任何部分
//-------------------------------------------------------------------------------------------------
二、存储管理机制详解之分页机制
1、分页机制在段机制之后进行操作,完成线性地址向物理地址的转换。
2、分页机制由CR0中的PG位启用,值为1时启用。
3、分页机制将线性地址空间以及物理地址空间都看成由页组成的,线性地址空间中的任何一页都能映射成物理地址空间中的任何一页。
4、80386使用4K字节大小的页,并且在4K字节的边界上对其,即每一页的起始地址都能被4K整除。因此,线性地址的低12bit经过分页基址直接地作为物理地址的低12bit。
5、线性地址转物理地址的意义可扩展为允许将一个线性地址标记为无效,而不是实际的产生一个物理地址。
无效的情况有两种:一是线性低Hi是操作系统不支持的地址;二是在虚拟存储系统中,线性地址对应的页存储在磁盘上,而不再物理存储器中(未驻留页)。
6、分页转换函数由一个存储器常驻表描述,称为页表。
其一直存储在物理地址空间中,可将其简单的看成一个有220的物理地址组成的数组,线性地址转换为物理地址就是对这些物理地址进行查询。线性地址的高20bit形成对数组进行查询的索引,从而选择相应页的物理地址(基址),再加上低12bit的页内偏移,既得到最终的物理地址。
7、页表长度为32bit,但只有高20bit用来存储物理地址,低12bit则用来表示页的属性。
8、两级页表结构:
按正常的存储方式,80386中共有220个表项,每个表项占4个字节,如果所有表象存储在一个表中,则需占据4M的连续内存,这对当时的内存容量来说是巨大的消耗。故采用两级页表结构,对线性地址的高20bit转换也分为两步完成,每一步各使用其中的10bit。
两级页表结构中的第一级称为页表目录,存储在一个4K字节的页中。其中共有210个表项,每个表项占4个字节,每个表项指向一个第二级页表。由线性地址的最高10bit产生索引,指定并选择了210个二级页表中的一个。
第二级页表也刚好存储在一个4K字节的页中,包含1K个4字节的表项,每个表项包含一个页的物理基地址。第二级页表由线性地址的中间10bit进行索引。二级页表中表项包含的物理基地址加上线性地址的低12bit就组成了最后的物理地址。二级页表对于在线性地址空间不存在或未使用的部分不分配页表,所以页表结构远小于4M.
9、全局页表:由多个任务共享的的页。
10、局部页表:
11、页表项格式:
P:存在位,该位是的操作系统只需分配覆盖实际使用的线性地址范围需要的二级表。另外,利用该位可以将暂时不用的二级页表存储在磁盘上(虚拟存储器),以减少物理内存使用空间。
R/W:读写位,值为表示可读可写可执行;值为0,表示只可读或执行。
U/S:用户/系统位,值为1表示任何特权级都可以访问,包括用户级(3级),否则能由超级特权级(0、1、2)。(页表目录项与第二级页表项的该位进行与操作来确定最终的页的特权级)
A:访问位,在访问页表项映射的任何一页之前,由处理器置1,处理器不会清除该位,但可通过软件进行清除。操作系统可以周期性的检测该位,确定有哪些页最近有很长一段时间未用过。可以再资源短缺时,将这些页移到磁盘上去存储
D:已写位,第二级页表中D位,在处理器对任何页表项映射的页进行写访问之前置1。页表目录中表项的D位不会做修改。当一个页从磁盘读入时,D位为0,此时如果将该页传送到磁盘,若D位仍为0,则不需对磁盘进行写入,只需要放弃内存中的页即可。
12、线性地址转换物理地址过程:
a.CR3寄存器中保存有页表目录的基地址;
b.线性地址的最高10bitX4得到页表目录中页表项的偏移地址,这样加上基地址就得到了第一级页表项的物理地址;
c.根据索引得到的目录页表项中的内容,确定P位等属性为是否合法。合法则将高20 bit,作为第二级页表的基址;
d.线性地址的中间10bitX4得到第二级页表项的偏移地址,这样加上基地址就得到第二级页表项的物理地址;
e.第二级页表项中的高20bit为最终物理地址的高20bit,这样在加上线性地址的第12bit,就得到了最终的物理地址。
13、分页机制的特权级:只有两种,超级特权级(0、1、2)与用户特权级。
14、TLB:转换查找缓存或页机制,80386的硬件,把最近使用的线性地址转物理地址,存储在处理器的页转换高速缓存中。在访问存储器页表之前总是先查阅高速缓存。