《深入了解计算机系统》-虚拟存储器
它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。其实这一章还是讲解虚拟内存的,也就是和内核中的内存管理相关。
-
它为每个进程提供了一致的地址空间,从而简化了存储器管理
-
它保护了每个进程的地址空间不被其他进程破坏。
-
在硬件异常、汇编器、链接器、加载器、共享对象、文件和进程的设计中扮演着重要角色。
-
存储器让应用程序有了强大的能力,可以创建和销毁存储器片、将存储器片映射到磁盘文件的某个部分,以及与其他进程共享存储器。
一、物理和虚拟寻址
现在都开始虚拟地址,使用虚拟地址时,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译。就像异常处理一样,地址翻译需要CPU硬件和操作系统之间的紧密合作。CPU芯片上叫做存储器管理单元的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容是由操作系统管理的。
二、地址空间
地址空间时一个非负整数地址的有序集合,如果地址空间中的整数是连续的,那么我们说它是一个线性地址空间。CPU从一个有N=2n个地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间。一个地址空间的大小事由表示最大地址所需要的位数来描述的。一个包含N=2n个地址的虚拟地址空间就叫做一个n位地址空间。一个系统还有一个物理地址空间,它与系统中物理存储器的字节数目相对应。主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地。
三、虚拟存储器作为缓存的工具
虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引的。磁盘上数据的内容被缓存在主存中。和存储器层次结构中其他缓存一样,磁盘上的数据被分割成块,这些块作为磁盘和主存之间的传输单元。
四、虚拟存储器作为存储器管理的工具
操作系统为每个进程提供了一个单独的页表,因而也就是一个独立的虚拟地址空间。在下图中,进程I的页表VP1映射到PP2,VP2映射到PP7。相似地,进程J的页表将VP1映射到PP7,VP2映射到PP0。多个虚拟页面可以映射到同一个共享物理页面上。
将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法称作存储器映射。
五、虚拟存储器作为存储器保护的工具
六、地址翻译
实现翻译的过程,如何利用页表来实现这种映射。CPU中的一个控制寄存器,页表基址寄存器(PTBR)指向当前页表。n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移和一个(n-p)位的虚拟页号。MMU利用VPN来选择适当的PTE。页面命中,CPU硬件执行的步骤:
- 处理器生成一个虚拟地址,并把它传送给MMU
- MMU生成PTE地址,并从高速缓存/主存请求得到它
- 高速缓存/主存向MMU返回TRUE
- MMU构造物理地址,并把它传送给高速缓存/主存
- 高速缓存/主存返回所请求的数据字给处理器
页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协作完成:
- 前三步都是一样的
- PTE中的有效位为0,所以MMU触发了一次异常,传递CPU中的控制到操系统内核中的缺页异常处理程序。
- 缺页处理程序确定出物理存储器中的牺牲页,如果这个页面被修改了,则把它换出到磁盘。
- 缺页处理程序页面调入新的页面,并更新存储器中的PTE
-
缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页的虚拟地址重新发送给MMU