适用计算机操作系统(OS)(第四版)
自己的学习笔记,PPT及图片来源网络及自己老师,侵删。
三硬一软一接口——2硬:虚拟存储器
计算机操作系统第五章
第五章虚拟存储器
5.1 虚拟存储器概述
为了解决内存空间不足的问题,从逻辑上扩充内存容量。
5.1.1 常规存储管理方式的特征和局部性原理
1、常规存储器管理方式的特征
1)一次性 :指作业必须一次性地全部装入内存方能开始运行。
2 )驻留性 :指作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
2、局部性原理
程序运行时存在地局部性现象,表现在两个方面 :
- 时间局限性:
程序中的某条指令一旦执行,则不久以后该指令可能再次执行。 - 空间局限性:
程序访问了某个存储单元,不久之后,其附近的存储单元也被访问。
5.1.2 虚拟存储器的定义和特征
1、虚拟存储器定义
- 仅把作业的一部分装入内存便可运行作业的存储器
系统。 - 具有请求调入功能和置换功能,从逻辑上对内存容
量进行扩充的存储器系统。 - 从用户角度看感觉系统的内存容量比实际内存容量
大得多,是一种虚拟的概念。 - 最大逻辑容量由计算机地址结构决定,其实际容量
受外存容量的制约。
2、 虚拟存储器的特征
1 )离散性 :虚拟存储器的虚拟存储是在内存离散分配的基础上建立的。
2 )虚拟性 :从逻辑上扩充内存容量,使用户看到的内存容量远大于实际内存容量。
3 )多次性 :允许只需将当前要运行的部分作业装入内存即可开始运行。
4 )对换性 :允许在进程运行期间进行对作业中程序与数据的换入,换出。
5.1.3 虚拟存储器的实现方法
1 )请求分页系统
在分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页式虚拟存储系统。置换以页为单位进行,系统须提供的硬件支持:
-
请求分页的页表机制
-
缺页中断机构
-
地址变换机构
2 )请求分段系统
在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。置换以段为基本单位进行。提供硬件支持:
-
请求分段的段表机制
-
缺段中断机构
-
地址变换机构
5.2 请求分页存储管理方式
5.2.1 请求分页中的硬件支持
1、请求页表机制
状态位(存在位)P:页是否调入内存。
访问字段A:某时间段内页被访问次数,或最近多长时间未被访问。
修改位M:页在调入内存后是否被修改。
外存地址:页在外存上的物理地址。
2、缺页中断机构
缺页中断:指当访问的页面不在内存时,便要产生缺页中断。请求OS将所缺的页面调入内存。
与一般中断的区别 :
1)在指令执行期间产生和处理中断信号。
2)一条指令执行期间,可能产生多次缺页中断。
3、地址变换机构
分页系统变换机构 + 请求调页 + 页面置换
5.2.3 页面调入策略
何时调入页 :
- 预调页策略(空间局部性原理,成功率≤50%)
- 请求调页策略(一次调入一页,系统开销大)
从何处调入页 :
- 系统有足够的对换区,可全部从对换区调页。
- 无足够对换区时,凡不会修改的文件,直接从文件区调入。可能被修改的文件,从对换区调入。
- 未运行的文件放在文件区,曾运行过且被换出的页面放在对换区。共享页面,若已在内存,则无需再调入。
页面调入过程 :
1 )缺页中断,转入缺页中断处理程序
2 )查找页表,找到该页在外存的物理块
3 )若内存未满,则调入页并修改页表,若内存已满,则按照某种置换算法从内存中选出一页准备换出。如果该页已被修改,则需回写磁盘。
4 )然后把所缺的页面调入内存,修改页表中的相应表项,并计入快表。
缺页率 = 访问页面失败的次数/总的页面访问次数
5.3 页面置换算法
选择合适的页换入,换出。
5.3.1 最佳(Optimal)置换算法和先进先出(FIFO)置换算法
1、最佳(Optimal)置换算法
将永不使用、或者在最长时间内不再被访问的页面淘汰,无法实现,但可以评价其它算法。
某进程分配了三个物理块,进程访问页面走向:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
缺页中断:9次 缺页率:9/20 * 100%=45%
2、先进先出(FIFO)页面置换算法
淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
实现简单:按页面调入内存的先后次序链接成队列,并设置指针,指向最老页面。
某进程分配了三个物理块,进程访问页面走向:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
缺页中断:15次 缺页率:15/20 * 100%=75%
缺页率过高,先进先出页面置换算法会出现Belady现象。
Belady现象 :增加物理块无法降低缺页率,违反过程运行规律,与局部性原理相矛盾。
抖动 :指缺页率上升,运行进程频繁处理页面的换进/换出,致使CPU利用率下降的现象。
原因:随着多道程序度的提高,CPU的利用率也随之提高并达到某一峰值,若继续增加多道程序度,则将产生抖动,从而导致CPU的利用率下降。
5.3.2 最近最久未使用(LRU)置换算法
由于无法预测各页面将来的使用情况。因此采用“最近的过去”来近似“最近的将来”。即系统淘汰最近最久未使用的页面。
某进程分配了三个物理块,进程访问页面走向:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
缺页中断:12次 缺页率:12/20*100%=60%
2、LRU置换算法的硬件支持
1 )寄存器 :
用于记录某进程在内存中各页面的使用情况。每页配置一个移动寄存器。
当页面被访问时,对应的寄存器的最左边位置1,每隔时间t,将r寄存器右移一位。
发生缺页中断时,找最小数值的r寄存器对应的页面淘汰。
R = Rn-1 Rn-2 …… R2 R1 R0
2 )栈 :
利用特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。
栈顶始终是最新被访问页面的编号。
5.3.3 Clock置换算法
1 )简单的Clock置换算法
为每页设置一个访问位,内存中的所有页面都通过链接指针链成一个循环队列。从替换指针所指向的页开始,被访问时,该位置为1。页面置换时,首先淘汰访问位为0的页;若访问位为1,则重新置为0,暂不换出,当队列中的最后一个页面仍为1,则返回到队首重新检查。
优先为0,为1置0,一边搜索一边置0。
2 )改进型Clock置换算法
首选置换页面:既是未访问过的页面;又是未修改的页面(根据局部性原理,刚刚被访问过的页,很可能再次被访问)
访问位A和修改位M可以组合成下面四种类型的页面:
最近没有被访问, 没有被修改(r=0,m=0)
最近没有被访问, 但是被修改(r=0,m=1)
最近被访问过,没有被修改(r=1,m=0)
最近被访问过,也被修改过(r=1,m=1)
算法过程 :
①:从指针当前位置开始,扫描循环队列。把找到的第一个r=0,m=0的页面作为淘汰页面。扫描过程中不改变“访问位”。
②:如果①失败,再次从原位置开始,查找r=0且m=1的页面,把找到的第一个这样的页面作为淘汰页面,而在扫描过程中把指针所扫过的页面的“访问位”r置0。
③:如果②失败,指针再次回到了起始位置,由于此时所有页面的“访问位”r均己为0,再转向①操作,必要时再做②操作,此时一定可以找到可淘汰的页面。
该算法与简单的Clock算法相比,减少了磁盘的I/O操作次数,但算法本身的开销将有所增加。
5.3.5 访问内存的有效时间
有效时间 = ( 1 - P )* 存储访问时间 + P * 缺页中断时间
P :缺页率
5.5 请求分段存储管理方式
5.5.1 请求分段中的硬件支持
1、请求段表机制
存取方式:只执行、只读、允许读/写
访问字段A:记录该段被访问的频繁程度。
修改位M:进入内存后,是否修改
存在位P:记录本段是否调入内存。
增补位:记录段在运行中是否动态增长。
外存始址:记录段在外存中的起始盘块号。
2、缺段中断机构
3、地址变换机构
分段 + (请求调段 +调段置换)