130 likes | 267 Views
Problem4: Virtual Memory. HJC jinchenhan@fudan.edu.cn. 知识点. VM hierarchy COW 4 小 问. 错误分析. VM 机制不清晰 地址计算错误,图中 PTE 位 置标错 第二题或第四题出现诸如 10240 或 20480 这种答案,是对 PF 的理解有误,切记所有的 page fault 都是以一个 page 为单位触发的 (protect fault 实际上也是一种 page fault). 1. 补完程序. 比较简单,不做解释了,可以参见 CSAPP 第 728-729 页
E N D
Problem4: Virtual Memory HJC jinchenhan@fudan.edu.cn
知识点 • VM hierarchy • COW • 4小问
错误分析 • VM机制不清晰 • 地址计算错误,图中PTE位置标错 • 第二题或第四题出现诸如10240或20480这种答案,是对PF的理解有误,切记所有的page fault都是以一个page为单位触发的(protect fault实际上也是一种page fault)
1. 补完程序 • 比较简单,不做解释了,可以参见CSAPP第728-729页 • 第[1]&[4]空,写成运算结果算对 • 第[3]空只写MAP_SHARED算对 • 第[6]空只写MAP_PRIVATE算对
2&3. PF个数及B处PT图 • 数组长度每个10240,所占空间10240*4,也就是10*2^12 bytes,即10个页 • sarr地址0xb77fa000 ~ 0xb7803fff • larr地址0xb77f0000 ~ 0xb77f9fff • 二级页表,PD和PT的index见下页图
2&3. PF个数及B处PT图(cont.) • 地址运算结果
2&3. PF个数及B处PT图(cont.) • mmap之前pt图如下 • 根据题目表述,无数字白色方块均表示空白的PTE或PDE
2&3. PF个数及B处PT图(cont.) • B处pt图如下
2&3. PF个数及B处PT图(cont.) • 两个数组共占用了20个页表,根据刚才对数组开始、结束地址的计算,这20个页表所对应的PTE均应处于fill状态 • 此外,从(2DE,000)之后的4个页表,与之前的地址的PDE不同,而2DE这个PDE之前是空的,所以需要新创建一个新的PT
2&3. PF个数及B处PT图(cont.) • 从(2DD,3F0)到(2DE,003)这20个PTE所对应的物理页表是之前不存在,在A-B程序段的初始化中才创建出来的,所以在每个页表第一次写入的时候会触发PF,一共20个 • PDE 2DE所指向的PT之前不存在,A-B段代码执行完后被创建出来,第一次写入该PT的时候触发PF,一共1个 • A-B段代码共触发PF 21个
4. COW个数 • sarr不触发COW,只有对larr的10个页表的写操作会触发COW • 父进程+子进程分别对自己的larr进行了修改,共有20次COW的PF • 父进程写某个被置了COW的页表,触发PF之后,子进程再次对该页进行写入依然会触发PF!(CSAPP P726)
4. COW个数(cont.) • PF的处理过程是,当发现一个PF是因为COW而触发的时候,首先检查当前这个物理页的引用数,如果超过1(对应父进程的情况),那么给当前进程新分配一个物理页,修改PTE,重新执行触发PF的指令;如果恰为1(对应子进程的情况),也就是当前进程是该物理页唯一拥有者,则不会新分配物理页,而是直接修改PTE,重新执行触发PF的指令。
谢谢 • 如果还有哪里讲解的不清楚,或是还有什么疑问,欢迎发邮件与我讨论 • 祝大家新年快乐