𝓝𝓮𝓶𝓸&博客

【操作系统】存储管理

存储管理的基本概念

  • 逻辑地址:用户地址,从零开始编号
    • 一维逻辑地址:(地址)
    • 二维逻辑地址:(段号:段内地址)
  • 主存储器的复用方式
    • 按分区:主存划分为多个固定/可变分区,一个程序占一个分区
    • 按页架:主存划分为多个固定页架,一个程序占多个页架
  • 存储管理的模式
    • 单连续:一维逻辑地址程序,占一个固定/可变分区
    • 段 式:二维逻辑地址程序,占多个可变分区
    • 页 式:一维逻辑地址程序,占多个页架
    • 段页式:二维逻辑地址程序,占多个页架
  • 地址转换:逻辑地址 --> 物理地址
    • 静态重定位:程序装入内存时转换(早期 OS)
    • 动态重定位:CPU 执行时转换,效率考虑需要硬件帮助
  • 虚拟存储器
    • 由于程序的局部性顺序性等,可以考虑只将部分程序调入主存,其他的随用随调
    • 达到了面对程序员主存扩容的目的

单连续分区存储管理

  • 单用户连续分区管理:主存区划分为系统区和用户区,采用静态重定位进行地址转换,一般适用于单用户单任务操作系统(DOS)
  • 固定分区管理:一个程序占一个分区,有主存分配表,容易产生内零头
  • 可变分区管理:按进程内存需求动态分配内存空间,容易产生外零头

页式存储管理

  • 概念:
    • 主存分页架,程序分页。
    • 不同程序页可放在不同主存页架中,不需要连续
    • 页和页架关系由页表维护
    • 用位示图表示主存分配与去配,用进程页表维护进程逻辑完整性
  • 地址:
    • 逻辑地址:页号 + 单元号
    • 物理地址:页架号 + 单元号
  • 快表:
    • 利用 Cache 存放部分页表
    • 同 Cache 缓存内存数据一样,也是相联存储器技术,并且有淘汰策略,具体见《重学计算机 -- 计算机组成原理》
  • 页式虚拟存储
    • 页表:标识位 + 主存块号 + 辅存地址
    • 实现:
      • 查页表,若页在内存,则生成绝对地址
      • 若不在内存,发起缺页中断
      • OS 响应缺页中断,若内存有空闲页架,则从辅存中调入页。更新页表快表
      • 若无空闲页架,先淘汰页,再调入
  • 页面调度算法:
    • 同 Cache 和内存的调度策略,具体参考《重学计算机 -- 计算机组成原理》

其他

  • 段式存储管理:基本不用,略
  • 段页式存储管理:基本不用,略
  • 内存管理单元 MMU:
    • 作用:管理虚拟存储器的硬件控制线路,把虚拟地址映射为物理地址,并提供内存保护,必要时淘汰页面
    • 实现:用一种数据结构 反置页表 IPT

PS:许多年以前,当人们还在使用 DOS 或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块 0 首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人们必须找到更好的办法从根本上解决这个问题。不久人们找到了一个办法,这就是虚拟存储器(virtual memory).虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上。比如对一个 16MB 的程序和一个内存只有 4MB 的机器,操作系统通过选择,可以决定各个时刻将哪 4M 的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个 16M 的程序运行在一个只具有 4M 内存机器上了。而这个 16M 的程序在运行前不必由程序员进行分割。

posted @ 2020-05-31 14:42  Nemo&  阅读(283)  评论(0编辑  收藏  举报