4.5 分页存储管理方式
L26
学习目标
OPT/FIFO/LRU/Clock 等;用轨迹比较缺页次数。
- Belady 异常。
- 工程常用近似 LRU。
- 缺页→阻塞→调页→唤醒。
- 对照任务阻塞/唤醒模型。
- 虚存是 OS+硬件协同。
- 本课以原理+动画为主,不在 C5 教学内核实现完整请求页。
- 页是物理管理单位,段是逻辑单位。
- 无 MMU 的 MCU 用「编译期分区」近似。
原理 · 深入理解
4.5 分页存储管理方式
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分段存储管理方式
- 段页式存储管理方式
4.5.1 分页存储管理的基本方法
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
地址结构
分页地址中的地址结构如下:
对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。
4.5.2 地址变换机构
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
具有快表的地址变换机构
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存,采用这种方式将使计算机的处理速度降低近1/2。
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”(Associative Memory),或称为“快表”,在IBM系统中又取名为TLB(Translation Look Aside Buffer),用以存放当前访问的那些页表项。
4.5.3 访问内存的有效时间
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
在引入快表的分页存储管理方式中,通过快表查询,可以直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次内存访问,缩短了进程访问内存的有效时间。但是,由于快表的容量限制,不可能将一个进程的整个页表全部装入快表,所以在快表中查找到所需表项存在着命中率的问题。命中率是指使用快表并在其中成功查找到所需页面的表项的比率。
这样,在引入快表的分页存储管理方式中,有效访问时间的计算公式即为: EAT=а×λ+(t+λ)(1—а)+t=2t+λ—t×а 上式中,λ表示查找快表所需要的时间,а表示命中率,t表示访问一次内存所需要的时间。
可见,引入快表后的内存有效访问时间分为查找到逻辑页对应的页表项的平均时间а × λ + (t + λ)(1 - а),以及对应实际物理地址的内存访问时间t。假设对快表的访问时间λ为20 ns(纳秒),对内存的访问时间t为100 ns,则下表中列出了不同的命中率а与有效访问时间的关系:
4.5.4 两级和多级页表
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
为了方便实现地址变换,在地址变换机构中,同样需要增设一个外层页表寄存器,用于存放外层页表的始址,并利用逻辑地址中的外层页号作为外层页表的索引,从中找到指定页表分页的始址,再利用P2作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号,用该块号P和页内地址d即可构成访问的内存物理地址。
多级页表
对于32位的机器,采用两级页表结构是合适的,但对于64位的机器,采用两级页表是否仍然合适,须做以下简单分析。如果页面大小仍采用4 KB即212 B,那么还剩下52位,假定仍按物理块的大小(212位)来划分页表,则将余下的42位用于外层页号。此时在外层页表中可能有4096 G个页表项,要占用16 384 GB的连续内存空间。
4.5.5 反置页表(Inverted Page Table)
允许进程分散装入不相邻分区可充分利用内存无须紧凑,由此产生离散分配方式。
- 分页存储管理方式
- 分段存储管理方式
- 段页式存储管理方式
地址变换
在利用反置页表进行地址变换时,是根据进程标识符和页号,去检索反置页表。如果检索到与之匹配的页表项,则该页表项(中)的序号i便是该页所在的物理块号,可用该块号与页内地址一起构成物理地址送内存地址寄存器。若检索了整个反置页表仍未找到匹配的页表项,则表明此页尚未装入内存。对于不具有请求调页功能的存储器管理系统,此时则表示地址出错。
对于具有请求调页功能的存储器管理系统,此时应产生请求调页中断,系统将把此页调入内存。
做 · 交互动画
- 用交互动画走完访问串,对照 FIFO、LRU、OPT 的缺页次数。
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
分页存储管理方式
demand-paging
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能指出 FIFO 的一个缺陷。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
- 能按顺序列出缺页处理步骤。
- 能说出虚存依赖的硬件支持。
- 能对比页式与段式的优缺点各一条。
延伸思考
- 固件「覆盖层 overlay」与置换算法像不像?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
- 缺页频率过高会导致什么(预告抖动)?
- 没有缺页中断能否做虚存?