第1关:第一次页故障
版本1内核环境配置详情请移步前几关~头歌操作系统 课后作业3.1:进程的描述与状态
启动gdb调试器:
b schedule
c
p task
p task[0]->pid
p task[1]->pid
p ¤t
p page_fault
quit

启动dbg调试器:
b 0xb124
c
x/wx 0x1fa20
creg
x/wx 0x0+16*4
x/wx 0xffe000+37*4
u/30
b 0xb15a
c
x/wx 0x0+16*4
x/wx 0xffe000+37*4
s
quit
启动gdb调试器:
b 145
c
n
x/5i $eip
quit

第一关文档答案:

第2关:父子进程间的共享内存通信实现
编程要求
本关任务:改写版本 1.3 内核,使得 0 号进程顺序循环输出小写字母 a、b、c . . . ,每输出一个字母就执行 pause 系统调用; 1 号进程的行为类似,只不过将小写变为大写;同时要求两个进程输出的字符是关联递增的,即如果 0 号进程上一次输出了字符a,那么这一次如果是 1 号进程运行,那它应该输出字符B,反之亦然,运行画面如下图所示。(要求还是使用 int 0x81 输出字符,且不能修改 int 0x81 的实现方式)

配置版本内核1.3,注意复制的文件路径~具体操作此不再赘述。详情请移步以下链接~头歌操作系统 课堂练习4.1:段式内存管理 答案_蓝莓奶油饺子·的博客-优快云博客

使用VScode修改文件:
(注:以下标注的代码行数可能根据不同环境会有所不同,不同时请根据上下文代码进行判断增删代码的位置~)

打开如图所示路径下的main.c文件:

在62行位置添加代码:

在114行位置添加代码:

在150行位置添加代码:

将155行-158行的原文件代码替换为如图所示的框内代码:

将171-174行的原文件代码替换为如图所示的框内代码:

保存main.c文件,再用同样的方法打开如图所示路径下的memory.c文件:

在133行添加代码如图所示:

将178行代码注释或删除,添加红框内代码:

保存memory.c文件,并在命令行对1.3/linux重新编译,如图所示:
![]()
最后在运行虚拟机即可,如图所示:


文章介绍了如何处理页故障,使用gdb调试器进行内核级别的调试,并在Linux内核1.3版本中实现父子进程间的共享内存通信,确保进程间输出字符的关联递增。修改main.c和memory.c文件,添加和调整代码以满足要求,并通过编译和运行验证结果。
1375

被折叠的 条评论
为什么被折叠?



