# 内存管理概念
# 存储器结构
- 寄存器
- 高速缓存
- 主存储器
- 硬盘缓存
- 固定磁盘
- 可移动存储介质
# 进程运行原理
# 用户程序到进程
- 编译
- 链接
- 静态链接
- 装入时动态链接
- 运行时动态链接
- 装入
- 绝对装入
- 可重定位装入
- 动态运行时装入
- 两个细节
- 逻辑地址与物理地址
- 内存保护
- 内存扩充的两种方式
- 覆盖
- 交换
# 连续分配管理方式
# 连续分配的管理方式
# 单一连续分配
- 优点
- 实现简单
- 无外部碎片
- 不一定需要内存保护
- 缺点
- 只能用于单用户、单任务 OS
- 有内部碎片
- 存储器利用率低
# 固定分区分配
算法 | 算法思想 | 分区排序 | 优缺点 |
---|---|---|---|
首次适应 | 从低地址查找合适空间 | 地址递增排列 | 综合性能最好,开销小,,不需要(对空闲分区)重排序 |
最佳适应 | 优先使用最小空闲空间 | 容量递增排序 | 更容易满足大进程需求,小碎片多,开销大,需要重排序 |
最坏适应 | 优先使用最大连续空间 | 容量递减排列 | 小碎片少,不利于大进程,开销大 |
临近适应 | 从上次查找处向后查找 | 地址递增排列(循环链表) | 不用每次从链表头查找,开销小;会使高地址大分区被用完 |
分区号 | 大小 | 起始地址 | 状态 |
------ | ---- | -------- | ---- |
1 | 4 | 0 | 空闲 |
3 | 16 | 13 | 空闲 |
- 优点:
- 实现简单
- 无外部碎片
- 缺点
- 较大用户程序时,需要采用覆盖技术,降低了性能
- 会产生内部碎片,利用率低
# 动态分区分配
# 非连续分配管理方式
# 基本分页存储管理方式
将内存分为大小相等的分区,页框 / 页帧 / 内存块 / 物理块;页框号 / 页号从 0 开始,OS 以页框为基本单位分配内存
# 页表
# 基本地址变换机构
- 物理地址 =(页号 -> 块号)+ 偏移量
- 页号 P = 逻辑地址 A / 页面长度 (大小 L
- 偏移量 W = 逻辑地址 A % 页面长度 L
- 页表管理中地址空间是一维的
- 每次访问都需要地址转换,必须足够快
- 页表不能太大,会降低内存利用率
# 具有快表的地址变换结构
- 直接将页号与快表页号比较
- 匹配成功,取块号 + 偏移量形成地址
- 匹配失败,访问主存页表,并同步到快表
# 二级页表
- 将逻辑地址拆分成三部分
- 从 PCB 中读取页目录表开始地址
- 根据一级页表查出二级页表位置
- 根据二级页表查出内存块号,加偏移量计算物理地址
# 基本分段存储管理方式
# 分段
# 段表
# 地址变换机构
# 段的共享与保护
# 段页式管理方式
- 先分段,再分页
- 一个进程对应一个段表
- 一个段表项对应一个页表
- 一个页表对应多个物理块
# 虚拟内存管理
# 虚拟内存的概念
具有请求调入和置换功能,从逻辑上对内存容量加以扩充的一种存储器系统
- 局部性原理
- 时间局限性
- 空间局限性
- 虚拟内存的特征
- 多次性
- 对换性
- 虚拟性
# 虚拟内存的实现
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
# 请求分页管理方式
# 页表机制
- 状态位 P
- 访问字段 A
- 修改位 M
- 外存地址
# 缺页中断结构
- 内中断(CPU 内部)
- 陷入
- 故障
- 终止
- 外中断(CPU 外部)
- I/O 中断请求
- 人工干预
# 地址变换结构
- 请求调页,判断是否在内存
- 可能需要页面置换
- 新增 / 修改页表项
- 热点表项同步到快表
# 页面置换算法
# 最佳置换算法 ORT
每次选择淘汰最不可能再次被使用的页面(无法实现)
# 最久最近置换算法 LRU
保证时间和距离上的公平,每次选择淘汰最久最近未使用的页面,需要硬件支持,开销大
# 先进先出置换算法 FIFO
保障顺序上的公平:每次选择淘汰最早进入内存的页面(Belady 异常,性能差)
# 时钟置换算法 NRU
保障性能开销均衡:为页面设置访问位(0/1),并链接成循环队列,进程访问页面后置为 1,淘汰时为 1 置为 0 并跳过,为 0 时淘汰(最多扫描两轮)
# 改进型时钟置换算法
额外考虑是否修改,保障最少 I/O 操作:增加修改位(0/1),第一轮找(0,0),第二轮找(0,1)并修改访问位为 0,第三轮找(0,0),第四轮找(0,1)
# 页面分配策略
# 驻留集(驻留在主存中页面数)大小
- 分配空间小,进程数量多,CPU 时间利用效率高
- 进程在主存中页数少,错页率就高
- 进程在主存页数多,错页率并无明显改善
# 页面分配策略
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
# 调入页面的时机
# 预调入策略
- 一次性调入若干相邻页面
- 多用于进程首次调入
# 请求调页策略
- 运行时发现缺页时调入
- I/O 开销较大
# 从何处调页
- 系统拥有足够的对换区空间
- 系统缺少足够的对换区空间
- UNIX 方式