第九章 虚拟内存
局部性原理
时间局部性:
如果程序的某条指令一旦执行,则不久后该指令可能再次执行(e.g. 循环结构)。
如果某个数据结构被访问,则不久以后该数据结构可能再次被访问;(e.g. 数组+循环结构)。
空间局部性:
一旦程序访问了某个存储单元,不久之后,其附近的存储单元也被访问(顺序性)(数组、循环)。
虚拟存储器
虚拟存储器指的是仅把作业的一部分装入内存便可运行作业,具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
基于局部性原理,一个作业在运行之前,没有必要全部装入主存,而仅将那些当前要运行的那部分页面或段,先装入内存几个启动运行,其余部分暂时留在磁盘上。
可使一个大的用户程序在较小的内存空间中运行;可使内存中同时装入更多的进程并发执行;用户在一个虚拟地址空间中编程,无需担心物理内存大小。
从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多——即虚拟存储器
虚拟内存也允许文件和内存通过共享页面为两个或多个进程所共享,这带来了以下优点:
系统库可为多个进程所共享;
虚拟内存允许进程共享内存;
虚拟内存可允许在用系统调用fork()创建进程期间共享页,从而加快进程创建。
按需调页
懒惰交换:只有在需要页时才将它调入内存。
交换程序对整个进程进行操作,调页程序只对进程的单个页进行操作。
有效无效位
有效:既合法也在内存中。
无效:页为无效(也就是不在进程的逻辑地址空间内)或者有效但在磁盘上。
页错误陷阱(Windows系统称为“页面错误”)page-fault trap
操作系统未能将所需的页调入内存。
处理方法:
1.操作系统查看内部页表(通常与PCB一起保存)决定:
若为无效的引用,中止。
若为有效但是未调入页面:调入。
2.找到一个空闲帧。
3.调度一个磁盘操作,把所需页调入刚分配的帧。
4.复位表。
5.设置有效-无效位为有效。
6.重新启动导致页错误的指令。
缺页中断
缺页中断与一般的中断相比,有明显的不同:
在指令执行期间产生和处理中断信号;一般情况下,CPU在执行完一条指令之后检查和处理中断,而缺页中断却是在指令执行期间,发现要访问的指令或数据不在内存时产生和处理的;
一条指令执行期间,可能产生多次缺页中断。