3.7.1 虚拟存储器的基本概念
在当前的计算机(包括微型机)中,其可寻址空间远远大于实际配置的主存的容量。例 如 386PC 机,其地址位为 32,则可寻址的空间为 232=4GB,但实际配备的主存仅有 8MB 或 16MB等。另一方面程序设计人员希望有一个大干(或等于)整个主存的空间供编程使用。这 样就提出了虚拟存储器的概念。
由操作系统将辅存的一部分当作主存使用,因而扩大了程序可控制的空间。通常这种由 主存和部分辅存组成的存储系统称为虚拟存储器。或者说,在主存和辅存之间,增加部分软件 和必要的硬件支持,使主存和辅存形成一个有机整体,称为虚拟存储器,简称虚存。
从原理角度看,虚拟存储器和 Cache-主存体系有很多相似之处。虚存所采取的映像方式 和 Cache-主存一样,也具有全相联映像,直接映像和组相联映像三种方式。两者也都采用 LRU 替换算法,即最近最少使用算法,即把存储器最近最少使用的存储块替换出去,以便将 新的存储块调入。
但两者也有明显区别,主存-Cache 体系访问时间少,传送的信息块也小;虚存访问时间 长,传送的信息块(段、页)比较大。
通常把能访问虚拟空间的指令地址码称为虚拟地址或逻辑地址,而把实际的地址称为物 理地址或实存地址。物理地址对应的存储容量称为主存容量或实存容量。同时,为协调程序的 局部性和存储区间管理,可以按程序的模块大小将存储器分割成不定长的块-段,也可以将存 储器分割成定长的块-页,或者将段、页结合。因而可以形成常用的段式、页式、段页式多种 虚拟存储器。下面分别予以介绍。
3.7.2 页式虚拟存储器
以页为基本信息传送单位的虚拟存储器称之为页式虚拟存储器。页式虚拟存储器把虚存 空间、主存空间和辅存空间都分成固定大小的块,称为页面,简称页。各类计算机页面的大小 设置不同,一页最少 512B,最大几 KB,通常为 2 的整数次幂。CPU 对虚拟存储器的每次访 问,都要进行虚地址、实地址的变换。当所需信息不在主存时,还需将信息所在页从辅存调入 主存,此时需将虚地址变换为辅存实地址。为实现这两种变换和页调度,需内页表、页式快表、
外页表和主存页面表等多种数据结构。
1.页表
页式虚拟存储器,实存地址由实页号和页内地址组成,页内地址为低位,位数由页面大 小决定;实页号为高位,位数取决于主存容量。如主存容量为 128KB,字节编址,每页 2KB,
则页内地址占低 11 位,实页号占高 6 位,该主存分为 64 个实页。虚存空间也按主存页面大小 划分,虚地址由虚页号和页内地址组成,且虚存、实存页内地址位数相等,因虚存空间比主存 空间大得多,所以虚页号位数比实页号位多。CPU 访问页式虚拟存储器时,送出的是程序虚 地址,此时必须判断地址中的存储内容是否已调入主存,若未调入,则将该内容所在页按某种 替换算法装入主存指定页,然后 CPU 才能执行;若已装入主存,就要找出在主存哪一页,这 两种情况都要求建立一张虚页号与实页号的对照表,这张表称内页表,简称页表 (Page table)。
页表是操作系统根据程序运行情况建立的,对应用程序员完全透明。页表存放在系统固 定区域,每个程序都有一张页表,如表 3-1 所示。页表由页表项构成,程序的每个虚页对应一 个页表项,记录与该页有关的信息。通常页表项应包括装入位、修改位、替换控制位、实页号 和其他控制位。
表 3-1 页表结构
装入位 修改位 替换控制位 实页号 其他控制位
1 3 1 5 1 2 1 8
页表放在主存中,当 CPU 访存时,首先得访问页表,以实现虚、实地址变换,如图 3-26 所示。
2.虚地址和实地址的映射
例 1 某计算机的页式虚存管理中采用长度为 32 字的页面。页表内容如表 3-2 所示,求 当 CPU 程序按下列二进制虚拟字地址访存时产生的实际字地址。
(1)00001101。
(2)10000000。
(3)00101000。
解:页面长度为 32 字,则页内地址 5 位,8 位地址码中的高 3 位为虚页号,从表中查出
但由于页长度固定,程序不可能正好是页面的整数倍,最后一页的零头无法利用而可能
又如,当一个段的程序执行完,若新调入的程序段远小于现有的段空间时,段间就出现较大零 级存储体系结构,即 Cache、主存和外存。CPU 能直接访问内存(Cache、主存),但不能直接 访问外存。存储器的技术指标有存储容量、存取时间、存储周期、存储器带宽。