• 内容讲解

 

以页为基本单位的虚拟存储器叫做页式虚拟存储器。主存空间和虚存空间都划分成若干个大小相等的页,主存(即实存)的页称为实页,虚存的页称为虚页。

虚存地址分为高低两个字段:高位字段为逻辑页号,低位字段为页内地址。实存地址也分为高低两个字段:高位字段为物理页号,低位字段为页内地址。虚存地址到实存地址的变换是通过存放在主存中的页表来实现的。在页表中,对应每一个虚存逻辑页号有一个表项,表项内容包含该逻辑页所在的主存页面地址(物理页号),用它作为实存地址的高字段,与虚存地址的页内地址字段相拼接,产生完整的实存地址,据此来访问主存。地址变换如图3-17所示。

330.gif

若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。

页表中的表项除包含虚页号对应的实页号之外,还包括装入位、修改位、替换控制位等控制字段。若装入位为“1”,表示该页面已在主存中,将对应的实页号与虚地址中的页内地址相拼接就得到了完整的实地址;若装入位为“0”,表示该页面不在主存中,于是要启动I/O系统,把该页从外存中调入主存后再供CPU使用。修改位指出主存页面中的内容是否被修改过,替换时是否要写回外存。替换控制位指出需替换的页,与替换策略有关。

CPU访存时首先要查页表,为此需要访问一次主存,若不命中,还要进行页面替换和页表修改,则访问主存的次数就更多了。为了将访问页表的时间降低到最低限度,许多计算机将页表分为快表和慢表两种。将当前最常用的页表信息存放在快表中,作为慢表部分内容的副本。快表很小,存储在一个小容量的快速存储器中,该存储器是按内容查找的相联存储器,可按虚页号名字进行查询,迅速找到对应的实页号。使用快表与慢表进行地址变换如图3-18所示。

331.gif

快表由硬件组成,比页表小得多,查表时,由逻辑页号同时去查快表和慢表。当在快表中有此逻辑页号时,就能很快地找到对应的物理页号送入实主存地址寄存器,从而做到虽采用虚拟存储器但访主存速度几乎没有下降;如果在快表中查不到,那就要花费一个访主存时间去查慢表,从中查到物理页号送入实存地址寄存器,并将此逻辑页号和对应的物理页号送入快表,替换快表中应该移掉的内容,这也要用到替换算法。

页式虚拟存储器的每页长度是固定的,页表的建立很方便,新页的调入也容易实现。但是由于程序不可能正好是页面的整数倍,最后一页的零碎空间将无法利用而造成浪费。同时,页不是逻辑上独立的实体,这使得程序的处理、保护和共享都比较麻烦。