文章目录
内存管理方式
- 重定位
- 分段
- 分页
- 虚拟存储
连续内存分配
内存分配方法
- 最先匹配策略
- 最佳匹配策略
- 最差匹配
碎片整理
- 紧凑
- 分区兑换
伙伴系统
非连续内存分配
- 设计目标:提高内存利用效率和管理灵活性
- 允许一个程序使用非连续物理空间
- 允许共享代码和数据
- 支持动态加载和动态链接
非连续内存分配的硬件辅助机制
- 段式存储:比较大
- 页是存储:比较小,块
段式存储管理
段地址空间
- 子代码段
- 子模块代码段
- 公用库代码段
- 堆栈段(stack)
- 堆数据(heap)
- 初始化数据段
- 符号表等
段访问机制
-
段的概念
- 访问方式和存储数据等属性相同的一段地址空间
-
段访问(s,addr)二元组
- 段号,段内偏移
页式存储管理
-
页帧(frame)
- 把物理地址空间划分为基本相同的地址单位
- (f,o),帧号,帧内偏移
-
页面(Page)
- 把逻辑地址空间按相同的大小划分
-
页面到页帧
- 逻辑地址到物理地址的转换
- 页表
- MMU/TLB
-
页式访问性能问题
- 访问一个内存单元需要两次内存访问
- 第一次访问:获取页表项
- 第二次访问:获取数据
- 页表大小可能非常大
- 处理方法
- 缓存
- 间接访问,多级页表
- 访问一个内存单元需要两次内存访问
快表和多级页表
-
快表
- 把近期访问的页表项缓存到CPU
- TLB使用关联存储器,具备快速访问性能
- 如果TLB 命中,物理页表可快速获取
- 如果TLB未命中,对应的表项更新到TLB
- 把近期访问的页表项缓存到CPU
-
多级页表
- 通过间接引用将页号分成K级
- 建立页表“树”
- 通过间接引用将页号分成K级
反置页表
- 页寄存器和反置页表
- 不让页表与逻辑地址空间的大小相对应
- 让页表和物理地址空间的大小相对应
页寄存器
-
每个帧与一个页寄存器关联
- 使用位:此帧是否被进程占用
- 占用页号:对应的页号P
- 保护位:访问方式 W/R
-
优点
- 大小相对物理内存很小
- 与逻辑地址空间大小无关
-
缺点
- 页表信息对调后,需要依据帧号找页号
- 在页寄存器中搜索逻辑地址的页号
反置页表
- 基于hash映射值查找对应页表中的帧号
- 进程标识与页号的hash值, 可能存在冲突
- 页表项中包括保护位,修改位,访问位和存在位
段页式存储
每个段加一级页表
内存共享
通过指向相同的页表基址
虚拟页式存储
在页式存储管理的基础上,增加请求调页和页面置换
- 思路
- 当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行
- 进程在运行时发现有需要的代码或数据不在内存时,向系统发出缺页异常请求
- 操作系统在处理缺页异常时,将外存中相应的页面调入内存,使进程能够继续执行