虚拟内存基本概念

操作系统[系统学习九]

传统存储管理方式的特征、缺点

操作系统[系统学习九]

  • 一次性 : 作业必须一次性全部装入内存才能运行
    • 作业很大时, 无法全部装入内存, 导致大作业无法运行
    • 当大量作业要求运行时, 由于内存无法容纳所有作业, 因此只有少量作业可以运行, 导致并发度下降
  • 驻留性 : 一旦作业被装入内存, 就会一直驻留在内存中, 直至作业运行结束.
    • 事实上, 在一个时间段内, 只需要访问作业的一小部分就可以正常运行 ,这就导致了内存中驻留了大量暂时用不到的数据, 浪费了宝贵的系统资源

局部性原理

  • 时间局部性原理 : 一个程序在执行过程中如果使用了某条指令, 不久将来还会再次使用这条指令. 如果访问了某个的数据, 不久将来还会访问该数据 (因为程序中存在大量循环)
  • 空间局部性 : 一旦程序访问了某个存储单元后, 不久之后, 该存储单元附近的存储单元也可能被访问. (因为很多数据 和 指令在内存中是连续存储)

高速缓冲技术 : 将近期会频繁访问的数据放入更高速的存储器中, 暂时不用的数据放在更低速的存储器中

操作系统[系统学习九]

虚拟内存的定义和特征

  • 基于局部性原理, 在程序装入时, 将程序中很快会被使用到的部分先装入内存, 暂时不用的部分留在外存, 就可以让程序运行起来

  • 运行过程中, 当所需要的信息不存在时, 再让操作系统从外存中把相关信息调入内存, 然后继续执行

  • 如果内存空间不够, 操作系统将内存中暂时用不到的数据调出到外存

  • 在操作系统管理下, 用户看来似乎有一个比实际内存大得多的内存(因为可以运行比实际内存大很多的作业), 即虚拟内存

    • 虚拟内存: 操作系统虚拟性的一个体现, 实际的物理内存没有改变, 在逻辑上进行了扩充
  • 虚拟内存的最大容量是计算机的地址结构确定的(CPU寻址范围)

  • 虚拟内存的实际容量 = min(内外存容量之和, CPU寻址范围)

操作系统[系统学习九]

  • 特征
    • 多次性(传统一次性) : 作业无需一次性全部装入内存, 而是可以分多次调入
    • 对换性(传统驻留性) : 可以在作业运行过程中, 不用的作业数据, 需要的数据调入
    • 虚拟性 : 逻辑上扩充了内存容量, 用户看到的内存容量远大于实际容量

如何实现虚拟内存技术

  • 虚拟内存技术允许将一个作业多次调入调出内存, 如果采用传统的连续存储, 每次调入调出都需要保证和上次一调入有一段相连的足够的空间, 不方便. 因此虚拟内存的实现需要建立在非连续存储的管理方式上

操作系统[系统学习九]

总结

操作系统[系统学习九]

请求分页管理方式

  • 请求分页存储管理方式 是在 基本分页存储管理方式 上进行扩展, 增加了 虚拟内存技术
  • 请求分页存储管理方式的不同
    • 程序执行过程中, 当所访问的信息不存在时, 有操作系统负责将外存中相关信息调入内存, 然后继续执行程序 (页面缺失, 请求调页)
    • 程序执行过程中,如果内存空间不够, 有操作系统负责将内存中暂时用不到的信息调出到外存 (内存不够, 页面置换)

页表机制

  • 为了实现请求调页过程中, 操作系统需要知道每个页面是否已经被调入内存, 如果没被调入, 需要知到它们在外存中存放的位置
  • 为了实现页面置换功能, 操作系统需要通过某些指标决定调出哪个页面 : 有的页面修改过, 就需要将外存中的就数据覆盖; 有的页面没有修改过, 就不用浪费时间写会外存. 因此操作系统需要记录各个页面的修改信息

操作系统[系统学习九]

缺页中断机构

