虚拟存储器

虚拟存储器

虚拟存储器概述

  1. 常规存储器管理方式的特征
    • 一次性:在前面所介绍的几种存储管理方式中,都要求将作业全部装入内存后方能运行
    • 驻留性:作业装入内存后,便一直驻留在内存中,直至作业运行结束。
  2. 局部性原理
    • 时间局限性:如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行; 如果某数据被访问过,则不久以后该数据可能再次被访问。(循环操作)
    • 空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将 被访问。(顺序执行)
  3. 虚拟存储器的定义和特征
    • 定义:谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
    • 特征:
      • 多次性:多次性是指一个作业被分成多次调入内存运行
      • 对换性:对换性是指允许在作业的运行过程中进行换进、换出
      • 虚拟性:虚拟性是指能够从逻辑上扩充内存容量

请求分页存储管理方式

  1. 请求分页中的硬件支持
    1. 页表机制image-20221207214323183

      1. 状态位 P:用于指示该页是否已调入内存,供程序访问时参考。
      2. 访问字段 A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长 时间未被访问,供选择换出页面时参考。
      3. 修改位 M:表示该页在调入内存后是否被修改过。M 位供置换页面时参考。
      4. 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。
    2. 缺页中断机构

      它与一般的中断相比,有着明显的区别

      • 在指令执行期间产生和处理中断信号
      • 一条指令在执行期间,可能产生多次缺页中断
    3. 地址变换机构image-20221207214715297

  2. 请求分页中的内存分配

    在为进程分配内存时,将涉及到三个问题:第一,最小物理块数的确定;第二,物理块的分配策略;第三,物理块的分配算法。

    1. 最小物理块数的确定

      取决于指令的格式、功能和寻址方式

    2. 内存分配策略

      在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换 时,也可采取两种策略,即全局置换和局部置换。

      • 固定分配局部置换(Fixed Allocation,Local Replacement)

      固定分配:为 每个进程分配固定数目的物理块

      局部置换:,如果进程 在运行中发现缺页,则只能从该进程在内存的 n 个页面中选出一个页换出,然后再调入一 页,以保证分配给该进程的内存空间不变。

      • 可变分配全局置换(Variable Allocation,Global Replacement) 大锅饭

        可变分配:先为进程分配一定数目的物理块,在进程运行期间根据情况适当的增加或减小

        全局置换:发现缺页从OS保留空闲块中取出一块分配,当OS无空闲块,则从一个选中进程块中抽取

      • 可变分配局部置换(Variable Allocation,Local Replacement) 会哭的孩子有糖吃

        如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干 附加的物理块,直至该进程的缺页率减少到适当程度为止;反之,若一个进程在运行过程 中的缺页率特别低,则此时可适当减少分配给该进程的物理块数

    3. 物理块分配算法

      • 平均分配算法
      • 按比例分配算法
      • 考虑优先权的分配算法
  3. 页面调入策略
    1. 预调页策略:如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会 比一次调入一页更高效些
    2. 请求调页策略:但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘 I/O 的启动频率。

页面置换算法

  1. 最佳(Optimal)置换算法

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

    image-20221207220657994

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

    该算法总是淘汰最先进入内存的页面,即选择在内存中驻 留时间最久的页面予以淘汰

    image-20221207220752332

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

    LRU 置换算法是选择最近最久未 使用的页面予以淘汰。

    image-20221207220907107

    LRU置换算法的硬件支持

    1. 寄存器

      为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄 存器,可表示为

      image-20221207221019379

      当进程访问某物理块时,要将相应寄存器的 Rn-1 位置成 1。此时,定时信号将每隔一 定时间(例如 100 ms)将寄存器右移一位。如果我们把 n 位寄存器的数看做是一个整数,那么, 具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。

      image-20221207221119150

      由图可以看出,第 3 个内存页面的 R 值最小,当发 生缺页时,首先将它置换出去。

    可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时, 便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编 号,而栈底则是最近最久未使用页面的页面号。

    image-20221207221225909

  4. 最少使用(Least Frequently Used, LFU)置换算法

    寄存器R中1位数最少淘汰

    对比LRU

    ​ 2 1 1 0 4

    LRU: 2 21 21 01 04

    LFU: 2 21 21 01 41

  5. Clock 置换算法

    Clock 算法就是用得较多的一种 LRU 近似算法。

    1. 简单的Clock置换算法(NRU)

      当采用简单 Clock 算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过 链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一页淘 汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不 换出,而给该页第二次驻留内存的机会,再按照 FIFO 算法检查下一个页面。当检查到队列 中的最后一个页面时,若其访问位仍为 1,则再返回到队首去检查第一个页面。

      image-20221207221832636

    2. 改进型 Clock 置换算法

      由访问位 A 和修改位 M 可以组合成下面四种类型的页面:

      image-20221207221946116

      1. 从指针所指示的当前位置开始,扫描循环队列,寻找 A=0 且 M=0 的第一类页面, 将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
      2. 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找 A=0 且 M=1 的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所 有扫描过的页面的访问位都置 0。
      3. 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所 有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到 被淘汰的页。
  6. 页面缓冲算法(PBA:Page Buffering Algorithm)

    该算法规定将一个被淘汰的页放入两个链表中的一个,即如果页面未被修改,就将 它直接放入空闲链表中;否则,便放入已修改页面的链表中。

