请求分页虛拟存储管理及页面置换算法

请求分页存储管理

硬件支持

请求分页系统的数据换入和换出的基本单位都是长度固定的页面,具有实现简单的优势需要请求分页页表机制、缺页中断机构和地址变换机构的支持

页表机制

与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要
知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。
当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到
底换出哪个页面;有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖,因此,操作系统也需要记录各个页面是否被修改的信息。

与基本分页系统的页表相比,需要增加支持页面换入、换出的数据结构,其页表项如下

页号 物理帧号 状态位P 访问字段A 修改位M 外存地址
状态位:指示该页是否已被调入内存
访问字段:纪录本页在--段时间内被访问的次数或上次访问时间等信息
修改位:该页调入内存后是否被修改过,置换页面时若该位表示曾修改过,需要覆盖外存中的副本,以保证外存中的页面始终为最新
外存地址:指出该页对应外存物理帧号

缺页中断机构

必当所要访问的页面不在内存时,启动缺页中断,请求OS在程序中断期间将需要的页面调入内存
缺页中断处理过程:保护现场、分析中断原因、转入缺页中断处理程序、恢复现场
特点(与普通中断相比):
指令执行期间产生和处理中断信号
指令执行时可能会产生多次缺页中断
在这里插入图片描述
在这里插入图片描述

地址变换机构

和基本分页存储管理的地址变换相比,区别在于:

(1) 查到页表项时需要进行判断,判断页面是否在内存中。
(2) 当需要调入页面时,但有没有空闲内存时,需要进行页面置换。
(3) 当页面需要调入或调出,需要修改请求页表中新增的表项。

在这里插入图片描述
(1) 根据逻辑地址得到页号和页内偏移量。
(2) 对页号进行越界判断。
(3) 访问页表判断页是否在内存中,如果在继续执行程序。
(4) 如果访问的页不在内存中,产生缺页中断请求,当前进程阻塞,缺页中断程序从根据页表从外存找到缺失的页。
(5) 判断内存空间是否已满,未满,将缺页调入内存,修改页表。如果已满,从内存中选择一个页面置换,如果页面发生修改,需要将修改写回外存,然后再将缺页调入内存,并修改页表。
(6) 页面调入后,阻塞的进程会处于就绪态等待处理机调度。
经典图示:
在这里插入图片描述
几个细节问题

(1) 只有“写指令”页表才需要修改“修改位”。并且如果有快表机构,一般来说只需要修改快表中的数据,只有要将快表项删除时才需要写回内存中的慢表。这样可以减少访问内存次数。
这也就是说,如果存在快表机构,当修改了一个页面时,只需要修改快表中的相应的页表项,而不需要修改内存中的页表,一方面快表操作更快,另一方面还减少了访问内存次数,否则一次修改要修改两个表。
(2) 和普通中断一样,缺页中断也需要保留CPU现场,以便进程再次运行时能从中断的状态继续运行。
(3) 这里换成那个页面是通过页面置换算法决定的,页面置换算法见下一节页面置换算法。
(4) 换入/换成页面都需要启动慢速的I/O操作,可见,如果换入/换成过于频繁,会有很大的开销。
(5) 页表调入内存后需要修改慢表和快表两个表,但是这和(1) 并不冲突。

内存分配策略和分配算法

在这里插入图片描述
内存物理帧分配策略要考虑三方面问题

最小(最少)物理块数如何确定
物理块的分配策略
物理块的分配算法

最小物理块数
必保证进程运行所需的最小物理帧数与其所在硬件结构相关,不同的指令格式、功能和寻址坊式对物理帧数的要求不同

C3单字节指令、直接寻址方式: 2个帧
C3单字节指令、间接寻址方式: 3个帧
C3多字节指令: 6个以上的帧

