操作系统第五章
5.1虚拟存储器概述
1.各种存储器管理方式有一个共同特点:
都要求将一个作业都装入内存后才能运行
(产生作业过大,内存不够用的情况,虚拟存储器解决该问题)
2.常规存储器管理方式不足的原因:
(1)特征:
*一次性。作业必须一次性全部装入内存后方能运行
*驻留性。作业被装入内存后,整个作业被驻留在内存中,直到运行结束
(2)程序运行是有局部性的,一次性和驻留性不必要
(3)程序执行特点:
*程序执行少部分是转移和过程调用,大多数情况下是顺序执行
*程序中存在许多循环结构,对少数指令进行多次执行
*程序中包括许多对数据结构的处理(如数组),这些处理往往局限在小范围内
(4)在(3)中表现局限性两个方面:
*时间局限性
*空间局限性
3.虚拟存储器基本工作情况:
程序运行前不需将全部存入内存,少数页面和段装入,运行访问页或段时,在内存的直接用,不在的未调入,发出缺页(段)中断请求,OS调入,如果内存满了,置换(允许将一个作业分多次调入内存)
4.虚拟存储器定义:
虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
5.虚拟存储器特征:
(1)多次性:一个作业被分成多次调入内存运行
(2)对换性:允许在作业的运行过程中进行换进、换出
(3)虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量
6.虚拟存储器实现方法:
离散分配方式是基础
[if !supportLists](1) [endif]分页请求系统:
分页系统基础上增加请求调页功能和页面置换功能
[if !supportLists](2) [endif]请求分段系统:
在分段系统基础上,增加请求调段及分段置换功能
5.2请求分页存储管理方式
1.硬件支持
*请求页表:
(1)状态位P :指示该页是否已调入内存
(2)访问字段A :用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问。(置换时考量的参数)
(3)修改位M :该页在调入内存后是否被修改过。(关系到置换时调出的具体操作)
修改过的换出要重写入外存
(4)外存地址:用于指出该页在外存上的地址
*缺页中断机制:
步骤:
保护CPU环境
分析中断原因
转入缺页中断处理程序
恢复CPU环境
缺页中断是一种特殊的中断,与一般中断有明显区别,主要表现在:
[if !supportLists](1) [endif]在指令执行期间产生和处理中断信号
[if !supportLists](2) [endif]一条指令在执行期间可能产生多次却也中断
2.最小物理块:
能保证程序正常运行所需的最小物理块,少于此值进程将无法运行。大小与计算机硬件结构有关,取决于指令的格式。功能和寻址方式
3.内存分配策略:
(1)固定分配局部配换
每个进程分配一组固定数目物理块,在进程运行期间不再改变
(2)可变分配全局配换(用的多)
先为每个进程分配一定数目物理块,进行运行期间,可根据情况适当增减或减少
(3)可变分配局部置换
4.物理块分配算法:
(1)平均分配
(2)按比例分配算法
(3)考虑优先权的分配算法
5.调页策略
(1)何时调入:
*预调页策略
以预测为基础,将预计不久后便会被访问的若干页面,预先调入内存
优点:一次调入若干页,效率较好
缺点:预测不一定准确,预调入的页面可能根本不被执行到。主要用于进程的首次调入,由程序员指出应该先调入哪些页
*请求调页策略
运行中需要的页面不在内存,便立即提出请求,由OS将其调入内存
优点:由请求调页策略所确定调入的页,一定会被访问;比较容易实现
缺点:每次仅调入一页,需花费较大的系统开销,增加了磁盘I/O的启动频率
(2)从何处调入页面
在请求分页系统中的外存分为:对换区和文件区
发生缺页时,系统应从何处将缺页调入内存,分成三种情况:
*系统拥有足够的对换区空间:进程运行前所有页面由文件区拷贝到对换区
*系统缺少足够的对换区空间
* UNIX方式
(3)缺页率:
页面调入次数(缺页次数)/总的页面使用次数
f=F/A
5.3页面置换算法
1. 最佳(Optimal)置换算法
优点:实现简单,把一进程已调入内存的页面按先后次序组织成一个队列,并设置一个指针(替换指针),使它总是指向队首最老的页面。
不足:与进程实际运行规律不相适应(较早调入的页往往是经常被访问的页,频繁被对换造成运行性能降低)
2. 先进先出置换算法(FIFO)
选择内存中驻留时间最久的页面予以淘汰
优点:实现简单,把一进程已调入内存的页面按先后次序组织成一个队列,并设置一个指针(替换指针),使它总是指向队首最老的页面。
不足:与进程实际运行规律不相适应(较早调入的页往往是经常被访问的页,频繁被对换造成运行性能降低)
3.最近最久未使用(LRU)置换算法
不足:
有时页面过去和未来的走向之间并无必然的联系。
相应的需较多的硬件支持:用寄存器或栈
4.轮转算法(clock)
又称最近未使用算法,与LRU(最近最久未使用算法)近似算法
原理:
(1)每个页设一个使用标志位(use bit),若该页被访问则将其置为1。
(2)设置一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。
(3)若指针经过的页use bit=1,修改use bit=0(暂不凋出,给被用过的页面驻留的机会 ),指针继续向下。到所有页面末尾后再返回队首检查。
*改进CLOCK:
主要考虑对没访问过的页面再细分是否修改过的不同情况,减少因修改造成的频繁I/O操作
每页除记录是否用过A,还记录是否修改的标志M。置换时根据两个标志的值有4种不同情况的处理