操作系统中的分页
分页是一种内存管理方案,无需连续分配物理内存。该方案允许进程的物理地址空间不连续。
- 逻辑地址或虚拟地址(以位表示):由 CPU 生成的地址
- 逻辑地址空间或虚拟地址空间(以字或字节表示):程序生成的所有逻辑地址的集合
- 物理地址(以位表示):内存单元上实际可用的地址
- 物理地址空间(以字或字节表示):与逻辑地址对应的所有物理地址的集合
例子:
- 如果逻辑地址 = 31 位,则逻辑地址空间 = 2 31字 = 2 G 字 (1 G = 2 30 )
- 如果逻辑地址空间 = 128 M 字 = 2 7 * 2 20字,则逻辑地址 = log 2 2 27 = 27 位
- 如果物理地址 = 22 位,则物理地址空间 = 2 22字 = 4 M 字 (1 M = 2 20 )
- 如果物理地址空间 = 16 M 字 = 2 4 * 2 20字,则物理地址 = log 2 2 24 = 24 位
从虚拟地址到物理地址的映射由作为硬件设备的内存管理单元 (MMU) 完成,这种映射称为分页技术。
- 物理地址空间在概念上分为许多固定大小的块,称为帧。
- 逻辑地址空间也被分成固定大小的块,称为pages 。
- 页面大小 = 帧大小
让我们考虑一个例子:
- 物理地址 = 12 位,然后物理地址空间 = 4 K 字
- 逻辑地址 = 13 位,然后逻辑地址空间 = 8 K 字
- 页大小 = 帧大小 = 1 K 字(假设)
CPU产生的地址分为
- 页码(p):表示逻辑地址空间或页码中的页所需的位数
- 页偏移量(d):表示逻辑地址空间的页或页大小中的特定字所需的位数或页或页偏移量的字数。
物理地址分为
- 帧编号(f):表示物理地址空间或帧编号的帧所需的位数。
- 帧偏移(d):表示物理地址空间的帧或帧大小或帧或帧偏移的字号所需的特定字的位数。
页表的硬件实现可以通过使用专用寄存器来完成。但是页表寄存器的使用只有在页表很小的情况下才能令人满意。如果页表包含大量条目,那么我们可以使用 TLB(翻译后备缓冲区),这是一种特殊的、小型的、快速查找硬件缓存。
- TLB 是关联的高速存储器。
- TLB 中的每个条目由两部分组成:标签和值。
- 使用此内存时,将同时将一个项目与所有标签进行比较。如果找到该项目,则返回相应的值。
主存访问时间 = m
如果页表保存在主存中,
有效访问时间 = m(对于页表) + m(对于页表中的特定页)