内存管理的功能

  • 内存空间的分配与回收
  • 地址转换
  • 内存空间的扩充
  • 存储保护

程序装入和链接

步骤:编译 → 链接 → 装入

  • 程序的链接方式:静态链接、装入时动态链接、运行时动态链接
  • 内存的装入方式:绝对装入、可重定位装入(静态重定位)、动态运行时装入(动态重定位,在执行过程中进行)

内存保护

  • 设置一对上、下限寄存器
  • 利用重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器)进行判断

连续分配管理方式

  • 单一连续分配:有内部碎片
  • 固定分区分配:分区大小相等 / 不等;程序过大放不进分区、内部碎片导致主存利用率低
  • 动态分区分配(可变分区分配):外部碎片,用紧凑(compaction)技术解决

动态分区分配算法:

算法特点
首次适应(First Fit)空闲分区按地址递增排列,每次从低址 开始找
最佳适应(Best Fit)空闲分区按容量递增排列;最容易产生内存碎片,但回收的分区利于再次利用
最坏适应(Worst Fit)空闲分区按容量递减排列
邻近适应(Next Fit)从上次查找位置继续查找

非连续分配管理方式

基本分页存储管理

  • 页面和页面大小:进程中的块称为页(Page),内存中的块称为页框(Page Frame / 页帧),外存直接称为块(Block)
  • 页表:实现从页号到物理块号的地址映射
  • 基本地址变换机构:页表寄存器(PTR)。设页面大小 L、逻辑地址 A、物理地址 E:
    • 页号 P = A / L,页内偏移量 W = A % L
    • 若 P ≥ 页表长度 M,产生越界中断
    • 页表项地址 = 页表始址 F + P × 页表项长度,取出物理块号 b
    • 物理地址 E = b × L + W
  • 具有快表的地址变换机构:高速缓冲存储器快表(相联存储器 TLB),主存中的页表常称为慢表;基于局部性原理
  • 两级页表:顶级页表最多只能有一个页面;如 10 位一级页号 + 10 位二级页号 + 12 位页内偏移(32 位系统)

基本分段存储管理

  • 按程序逻辑分段,段长不固定
  • 地址变换:逻辑地址 A = 段号 S + 段内偏移 W;段表项地址 = 段表始址 F + S × 段表项长度;物理地址 E = 段始址 b + W
  • 段的共享和保护:分段比分页更易于实现共享和保护

段页式管理

  • 地址结构:段号 + 页号 + 页内偏移量
  • 一个进程中段表只有一个,页表可能有多个
  • 段页式管理的地址空间是二维的