AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

分页管理机制

51自学网 http://www.51zixue.net

4.不存在的页表

    采用上述页映射表结构,存储全部1K张页表需要4M字节,此外还需要4K字节用于存储页目录表。这样的两级页映射表似乎反而比单一的整张页映射表多占用4K字节。其实不然,事实上不需要在内存中存储完整的两级页映射表。两级页映射表结构中对于线性地址空间中不存在的或未使用的部分不必分配页表。除必须给页目录表分配物理页外,仅当在需要时才给页表分配物理页,于是页映射表的大小就对应于实际使用的线性地址空间大小。因为任何一个实际运行的程序使用的线性地址空间都远小于4G字节,所以用于分配给页表的物理页也远小于4M字节。
    页目录表项中的存在位P表明对应页表是否有效。如果P=1,表明对应页表有效,可利用它进行地址转换;如果P=0,表明对应页表无效。如果试图通过无效的页表进行线性地址到物理地址的转换,那么将引起页故障。因此,页目录表项中的属性位P使得操作系统只需给覆盖实际使用的线性地址范围的页表分配物理页。
    页目录表项中的属性位P页可用于把页表存储在虚拟存储器中。当发生由于所需页表无效而引起的页故障时,页故障处理程序再申请物理页,从磁盘上把对应的页表读入,并把对应页目录表项中的P位置1。换言之,可以当需要时才为所要的页表分配物理页。这样页表占用的物理页数量可降到最小。

5.页的共享

    由上述页映射表结构可见,分页机制没有全局页和局部页的规定。每一个任务可使用自己的页映射表独立地实现线性地址到物理地址的转换。但是,如果使每一个任务所用的页映射表具有部分相同的映射,那么也就可以实现部分页的共享。
    常用的实现页共享的方法是线性地址空间的共享,也就是不同任务的部分相同的线性地址空间的映射信息相同,具体表现为部分页表相同或页表内的部分表项的页码相同。例如,如果任务A和任务B分别使用的页目录表A和页目录表B内的第0项中的页码相同,也就是页表0相同,那么任务A和任务B的00000000H至003FFFFFH线性地址空间就映射到相同的物理页。再如,任务A和任务B使用的页表0不同,但这两张页表内第0至第0FFH项的页码对应相同,那么任务A和任务B的00000000H至000FFFFFH线性地址空间就映射到相同的物理页。
需要注意的是,共享的页表最好由两个页目录中同样的目录项所指定。这一点很重要,因为它保证了在两个任务中同样的线性地址范围将映射到该全局区域。

<三>页级保护和虚拟存储器支持

1.页级保护

    80386不仅提供段级保护,也提供页级保护。分页机制只区分两种特权级。特权级0、1和2统称为系统特权级,特权级3称为用户特权级。在上图所示页目录表和页表的表项中的保护属性位R/W和U/S就是用于对页进行保护。
    表项的位1是读写属性位,记作R/W。R/W位指示该表项所指定的页是否可读、写或执行。若R/W=1,对表项所指定的页可进行读、写或执行;若R/W=0,对表项所指定的页可读或执行,但不能对该指定的页写入。但是,R/W位对页的写保护只在处理器处于用户特权级时发挥作用;当处理器处于系统特权级时,R/W位被忽略,即总可以读、写或执行。
    表项的位2是用户/系统属性位,记作U/S。U/S位指示该表项所指定的页是否是用户级页。若U/S=1,表项所指定的页是用户级页,可由任何特权级下执行的程序访问;如果U/S=0,表项所指定的页是系统级页,只能由系统特权级下执行的程序访问。下表列出了上述属性位R/W和U/S所确定的页级保护下,用户级程序和系统级程序分别具有的对用户级页和系统级页进行操作的权限。

页级
保护
属性
U/SR/W用户级访问权限系统级访问权限
00读/写/执行
01读/写/执行
10读/执行读/写/执行
11读/写/执行读/写/执行

    由上表可见,用户级页可以规定为只允许读/执行或规定为读/写/执行。系统级页对于系统级程序总是可读/写/执行,而对用户级程序总是不可访问的。于分段机制一样,外层用户级执行的程序只能访问用户级的页,而内层系统级执行的程序,既可访问系统级页,也可访问用户级页。与分段机制不同的是,在内层系统级执行的程序,对任何页都有读/写/执行访问权,即使规定为只允许读/执行的用户页,内层系统级程序也对该页有写访问权。
    页目录表项中的保护属性位R/W和U/S对由该表项指定页表所指定的全部1K各页起到保护作用。所以,对页访问时引用的保护属性位R/W和U/S的值是组合计算页目录表项和页表项中的保护属性位的值所得。下表列出了组合计算前后的保护属性位的值,组合计算是“与”操作。

