OS_虚拟内存@请求分页系统@驻留集@内存分配策略

OS_虚拟内存@请求分页系统@驻留集@内存分配策略

请求分页系统

  • 请求分页系统(Demand paging) 建立在基本分页系统(memory paging)基础之上
    • 为了支持虚拟存储器功能而增加了
    • 请求调页功能
    • 页面置换功能
  • 请求分页是目前最常用的一种实现虚拟存储器的方法 🎈
  • 在请求分页系统中
    • 只要求将当前需要的一部分页面装入内存,便可以启动作业运行
    • 在作业执行过程中,当所要访问的页面不在内存中时,再通过调页功能将其调入,同时还可通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间
  • 为了实现请求分页,系统必须提供一定的硬件支持
  • 除了需要一定容量的内存及外存的计算机系统,还需要有
    • 页表机制
    • 缺页中断机构
    • 地址变换机构

页表机制

  • 请求分页系统的页表机制不同于基本分页系统,请求分页系统在一个作业运行之前不要求全部一次性调入内存

  • 因此在作业的运行过程中,必然会出现要访问的页面不在内存中的情况,

  • 如何发现和处理这种情况是请求分页系统必须解决的两个基本问题

    • 为此,在请求页表项中增加了4个字段

    • 请求分页系统中的页表项

      • 页号
      • 物理块号
      • 状态位P
      • 访问字段A
      • 修改位M
      • 外存地址O
    • 增加的4个字段说明如下:(了解完置换算法后再来学习这部分)

      • 状态位P

        • 调入状态,用于指示该页是否已调入内存,供程序访问时参考
      • 访问字段A

        • 访问计数(时)器:用于记录本页在一段时间内被访问的次数
        • 或记录本页最近已有多长时间未被访问,供置换算法换出页面时参考 (比如LRU算法用到计数器)
      • 修改位M

        • 即,脏位,标识该页在调入内存后是否被修改过,以确定页面置换时是否写回外存
      • 外存地址O

        • 用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考

缺页中断机构

  • 在请求分页系统中,每当所要访问的页面不在内存中时,便产生一个缺页中断,请求操作系统将所缺的页调入内存 此时应将缺页的进程阻塞(调页完成唤醒),
    • 若内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中的相应页表项,
    • 若此时内存中没有空闲块,则要淘汰某页
      • 若被淘汰页在内存期间被修改过,则要将其写回外存)
    • 缺页中断作为中断,同样要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序、恢复CPU环境等几个步骤
      • 但与一般的中断相比,它有以下两个明显的区别:
        • 指令执行期间而非一条指令执行完后产生和处理中断信号,属于内部异常
        • 一条指令在执行期间,可能产生多次缺页中断

地址变换机构

  • 请求分页系统中的地址变换机构,是在分页系统地址变换机构的基础上,为实现虚拟内存,又增加了某些功能而形成的
    • 如产生和处理缺页中断,
    • 从内存中换出一页的功能
  • 在这里插入图片描述

页框分配

驻留集

  • 对于分页式的虚拟内存,在进程准备执行时,不需要也不可能把一个进程的所有页都读入主存。
  • 因此,操作系统必须决定读取多少页,即决定给特定的进程分配几个页框。
  • 给一个进程分配的物理页框的集合就是这个进程的驻留集🎈
    • 需要考虑以下几点:
    • 1)分配给一个进程的页框越少,驻留在主存中的进程就越多,从而可提高CPU的利用率。
    • 2)若一个进程在主存中的页面过少,则尽管有局部性原理,缺页率仍相对较高
    • 3)若分配的页框过多,则由于局部性原理,对该进程的缺页率没有太明显的影响。

分配策略

  • 在请求分页系统中,可以采取
    • 两种分配策略

固定分配

  • 分配给进程的内存物理块数保持不变

可变分配

  • 分配给进程的内存物理块数可以变化

置换策略

  • 两种置换策略

    • 全局置换
    • 局部置换

局部置换

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

全局置换

  • 所谓全局置换,是指如果进程在运行中发生缺页,系统从空闲物理块队列中取出一块分配给该进程,并将所缺页调入。

策略组合

  • 分配策略和置换策略两者组合,共有三种可能的策略组合

固定分配局部置换

  • 内存块数-固定分配-局部置换

  • 它为每个进程分配一定数目的物理块,在整个运行期间都不改变。

  • 实现这种策略时,难以确定应为每个进程分配的物理块数目:

    • 太少会频繁出现缺页中断,
    • 太多又会降低 CPU和其他资源的利用率。
  • 🎈固定分配要求进程的内存物理块不变

    • 所以不可以配合全局置换(这试图改变物理块数,导致矛盾)

可变分配全局置换

  • 这是最易于实现的物理块分配和置换策略,

  • 它为系统中的每个进程分配一定数目的物理块

    • 在进程运行期间,根据情况适当的增加/减少分配给进程的内存物理块

    • 操作系统自身保持一个空闲物理块队列

  • 这种方法比固定分配局部置换更加灵活,可以动态增加进程的物理块,但也存在弊端,

    • 如它会盲目地给进程增加物理块,从而导致系统多道程序的井发能力下降
    • 先为每个进程分配一定数目的物理块,在进程运行期间可根据情况适当地增加或减少。

可变分配局部置换🎈

  • 它为每个进程分配一定数目的物理块
    • 当某个进程发生缺页时,只允许从该进程在内存的页面中选出一页换出,因此不会影响其他进程的运行
    • 若进程在运行中频繁地缺页,则系统再为该进程分配若干物理块,直至该进程缺页率趋于适当程
      度;
    • 反之,若进程运行中的缺页率特别低,则可适当减少分配给该进程的物理块。
  • 比起可变分配全局置换,这种方法不仅可以动态增加进程物理块的数量,还能动态减少进程
    物理块的数量,在保证进程不会过多地调页的同时,也保持了系统的多道程序井发能力。
  • 当然它需要更复杂的实现,也需要更大的开销,但对比频繁地换入/换出所浪费的计算机
    资源,这种牺牲是值得的。
posted @   xuchaoxin1375  阅读(13)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示