5.2 请求分页存储管理方式
L29
学习目标
请求分页在基本分页基础上增加状态位、访问字段和外存地址等页表项,配合缺页中断机构实现按需调页,并需考虑物理块分配与页面调入策略。
- 请求分页的硬件支持:页表机制(增加状态位、访问字段、外存地址)、缺页中断机构、地址变换机构。
- 内存分配:最小物理块数(保证进程正常运行的最少块数)和最大物理块数(受物理内存限制)。
- 页面调入策略:预调页策略(按预测提前调入)和请求调页策略(缺页时才调入)。
- 缺页中断处理:缺页→阻塞→调页→唤醒,其中调页可能需要置换已有页面。
原理 · 深入理解
5.2 请求分页存储管理方式
本节概览:先建立「请求分页存储管理方式」的框架,再依次展开下列小节。
- 请求分页中的硬件支持
- 请求分页中的内存分配
- 页面调入策略
5.2.1 请求分页中的硬件支持
请求分页地址变换机构在分页系统地址变换机构基础上,为实现虚拟存储器增加产生和处理缺页中断、从内存换出一页等功能形成。
缺页中断机构
- 在指令执行期间产生和处理中断信号
- 一条指令在执行期间可能产生多次缺页中断
地址变换机构
请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,为实现虚拟存储器,再增加了某些功能所形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等。
5.2.2 请求分页中的内存分配
考虑优先权的分配算法照顾重要紧迫作业尽快完成,为其分配较多内存空间。
通常将可供分配物理块分两部分:一部分按比例分给各进程,另一部分按优先权分配,为高优先进程增加份额。
重要实时控制系统可能完全按优先权分配物理块。
内存分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略。
1) 固定分配局部置换(Fixed Allocation,Local Replacement) 2) 可变分配全局置换(Variable Allocation,Global Replacement) 3) 可变分配局部置换(Variable Allocation,Local Replacement)。
物理块分配算法
在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法。
- 平均分配算法,即将系统中所有可供分配的物理块平均分配给各个进程
- 按比例分配算法,即根据进程的大小按比例分配物理块。如果系统中共有n个进程,每个进程的页面数为Si, 则系统中各进程页面数的总和为:
又假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为bi可由下式计算: 这里,bi应该取整,它必须大于最小物理块数。
(3) 考虑优先权的分配算法。 在实际应用中,为了照顾到重要的、紧迫的作业能尽快地完成,应为它分配较多的内存空间。 通常采取的方法是把内存中可供分配的所有物理块分成两部分: 一部分按比例地分配给各进程; 另一部分则根据各进程的优先权进行分配,为高优先进程适当地增加其相应份额。在有的系统中,如重要的实时控制系统,则可能是完全按优先权为各进程分配其物理块的。
5.2.3 页面调入策略
访问页面未在内存(存在位为0)时向CPU发缺页中断,中断处理程序保留CPU环境、分析原因后转入缺页中断处理。
设进程逻辑空间n页、分配物理块m(m≤n),访问成功次数S、失败次数F,总访问次数A=S+F,缺页率=F/A。
为使进程正常运行须事先将要执行部分的页面调入内存。调入策略涉及何时、从何处、如何调入。
- 预调页策略:预测不久将访问的页面,提前调入
- 请求调页策略:运行中遇到缺页时才调入
从何处调入页面取决于系统对换区空间情况。
- 对换区空间足够:全部从对换区调入,提高调页速度
- 对换区不足:不会修改的文件直接从文件区调入;可能修改部分换出时调到对换区,以后从对换区调入
- UNIX方式:结合文件区与对换区特点调入
缺页中断处理时还需考虑置换代价:未修改的页面可直接放弃,修改过的页面必须保存,两种情况的处理时间不同。
设被置换页面被修改的概率为 β,修改时缺页中断时间为 ta,未修改时为 tb,则缺页中断处理时间 t = β×ta + (1-β)×tb。
做 · 交互动画
- 交互动画复习;写三句「虚存理论→MCU 实践」对照。
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
- 用交互动画走完访问串,对照 FIFO、LRU、OPT 的缺页次数。
请求分页存储管理方式
thrashing
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能向同伴解释为何第五章几乎全是动画课。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
- 能用工作集解释为何不能无限多任务。
- 能指出 FIFO 的一个缺陷。
- 能按顺序列出缺页处理步骤。
延伸思考
- 若未来板卡带完整 MMU,哪一课应首先改成实验?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
- MCU 上「抖动」更可能表现在什么资源(栈/堆)?
- 固件「覆盖层 overlay」与置换算法像不像?