一、实验目的
1.熟悉 Linux 内核调试环境,巩固 gdb 与 bochsdbg 协同调试技巧,掌握段页式内存管理相关的断点设置、寄存器(CR2、CR3)查看、线性地址与物理地址查询方法。
2.理解段页式内存管理的底层原理,明确线性地址到物理地址的转换流程,掌握页目录、页表的结构及工作机制。
3.掌握页目录项、页表项的格式解析方法,能够通过描述符数值提取页帧起始地址、判断页面读写权限及存在性。
4.明确进程创建过程中页目录和页表的动态变化规律,理解 fork 系统调用对内存映射关系的影响。
5.跟踪页故障的产生与处理流程,掌握 CR2 寄存器在页故障中的作用,理解页故障处理程序的执行逻辑及恢复机制。
6.掌握 1 号进程对用户变量的访问过程,明确变量线性地址映射、页故障触发及处理后的地址更新逻辑。
二、实验内容
本实验围绕段页式内存管理核心机制,分两个核心任务开展,分别基于版本 1 内核和版本 1.3 内核:
1.实验一:进程创建前后页目录和页表的变化
跟踪 0 号进程 fork 系统调用执行前后的内存状态,分析线性地址到物理地址的映射关系变化,探究页目录的动态更新逻辑。
2.实验二:1 号进程对 mynext 变量的第一次修改
跟踪 1 号进程第一次修改 mynext 变量的全过程,分析变量线性地址映射、页故障触发、故障处理及恢复的完整流程,验证页表项更新及物理地址映射的变化。
三、实验步骤
实验 1:进程创建前后页目录和页表的变化
(一)实验环境准备
1.版本 1 内核文件存放于/data/workspace/myshixun/exp1文件夹,执行命令:cp /data/workspace/myshixun/exp1/1.tgz ~/os,将内核压缩包复制到目标目录。

2.切换至实验目录:cd ~/os/linux-0.11-lab,执行tar -zxvf ../1.tgz 1解压内核源码。
![]()
3.删除旧符号链接并创建新链接:rm -rf cur、ln -s 1 cur,将版本 1 内核设为分析对象;执行ls命令查看,可见cur链接指向1,确认版本 1 内核已作为本次实验分析对象。

4.切换至内核目录并编译:cd 1/linux && make,完成内核编译后执行cd ../../返回实验目录。
![]()
![]()