操作系统[系统学习九]

  • 缺页中断是由于当前执行的指令想要访问的目标页面未被调入内存而产生的, 属于内中断
  • 一条指令执行期间, 可能发生多次内中断 (因为一条指令可能需要访问多个页面 copy a to b, 如果数据a, b属于不同的页面, 就有可能发生两次中断)
  • 中断
    • 内中断 (CPU内部, 当前执行的指令)
      • 陷入 : 有意为之的异常, 系统调用
      • 故障 : 由错误条件产生, 可以被系统修复的. 如 缺页中断
      • 异常 : 有错误条件产生, 不可以被系统修复. 如 除以0
    • 外中断 (CPU外部)
      • I/O操作
      • 人为操作

地址变换机构

操作系统[系统学习九]
操作系统[系统学习九]
操作系统[系统学习九]

总结

操作系统[系统学习九]

页面置换算法

  • 当内存空间不够使, 进行选择, 将哪一个页面换到外存

操作系统[系统学习九]

最佳置换算法(OPT)

  • 最佳置换算法(OPT, optimal) : 每次选择以后永不使用或者在最长时间内不再被访问的页面进行置换, 保证最低的缺页率
  • 实际无法实现, 因为只有进程执行过程中才知道下一个访问的页面是什么, 操作系统无法提前预判页面访问序列
    操作系统[系统学习九]

先进先出置换算法(FIFO)

  • 每次置换最早进入内存的页面
  • 实现方法 : 把调入的页面根据调入顺序排成一个队列, 需要置换页面时, 选择队头页面即可. 队列的长度取决于分配的内存块

操作系统[系统学习九]

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

  • least recently used : 每次置换最久未被使用的页面
  • 实现方法 : 每个页表项增加一个字段, 用来记录该页面自上次访问以来所经历的时间t, t值越大, 说明越久未被访问, 就被置换.

操作系统[系统学习九]

时钟置换算法(CLOCK)

  • OPT 性能最好, 无法实现
  • FIFO 实现简单, 性能差, 但是有Belady异常
  • LRU 性能好, 最接近OPT, 但是实现困难, 需要特殊硬件支持
  • 时钟置换算法是一种开销和性能均衡的算法, (也称 CLOCK算法, 最近未使用算法, NRU, Not Recently Used)

简单的CLOCK算法

操作系统[系统学习九]

改进的CLOCK算法

操作系统[系统学习九]

总结

操作系统[系统学习九]

页面分配策略

操作系统[系统学习九]

驻留集

  • 请求分页存储管理系统中, 给进程分配的物理块的集合

    • 虚拟技术中, 驻留集大小一般小于进程的总大小
    • 驻留集过小 : 会导致频繁缺页, 系统花费大量时间处理缺页异常, 实际用于进程推进时间少
    • 驻留集过大 : 并发度下降, 资源利用率低
  • 固定分配 : 操作系统为每一个进程分配一个固定大小的驻留集, 运行期间不可变

  • 可变分配 : 操作系统先为进程分配一定大小的驻留集, 运行期间根据需要适当增加和减少.

  • 局部置换 : 缺页时, 操作系统只会置换该进程的页面

  • 全局置换 : 缺页时, 操作系统会将空闲的页框分配给该页面, 也可以置换别的进程的页面 (置换除本进程的 未锁定的页面)

操作系统[系统学习九]

页面分配、置换策略

操作系统[系统学习九]

调入页面的时机

操作系统[系统学习九]

从何处调页

操作系统[系统学习九]
操作系统[系统学习九]
操作系统[系统学习九]

抖动(颠簸)现象

操作系统[系统学习九]

工作集

操作系统[系统学习九]

总结

操作系统[系统学习九]

相关文章:

  • 2021-08-31
  • 2021-11-07
  • 2021-08-16
  • 2021-07-12
  • 2021-10-05
  • 2021-08-31
  • 2021-12-05
猜你喜欢
  • 2022-12-23
  • 2021-11-02
  • 2021-06-05
  • 2021-12-26
  • 2021-05-31
  • 2022-01-06
  • 2021-05-23
相关资源
相似解决方案