连续内存分配:压缩式与交换式碎片整理
- 压缩式碎片整理:调整内存中程序的位置
- 交换式碎片整理:从主存放入硬盘
非连续内存空间份分配
优点:
- 支持共享代码和数据
- 支持动态加载和动态链接
- 更好内存利用和管理
- 一个程序物理地址空间是飞连续的
缺点:
- 虚拟内存与物理内存转换的开销(硬件方法、软件方法)
两种硬件方案
-
分段
段号+段内地址 -
分页
划分物理内存至固定大小的帧:帧号+帧内偏移
划分逻辑地址空间至相同大小的页
建立页表快表 -
页寻址机制:
- 页映射到帧
- 页是连续的虚拟内存
- 帧是非连续的物理内存
- 不是所有的页都有对应的帧
物理地址计算:
逻辑地址计算:
地址转换实例:
TLB快表
缓存近期访问的页帧转换表项
- TLB使用关联内存实现,具备访问性能
- 如果TLB命中,物理页号可以很快被获取
- 如果TLB未命中,对应的表项被更新到TLB中
多级页表:
- 将逻辑地址分块,每块对应二级页表
- 同样推广出多级页表
- 优点:逻辑地址对应的物理地址不存在的话不必占用空间
- 缺点:时间换空间,查找效率低,但由于TLB存在可以一定程度缓解
反向页表
- 只与物理内存大小相关,与逻辑地址大小无关
- 与页表相反,物理地址帧号作为索引,逻辑地址页号作为值
虚拟内存
覆盖技术:
DOS时程序内存不足常采用技术
- 将程序必要或常用部分代码或数据常驻内存
- 可选部分或不常用部分放在特他程序模块,平时放在外存中需要时才装入内存
- 不存在调用关系的模块不必同事装入内存
交换技术:
操作系统透明完成,以程序为单位
虚存技术:
像覆盖技术一样,不是把程序所有内容都放入内存,但由操作系统来完成无需程序员干涉
像交换技术一样,由操作系统自动进行内存外存数据交换
程序的局部性原理:
- 时间局部性:一条指令的一次执行和下一次执行,一个数据的一次访问和下一次访问都集中在一个较短的时间时期内
- 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域内
程序的局部性可以使操作系统虚存的效果更好
缺页异常:
当程序访问已转入外存的内存数据时会产生却也异常,将通知操作系统导入内存并重新执行
虚拟内存基本特征:
- 大的用户空间
- 部分交换
- 不连续性
虚拟页式内存管理
- 驻留位:表示该页是在内存还是在外存,1表示在内存,0表示在外存
- 保护位:表示允许对该页做何种类型访问,只读 可读写 可执行等
- 修改位:表示此页在内存中是否被修改过,被写(修改)过置1,被写过表示内存与虚存不同,决定是否被倒回硬盘虚存
- 访问位:如果该页面是否被访问过,包括读和写操作,用于页面置换算法