操作系统内存分配管理相关习题3

虚拟内存

虚拟存储器基本概念

当作业要求的内存空间超过内存总容量时,无法装入内存运行;
有大量作业要求运行,但内存容量不足以容纳所有这些作业,只能将少量作业装入内存运行

解决内存容量不够问题的办法:
• 从物理上扩充内存;
• 从逻辑上扩充内存——虚拟存储器

虚拟存储器的引入
  1. 常规存储器管理方式的特征
  • 一次性
  • 驻留性
    不使用或暂不用的程序(数据)占据了大量内存空间,使得需要运行的作业无法装入运行
  1. 局部性原理
    程序在执行时将呈现局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域。
    时间局部性——某指令一旦执行,则不久后该指令可能再次被执行(数据亦然)。循环
    空间局部性——程序一旦访问了某个存储单元,不久后,附近的存储单元也将被访问。顺序执行
虚拟存储器的定义

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

  1. 部分装入
    应用程序在运行前,没有必要全部装入(局部性原理),仅将那些当前要运行的页面或段先装入内存便可以运行,其余部分暂留在磁盘上
  2. 请求调页
    程序在运行时,如果所要访问的页(段)已调入内存,便可继续执行下去;否则,应利用OS所提供的请求调页(段)功能,将它们调入内存,以便继续运行
  3. 页面置换
    如果此时内存已满,则需利用页(段)置换功能,将内存中暂不用的页(段)调到磁盘上在将访问的页(段)调入内存,使程序继续运行下去
虚拟存储器的实现方法
  1. 分页请求系统
    是在分页系统基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。
    必须提供硬件支持和相应的软件:
    1. 硬件支持
      1. 请求分页的页表机制
      2. 缺页中断机构
      3. 地址变换机构
    2. 实现请求分页的软件——请求调页、实现页面置换的软件
  2. 请求分段系统
    是在分段系统基础上,增加了请求调段功能和分段置换功能所形成的段式虚拟存储系统。
    1. 硬件支持
      1. 请求分段的段表机制
      2. 缺段中断机构
      3. 地址变换机构
    2. 实现请求分段的软件——请求调段、实现段置换的软件
虚拟存储器的特征
  1. 多次性:一个作业被分成多次调入内存运行(部分装入);
  2. 对换性:作业在运行过程中进行换进、换出;
  3. 虚拟性:从逻辑上扩充内存,使用户看到的内存容量大于实际内存容量。这是虚拟存储器所表现的最重要的特征,也是实现虚拟存储器的最重要的目标
请求分页存储管理方式

请求分页中的硬件支持

  1. 页表机制
    ![[Pasted image 20241203144935.png]]

    状态位P:指示该页是否已调入内存
    访问位A:记录本页在一段时间内被访问的次数(LRU)
    修改位M:表示该页被调入内存后是否被修改过
    外存地址:指出该页在外存的地址,通常是磁盘物理块号。
    操作系统在处理页面失效时需要把信息保存操作系统内部的软件表格中。硬件不需要它

  2. 缺页中断机构
    在指令执行期间产生和处理
    一条指令执行期间可能要产生多次

  3. 地址变换机构
    ![[Pasted image 20241203145103.png]]

请求分页中的地址变换过程
![[Pasted image 20241203145200.png]]

内存分配策略和分配算法

为进程分配内存时,涉及到3个问题:

  1. 最小物理块数的确定
    取决于指令的格式、功能和寻址方式
  2. 物理块的分配策略
    固定分配局部置换
    可变分配全局置换——最易于实现的物理块分配和置换策略,已用于若干OS中
    可变分配局部置换
  3. 物理块分配算法
    平均分配算法——显然不太合理
    按比例分配算法
    考虑优先权的分配算法——一部分按比例;另一部分根据各进程的优先权——合理
调页策略
  1. 何时调入页面
    预调页策略
    请求调页策略
  2. 从何处调入页面
    系统有足够的对换区——全部从对换区调入
    系统缺少对换区——全部从文件区调入
    UNIX方式——凡未运行的页面,从文件区调入;曾经运行过又被调出的页面,从对换区调入。共享页面有时无须调入
  3. 页面调入过程

请求分段存储管理方式

在请求分段系统中,程序运行之前,只需调入若干分段(不必调入所有分段),便可启动运行。
• 当所访问的段不在内存时,可请求OS将所缺的段调入内存。
• 像请求分页系统一样,为实现请求分段存储管理功能,同样需要一定的硬件支持和相应的软件

请求分段中的硬件支持
  1. 段表机制
    请求分段式管理中,所需的最主要数据结构是段表。
    由于应用程序的段,只有一部分装入内存,故需在段表中增加若干项,以供程序在调进、调出时参考
    ![[Pasted image 20241204134650.png]]

