操作系统第五章:虚拟存储器

引入虚拟存储器的原因:

有的作业很大,内存装不下,作业不能一次性全部装入内存有大量作业要求运行,但内存不够全部容纳,只能将少数作业装入内存先运行,其他留在外存上

常规存储器管理方式的特征:

一次性:作业在运行前需要一次性全部装入内存驻留性 :作业装入内存后就一直在内存中停留直到运行结束局部性:程序的执行总是呈现为局部性吗,即在一个较短时间段内,程序的执行仅限于某个部分,相应的她所访问的内存空间也局限于某个区域(原因是大量循环操作)

实现虚拟存储的一般过程:

运行前仅将需要的一部分页面或段装入内存,其余部分保留在磁盘上运行时若需要访问的页面(段)未装入内存,则发生缺页中断,进程阻塞系统将启动请求调页(段)功能,将进程所需的页装入内存若当前内存已满,无法装入新页,则还需要利用页置换将内存中暂时不用的页交换到磁盘上再将进程所需的页装入内存,唤醒阻塞的进程

虚拟存储器:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统

虚拟存储器的主要特征:

多次性:一个作业被分为多次调入内存运行对换性:运行过程中换进换出,提高内存利用率虚拟性:从逻辑上扩充内存容量

虚拟存贮管理的实现方法

请求分页存储管理方式 :即实现了请求调页和页面置换

这是在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。允许只装入部分页面的程序(及数据),便启动运行。以后,再通过调页功能及页面置换功能,陆续地把即将要运行的页面调入内存,同时把暂不运行的页面换出到外存上。置换时以页面为单位 请求分段存储管理方式:类似于请求分页

缺页中断处理过程:

操作系统接收到进程产生的缺页中断信号,启动中断处理例程,保留处理机现场;操作系统通知处理机从外存读取指定的页面;处理机激活I/O设备;检查内存有无足够的空闲空间装入该页面?若有,转(6),否则,执行(5);利用页面置换算法,选择内存中的某个页面,换出内存;将指定页面从外存装入内存;更新该进程的页表;更新快表;计算物理地址。 典型问题————抖动:如果系统花费大量时间把程序和数据频繁地装入和移出内存而不是执行用户指令,那么称这种现象为抖动 根本原因:选择的页面或段不恰当

内存分配策略和算法

最小物理块的确定(保证进程正常运行):

若是单指令且采用直接寻址——需要2块物理块若允许间接寻址,则要3个物理块 物理块分配策略

固定分配局部置换:每个进程分配一定数目的物理块,在整个运行期间都不再改变(难以确定每个进程需要多少物理块)可变分配全局置换(常用方式):每个进程分配一定数目的物理块,而OS自身也保持一个空闲物理块队列。仅当空闲物理块队列中的物理块用完时, OS才能从内存中选择一页调出,该页可能是系统中任一进程的页可变分配局部置换:每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出 物理块分配算法:

平均分配算法按比例分配算法:根据进程页面数优先权分配算法:一部分按比例,一部分根据优先权 调页策略:

预调页:以预测为基础,将那些预计在不久之后便会被访问的页面请求调页:当进程执行过程中,通过检查页表发现相应页面不在内存时,才装入该页面。 ——请求分页系统中的外存分为两部分: (1)用于存放文件的文件区 (2)用于存放对换页面的对换区 ——从何处调入页面: (1)系统拥有足够的对换区空间:运行前需将全部有关文件从文件区拷贝到对换区。 从对换区调入所需页面,以提高调页的速度 (2)系统缺少足够的对换区空间:不会被修改的文件,都直接从文件区调入或丢弃。可能被修改的部分,在将它们换出时,便须调到对换区,以后需要时,再从对换区调入 (3)UNIX方式

页面置换算法

最佳(优)置换算法:所选择的被淘汰页面,将是以后永不使用的, 或许是在最长(未来)时间内不再被访问的页面。

先进先出(FIFO)页面置换算法

最近最久未使用(LRU)置换算法(比较优秀的算法) 须有以下两类硬件之一的支持: 1)寄存器:须为每个在内存中的页面配置一个移位寄存器可表示为:R=Rn-1Rn-2Rn-3···R2R1RO,当进程访问某物理块时,要将相应寄存器的最高位Rn-1位置成1。系统每隔一定时间(例如100 ms)将寄存器右移一位 2)栈:每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号

Clock置换算法:每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。 当某页被访问时,其访问位被置1。 置换程序从上次停止位置开始检查页面的访问位。 如果是0,就选择该页换出; 若为1,则重新将它置0,暂不换出,而给该页第二次驻留内存的机会。

改进型Clock置换算法:未修改的不必把它写回辅存,否则系统必须把它写回辅存

其它置换算法

请求分段存储管理