非连续内存分配
非连续分配需要解决的问题
如何实现虚拟地址和物理地址的转换?
- 软件实现(灵活,开销大)
- 硬件实现(够用,开销小)
非连续分配的硬件辅助机制
如果选择非连续分配中的内存分块大小?
- 段式存储管理(segmentation)
- 页式存储管理(paging)
段式存储管理
1,段的概念
- 段表示访问方式和存储数据等
属性相同
的一段地址空间。 - 对应一个连续的内存“块”。
- 若干个段组成
进程
逻辑地址空间。
2,段访问:逻辑地址由二元组(s,addr)表示。
- s 段号
- addr 段内偏移
段页式管理总体框架图(参照《Intel® 64 and IA-32Architectures Software Developer ’s Manual – Volume 3A》3.2 节)
页式存储管理
页帧(帧,物理页面,Frame,Page Frame)
- 把物理地址空间划分为大小相同的基本分配单位。
- 一页大小为2的n次方,如512,4096(常用),8192。
页面(页,逻辑页面,Page)
- 把逻辑地址空间也划分为相同大小的基本分配单位。
- 帧和页的大小
必须
相同。
页面到页帧
- 逻辑地址到物理地址的转换
- 页表(
关键中间人
) - MMU(内存管理单元)/TLB(快表(Translation Look-aside Buffer))
物理内存被划分成大小相等的帧
内存物理地址的表示:二元组(f,o)。
- f 帧号(F位,共有
2^F个帧
) - o 帧内偏移(S位,每帧有
2^S
字节)
物理地址 = f *2^S
+ o
实例(物理)地址计算
实例(逻辑)地址计算
逻辑地址空间的页号是连续的,物理地址空间的帧号不一定连续。
页表关联(中间人)
页表
PTBR(Page Table Base Register)寄存器:存储页表基址
。
页式存储管理机制的性能问题
快表(Translation Look-aside Buffer,TLB)—利用缓存机制(caching)
缓存近期访问的页表项
- TLB使用关联存储(associative memory)实现,具备快速访问性能。
- 如果TLB命中,物理页号可以很快被获取。
- 如果TLB未命中,对应的表项被更新到TLB中。
多级页表—间接访问(Indirection)
P1,P2,P3,P4都作为偏移
,PTBR寄存器作为基址
。
二级页表实例
CR3
寄存器存储着PTBR
寄存器地址。
反置页表
基于Hash映射值查找对应页表项中的帧号。
- 进程标识与页号的Hash值可能有冲突。
- 页表项中包括保护位,修改位,访问位和存在位等标识。
反置页表的Hash冲突(举例)
大地址空间问题?
页寄存器(Page Registers)
页寄存器的优劣
页寄存器中的地址转换
段页式存储管理
在段式存储管理基础上,给每个段加上一级页表。
段页式存储管理中的内存共享
通过指向相同的页表基址,实现进程间的段共享(共用页表)。