3.1 内存管理概念
内存管理功能
- 内存空间分配和回收
- 地址转换
- 内存空间扩充
- 存储保护
程序的装入和链接
- 编译
- 链接
- 静态链接:链接成一个完整可执行程序,不再拆开
- 装入时动态链接:边装入边链接?
- 运行时动态链接:运行时动态链接,方便修改更新和共享
- 装入
- 绝对装入:装入固定位置,仅适用于单道系统
- 可重定位装入:装入时加一个偏移
- 运行时装入:在执行时采取计算物理地址
逻辑地址和物理地址转换
- 地址重定位:将逻辑地址转换成物理地址
内存保护
- 界地址寄存器 与 重定位寄存器
内存替换方式(为节约内存)
- 覆盖
- 对单进程分部分调入内存,并覆盖暂不需要的部分,已弃用
- 交换
- 调入需要的进程,调出部分等待的进程
- 注意点
- 换出的进程须处于空闲状态,I/O 时不能换出
- 仅在内存吃紧时启动交换,否则暂停
内存分配方式
- 连续分配管理方式
- 分区方式
- 单一连续分配
- 固定分区分配
- 动态分区分配
- 分区算法
- First Fit:首次适应算法,通常最简单且最好
- Best Fit:最佳适应算法
- Worst Fit:最差适应算法
- Next Fit:邻近适应算法
- 分区方式
- 非连续分配管理方式
- 分页存储管理方式
- 组成
- 页面和页面大小
- 地址结构
- 页表
- 基本地址变化机构
- 扩展
- 快表
- 多级页表
- 组成
- 分段存储管理方式
- 组成
- 分段
- 段表
- 地址变换机构
- 扩展
- 段的共享和保护
- 组成
- 段页式管理方式
- 一个进程对应一张段表,每个段对应一个页表(也可能是多级页表)
- 分页存储管理方式
3.2 虚拟内存管理
与传统存储管理方式对比
- 传统内存管理
- 一次性
- 驻留性
- 虚拟内存
- 多次性
- 对换性
- 虚拟性
虚拟内存技术实现
- 虚拟内存实现方式
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
- 硬件支持
- 一定容量的内存和外存
- 页表机制或段表机制
- 中断机构
- 地址变换机构
请求分页管理方式
- 页表机制
- 组成
- 状态位 P :用于指示是否已调入内存,程序访问时可以参考
- 访问字段 A :记录本页一段时间内的访问次数,或多久没被访问,供置换算法参考
- 修改位 M :标示是否有修改
- 外存地址
- 组成
- 缺页中断机构
- 访存时,如果目标页不在内存中,则产生缺页中断
- 地址变换机构
页面置换算法
- OPT:最佳置换算法
- 选择之后最长时间不被访问的页面
- FIFO:先进先出置换算法
- 选择最早进的页面换出
- 可能有 Belady异常
- LRU(Least Recently Used):最近最久未使用置换算法
- 性能较好
- CLOCK:时钟置换算法
- 简单时钟置换算法:用一个循环链表将每一页链上,如果有使用则置使用标志为1,剔除时顺当前指针往下找到第一个为0的,且将找到的1置0
- 改进型时钟置换算法:再加一个修改位,优先剔除既没被修改也没被访问的页
页面分配策略
- 术语
- 驻留集:分配给一个进程的物理页
- 抖动:同一页被频繁地换进换出
- 分配策略
- 固定分配局部置换
- 可变分配局部置换
- 可变分配全局置换
- 调入页面时机
- 预调页策略:顺带调入几页
- 请求调页策略:一次只调入请求的一页
- 调入的来源
- 当对换区足够时:先复制文件至对换区,再从对换区调入内存
- 当对换区不足时:只读不改的文件直接调入内存,要修改的文件还得从对换区调入
- UNIX 方式:未运行的页面全在文件区,换出的页面才放对换区
- 工作集模型
- 工作集由固定的历史窗口中不重复的页集决定,驻留集通常需要大于工作集
- 地址翻译
- 由虚拟地址到最终获得对应数据
- 需考虑:TLB,Cache,内存,外存,页表,甚至段表
- 由虚拟地址到最终获得对应数据