目录

头歌操作系统-课后作业4.3段页式内存管理-答案-无解析

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

第1关:第一次页故障

版本1内核环境配置详情请移步前几关~

启动gdb调试器:

b schedule
c

p task
p task[0]->pid
p task[1]->pid

p &current
p page_fault
quit

https://i-blog.csdnimg.cn/blog_migrate/9409df3e973061e22ae667bc08a43896.png

启动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

https://i-blog.csdnimg.cn/blog_migrate/e8c15cff496c13f3d14838044b7a68f5.png

第一关文档答案:

https://i-blog.csdnimg.cn/blog_migrate/f379974d1fd7d7eb7c8e14fb4d705d3f.png

第2关:父子进程间的共享内存通信实现

编程要求

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

https://i-blog.csdnimg.cn/blog_migrate/1daa3c2ffa7e25456dd0106b0bb17196.png

配置版本内核1.3,注意复制的文件路径具体操作此不再赘述。详情请移步以下链接

https://i-blog.csdnimg.cn/blog_migrate/8392d4d5771c769498559a26f5d059b2.png

使用VScode修改文件:

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

https://i-blog.csdnimg.cn/blog_migrate/926fa85999302e25e59dacecae9e7281.png

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

https://i-blog.csdnimg.cn/blog_migrate/b4634c1abbd985303b422713cf910820.png

在62行位置添加代码:

https://i-blog.csdnimg.cn/blog_migrate/d7293c9b9f6fbe66ab1b282d737319ea.png

在114行位置添加代码:

https://i-blog.csdnimg.cn/blog_migrate/47dd017cd00d81793c178e1eb703287a.png

在150行位置添加代码:

https://i-blog.csdnimg.cn/blog_migrate/e4515120cfca693443b49155d6ef051a.png

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

https://i-blog.csdnimg.cn/blog_migrate/6a80126f5680ef46e76a5b9e0efa902e.png

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

https://i-blog.csdnimg.cn/blog_migrate/bf8e4642ae9596f10bf4c7f6c3e96477.png

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

https://i-blog.csdnimg.cn/blog_migrate/f33083598af8437b5e16015c3214c0cd.png

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

https://i-blog.csdnimg.cn/blog_migrate/b9190c7b15edbc4056f599aa5c053422.png

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

https://i-blog.csdnimg.cn/blog_migrate/1edb0f250625f09572ebe6ffe0b47492.png

保存memory.c文件,并在命令行对1.3/linux重新编译,如图所示:

https://i-blog.csdnimg.cn/blog_migrate/eeb30306b9fb923a83272268274494ce.png

最后在运行虚拟机即可,如图所示:

https://i-blog.csdnimg.cn/blog_migrate/3252864968443f30b680dcc684a69eae.png