• 约 7 分钟

操作系统·内存管理

内存管理概念

内存管理的基本原理和要求

  • 内存管理
  • 主要功能

程序的链接与装入

  • 链接方式
    • 静态链接
    • 装入时动态链接
    • 运行时动态链接
  • 装入方式
    • 绝对装入
    • 可重定位装入(静态重定位)
      • 在装入时一次性完成重定位
      • 需完整装入
      • 无法动态分配内存
    • 动态运行时装入(动态重定位)
      • 把相对地址的修改推迟带真正运行的时候进行,需要重定位寄存器的支持
      • 可部分装入
      • 可不连续分配内存
      • 可动态分配内存
      • 便于共享程序段

逻辑地址与物理地址

进程的内存映像

  • 代码段:只读的,可以被多个进程共享
  • 数据段:包括全局变量和静态变量
  • PCB
  • 堆:动态分配的变量
  • 栈:用来实现函数调用

内存保护

  • 目的:防止进程越界访问内存
  • 方式
    • CPU设置上、下界限寄存器
    • 重定位寄存器(基地址寄存器)和界地址寄存器(限长寄存器)配合

内存共享

  • 可重入代码(纯代码)是只读的

内存分配与回收

  • 单一连续分配
  • 固定分区分配
  • 动态分区分配
  • 页式存储管理(离散分配方式)

连续分配管理方式

  • 单一连续分配
    • 简单、无外部碎片
    • 只适用于单用户、单任务;有内部碎片存储器利用率极低
  • 固定分区分配
    • 分区大小相等
    • 分区大小不等
    • 存在两个问题
  • 动态分区分配
    • 维护一个空闲分区表(或链)
    • 分配策略
      • FF:最简单,最好
      • NF:内存空间小碎片,比FF要差
      • BF:性能很差,产生最多的外部碎片
      • WF:导致没有大内存块,性能也非常差

基本分页存储管理

基本概念

  • 页面和页面大小
    • 页(页面,Page)
    • 页框(页帧,Page frame)
    • 块(盘块,Block)
  • 逻辑地址结构([页号P|页内偏移量W])
    • 页号P
    • 页内偏移量W
  • 页表
    • 页号(隐含)
    • (物理)块号
    • 页表一般存放在PCB中
  • 物理地址:逻辑地址中的W和页表中的块号共同组成

基本地址变换机构

  • 是一组硬件机构
  • 页表寄存器(PTR)
    • 记录进程页表的起始地址和页表长度(页表中有多少页)
    • 进程运行时,将PCB中的信息放在PTR中
  • 变换过程
    • P,W
    • 越界检测
    • 取页表项
    • 计算物理地址
  • 页面多大合适

具有快表的地址变换机构

  • 快表(相联存储器,Translation Lookaside Buffer,TLB)
    • 并行能力
    • 高速缓冲存储器(不是内存)
    • 每次切换进程都需要清空TLB
    • 专门用于存页表项
  • 变换过程

两级页表

  • 二级页表(页目录表)
  • 外层页表/顶级页表
  • 两级页表的逻辑地址格式
  • 需要注意的几个细节
    • 页表大小不得超过一个页面
    • 访存次数

基本分段存储管理

  • 分段
  • 段表
  • 地址变换机构
  • 段的共享与保护

段页式管理

虚拟内存管理

虚拟内存的基本概念

  • 传统存储管理方式的特征
    • 一次性
    • 驻留性
  • 局部性原理
  • 虚拟存储器的定义和特征
    • 定义
    • 特征
      • 多次性
      • 对换性
      • 虚拟性
  • 虚拟内存技术的实现
    • 内存管理方式
      • 请求分页存储管理
      • 请求分段存储管理
      • 请求段页式存储管理
    • 硬件支持
      • 一定容量的内存和外存
      • 页/段表机制
      • 中断机制
      • 地址变换机构

请求分页管理方式

  • 页表机制
    • 两个基本问题
    • 页表项新增4个字段
      • 状态位P
      • 访问字段A
      • 修改位M
      • 外存地址
  • 缺页中断机构
    • 同样经过中断处理的步骤
    • 特殊之处
      • 指令执行期间产生中断信号,属于内部异常
      • 一条指令可能产生多次缺页中断
  • 地址变换机构

页框分配

  • 驻留集大小
    • 驻留集
    • 大小考虑因素
  • 内存分配策略(分配和调整驻留集)
    • 固定分配局部置换
    • 可变分配全局置换
    • 可变分配局部置换
  • 固定分配
    • 平均分配
    • 按比例分配
    • 优先权分配
  • 调入页面的时机
    • 预调页策略
    • 请求调页策略
  • 从何处调入页面
  • 如何调入页面

页面置换算法

  • OPT
  • FIFO
  • LRU
  • CLOCK
    • 简单CLOCK
    • 改进型CLOCK

抖动和工作集

  • 抖动(颠簸)
    • 定义
    • 根本原因
      • 系统中同时运行的进程太多
  • 工作集

内存映射文件

  • 目的
    • 方便读写
    • 方便通信

虚拟存储器性能影响因素

  • 页面大小
    • 大
      • 缺页率低、碎片多、页表短
    • 小
      • 缺页率高、碎片少、页表长
  • 驻留集
    • 小
      • 缺页率高 抖动
    • 中
      • 缺页率低
    • 很大
      • 改善不明显
  • 页面置换算法
    • 应采用LRU、CLOCK等
  • 写磁盘频率
    • 通过建立待写链表 批量写入
  • 程序局部化程度
    • 高
      • 缺页率低
    • 低
      • 缺页率高

地址翻译

分段、分页管理的对比

(1)页是信息的物理单位。分页的主要目的是提高内存利用率。分页是透明的、一维的 (2)段是信息的逻辑单位。主要目的是更好地满足用户需求。分段需要显式指令。分段是二维的。分段更容易实现信息的共享与保护。

分页、分段优缺点分析

优点缺点
分页管理内存空间利用率高,不会产生外部碎片,只会有少量内部碎片不方便按逻辑模块实现信息共享&保护
分段管理很方便按照逻辑模块实现信息共享和保护如果段长过大,为其分配很大的连续空间会很不方便,段式管理会产生外部碎片

局部性原理

时间局部性

空间局部性

林威
林威 咖味十足的软件工程师