恳求分页零碎树立在根本分页零碎根底之上,为了支撑虚拟存储器功用而添加了恳求调页功用和页面置换功用。恳求分页是今朝最常用的一种完成虚拟存储器的办法。
在恳求分页零碎中,只需求将以后需求的一局部页面装入内存,即可以启举措业运转。在功课履行进程中,当所要拜访的页面不在内存时,再经过调页功用将其调入,同时还可以经过置换功用将临时不必的页面换出到外存上,以便腾出内存空间。
为了完成恳求分页,零碎必需供给必定的硬件支撑。除了需求必定容量的内存及外存的盘算机零碎,还需求有页表机制、缺页中缀机构和地址变换机构。

页表机制

恳求分页零碎的页表机制分歧于根本分页零碎,恳求分页零碎在一个功课运转之前不请求全体一次性调入内存,因而在功课的运转进程中,必定会呈现要拜访的页面不在内存的状况,若何发现和处置这种状况是恳求分页零碎必需处理的两个根本成绩。为此,在恳求页表项中添加了四个字段,如图3-24所示。

恳求分页治理方法完成虚拟内存_程序
图3-24  恳求分页零碎中的页表项


添加的四个字段阐明如下:

  • 形态位P:用于指导该页能否已调入内存,供程序拜访时参考。

  • 拜访字段A:用于记载本页在一段工夫内被拜访的次数,或记载本页比来己有多长工夫未被拜访,供置换算法换出页面时参考。

  • 修正位M:标识该页在调入内存后能否被修正过。

  • 外存地址:用于指出该页在外存上的地址,平日是物理块号,供调入该页时参考。

缺页中缀机构

在恳求分页零碎中,每当所要拜访的页面不在内存时,便发生一个缺页中缀,恳求操作零碎将所缺的页调入内存。此时应将缺页的过程壅塞(调页完成叫醒),假如内存中有闲暇块,则分派一个块,将要调入的页装入该块,并修正页表中响应页表项,若此时内存中没有闲暇块,则要镌汰某页(若被镌汰页在内存时期被修正过,则要将其写回外存)。
缺页中缀作为中缀异样要阅历,诸如维护CPU情况、剖析中缀缘由、转入缺页中缀处置程序、恢复CPU情况等几个步调。但与普通的中缀比拟,它有以下两个分明的差别:

  • 在指令履行时期发生和处置中缀旌旗灯号,而非一条指令履行完后,属于外部中缀。

  • 一条指令在履行时期,能够发生屡次缺页中缀。

地址变换机构

恳求分页零碎中的地址变换机构,是在分页零碎地址变换机构的根底上,为完成虚拟内存,又添加了某些功用而构成的。

恳求分页治理方法完成虚拟内存_程序_02
图3-25恳求分页中的地址变换进程


如图3-25所示,在停止地址变换时,先检索快表:

  • 若找到要拜访的页,便修正页表项中的拜访位(写指令则还须重置修正位),然后应用页表项中给出的物理块号和页边疆址构成物理地址。

  • 若未找到该页的页表项,应到内存中去查找页表,再比照页表项中的形态位P,看该页能否已调入内存,未调入则发生缺页中缀,恳求从外存把该页调入内存。