- 连续内存分配的缺点
- 分配给一个程序的物理内存是连续的
- 内存利用率较低
- 有外碎片、内碎片的问题
- 非连续内存分配的优点
- 一个程序的物理地址空间是非连续的
- 更好的内存利用和管理
- 允许共享代码与数据
- 支持动态加载和动态链接
- 非连续内存分配的缺点:
- 如何建立虚拟地址和物理地址之间的转换(硬件方案、软件方案)
- 两种硬件方案
- 分段
- 分页
- 划分物理内存至固定大小的帧(frame):大小是2的幂
- 划分逻辑地址空间至相同大小的页(page):大小是2的幂
- 分页机制性能问题:
- 访问一个内存单元需要2次内存访问:一次用于获得页表项,一次用于访问数据
- 页表可能非常大(如何处理? 缓存 + 间接访问(多级页表))
- TLB
- TLB是一种访问速度比内存快很多的高速缓存(TLB不是内存!)。
- 若快表命中,则直接取出该页对应的帧号,再将帧号和页内偏移组合形成物理地址。(一次访问内存)
- 若快表未命中,则需要访问内存中的页表,找到对应页表项,获得页表项存放的帧号,再将帧号与页内偏移组合形成物理地址。(两次访问内存)
- 多级页表
- 多级页表的访问次数(假设没有快表) --- n级页表访问一个逻辑地址需要n+1次访问内存。
- 分段
- 分段与分页内存管理的区别
- 分段划分的是程序的逻辑地址空间。分段对用户是可见的。
- 分页划分的是物理内存空间。分页对用户是不可见的。
- 页的大小固定,且由系统决定。段的长度不固定,决定于用户编写的程序。
- 分页的用户进程地址空间是一维的。分段的用户进程地址空间是二维的。
- 分段、分页都需要两次访问内存(分段页可以引入快表)。