第1关:第一次页故障
本关任务:系统的第一次页故障发生时:
1.当时正在执行几号进程? 正在访问的线性地址是多少?
2.该线性地址当时对应的页表项是什么?被映射到的物理地址是什么?
3.该页故障处理完后,该线性地址对应的页表项是什么?被映射到的物理地址是什么?
4.引发这次页故障的指令地址是什么?
5. main 函数中的 fork 系统调用的陷入指令的地址是多少?
由于需要在bochsdbg模式下确定进程号,所以现在gdb模式跟踪到schedule函数,然后查看当前所有进程的进程控制块地址,并确定其进程号
可见 0 号进程和 1 号进程的进程控制块地址分别是 0x1bec0 和 0xfff000 。现在查看 current 的地址:
如何跟踪到第一次页故障发生
页故障处理函数是 page_fault ,首先查询这个函数的地址,然后在 bochsdbg 中在该地址设断点,并跟踪到该断点的第一次出现即可。所以在gdb模式查看page_cault函数地址
在bochsdbg模式跟踪到page_fault函数