请求分页管理方式&页面置换算法

大勇若怯,大智若愚

文章目录

  • 请求分页管理方式
    • 知识总览思维导图
    • 页表机制
    • 缺页中断机构
    • 地址变换机构
    • 总结思维导图
  • 页面置换算法
    • 知识总览思维导图
    • 最佳置换算法(OPT)
    • 先进先出置换算法 (FIFO)
    • 最近最久未使用置换算法(LRU)
    • 时钟置换算法( CLOCK)
    • 改进型的时钟置换算法
    • 总结思维表格

请求分页管理方式

知识总览思维导图

请求分页管理方式&页面置换算法_第1张图片

  • 请求分页存储管理基本分页存储管理的主要区别:
  • 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,(操作系统要提供请求调页功能,将缺失页面从外存调入内存)然后继续执行程序。
  • 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。(操作系统要提供页面置换的功能将暂时用不到的页面换出外存

页表机制

问题引入

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

请求分页管理方式&页面置换算法_第2张图片

缺页中断机构

  • 下图要理解实施过程
    请求分页管理方式&页面置换算法_第3张图片

中断的分类__跳转链接
请求分页管理方式&页面置换算法_第4张图片

  • 缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
  • 一条指令在执行期间,可能产生多次缺页中断。(如: copy a to B,即将逻辑地址A中的数据复制到逻辑地址B,而A、B属于不同的页面,则有可能产生两次中断)

地址变换机构

请求分页管理方式&页面置换算法_第5张图片
请求分页管理方式&页面置换算法_第6张图片

注意

  • 在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是:查快表(未命中)一一查慢表(发现未调入内存)----调页(调入的页面对应的表项会直接加入快表)----查快表(命中)一访问目标内存单元

总结思维导图

请求分页管理方式&页面置换算法_第7张图片

页面置换算法

知识总览思维导图

请求分页管理方式&页面置换算法_第8张图片

最佳置换算法(OPT)

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

先进先出置换算法 (FIFO)

  • 先进先出置换算法(FIFO):每次选择淘汰的页面最早进入内存的页面
  • 实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。队列的最大长度取决于系统为进程分配了多少个内存块。
  • 横着看,谁最多就将谁换出
    请求分页管理方式&页面置换算法_第10张图片

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

  • 最近最久未使用置换算法(LRU, least recently used):每次淘汰的页面是最近最久未使用的页面
  • 实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t.当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。
    在这里插入图片描述
  • 该算法的实现需要专门的硬件支持,虽然算法性能好但是实现困难,开销大

请求分页管理方式&页面置换算法_第11张图片

时钟置换算法( CLOCK)

  • 最佳置换算法性能最好,但无法实现;先进先岀置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。
  • 时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,Not Recently Used)
  • 简单的 CLOCK算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1.当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换岀;如果是1,则将它置为0,暂不换岀,继续检査下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的 CLOCK算法选择一个淘汰页面最多会经过两轮扫描

改进型的时钟置换算法

  • 简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存
  • 因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。
  • 为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1,1)表示一个页面近期被访问过,且被修改过。

算法规则:将所有可能被置换的页面排成一个循环队列

  • 第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  • 第二轮:若第一轮扫描失败,则重新扫描,査找第一个(0,1)的帧用于替换。本轮将所有扫描过的帧访问位设为0
  • 第三轮:若第二轮扫描失败,则重新扫描,査找第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  • 第四轮:若第三轮扫描失败,则重新扫描,査找第一个(0,1)的帧用于替换。
  • 由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描

总结思维表格

请求分页管理方式&页面置换算法_第12张图片

  • 掌握各个算法的算法规则以及优缺点
  • 手动模拟算法进行流程

你可能感兴趣的:(#,内存管理,OS)