1、虚拟存储器的基本概念
- 要求的内存空间超过了内存总容量。
- 解决办法
- 逻辑上增加内存容量。
- 常规存储管理的特征
- 一次性
- 一个作业全部装入。
- 驻留性
- 作业完成才出来。
- 一次性
- 内存扩充方法
- 物理扩充
- 逻辑扩充
- 覆盖(解决一次性)
- 对换(解决驻留性)
- 虚拟存储
- 局部性原理
- 程序执行仅限于某个部分。
- 时间局限性
- 空间局限性
虚拟存储器的定义
- 先将当前要运行的部分程序装入内存,其他部分暂留外存。
实现虚拟存储的一般过程
- 先将一部分页面装入内存,便可开始运行。
- 若运行需要的页面已经装入内存,则继续进行。
- 若运行需要的页面未装入内存,则发生缺页中断,进程阻塞等待。
- 系统启动请求调页功能,将所需页面调入内存。
- 若内存已满,则利用页置换功能,将暂时不用的页面换出。
- 将阻塞进程唤醒,继续调度执行。
虚拟存储器的特征(重要)
- 具有调入功能和置换功能,可实现在逻辑上对内存进行扩充。
- 逻辑容量由内存和外存之和决定。
- 多次性
- 一个作业被调入内存多次。
- 对换性
- 作业在运行中换进换出。
- 虚拟性
- 是逻辑上的。
虚拟存储器的实现方法
请求分页存储
- 置换时以页面为单位。
- 硬件支持
- 页表机制上增加若干项
- 产生缺页中断
- 地址变换机构
- 软件支持
- 请求调页
- 页面置换
请求分段存储
- 将上一节的“页”换成“段”
段页式虚拟存储
- 只有调页
2、请求分页存储管理方式
页表机制(重要)
- 在原有页表的基础上增加了
- 状态位
- 访问位
- 修改位
- 外存地址
缺页中断机构
- 每当所要访问的页面不在内存时,便产生一缺页中断,请求
OS
将所缺之页调入内存。 - 缺页中断属于程序性中断。
内存分配策略和分配算法
- 最小物理块数
- 保证进程正常运行所需的最少的物理块数。
- 固定/可变分配策略。
- 全局/局部置换。
固定分配局部置换
- 分配物理块之后,运行期间不再改变。
- 难以确定为每个进程分配多少物理块。
- 太少:频繁出现缺页中断。
- 太多:进程对换费时。
可变分配全局置换(常用)
- 为每个进程分配一定物理块,操作系统自身保持一个空闲物理块队列。
可变分配局部置换
- 只允许从该进程在内存的页面换出。
物理块分配算法
平均分配
- 所有可供分配的物理块,平均分配给各个进程。
按比例分配算法
- 根据进程的大小按比例分配物理块的算法。
考虑优先级的分配算法
- 一部分按比例分配,一部分则根据各进程的优先权,适当地增加其相应份额后,分配给各进程。
调页策略
页面何时调入
- 预调页方式(不实际)
- 预测将要使用的页面调入。
- 请求调页
- 所需页面不在页面才装入。
页面何处调入
- 外存
- 文件区
- 对换区
- 对换区足够
- 文件区调入对换区。
- 对换区不够
- (可能)修改的页面换出到对换区。
- 未修改的页面直接丢弃(文件区还有)。
UNIX
方式- 未运行过,放在文件区。
- 运行过,放在对换区。
页面如何调入
页面置换算法(重要)
- 决定哪个页面被换出。
最优置换算法(理想化)
- 所选择的被淘汰页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。
先进先出页面置换算法
- 总时淘汰先进入内存的页面。。
最近最久未使用置换算法
- 选择最近最久未使用的页面淘汰。
Clock置换算法(NRU)
- 每页有个访问位,并且将所有页面连接成一个循环队列。
- 访问位被访问则置
1
。 - 从上次停止位置检查页面的访问位。
- 访问位为
0
,换出。 - 访问位为
1
,则置0
,暂不换出。
- 访问位为
访问内存的有效时间(重要)
E A T = t + f ∗ ( σ + t ) + ( 1 − f ) ∗ t EAT=t+f*(\sigma+t)+(1-f)*t EAT=t+f∗(σ+t)+(1−f)∗t
缺页率
f = F S + F f=\frac{F}{S+F} f=S+FF
- 影响因素
- 页面越大,缺页率越小。
- 物理块数越多,缺页率越小。
- 页面置换算法。
- 程序的访问局部性。
4、抖动与工作集
抖动
刚调出就需要调入。
- 抖动原因
- 给进程分配的物理块太少。
- 置换算法不当。(必要原因)
- 全局置换使抖动传播。
工作集模型
- 确定进程所需的帧数。
帧数=局部的宽度
- 工作集
- 最近时间访问的页面集合。
抖动预防
预防
- 采取局部置换策略
- 工作集预先调入内存
L=S
原则L
为缺页之间的平均时间S
平均缺页服务时间
处理
- 选择暂停的进程
5、请求分段存储管理方式(了解)
- 同分页
习题
题目一