https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html
这个lab有三个task:
有三个函数会涉及到进程用户态页表的修改:
fork
,fork的时候会将父进程的页表PTE与物理地址拷贝到fork出来的子进程,因为之后一般要执行exec
,这个子进程从父进程复制过来的页表一般就是trapframe
与trampoline
会在用户态页表中保存,trapframe
是在初始化进程的时候分配在用户页表的,分配空页表的时候会在用户态页表映射trapframe
与trampoline
,exec
,exec是装载可执行文件(映像文件)的过程,也就是建立虚拟地址空间与可执行文件的映射,exec
会装载映像文件的.text
与.data
段到物理内存,同时写入用户态进程页表还会分配用户栈与guard页,也会写到用户态页表,sbrk
,sbrk
对应的sys_sbrk
会调用growproc
,也就是扩充进程虚拟地址空间中的heap
,这个时候用户态页表会改变所以这些都需要复制到进程的新的内核态页表