物理帧分配策略
内存可采用固定和可变两种策略进行分配,置换时有全局和局部置换,因此物理帧的分配策略可分为:

  1. 固定分配局部置换
    根据进程类型或程序员要求,为进程分配固定数目的物理帧,进程运行期间不再新增空间,换出时从本进程占有的页面中选择一页;难度在于物理帧数目难以确定,过多或过少都有不良影响
  2. 可变分配全局置换
    进程获取的物理帧数在运行过程中可以变化,换出时的页面可以是内存中的任意进程的页面,该方法会增加其他进程的缺页率
  3. 可变分配局部置换
    根据进程类型或程序员要求分配初始数量的物理帧,换出时只从本进程占有页面中选择,但若缺页中断经常产生,则为该进程新增部分页面,以使缺页中断发生频度下降,即利用增减帧数量的方法来控制缺页率

物理帧分配算法
必采用固定分配策略时,可以使用下述算法

  1. 平均分配算法
    物理块平均分配给各进程,小进程浪费空间,大进程缺 页率高
  2. 根据进程大小按比例分配
    根据本进程页面数与系统中各进程页面数总和之比分配帧,但至少要满足最小物理块要求
  3. 按优先权分配
    直高优先权的进程获得的物理帧多
    将帧分类,一类按比例分,一类专用来满足高优先权进程的额外需求

调页策略

调入过程

页面不在内存时,进程向cpu发送缺页中断
中断处理程序保存现场,转入缺页中断处理过程
若内存未满,则换入并修改页表
若内存已满,选页换出:换出页未修改者可直接覆盖,已修改者需要保存
到磁盘,新页入内存后修改页表,置存在位为1,同时将其写入快表
形成物理地址,访问数据

缺页率

设进程逻辑空间为页, OS分配给它的物理块数为m (m<=n) , 该进程运行过程中,所访问页面在内存(访问成功,即命中)中的次数为S,访问失败的次数为F,则总页面访问次数为A=S+F,而该进程的缺页率为f=F/A
影响缺页率的因素

页面大小:页面大缺页车低
物理块数:块数多缺页率低
页面置换算法
程序固有特性:程序的局部化程度越高,缺页率越低

分页置换算法

请求调页系统中,换出页面时需要根据一定算法选择

  • 最佳置换算法(OPT)
  • 先进先出算法(FIFO)
  • 最近最久未使用置换算法(LRU)
  • Clock置换算法
  • 最少使用置换算法
  • 页面缓冲算法

最佳置换算法(OPT)

在这里插入图片描述
最佳置换算法(OPT, Optimal) :每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。

先进先出算法(FIFO)

在这里插入图片描述
在这里插入图片描述

最近最久未使用置换算法(LRU)

在这里插入图片描述

LRU算法的硬件支持

LRU算法性能较优,其面临的主要问题是如何确定一个按照上次使用时间定义的排序序列,可选择如下两种方式

  • 计数器:每个位于内存中的页面都要配置一个计数器用来标识进入内存的时间
  • 页码堆栈:每当引用-一个已在堆栈的页时,都将该页从堆栈中删除并压入顶部

计数器方式
移位寄存器
每个页面配置一个n位移位寄存器,当进程访问某页面时,将其最高位设置为1,每过一个时钟周期将其右移一位,换出时选择移位寄存器值最小的页面
逻辑时钟
每个页面项中设置一个使用时间域,每次内存引用时,时钟寄存器的内容会复制到相应页的使用时间域中换出时选择该域中值最小的页面
该算法需要搜索页表以查找计数值最小的页面,系统的时空开销需要考虑
在这里插入图片描述
页码堆栈
堆栈使用双向链表实现
进程访问某页面时,若该页在栈内,则从中删除并压入栈项;若该页不在栈内,则从栈底删除最近最久未使用的页面,并将新页面压入栈顶
该算法中,栈项总是最近访问的页面,栈底总是最近最久未使用的页面
在这里插入图片描述

Clock置换算法

在这里插入图片描述
在这里插入图片描述

最少使用置换算法(LFU)

