031-存储管理基础

基本概念

  • 物理地址:CPU 访存时使用的地址

  • 逻辑地址:相对地址,用户编程所用的地址空间

    • 一维逻辑地址

    • 二维逻辑地址:段号 + 段内地址

  • 段式程序设计:将程序分为代码段、数据段、堆栈段

    • 按需调入段,节约内存,扩充主存

  • 主存复用

    • 分区复用

      • 固定/可变尺寸

      • 一个程序(段)占用一个分区

      • 寻址:起始地址 + 偏移量

    • 分页

      • 固定尺寸

      • 一个程序占多个页

      • 通过页表进行映射

  • 存储管理模式

    • 单连续存储管理:一维地址

    • 段式存储管理:二维地址,查段表

    • 页式存储管理:一维地址,查页表(现代操作系统多采用)

    • 段页式存储管理:二维地址,查段表和页表

功能

  • 地址转换:逻辑地址 -> 物理地址

    • 静态重定位:在程序进入内存时转换

    • 动态重定位:在程序运行时转换

  • 分配/去配

  • 主存空间共享

    • 多个进程共享主存资源

    • 多个进程共享主存的某些区域

  • 存储保护:防止干扰

    • 私有主存区:可读可写

    • 公共区:根据授权

    • 非本进程区:不可读写

    • 软硬件协同完成,不允许时产生地址保护异常,交 OS 处理

  • 主存扩充

    • 交换:调出不运行的进程

    • 虚拟:只调入进程部分内容

    • 软硬件协同完成,当 CPU 访问不在主存中的地址时,产生缺页异常,交 OS 调入并重新执行

  • 缺页异常:访问的页面不在主存中

  • 虚拟地址异常:访问的地址不在虚拟地址空间中(越界非法访问)

  • 所以 PPT 又在扯淡

存储器逻辑层次

  • Cache:高速存储器 + 联想存储器 + 地址转换部件 + 替换逻辑

    • 联想存储器:CAM,通过内容反查存储地址,用于 Cache 中检测命中

    • L1:内置,分离数据和指令

    • L2:内置或外置

    • L3:外置,总线改善较设置 L3 更能提升性能

  • 虚拟存储器

    • 基本思想:请求分页,随用随调,主存不足时调出

    • 硬件完成的部分:动态重定位(将虚拟地址转换为物理地址)、存储保护、虚拟地址中断、页面替换

地址转换的硬件支撑

单连续分区存储管理

  • 每个进程占用物理上完全连续的存储区域

单用户连续分区存储管理

  • 主存划分为系统区和用户区

  • 栅栏寄存器:区分两块区域,进行存储保护

  • 静态重定位,硬件实现代价低

  • 适用于单用户单任务操作系统(如 DOS)

固定分区存储管理

  • 支持多个分区

  • 分区数量、大小固定

  • 静态重定位,硬件实现代价低

  • 早期 OS 采用

  • 维护主存分配表:分区号|起始地址|长度|占用标志

固定分区存储管理

可变分区存储管理

  • 固定分区下内存存在浪费

  • 可变分区:根据进程需求动态划分

  • 创建进程时查看是否有足够的空闲分区

    • 若有:分配

    • 若无:等待释放

  • 主存分配表:已分配区情况表&空闲区情况表,起址|长度|标志

内存分配算法

  • 最先适应 First Fit:从头开始,找到第一个满足条件的分区

  • 邻近适应 Next Fit:从上次分配的分区开始,找到第一个满足条件的分区

  • 最优适应 Best Fit:从头开始,找到最小的满足条件的分区

  • 最差适应 Worst Fit:从头开始,找到最大的满足条件的分区

内存零头

  • 内存内零头:固定分区

  • 内存外零头:可变分区,在分配中产生不可用的小分区

  • 最优适应算法:最容易产生内存外零头

  • 任何算法都可能产生内存外零头

最后更新于