review

进程调度模型与物理内存分布联系在一起:挂起; 覆盖技术,过于复杂。 硬件:mmu 地址:页号+偏移量 page:虚拟内存块;pageframe:物理内存块。

页表的维护:OS page索引 pageframe内容 页号与页框号对应关系。 物理页框由buddy system best fit等分配方案 分配空白页框

多级页表

32位 100万数组页表项。树的结构 巨大且稀疏。用时间换空间。

case study

80386 从0开始每次分内存4k;低12位可以不要; 页表项占32位; 只存20位 ,低12位是0?4096对齐的位置。省下12位空间。 构建一颗b+树代替巨大的数组。

待查 如何通过计算得到中间10位的数据?除法 取余数 查页表的问题;

页表存在哪里

快表先于cache; TLB:页号:页框号; 如何告诉是否命中;数据复制128分 ,都比较,在O(1)时间内,耗费空间,比较器

64位 反置页表

内存页框数量小于页表项

进程号+虚拟页 内哈希?外哈希?开放/闭合 被淘汰的技术。。。表的索引,物理的页框号; 为什么叫反置页表? 原来的页表是用程序员使用的地址查物理内存的地址,每个程序的page对应一个页表项,现在变成每个page frame对应一项 反置页表有几个? 全局使用一个 反置页表有什么问题? 可扩展性如何? 多进程?多处理器? 安全性如何? 反置页表仅在PowerPC的64位处理器中使用了一段时间,随后被废弃

现在的页表

intel有一个寄存器:MAXPHYADDR标注自己的寻址空间,

huge page:512个4096 页贴在一起,2MB 。缺页 难以忍受;减少查页表时间,提高tlb利用率。

置换算法

1 OPT

:预测未来;relay 一遍又一遍;

2 FIFO

硬件实现容易;4个锁存器; 异常现象:belady 分配的物理页面数增加,缺页次数反而升高。

3 LRU(时间)

维护一个栈;置换的页面是最长时间没有被引用的。被置换页面下溢。被访问栈顶。 不是每个程序具有局部性,线性扫描;看电影,读小说,旅行;有一部分具有局部性。 但是 ,难以实现 栈的结构。

4 最不常用算法 LFU

时钟置换算法 1bit计数 CLOCK

环形链表。清除access bit