“抖动”与工作集

  1. 多道程序度与“抖动”
    • 多道程序度:系统中能运行的进程数
    • 抖动:每个进程大部分时间都用于也免得换进/换出,而几乎不能再去做任何有效的工作,从而导致处理机急剧下降并趋于0的情况
    • 发生抖动的原因:同时在系统中运行的进程太多,由此分配给每个进程的物理块太少,不能满足进程正常运行的基本要求,知识每个进程运行时,频繁的缺页,必须请求系统将所缺之页调入内存。
  2. 工作集
    • 定义:在某段时间间隔 △ \triangle 里,进程实际所要访问页面的集合,在时间t的工作集 w ( t , △ ) w(t, \triangle) w(t,),其中 △ \triangle 称为工作集的窗口大小
    • 工作集 w ( t , △ ) w(t, \triangle) w(t,)是二元函数,即在不同时间t的工作集,所含页面不同,工作集与 △ \triangle 有关 w ( t , △ ) ⊆ w ( t , △ + 1 ) w(t, \triangle)\subseteq w(t, \triangle + 1) w(t,)w(t,+1)
  3. “抖动”的预防方法
    1. 局部置换策略

    2. 工作集算法

    3. 利用“L = S”准则调节缺页率:

      其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。
      如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。
      只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。

    4. 选择暂停进程

请求分段存储管理方式

  1. 请求分段中的硬件支持
    1. 段表机制

      image-20221207222457643

      • 存取方式:用于标识本分段的存取属性是只执行、只读,还是允许读/写。
      • 访问字段 A:其含义与请求分页的相应字段相同,用于记录该段被访问的频繁程度。
      • 修改位 M:用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
      • 存在位 P:指示本段是否已调入内存,供程序访问时参考。
      • 增补位:这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做 过动态增长。
      • 外存始址:指示本段在外存中的起始地址,即起始盘块号。
    2. 缺段中断机构

      image-20221207222654709

    3. 地址变换机构image-20221207222733610

  2. 分段的共享与保护
    1. 共享段表

      • 共享进程计数 count。非共享段仅为一个进程所需要。当进程不再需要该段时,可 立即释放该段,并由系统回收该段所占用的空间。
      • 存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。
      • ) 段号。对于一个共享段,不同的进程可以各用不同的段号去共享该段。image-20221207223009796
    2. 共享段的分配与回收

      1. 共享段的分配

        在为共享段分配内存时,对第一个请求使用该共享段的进程,由系 统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段 表的相应项中,还须在共享段表中增加一表项,填写有关数据,把 count 置为 1;之后,当 又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分 配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址;在共享段的 段表中,填上调用进程的进程名、存取控制等,再执行 count :=count+1 操作,以表明有两 个进程共享该段。

      2. 共享段的回收

        当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。

    3. 分段保护

      1. 越界检查
      2. 存取控制检查
      3. 环保护机构

此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。

  1. 分段保护

    1. 越界检查
    2. 存取控制检查
    3. 环保护机构
posted @ 2022-12-08 14:58  chanxe  阅读(72)  评论(0编辑  收藏  举报