页式虚拟存储器是虚拟存储器中用得比较广泛的一种,另外的段式虚拟存储器和段页式虚拟存储器主要是因为地址变换方法不同产生的。本节首先以页式虚拟存储器为例介绍虚拟存储器的工作原理。然后再具体介绍页式、段式和段页式三种虚拟存储器的地址变换方式及外部地址变换方式。
  在页式虚拟存储器中,把主存储器、磁盘存储器和虚拟存储器都划分成固定大小的页(Page),就象一本书由很多页组成,每一页中容纳的字数是相同的。主存储器的页称为实页,虚拟存储器中的页称为虚页。一个主存地址A由两部分组成,包括实页号p和页内偏移d,如图5.6(a)所示。一个虚地址Av由三部分组成,包括用户号U、虚页号P和页内偏移D,如图5.6(b)所示。
图 5.6 虚拟存储器中的地址组成
  一个用户程序要访问虚拟存储器时,必须给出多用户虚拟地址Av。在操作系统和有关硬件的共同管理下,首先进行内部地址变换。如果变换成功(命中),得到主存实页号p。而多用户虚拟地址中的页内偏移D可以直接作为主存实地址中的页内偏移d,这样,只要把主存实页号p与它的页内偏移d直接拼接起来就得到主存实地址A。于是,就可以用这个主存实地址A去访问主存储器,得到所需要的数据。页式虚拟存储器的工作过程如图5.7所示。
图5.7 页式虚拟存储器工作原理
  如果内部地址变换失败(未命中),表示要访问的数据不在主存储器中,必须访问磁盘存储器,这时,要进行外部地址变换。外部地址变换主要用软件实现,首先查外页表得到与虚页号P相对应的磁盘存储器的实地址,然后再查主存实页表,看主存储器中是否有空页。如果主存储器中还有空页,只要找到空页号,,把磁盘存储器的实地址和主存储器的实页号送入输入输出处理机(输入输出通道)等,在输入输出处理机的控制下,把要访问数据所在的一整页都从磁盘存储器调入到主存储器。
  如果主存储器中已经没有空页,则要采用某种页面替换算法,先把主存中暂时不用的一页写回到磁盘存储器中原来的位置上,以便腾出空位置来存放新的页。当然,如果要替换出去的那一页从它调入主存储器之后从来没有被修该过,就不需要把它送回磁盘存储器,直接用调入的新页把它覆盖掉即可。
  在进行外部地址变换时,如果没有命中,则表示所需要的页还不在磁盘存储器中。这时,要在操作系统控制下,启动磁带机、光盘存储器等海量存储器,先把与所需要数据相关的文件从海量存储器中调入磁盘存储器。