3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念
缺页中断是访存指令引起的,说明要访问的页面不在内存中,进行缺页中断处理并调入所要访问的页后,访存指令显然应该重新执行。
4.虚拟内存技术的实现
虚拟内存技术是补充内存逻辑空间的技术。
虚拟内存允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存空间处于空闲状态,造成资源浪费。虚拟内存只能基于非连续分配技术。
实现方式
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
3.2.2 请求分页管理方式
页式虚拟存储管理的主要特点是,不要求将作业同时全部装入主存的连续区域,一般只装入 10%~30%。
分页 + 请求调页 + 页面置换
未被修改的页直接从文件区读入,被置换时不需要调出。已经被修改的页,被置换时需要调出到交换区,以后从交换区调入。
页号 | 物理块号 | 状态位 | 访问字段 | 修改位 | 外存地址 |
---|---|---|---|---|---|
是否在内存中 | 记录本页一段时间内被访问次数 | 换出时是否需要写回外存 |

CPU 看是否在飞机,飞机没有。不在飞机,在火车上没有。不在火车上,火车没满就上火车。火车满了就拉一个人下来。如果他被修改过,就要他去汽车上。上火车,修改页表,修改快表。
3.2.3 页框分配
1.驻留集大小
给一个进程分配的物理页框的集合就是这个进程的驻留集。
驻留集:请求分页存储管理中给进程分配的物理块的集合。
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
固定分配:驻留集大小不变
可变分配:驻留集大小可变
局部置换:发生缺页时,只能选进程自己的物理块进行置换。
全局置换:可以将操作系统保留的空闲物理块置换出去。
2.内存分配策略
(1)固定分配局部置换
(2)可变分配全局置换
灵活
(3)可变分配局部置换
3.2.4 页面置换算法
好的页面置换算法应该有较低的页面更换频率。
最佳置换算法:淘汰最长时间不再访问的页面,无法实现。
先进先出页面置换算法:先进内存的先出去。可能出现 Belady 异常。队列型算法可能出现 Belady 异常。
只有 FIFO 算法才会导致 Belady 异常。
最近最久未使用置换算法:和最佳置换算法相反。
时钟置换算法:每帧有访问位(剩余访问次数),首次装入时,访问位置为 1,如果是 1,就变 0,如果是 0 就换出。
装入后,指针后移一位。顺序淘汰。
CLOCK 算法选择将最近未使用的页面置换出去,因此又称 NRU 算法。
改进型 CLOCK 置换算法:增加修改位,如果一个页面换出时,该页面修改了,就要写回磁盘。
(访问位,修改位)=(0,0):最近未被访问且未被修改,是最佳淘汰页。
(访问位,修改位)=(0,1):最近未被访问,但已被修改,不是很好的淘汰页。
(访问位,修改位)=(1,0):最近已被访问,但未被修改,可能再被访问。
(访问位,修改位)=(1,1):最近已被访问且已被修改,可能再被访问。
淘汰策略:
- 第一轮找(0,0)
- 第二轮找(0,1),并把所有页设为(0,x)
- 重复 1,2
3.2.5 抖动和工作集
抖动:刚换出的页面马上要换入内存,刚换入的页面马上要换出内存
驻留集:分配给进程的物理块数。
工作集:在某段时间间隔内,进程实际访问页面的集合。
驻留集大小大于工作集大小。