内存够不够:六种不同问题,一份可复算记录
“明明还有空闲内存,为什么失败?”“页面全驻留,为什么仍然慢?”两句话都没有给出足够条件。这份终结任务要求把数量、连续性、区域资格、活跃驻留、翻译覆盖和节点位置分别核算,再识别哪项措施真正针对当前限制。
阅读入口与交付物
入口是物理页分配与安全回收和页表转换。先用伙伴分配与分区预算判断能否交付,再读工作集、替换范围和抖动控制。翻译与位置分支是大页覆盖、NUMA放置;进入大页前需要旧TLB页的命中与缺页区分。
最终交付七份结果:空闲块集合,分区请求日志,工作集表,逐步替换轨迹,串行时间账本,TLB标签序列,迁移回本不等式。另写出每份结果的一项失败边界,证明你知道什么时候需要重建模型。
MEM-16是16个编号0至15的256字节教学页框。以下实验是独立重置的快照,不把上题剩余状态自动带入下题。参数只用于教学,不对应一台真实机器配置。
任务一:空闲数量与对齐形状
把16帧全部分配成四个4帧块。先释放起点0与8,再请求8帧;之后释放起点4,再请求8帧。
请列每一步的非空
核对。 四块交付后空闲0;释放0与8后
迁移。 若释放的改为4与8,空闲区间虽连续为
任务二:有4页空闲,却拒绝普通请求
D区有4帧,G区有12帧,初始空闲数
依次执行:普通4页、普通1页、普通1页、普通1页、设备2页、设备1页。对失败写出区域、预算或数量原因。
核对。 成功区依次为G、D、D、无、D、无;空闲对依次为
迁移。 若再要求连续2页,只有计数表足以判断吗?不够,还必须提供该区符合order与对齐的可用块。若逻辑请求3页、伙伴分配实际取4页块,预算也必须扣4;空闲5、保留2时应拒绝,不能按3页需求误判通过。
任务三:窗口不是配额
P引用 a b a c b d d d e,最近4次引用为窗口。在每步完成后列窗口、不同页集合与大小。P暂停一分钟期间没有引用,判断窗口是否自动变空。
核对。 大小为 1,2,2,3,3,4,3,2,2;第6、8、9步集合分别为 {a,b,c,d}、{b,d}、{d,e}。按进程引用次数计时,暂停不推进窗口。大小随窗口宽度非递减,但随时间可以减小。
若P工作集为 {Pa,Pb,S},Q为 {Qc,Qd,S},S是真实共享只读底层页,则联合需求5帧。若两进程只是碰巧都把各自私有页叫S,需求就是6帧。必须给页身份,不能只对虚拟页号字符串去重。
迁移。 改窗口为3,第6步大小为3;它描述历史,不保证第7步不会突然访问新页。
任务四:把跨进程干扰定位到两次淘汰
独立重放 Pa Pb Qx Qy Pa Pb Qz Qw Qu Qv Pa Pb。对照全局4帧LRU与局部P2+Q2,每次列命中、缺页和牺牲页。
核对。 前4步均缺页,5、6均命中。全局7至12步分别淘汰 Qx,Qy,Pa,Pb,Qz,Qw,总缺页10。局部7至10步只淘汰Q的 Qx,Qy,Qz,Qw;最后两次P访问命中,总缺页8。按进程分解,全局P4/Q6,局部P2/Q6。
反向检验。 Q空闲,P访问 a b c 四轮:全局缺页3,固定局部P2缺页12。说明哪份未被使用的配额没有借给P,避免把第一条轨迹的优势夸成普遍支配。
任务五:从缺页数到历时
单进程访问 a b c 四轮,每次引用带来1毫秒有用CPU工作,缺页额外串行等待5毫秒。没有I/O重叠和其他开销。比较2帧与3帧LRU。
核对。 缺页12与3,历时
再给8帧驻留预算,三个不共享的稳定工作集各3帧。三者全活跃时联合9帧装不下;暂留两个则需求6帧。但暂停第三者不自动释放其帧,还需保存内容并安全撤销旧访问。说明恢复成本与长期等待公平为什么不由容量不等式自动解决。
任务六:只有翻译发生未命中
数据全部驻留,TLB初始空、全相联LRU、只有2项。基本页号0至7每轮依次访问,重复3轮。比较256字节基本页与对齐1024字节大页。
核对。 基本页翻译标签每轮为 0 1 2 3 4 5 6 7,24次miss;大页标签为 0 0 0 0 1 1 1 1,共2次miss。两者缺页均为0,名义覆盖512与2048字节。地址 0x1A5F 在大页下分为页号6与偏移 0x25F;映射到物理基址 0x6000 后得到 0x625F。
迁移。 改成基本页0至11循环3轮,大页标签每轮包含0、1、2三种,各一组连续4次。2项TLB每轮各有3次miss,总计9;“采用大页”不保证全部翻译永远留住。
任务七:回本条件必须说明未来在哪访问
一页初始N0,本地访问100、远端180,迁到N1一次成本8000。
- 此后全从N1访问,求严格获益的最小整数次数
- 此后恰有3/4访问从N1发出,求一条真实有限轨迹可实现的最小获益次数
- 若3/4是每次独立访问位置的概率,而非有限轨迹精确比例,求期望获益门槛
- 若两节点各一半访问,是否有足够大的访问次数使此次迁移回本
核对。 第一问
预测未来访问者位置、页迁移成本或可用目标帧发生变化时,结论必须重算。把线程移走与把页移走合并成一个没有成本的动作,会破坏上述账本。
运行核验器
下载MEM-16标准库核验器,用普通Python 3运行:
python3 foundation-memory-capacity-check.py
脚本只做内存中的教学模拟,输出JSON,不读取机器内存设置,也不调整任何内核参数。它拒绝python -O,防止断言被禁用后仍误报通过。
除主例外,它检查65536种空闲页子集的327680个对齐形状判定,用49205个短串窗口对照计数实现与直接集合定义,并用29523个LRU案例对照独立的重用距离判据。有限穷举不是一般证明;它与正文块覆盖、窗口计数和替换状态不变量相互补充。