|
80386开始支持存储器分页管理机制。分页机制是存储器管理机制的第3二部分。段管理机制实现虚拟地址(由段和偏移构成的逻辑地址)到线性地址的转换,分页管理机制实现线性地址到物理地址的转换。如果不启用分页管理机制,那么线性地址就是物理地址。本文将介绍80386的存储器分页管理机制和线性地址如何转换为物理地址。
<一>存储器分页管理机制
在保护模式下,控制寄存器CR0中的最高位PG位控制分页管理机制是否生效。如果PG=1,分页机制生效,把线性地址转换为物理地址。如果PG=0,分页机制无效,线性地址就直接作为物理地址。必须注意,只有在保护方式下分页机制才可能生效。只有在保证使PE位为1的前提下,才能够使PG位为1,否则将引起通用保护故障。
分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称之为页。通过在线性地址空间的页与物理地址空间的页之间建立的映射,分页机制实现线性地址到物理地址的转换。线性地址空间的页与物理地址空间的页之间的映射可根据需要而确定,可根据需要而改变。线性地址空间的任何一页,可以映射为物理地址空间中的任何一页。
采用分页管理机制实现线性地址到物理地址转换映射的主要目的是便于实现虚拟存储器。不象段的大小可变,页的大小是相等并固定的。根据程序的逻辑划分段,而根据实现虚拟存储器的方便划分页。
在80386中,页的大小固定为4K字节,每一页的边界地址必须是4K的倍数。因此,4G大小的地址空间被划分为1M个页,页的开始地址具有“XXXXX000H”的形式。为此,我们把页开始地址的高20位XXXXXH称为页码。线性地址空间页的页码也就是页开始边界线性地址的高20位;物理地址空间页的页码也就是页开始边界物理地址的高20位。可见,页码左移12位就是页的开始地址,所以页码规定了页。
由于页的大小固定为4K字节,且页的边界是4K的倍数,所以在把32位线性地址转换成32位物理地址的过程中,低12位地址保持不变。也就是说,线性地址的低12位就是物理地址的低12位。假设分页机制采用的转换映射把线性地址空间的XXXXXH页映射到物理地址空间的YYYYYH页,那么线性地址XXXXXxxxH被转换为YYYYYxxxH。因此,线性地址到物理地址的转换要解决的是线性地址空间的页到物理地址空间的页的映射,也就是线性地址高20位到物理地址高20位的转换。
<二>线性地址到物理地址的转换
1.映射表结构
线性地址空间的页到物理地址空间的页之间的映射用表来描述。由于4G的地址空间划分为1M个页,因此,如果用一张表来描述这种映射,那么该映射表就要有1M个表项,若每个表项占用4个字节,那么该映射表就要占用4M字节。为避免映射表占用如此巨大的存储器资源,所以80386把页映射表分为两级。
页映射表的第一级称为页目录表,存储在一个4K字节的物理页中。页目录表共有1K个表项,其中,每个表项为4字节长,包含对应第二级表所在物理地址空间页的页码。页映射表的第二级称为页表,每张页表也安排在一个4K字节的页中。每张页表都有1K个表项,每个表项为4字节长,包含对应物理地址空间页的页码。由于页目录表和页表均由1K个表项组成,所以使用10位的索引就能指定表项,即用10位的索引值乘以4加基地址就得到了表项的物理地址。
下图显示了由页目录表和页表构成的页映射表结构。从图中可见,控制寄存器CR3指定页目录表;页目录表可以指定1K个页表,这些页表可以分散存放在任意的物理页中,而不需要连续存放;每张页表可以指定1K个物理地址空间的页,这些物理地址空间的页可以任意地分散在物理地址空间中。需要注意的是,存储页目录表和页表的基地址是对齐在4K字节边界上的。
2.表项格式
页目录表和页表中的表项都采用如下图所示的格式。从图中可见,最高20位(位12—位31)包含物理地址空间页的页码,也就是物理地址的高20位。低12位包含页的属性。下图所示的属性中内容为0的位是Intel公司为80486等处理器所保留的位,在为80386编程使用到它们时必须设置为0。在位9至位11的AVL字段供软件使用。表项的最低位是存在属性位,记作P。P位表示该表项是否有效。P=1表项有效;P=0表项无效,此时表项中的其余各位均可供软件使用,80386不解释P=0的表项中的任何其它的位。在通过页目录表和页表进行的线性地址到物理地址的转换过程中,无论在页目录表还是在页表中遇到无效表项,都会引起页故障。其它属性位的作用在下文中介绍。 页目录表或页 表的表项格式 BIT31—BIT12 BIT11—BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 物理页码 AVL 0 0 D A 0 0 U/S R/W P
上一篇:只能在保护模式下执行的指令
下一篇:Casl汇编语言辅导(1)
|