OS Lab 4 Debugging Notes

Aiur · Zellux at 
系统调用 fork()用 Simics 跟踪一条条汇编分析页表映射、寄存器值还真是体力活啊。。实现 Copy On Write 时,如果某一个用户态页面有多个进程共享,其中一个进程修改该页面时需要创建一个新的页面。一开始偶忘了把原来页面的内容复制到新的页面了 =_= 另外由于新的页面要代替老的页面,或者说它们的物理地址不同,但虚拟地址相同,我的方法是在内核态开辟一个大小为一个页面的空间作为中转。do_fork 函数中,子进程复制父进程的页表的同时会把父进程页表项置为不可写,注意最后要 flush tlb。因为一开始没有 flush tlb,导致最后用户态 fork 返回以后读取的信息来自于 t……