第五章 虚拟存储概念
覆盖与交换技术
覆盖技术:依据程序的逻辑结构,将程序划分为若干功能独立的模块,将不会同时执行的模块共享同一块内存区域。
交换技术:将暂时不能运行的程序换到外存,再将外存中某一进程的数据读入内存。
局部性原理
程序在执行过程的一段较短时期内,所执行指令的地址与操作数的地址,分别局限于一定区域。具体来说:
- 时间局部性;一条指令在执行后的较短时间内很可能会再次执行,某个内存地址在被访问后的较短时间内很可能会再次访问;
- 空间局部性;相邻指令访问的内存地址很可能集中在一个较小的区域;
- 分支局部性;一条跳转指令的两次执行,很可能会跳到相同的内存地址;
局部性原理给虚拟存储技术提供了理论支持。
虚拟存储概述
- 在装载程序时,只将指令执行需要的部分页面或段装入内存;
- 当指令执行时需要的指令或数据不在内存中时(即缺页或缺段),处理器通知操作系统将相应的页面或者段读入内存;
- 此外,操作系统还会时刻监控内存中页或段的使用情况,从而将暂时不用的页或段换到外存;
要实现虚拟存储,需要硬件与操作系统的支持;
对硬件:支持虚拟存储的页或段式地址转换机制;
对操作系统:管理内存与外存间页或段的数据的写入;
虚拟页式存储管理
概括地说,虚拟页式存储管理就是在页式存储管理的基础上增加请求调页与页面置换。
上一章指出了页表项的结构,但是对其中的控制位并未作解释;在这里我们指出这些控制位在虚拟页式存储管理中所起的作用。
- P位:存在位;1表示该页在内存中,0表示该页在外存中;
- A位:访问位;若该页被访问过,A位置1,否则A位置0;
- D位:修改位;若该页被修改过,D位置1,否则D位置0;
下面分析一些关键时刻,操作系统对这些控制位的处理。
装载
操作系统给应用程序分配足够的线性地址空间,而事实上,操作系统只是将应用程序此时执行必要的一部分页面装入内存中,那么这些页面对应页表项的P位置1,而没有装入内存的页面对应页表项的P位置0;
内存访问
操作系统会将访问过的内存页面对应的页表项的A位置1;如果指令对该页进行了修改,则需要将该页对应页表项的D位置1;
缺页
指令要访问的页面不在内存中,操作系统调用缺页中断服务例程将该页读入内存,并将该页对应页表项的P位置1;
页面换出内存
若页面对应页表项的D位为0,则只需要将P位置0即可;否则,操作系统要将内存中的该页写到外存中对应位置;
缺页中断
下面详细介绍缺页中断处理例程。发生缺页中断时,操作系统会找到外存中的对应页面,之后在内存中申请一个空闲页面,将外存中的页面装载到内存中,如果内存中此时没有空闲页面,那么需要根据页面置换算法将内存中的某些页面换出内存。具体的页面置换算法在下一章介绍。