存取方式:用于标识本分段的存取属性是执行、只读、读/写
访问字段A:用于记录该分段被访问的频繁程度
修改位M:用于表示该段进入内存后是否被修改,供分段置换时参考
存在位P:指示本段是否已调入内存,供程序访问时参考
增补位:用于表示该段进入内存后是否做过动态增长
外存始址:指示本段在外存中的起始地址,即起始盘块号
2. 缺段中断机构
在请求分段系统中,每当发现运行进程所要访问的段不在内存时,便由缺段中断机构产生一缺段中断信号,进入OS后由缺段中断处理程序将所需的段调入内存。
同样需要在一条指令的执行期间,产生和处理中断(一条指令执行期间可能产生多次缺段中断)
缺段中断的处理比缺页中断复杂(段不是定长)
![[Pasted image 20241204134935.png]]

  1. 地址变换机构
    请求分段系统的地址变换机构,是在分段系统的地址变换机构的基础上形成的。
    因为在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能利用段表进行地址变换。因此在地址变换机构中增加了缺页中断的请求和处理等功能。
    在这里插入图片描述

页面置换算法

好的页面置换算法,应具有较低的页面更换频率

最佳置换算法和先进先出置换算法
  1. 最佳置换算法(OPT)
    一种理论上的算法
    选择以后永不使用的或者是未来最长时间内不再使用的页面淘汰
    ![[Pasted image 20241203203508.png]]

  2. 先进先出(FIFO)页面置换算法
    选择在内存中驻留时间最长的页面淘汰。
    设置一个指针,指向最老的页面
    ![[Pasted image 20241203203541.png]]

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

选择最近最久未使用的页面进行淘汰。——用“最近的过去”作为“最近的将来”的近似
LRU页面置换算法的演算过程可以借助“栈”来完成:栈顶始终是最新的,栈底是最近最久未使用的页面号
![[Pasted image 20241203203909.png]]

LRU缺点

LRU在理论上是可以实现的,但代价太高。
为了实现LRU,需要维护一个特殊的队列,该队列中存放当前在内存中的页号,每访问一页时就调整一次队列,使最近访问的页面在表尾,最近最少使用的页面在表头。
发生缺页中断时,总是淘汰队头的页;而执行一次页面访问,需要将该页调整到队尾。在链表中找到被访问的页,将它移到表尾是一个非常费时的操作,即使用硬件实现也是一样(假设有这样的硬件的话)。
因此常采用一些LRU近似算法(模拟算法)。LRU的近似算法有很多,LFU

最少使用页面置换算法LFU

实现思路(方法):
为每个页设置一个多位计数器,开始时,所有计数器全部清0。每次访问某个页时,就将它对应的计数器加1。隔一定时间t将所有页的计数器清0;
在发生缺页中断时,可选择计数值最小的对应页面淘汰,并将所有计数器全部清0

这种算法实现不难,但代价太高,而且选择多大的t最适宜也是一个难题

Clock置换算法

是第二次机会页面置换算法在实现上的改进。
需为每页设置一个访问位A
在内存中的页面链接成一个循环队列,有一个指针指向最老的页面
![[Pasted image 20241203215035.png]]

当发生页面失效时,首先检查指针所指的页面,若它的A位是0就淘汰
该页面,并把新页面插入这个位置,指针前移一个位置到C页;
若A位是1,就清除A位,并把指针前移一个位置;重复这个过程,直到找到一个A位是0的页面为止
![[Pasted image 20241203215342.png]]

蓝色为指针位置,星号为访问标志

改进型Clock置换算法(UNIX SVR4采用此算法)

淘汰被修改过的页面时,需将其写回磁盘(置换代价高),因此应淘汰既未被访问又未被修改的页面。为此,每个页面除了有访问位A外,还增加一个修改位M。由访问位A与修改位M可以组成下面4种类型的页面

  1. 1类(A=0,M=0),是最佳淘汰页;

  2. 2类(A=0,M=1) ;

  3. 3类(A=1,M=0) ;

  4. 4类(A=1,M=1) ,最近被访问且被修改过的页,最不应该淘汰

  5. 从指针当前位置开始,扫描循环队列,寻找A=0且M=0的第1类页面,将所遇到的第一个页面淘汰。

  6. 若第1步查找一周后未遇到第1类页面,则寻找A=0且M=1的第2类页面,将将所遇到的第一个页面淘汰。第2轮扫描中将所有扫描过的页面的访问位A清0。

  7. 若第2轮扫描失败,则返回(1),若仍失败,再重复第(2)步,此时就一定能找到被淘汰的页

工作集

一个进程在时刻t-△到时刻t之间所访问的页面的集合,称为该进程在时刻t的工作集 ,用W(t, △)表示。
变量△称为“工作集窗口尺寸”,记为∣W(t,△)∣|W(t, △ )|W(t,)
如果系统能随|W(t, △ )|的大小来分配主存块的话,就既能有效地利用主存,又可以使缺页中断尽量少地发生。或者说,程序要有效运行,工作集必须在主存中。
由于无法预知一个程序在最近的将来会访问哪些页面,只好用最近的过去在△时间间隔内访问过的页面作为实际工作集的近似。
正确选择△的大小对系统性能有很大影响。△过大,就成了实存管理;太小,就会出现“抖动

抖动

抖动是由于竞争内存空间引起的
当需要将一个新页面调入内存时,因内存空间紧张,不得不将一个老页面置换出去,
而刚刚置换出去的老页面可能又要被使用,需要重新将它调入。若一个进程频繁地进行页面调入调出,使系统效率降低,通常称这种现象为该进程发生了抖动

产生抖动的原因:

  1. 系统内的进程数太多,致使一个进程分得的内存块过少;
  2. 系统采用的页面置换算法不合理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值