“工作集窗口给出“活跃需求”的可计算定义,并区分引用历史与实际驻留。局部与全局替换用同一12步访问复算跨进程干扰;抖动与负载控制再把缺页数换成声明成本下的历时,并检查减少活跃进程后是否真的释放…”
一个进程访问新页时,应该只淘汰自己的旧页,还是也能拿走其他进程的帧?页框所有权可以保持正确,另一进程的性能却仍被影响。页框分配理路物理页分配与安全回收Physical page allocator · Page frame free list把页框所有权、空闲链、发布前清零和最后使用者释放串成分配协议,解释它与用户堆对象分配的不同粒度。的安全机制之外,还需要规定替换的候选范围。
形式陈述
先固定候选域,再选其中最旧的一页
本页从MEM-16中拿出4个可替换帧,其余12帧不参加实验。P和Q的页互不共享、只读、等大;引用按给定顺序执行。访问的页不在驻留集合时记一次缺页,调入后才继续下一项;忽略I/O耗时、脏页写回、预取和并发竞态。每次比较都从空驻留集独立重放。
全局替换允许缺页进程在全部4个帧中选牺牲页;空闲帧优先,满后在全体驻留页中淘汰最久未访问者。局部替换给P、Q各2帧固定配额;某进程用满自己的2帧后,只能淘汰自己的页,不能借用另一份配额,即使另一进程暂时不用。
两者都使用分页问题理路Paging 问题Paging problem在容量 k 的缓存中在线服务页面请求,并以缺页次数计成本。中的LRU规则作为候选域内部的工具:每次命中或调入都把该页移到“最近访问”端,满时删除另一端最旧页。比较的变量是候选域与配额,不是把一种LRU和另一种随机替换混比。局部策略也可以用Clock,全局策略也可以用别的排序;这些词本身不指定LRU。
直觉
一次扫描可能把别人的热页推远
P反复用a、b;Q随后扫描此前没用过的z、w、u、v。全局LRU只看全机最近顺序,Q每访问一张新页,都可能让P的a、b显得更旧。即使P下次回来马上还要用它们,过去的全局顺序也不知道这个未来。
固定局部配额把影响限制在本进程内部。Q的扫描会反复替换自己的两帧,P的a、b可留在P的两帧中。代价是配额不能及时借给更需要空间的进程;隔离和共享不是同一个优化目标。
例子与边界
十二步轨迹,逐一交出受害者
使用交错序列
Pa, Pb, Qx, Qy, Pa, Pb, Qz, Qw, Qu, Qv, Pa, Pb。
下表“缺页→某页”表示缺页且淘汰该页;“缺页→空”表示使用空闲帧。局部行分别维持各进程自己的LRU顺序。
| 步 | 引用 | 全局4帧 | 局部P2+Q2 |
|---|---|---|---|
| 1 | Pa | 缺页→空 | 缺页→空 |
| 2 | Pb | 缺页→空 | 缺页→空 |
| 3 | Qx | 缺页→空 | 缺页→空 |
| 4 | Qy | 缺页→空 | 缺页→空 |
| 5 | Pa | 命中 | 命中 |
| 6 | Pb | 命中 | 命中 |
| 7 | Qz | 缺页→Qx | 缺页→Qx |
| 8 | Qw | 缺页→Qy | 缺页→Qy |
| 9 | Qu | 缺页→Pa | 缺页→Qz |
| 10 | Qv | 缺页→Pb | 缺页→Qw |
| 11 | Pa | 缺页→Qz | 命中 |
| 12 | Pb | 缺页→Qw | 命中 |
前6步两者相同。第6步后,全局从旧到新为 Qx,Qy,Pa,Pb;第8步后变成 Pa,Pb,Qz,Qw;第9、10步Q继续扫描,才把P的页挤出。最后两步P回来,产生额外两次缺页。
全局缺页10次,局部缺页8次。按进程拆开,全局是P4、Q6;局部是P2、Q6。Q的缺页数相同,差异全在P受到的跨进程干扰。只看总数能判断这条轨迹的代价,却看不出是谁承担了它。
反向例子:另一份配额空着也不能借
重新从空状态开始,Q不再访问,P独自执行 a b c 四轮,共12次引用。全局4帧首次装入a、b、c后全命中,总缺页3。局部策略仍只给P2帧;每次回到一个页时,它都已成为上一轮被淘汰者,总缺页12。Q的2帧始终闲置也帮不上忙。
这个例子否定“局部替换总更好”,上一例则否定“全局LRU总更好”。两者的可用信息和限制不同,不能从单进程LRU随容量增大不多缺页的性质,直接推出一个多进程共享政策支配所有局部配额政策。全局容量变大并不等于每个进程获得了稳定的大配额。
固定轨迹比较的范围
这两次实验固定了逻辑访问顺序。真实机器上,缺页会阻塞某进程,从而改变调度次序;不同策略可能生成不同的墙钟交错。要预测真实吞吐,需要把I/O队列、CPU调度与访问生成方式一同建模。本页的10比8是给定引用序列的确定结果,不是任意运行条件下的时间比。
页大小、页身份和共享处理也要一致。若P与Q都映射同一个只读页,不能在一个策略中把它算一帧、另一个策略里算两帧。脏页的淘汰成本不同,则相同缺页次数也未必对应相同I/O量。
推论与应用
配额可以调整,但需补上调整合同
可以设计介于两端的政策:保留每进程最低保障,其余帧共享;或根据工作集估计理路工作集窗口与驻留需求Working-set model · Working set window · 工作集模型用每进程引用窗口定义工作集并逐步更新,区分历史需求、实际驻留与未来预测,处理暂停、窗口选择和共享物理页去重。动态改变目标驻留量。此时“局部”或“全局”的名称不足以复算结果,还要给出何时借帧、由谁让出、何时收回,以及配额变化是否触发立即淘汰。
给P从2帧提高到3帧,能修复第二例的周期缺页,但这第三帧若来自另一活跃进程,可能把压力转移过去。因此系统判断不只需要某个受益进程的缺页曲线,还要知道全体活跃需求是否能装进总预算。
一张完整实验记录至少包括访问序列、每次命中/缺页、被淘汰页、每进程缺页总数和最后驻留集。将本例P热页改为a、b、c而仍只给2帧,是一个有用迁移练习:配额隔离能防止Q夺帧,却不能修复P自己需求大于配额的问题。
参考资料
- Arpaci-Dusseau与Arpaci-Dusseau,OSTEP, Ch.22, §§22.3–22.6及§22.11:页替换比较、访问历史与过载背景。本文两条多进程LRU轨迹及固定配额合同为自定实验,不引用它们为教材原例。
- Peter J. Denning,“The Working Set Model for Program Behavior”,1968,pp.326、330–332,工作集、系统需求与平衡政策:驻留需求与并行活跃集合的联系,供动态配额扩展阅读。