组合页的
保护>属性
目录表项U/S页表项U/S组合U/S目录表项R/W页表项R/W组合R/W
000000
010010
100100
111111

    正如在80386地址转换机制中分页机制在分段机制之后起作用一样,由分页机制支持的页级保护也在由分段机制支持的段级保护之后起作用。先测试有关的段级保护,如果启用分页机制,那么在检查通过后,再测试页级保护。如果段的类型为读/写,而页规定为只允许读/执行,那么不允许写;如果段的类型为只读/执行,那么不论页保护如何,也不允许写。
    页级保护的检查是在线性地址转换为物理地址的过程中进行的,如果违反页保护属性的规定,对页进行访问(读/写/执行),那么将引起页异常。

2.对虚拟存储器的支持

    页表项中的P位是支持采用分页机制虚拟存储器的关键。P=1,表示表项指定的页存在于物理存储器中,并且表项的高20位是物理页的页码;P=0,表示该线性地址空间中的页所对应的物理地址空中的页不在物理存储器中。如果程序访问不存在的页,会引起页异常,这样操作系统可把该不存在的页从磁盘上读入,把所在物理页的页码填入对应表项并把表项中的P位置为1,然后使引起异常的程序恢复运行。
    此外,表项中的访问位A和写标志位D也用于支持有效地实现虚拟存储器。
    表项的位5是访问属性位,记作A。在为了访问某存储单元而进行线性地址到物理地址的转换过程中,处理器总是把页目录表内的对应表项和其所指定页表内的对应表项中的A位置1,除非页表或页不存在,或者访问违反保护属性规定。所以,A=1表示已访问过对应的物理页。处理器永不清除A位。通过周期性地检测及清除A位,操作系统就可确定哪些页在最近一段时间未被访问过。当存储器资源紧缺时,这些最近未被访问的页很可能就被选择出来,将它们从内存换出到磁盘上去。
    表项的位6是写标志位,记作D。在为了访问某存储单元而进行线性地址到物理地址的转换过程中,如果是写访问并且可以写访问,处理器就把页表内对应表项中的D位置1,但并不把页目录表内对应表项中的D置1。当某页从磁盘上读入内存时,页表中对应对应表项的D位被清0。所以,D=1表示已写过对应的物理页。当某页需要从内存换出到磁盘上时,如果该页的D位为1,那么必须进行写操作(把内存中的页写入磁盘时,处理器并不清除对应页表项的D位)。但是,如果要写到磁盘上的页的D位为0,那么不需要实际的磁盘写操作,而只要简单地放弃内存中该页即可。因为内存中的页与磁盘中的页具有完全相同的内容。

<四>页异常

    启用分页机制后,线性地址不再直接等于物理地址,线性地址要经过分页机制转换才成为物理地址。在转换过程中,如果出现下列情况之一就会引起页异常:
    (1)涉及的页目录表内的表项或页表内的表项中的P=0,即涉及到页不在内存;
    (2)发现试图违反页保护属性的规定而对页进行访问。
    报告页异常的中断向量号是14(0EH)。页异常属于故障类异常。在进入故障处理程序时,保存的指令指针CS及EIP指向发生故障的指令。一旦引起页故障的原因被排除后,即可从页故障处理程序通过一条IRET指令,直接地重新执行产生故障的指令。
    当页故障发生时,处理器把引起页故障的线性地址装入CR2。页故障处理程序可以利用该线性地址确定对应的页目录项和页表项。
页故障还在堆栈中提供一个出错码,出错码的格式如下图所示。其中,U位表示引起故障程序的特权级,U=1表示用户特权级(特权级3),U=0表示系统特权级(特权级0、1或2);W位表示访问类型,W=0表示读/执行,W=1表示写;P位表示异常类型,P=0表示页不存在故障,P=1表示保护故障。页故障的响应处理模式同其它故障一样。

出错码
的格式
BIT15—BIT3BIT2BIT1BIT0
未使用UWP

<五>演示分页机制的实例(实例十)

    下面给出一个演示如何启用分页管理机制的实例。该实例的逻辑功能是,在屏幕上显示一条表示已启用分页管理机制的提示信息。该实例演示内容包括:初始化页目录表和部分页表;启用分页管理机制;关闭分页管理机制等。该实例假设系统至少有4M字节物理内存。

1.演示步骤和源程序清单

    为了简单化,实例只有一个任务,并且没有局部描述符表和中断描述符表,不允许中断,也不考虑发生异常,甚至没有使用堆栈。实例执行步骤如下:
    (1)在实模式下为进入保护模式作初始化;
    (2)切换到保护模式后进入临时代码段,把部分演示代码传送到预定的内存,然后转演示代码段;
    (3)建立页目录表;
    (4)建立页表;
    (5)启用分页管理机制;
    (6)演示在分页管理机制启用后的程序执行和数据存取;
    (7)关闭分页管理机制;
    (8)退出保护模式,结束。
 

 


 
上一篇:DeviceIoControl接口  下一篇:控制转移(1)