# 内存管理概念

# 存储器结构

  1. 寄存器
  2. 高速缓存
  3. 主存储器
  4. 硬盘缓存
  5. 固定磁盘
  6. 可移动存储介质

image-20230316153043420

# 进程运行原理

# 用户程序到进程

  1. 编译
  2. 链接
    1. 静态链接
    2. 装入时动态链接
    3. 运行时动态链接
  3. 装入
    1. 绝对装入
    2. 可重定位装入
    3. 动态运行时装入
  4. 两个细节
    1. 逻辑地址与物理地址
    2. 内存保护
  5. 内存扩充的两种方式
    1. 覆盖
    2. 交换

# 连续分配管理方式

# 连续分配的管理方式

# 单一连续分配

  1. 优点
    1. 实现简单
    2. 无外部碎片
    3. 不一定需要内存保护
  2. 缺点
    1. 只能用于单用户、单任务 OS
    2. 有内部碎片
    3. 存储器利用率低

# 固定分区分配

算法 算法思想 分区排序 优缺点
首次适应 从低地址查找合适空间 地址递增排列 综合性能最好,开销小,,不需要(对空闲分区)重排序
最佳适应 优先使用最小空闲空间 容量递增排序 更容易满足大进程需求,小碎片多,开销大,需要重排序
最坏适应 优先使用最大连续空间 容量递减排列 小碎片少,不利于大进程,开销大
临近适应 从上次查找处向后查找 地址递增排列(循环链表) 不用每次从链表头查找,开销小;会使高地址大分区被用完
分区号 大小 起始地址 状态
------ ---- -------- ----
1 4 0 空闲
3 16 13 空闲
  1. 优点:
    1. 实现简单
    2. 无外部碎片
  2. 缺点
    1. 较大用户程序时,需要采用覆盖技术,降低了性能
    2. 会产生内部碎片,利用率低

# 动态分区分配

# 非连续分配管理方式

# 基本分页存储管理方式

将内存分为大小相等的分区,页框 / 页帧 / 内存块 / 物理块;页框号 / 页号从 0 开始,OS 以页框为基本单位分配内存

# 页表

image-20230319145406126

# 基本地址变换机构

  1. 物理地址 =(页号 -> 块号)+ 偏移量
  2. 页号 P = 逻辑地址 A / 页面长度 (大小 L
  3. 偏移量 W = 逻辑地址 A % 页面长度 L
  4. 页表管理中地址空间是一维的
  5. 每次访问都需要地址转换,必须足够快
  6. 页表不能太大,会降低内存利用率

# 具有快表的地址变换结构

  1. 直接将页号与快表页号比较
  2. 匹配成功,取块号 + 偏移量形成地址
  3. 匹配失败,访问主存页表,并同步到快表

image-20230319152757945

# 二级页表

  1. 将逻辑地址拆分成三部分
  2. 从 PCB 中读取页目录表开始地址
  3. 根据一级页表查出二级页表位置
  4. 根据二级页表查出内存块号,加偏移量计算物理地址

# 基本分段存储管理方式

# 分段

# 段表

# 地址变换机构

# 段的共享与保护

# 段页式管理方式

  1. 先分段,再分页
  2. 一个进程对应一个段表
  3. 一个段表项对应一个页表
  4. 一个页表对应多个物理块

image-20230319161831253

# 虚拟内存管理

# 虚拟内存的概念

具有请求调入和置换功能,从逻辑上对内存容量加以扩充的一种存储器系统

  1. 局部性原理
    1. 时间局限性
    2. 空间局限性
  2. 虚拟内存的特征
    1. 多次性
    2. 对换性
    3. 虚拟性

# 虚拟内存的实现

  1. 请求分页存储管理
  2. 请求分段存储管理
  3. 请求段页式存储管理

# 请求分页管理方式

# 页表机制

  1. 状态位 P
  2. 访问字段 A
  3. 修改位 M
  4. 外存地址

# 缺页中断结构

  1. 内中断(CPU 内部)
    1. 陷入
    2. 故障
    3. 终止
  2. 外中断(CPU 外部)
    1. I/O 中断请求
    2. 人工干预

image-20230320095738336

# 地址变换结构

  1. 请求调页,判断是否在内存
  2. 可能需要页面置换
  3. 新增 / 修改页表项
  4. 热点表项同步到快表

image-20230320095928082

# 页面置换算法

# 最佳置换算法 ORT

每次选择淘汰最不可能再次被使用的页面(无法实现)

# 最久最近置换算法 LRU

保证时间和距离上的公平,每次选择淘汰最久最近未使用的页面,需要硬件支持,开销大

# 先进先出置换算法 FIFO

保障顺序上的公平:每次选择淘汰最早进入内存的页面(Belady 异常,性能差)

# 时钟置换算法 NRU

保障性能开销均衡:为页面设置访问位(0/1),并链接成循环队列,进程访问页面后置为 1,淘汰时为 1 置为 0 并跳过,为 0 时淘汰(最多扫描两轮)

# 改进型时钟置换算法

额外考虑是否修改,保障最少 I/O 操作:增加修改位(0/1),第一轮找(0,0),第二轮找(0,1)并修改访问位为 0,第三轮找(0,0),第四轮找(0,1)

image-20230320102904006

# 页面分配策略

# 驻留集(驻留在主存中页面数)大小

  1. 分配空间小,进程数量多,CPU 时间利用效率高
  2. 进程在主存中页数少,错页率就高
  3. 进程在主存页数多,错页率并无明显改善

# 页面分配策略

  1. 固定分配局部置换
  2. 可变分配全局置换
  3. 可变分配局部置换

# 调入页面的时机

# 预调入策略

  1. 一次性调入若干相邻页面
  2. 多用于进程首次调入

# 请求调页策略

  1. 运行时发现缺页时调入
  2. I/O 开销较大

# 从何处调页

  1. 系统拥有足够的对换区空间
  2. 系统缺少足够的对换区空间
  3. UNIX 方式