通过在各页表项中设置-一个纪录访问次数的计数器,可以形成LFU算法,由于活跃页应该有较大的访问次数纪录值,因此可以将该计数器值最小的页面换出
每次访问某页时,将移位寄存器的最高位置位,每隔一定时间右移一 次, 则最近一段时间内使用最少的页面其按位相加之和最小
在这里插入图片描述

页面缓冲算法

采用可变分配和局部置换方式,以及FIFO算法
该算法中要求设置两个链表_空闲帧 (页面)链表和已修改帧(页面)链表,被选中的页面若未被修改就插入前一链表,否则插入后一链表
被插入空闲帧链表的页面并不换出内存,将来直接被覆盖;被插入已修改链表的页面暂时不写入磁盘,待累积达到一定数量时才调出内存
当进程缺页率低时,新调入的页面在本进程中局部置换;
当进程缺页率高时,新调入的页面直接使用空闲页面链表的第一个元素
这种方法可以显著减少I/O次数,且能以较小系统开销将这些页面再次分配给原进程使用

以下皆为一些小知识点:
在这里插入图片描述
在这里插入图片描述

颠簸(抖动)

某进程由于缺页而产生置换,但在不久又请求新的页面甚至是刚换出的页面,需要再次置换,这种频繁的页调度行为称为颠簸或抖动
若一个进程在换页上使用的时间多于执行时间,称这个进程在抖动
系统颠簸原因
采用全局置换算法可能导致系统颠簸
实例
早期调页系统中使用全局置换算法, OS发现CPU利用率降低,则向系统引入新进程以增加多道程序度。
问题:某进程需要更多帧保证运行时,需要换页设备为其抢占他人空间,导致被抢占空间的进程需要等待换页设备,随着等待换页设备进程的增加,就绪队列逐渐缩短,CPU利用率随之降低,OS检测到该情况后会主动增加多道程序度,新进程的加入会需求新帧,进一步增加了等待换页设备的队列,上述过程的不断出现导致了系统颠簸的产生,系统吞吐量陡降,缺页率显著增加,有效访存时间增加,系统忙于调页而不能完成一样工作
工作集理论
定义.
最近n次内存访问的页面集合,数字n被称为工作集窗口,也就是工作集的大小
经常被使用的页面会在工作集中,而若一个页面不再被使用,将会被从工作集中丢弃。当一个进程寻址一个不在工作集内的页面时,会产生一个缺页中断。在处理缺页中断时,更新工作集并在需要时从磁盘中读入此页面

工作集模型的原理
让操作系统监视各个进程的工作集,主要是监视各个工作集的大小(窗口大小)。
若有空闲的物理块,则可以再调-一个进程到内存以增加多道程序度
若工作集的大小总和超过了所有可用物理块的数量总和,那么OS可以选择一个内存中的进程对换到磁盘中去,以减少内存中的进程数量来防止抖动的发生
正确选择工作集窗口大小,对存储器的有效利用率和系统吞吐量的提高都将产生重要影响。如果窗口选的很大,进程虽不易产生缺页,但存储器也得
不到充分利用,如果窗口过小,则会使进程在运行过程中频繁产生缺页中
断,反而降低了系统吞吐量。
在这里插入图片描述

请求分段存储管理方式

在基本段式管理基础上增加请求调段功能和段置换功能,运行时先调入若干分段,需要新段时置换暂时不用的段

硬件支持

段表机制
缺段中断机构
地址变换机构

段表机制

段名 段长 段基址 存取方式 访问字段A 修改位M 状态位P 增补位 外存地址
存取方式:标识存取属性为读、写、执行的组合
增补位:请求分段存储管理的特有字段,表示本段运行过程中是否有动态增长
访问字段A、修改位M、状态位P、外存基址的定义同页式管理

缺段中断机制
缺段中断要求在一条指令执行期间产生和处理中断,和处理多次缺段中断。
在这里插入图片描述
地址变化机构
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/low5252/article/details/106207163