3.2.1 虚拟内存的基本概念
1、传统存储管理方式的特征
1)一次性: 作业必须一次性全部装入内存后,才开始运行
2)驻留性:作业被装入内存后,就一直驻留在内存中
2、局部性原理: 时间局部性和空间局部性
时间局部性:程序中的某条指令一旦执行,不久后该指令可能再次执行空间局部性:程序访问了某个存储单元,不久后,其附近的存储单元也被访问。
3、虚拟存储器的定义和特征
1)多次性:无需一次将作业全部装入内存,允许被分次调入内存。2)对换性: 无需在作业运行时一直常驻内存,允许在作业运行过程中,进行换进和换出。3)虚拟性: 从逻辑上扩充内存容量。
4、虚拟内存技术的实现
虚拟内存技术的实现需要建立在 离散分配 的内存管理方式的基础之上。
虚拟内存技术的实现有以下三种方式:
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
3.2.2 请求分页管理方式
与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。
1、页表机制
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。
2、缺页中断机构
在请求分页系统中,每当要访问的页面不在内存中时,便产生一个缺页中断,请求系统将所缺的页面调入内存。此时应将缺页的进程阻塞(I/O请求),若此时内存中有空闲块,则将该页调入该块, 若没有空闲块,则要淘汰某页。(若淘汰页面在内存期间被修改过,则要将其写回外存)
- 在指令执行期间产生和处理中断信号,而非一条指令执行完后,
属于内中断。
3、地址变换机构
请求分页存储管理与基本分页存储管理的主要区别:
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存 (操作系统要提供请求调页功能,将缺失页面从外存调入内存),然后继续执行程序。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存 (操作系统要提供页面置换的功能,将暂时用不到的页面换出外存)。
相对于分页系统主要增加了关于状态位P的操作。
3.2.3 页面调度算法(决定应该换入哪页、换出哪页)
1)最佳(OPT)置换算法
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。7在第18次访问才调入,故先替换7缺页中断未必发生页面置换 只有物理块满了才发生页面置换 (比如前三次发生缺页中断,但未发生页面置换)
2)先进先出(FIFO)置换算法
每次选择淘汰的页面是最早进入内存的页面
Belady异常--------当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
只有FIFO算法会产生Belady异常
3)最近最久未使用(LRU)置换算法
每次淘汰的页面是最近最久未使用的页面
4)时钟(CLOCK)置换算法
最佳置换算法性OPT能最好,但无法实现;
先进先出置换算法实现简单,但算法性能差;
最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。
优先级:
- 最近未访问
- 最近未访问,但修改过
- 访问过,但未修改
- 访问过,修改过
| 第一轮:从当前位置开始扫描到第一个(U =0, M = 0)的帧用于替换。表示该页面最近既未被访问,又未被修改,是最佳淘汰页 |
|---|
| 第二轮:若第一轮扫描失败,则重新扫描,查找第一个(U =0, M = 1)的帧用于替换。本轮将所有扫描过的帧访问位设为0。表示该页面最近未被访问,但已被修改,并不是很好的淘汰页。 |
| 第三轮:若第二轮扫描失败,则重新扫描,查找第一个(U =1, M = 0)的帧用于替换。本轮扫描不修改任何标志位。表示该页面最近已被访问,但未被修改,该页有可能再被访问。 |
| 第四轮:若第三轮扫描失败,则重新扫描,查找第一个(U =1, M = 1)的帧用于替换。表示该页最近已被访问且被修改,该页可能再被访问。 |