【操作系统】第四章:非连续式内存分布
非连续内存分配优点
- 一个程序的物理地址是非连续的
- 更好的内存利用和管理
- 允许共享代码与数据
- 支持动态加载和动态链接
潜在问题
- 如何建立虚拟地址与物理地址之间的转换
- 软件方案
- 硬件方案
- 分段
- 分页
分段
程序的分段地址空间
- 将逻辑地址空间分成各个块
- 如下图,需要一种运行机制,来使逻辑地址空间与物理地址空间之间有对应的关联
分段寻址方案
两种实现方案:
段寄存器 + 地址寄存器:将段号和段内偏移分开放置
单地址实现方案:将段号和段内偏移放在一起
分页
- 现在CPU主要使用分页方式
分页地址空间
与分段方式相似,同样拥有页号和偏移
不同之处在于分段中段的大小可变,而分页中页的大小固定的
帧(frame)和页(page):
划分物理内存至固定大小的帧:大小是2的幂次方
划分逻辑地址空间至相同大小的页:大小也是2的幂次方
依据逻辑地址的页号到页表中查询出物理地址的帧号
建立方案转化逻辑地址为物理地址(pages to frames)
页的寻址方案
页表
概述
页表其实就是一个大数组,索引代表的是 page_number,索引对应的值存的是 frame_number
- 存在问题:访问一个内存单元需要两次访问内存,存在性能问题
- 一次获取页表项
- 一次用于访问数据
TLB(Translation Look-aside Buffer)
- 缓存近期访问的页帧转换表项
- TLB使用关联内存(速度快容量小)实现,具备快速访问性能
- 如果查到,则物理帧号可以被快速获取
- 如果查不到,就在页表中进行查找然后将内容更新到TLB
二级、多级页表(时间换空间)
- 会增加时间开销
- 省下空间(一级页表中的保留位为0,二级页表就不需要留位置了)
反向页表
- 大地址空间问题:
- 有大地址空间,向前映射页表变得繁琐(5级页表)
- 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对于(虚拟地址空间增长速度快于物理地址空间)
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.