页式虚拟存储器把虚拟地址空间划分成一个个固定大小的块,每块称为一页(Page),把主存储器的地址空间也按虚拟地址空间同样的大小划分为页。页是一种逻辑上的划分,它可以由系统管理软件任意指定。然而,由于磁盘存储器的物理块大小是0.5KB,为了与外部存储器,特别是磁盘存储器相配合,因此,虚拟存储器中页的大小通常指定为0.5KB的整倍数。目前一般计算机系统中,一页的大小通常为1KB至16KB。
  在虚拟存储器中,虚拟地址空间中的页称为虚页,主存地址空间的页称为实页。这样,把一个在虚拟地址空间中编写的用户程序映象到主存实地址空间时,只需要建立从虚页号到实页号的地址变换即可,从而可以大大缩短地址的长度,既节省了硬件,又能加快地址变换的速度。
  页式虚拟存储器的地址映象方法如图5.11所示。一个在虚拟地址空间中编写的用户程序共有3页,其中最后一页没有满,要浪费掉一部分。页表共有4行,每行与用户程序的一页对应。如果页表中第一个字段给出的页号是连续的,则这一个字段可以省掉,只要根据页表中的主存页号就能把该用户程序的每一页唯一地映象到主存储器的确定位置中。
图 5.11 页式虚拟存储器的地址映象
  与段式虚拟存储器相比,由于每一页的长度是固定的,因此,不需要象段式虚拟存储器中的段长度这一字段,另外,主存地址这一字段只需要指出主存储器的页号,与段式虚拟存储器中的主存地址必须指出整个主存地址长度相比要节省很多。
  页式虚拟存储器的地址变换过程如图5.12所示。在CPU内部有一个基址寄存器堆,用来存放页表的基地址,每个用户(每道程序)使用其中的一个基址寄存器。通过多用户虚地址中的用户号U可以直接找到与这个用户程序相对应的基址寄存器,从这个基址寄存器中读出页表起始地址。访问这个页表地址,就能得到被访问页的所有信息。把得到的主存页号p与多用户虚地址中的页内偏移D直接拼接起来得到主存实地址A。
  页表中的其它信息,如装入位、修改位、和各种标志信息等的含义和用法与段式虚拟存储器基本相同。
图 5.12 页式虚拟存储器的地址变换

  页式虚拟存储器的主要优点是:
  (1) 主存储器的利用率比较高。每个用户程序只有不到一页(平均为半页)的浪费,与段式虚拟存储器每两个程序段之间都有浪费相比要节省许多。
  (2) 页表相对比较简单。它需要保存的字段数比较少,一些关键字段的长度要短许多,因此,节省了页表的存储容量。
  (3) 地址映象和变换的速度比较快。在地址映象过程中,只要建立用户程序的虚页号与主存储器的实页号之间的对应关系即可,不必使用整个主存的地址长度,也不必考虑每页的长度。在地址变换过程中,主存实地址由主存实页号与多用户虚地址中的页内偏移直接拼接得到,不必经过任何运算,因此,地址变换的速度比较快。
  (4) 对辅存(磁盘存储器)的管理比较容易。因为页的大小一般取磁盘存储器物理块大小(512字节)的整倍数。
  页式虚拟存储器的主要缺点有两个:
  (1) 程序的模块化性能不好。由于用户程序被强制按固定大小的页来划分,因此,页式虚拟存储器中的一页通常不能表示一个完整的程序功能。一页可能只是一个程序段中的一部分,也可能在一页中包含了两个或两个以上程序段。
  (2) 页表很长,需要占用很大的存储空间。通常,虚拟存储器中每一页,在页表中都要占有一个字(4个字节)。假设有一个页式虚拟存储器,它的虚拟存储空间大小为4GB,每一页的大小为1KB,则页表的容量为16MB。