虚拟地址用虚页号拼接页内地址给出,主存实际地址用实页号拼接页内地址给出。请注意页式存储管理与段式存储管理的一个重要区别,段本身是程序设计的一个产物,是一个独立的程序单位,长度可变;而页则不是程序本身的什么特性,是为了方便管理,人为地对程序进行划分的结果,通常在一个计算机系统中,页的长度是事先确定的,不会变化。这种通过分页方式进行的存储器管理被称为页式存储器管理。它的关键功能是实现按页来完成在虚存和主存之间交换数据,并完成逻辑地址到物理地址的转换,说到底,就是找出虚页号和实页号的对应关系。这可以通过设立页表来完成。

  页表由若干表目组成,每个虚页号对应页表中的一个表目,表目的内容可以由如下一些部分组成:

  最重要的是一个虚页分配在主存中的实际页号,还可能包括页装入(有效)位,修改标记位,替换控制位,其它保护位等组成的控制位字段。请注意,在页式存储器管理的系统中,页表本身也是以页为单位管理的,可以保存在虚存中,也可以保存在主存中。图4.26 给出了页式存储器管理的地址变换过程。


图4.26 给出了页式存储器管理的地址变换过程

  这一地址变换过程是:用虚地址中的虚页号与页表基地址相加,求出对应该虚页的页表表目在主存中的实际地址,从该表目的实页号字段取出实页号再拼上虚地址中的页内地址,就得到读主存数据用的实存地址。

  当需要把一页从虚存调入主存时,操作系统从主存储器的空闲区找出一页分配给这一页,把该页的内容写入主存,把主存储器的实际页号写进轧表的相应表目的实页号字段,写装入位为1。

  当下次要读该页内的某个存储单元时,首先要读一次主存,通过查页表求出实存地址,尔后再读一次主存,才能取得要读的数据,为读一个数据变成两次读主存,实际应用中是难以令人接受的。怎么解决这一问题呢?答案是设立一个完全用快速硬件实现的一个容量很小的(一般在16~64个表目之间)快速页表(英文为Translation Lookaside Buffer,简写为TLB,译为中文叫做转换旁路缓冲器),用于存放在页表中使用最频繁的、为数不多的那些表目的内容。它的最重要的两项内容是虚页号和实页号。经快表实现的地址转换过程,用虚地址中的虚页号去与快表中虚页号字段的内容相比较,与哪个表目中的虚页号相同,则可以取出该表目中的实页号,并与页内地址拼接出实存地址。这一过程可以很快完成,很有点类似于高速缓冲存储器的运行原理。当在快表中找不到该虚页号时,就要到主存中经慢表(可以这样称呼罢!)找出该虚页号对应的实页号,在得到一个实存地址的同时,并用该虚页号和实页号替换掉修改快表的一个表目的内容,以反映这次操作的现实形势。而这一切,与CACHE的组成与应用是何等的相似啊!