操作系统 2-6 课后作业2.3:系统调用-LMLPHP

第1关版本1内核执行的完整系统调用序列

任务描述

分析版本1内核,回答下列问题: 从系统开机直到输出第 4 个字符‘1’,系统依次执行了哪些系统调用?分别是在几号进程中执行的?(对于一组连续出现的 0 号进程 pause 系统调用,每组只保留 1 个)

相关知识

为了完成本关任务,你需要掌握: 1.跟踪系统调用的发生; 2.查看当前进程的进程号; 3.跳过 0 号进程发出的连续多个 pause 系统调用; 4.捕获到系统调用时自动显示系统调用号和实现函数名。

实验过程及答案

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

第2关在版本1中输出系统调用信息

任务描述

本关任务:修改版本 1 内核,使得每次产生系统调用时,都在屏幕上输出系统调用号和当前进程号。(形式如29(0),表示0 号进程执行了系统调用 pause) (对于一组连续出现的 0 号进程 pause 系统调用,每组只保留 1 个)。

相关知识

为了完成本关任务,你需要掌握: 1.内核态下的字符输出; 2.如何在汇编程序中调用一个 C 函数并传递参数; 3.如何只输出 1 次信息; 4.系统调用的编号与名字之间的对应关系。

环境准备

本关卡使用版本 1 内核进行修改,文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案

第3关在版本0中输出系统调用信息

任务描述

本关任务:修改版本 0 内核,使得每次产生系统调用时(忽略 0~3 号进程产生的系统调用),都在屏幕上输出系统调用号和当前进程号。(形式如11(6),表示 6 号进程执行了系统调用 execve )

相关知识

为了完成本关任务,你需要掌握: 1.内核态下的字符输出; 2.如何在汇编程序中调用一个 C 函数并传递参数; 3.系统调用的编号与名字之间的对应关系。

环境准备

本关卡使用版本 0 内核进行修改,请确认cur指向是否正确。

实验过程及答案

第4关为版本0内核增加一个系统调用getjiffies

任务描述

为版本 0 内核增加一个系统调用 getjiffies,其功能是获得全局变量 jiffies 的值;同时,在系统启动时自动调用该系统调用并输出结果,画面类似如下:

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

要求:该系统调用的接口函数取名为 getjiffies(),没有参数。

相关知识

为了完成本关任务,你需要掌握: 1.系统调用的执行过程是怎样的; 2.如何在内核中增加一个函数; 3.如何跟踪系统调用的发生?

编程要求

为版本 0 内核增加一个系统调用 getjiffies,其功能是获得全局变量 jiffies 的值;同时,在系统启动时自动调用该系统调用并输出结果,画面类似如下:

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

实验过程及答案

还是0内核所以不做修改

第5关在用户程序中使用新增的系统调用 

任务描述

本关任务: 1.编写一个这样的用户程序 mytest:调用上一关新增的系统调用 getjiffies,并将结果输出,系统运行画面类似如下(使用上一关开发的内核):

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

2.修改文件 /etc/rc ,使系统启动时自动运行该用户程序,修改内容如下图所示:

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

相关知识

为了完成本关任务,你需要掌握: 1.如何在用户程序中定义一个系统调用接口函数? 2.如何将文件放入 bochs 虚拟机? 3.在 bochs 虚拟机中如何编辑文件? 4.在 bochs 虚拟机中如何编译文件? 5.系统调用的执行过程是怎样的? 6.如何跟踪系统调用的发生?

编程要求

1.编写一个这样的用户程序 mytest:调用上一关新增的系统调用 getjiffies,并将结果输出,系统运行画面类似如下(使用上一关开发的内核):

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

2.修改文件 /etc/rc ,使系统启动时自动运行该用户程序,修改内容如下图所示:

操作系统 2-6 课后作业2.3:系统调用-LMLPHP

实验过程及答案

以下为虚拟机内操作

12-08 23:04