WH L4 2022-05-24 14:31:14 系统调用
107 0

“操作系统实验”实验报告

系统调用

操作系统实验实验报告

实验名称:系统调用

实验日期:2022年5月24日

班级:软嵌202

姓名:文浩

学号:2030110780

一、实验目的:

建立对系统调用接口的深入认识;

掌握系统调用的基本过程;

能完成系统调用的全面控制;

为后续实验做准备。

二、实验环境:

三、实验内容:

在 Linux 0.11 上添加两个系统调用,并编写两个简单的应用程序测试它们。

第一个系统调用是 iam()完成的功能是将字符串参数 name 的内容拷贝到内核中保存下来。要求 name 的长度不能超过 23 个字符。返回值是拷贝的字符数。如果 name 的字符个数超过了 23,则返回 “-1”,并置 errno 为 EINVAL。在 kernal/who.c 中实现此系统调用。

第二个系统调用是 whoami()它将内核中由 iam() 保存的名字拷贝到 name 指向的用户地址空间中,同时确保不会对 name 越界访存(name 的大小由 size 说明)。返回值是拷贝的字符数。如果 size 小于需要的空间,则返回“-1”,并置 errno 为 EINVAL。也是在 kernal/who.c 中实现。

四、实验过程及数据记录:

(1)实验环境准备:

cd/home/shiyanlou/oslab tar -zxvf hit-oslab-linux-20110823.tar.gz -C /home/shiyanlou/ 图片描述

(2)在linux-0.11/include/linux之中的sys.h文件里添加两个extern:

extern int sys_whoami(); extern int sys_iam(); 图片描述

(3)修改在linux-0.11/kernel中的system_call.s文件:图片描述

(4)在kernel中添加文件who.c并且编写该文件:图片描述

(5)修改kernel中的Makefile文件: 图片描述

(6)unistd.h不能直接在oslab中直接修改,而需要在虚拟机中修改 sudo./mount-hdc图片描述

(7)添加命令:#define__NR_iam 72 #define__NR_whoami 73图片描述

(8)printk() 首先 push %fs 保存这个指向用户段的寄存器,在最后 pop %fs 将其恢复,printk() 的核心仍然是调用 tty_write()。图片描述

(9)编写测试程序iam.c和whoami.c:图片描述图片描述

(10)增加文件后重新对MakeFile进行编译:图片描述

(11)对文件进行运行编译:图片描述 五、实验结果分析

实验中对于修改过程已完成,在kernel文件中make成功,都已编译,后续还有些问题待解决

六、实验心得

这次实验真的有些难度,但是我对于掌握 Linux 下的多进程编程技术有了基本的了解,可以基本通过对进程运行轨迹的跟踪来形象化进程的概念,总体来说还是有些收获。

最新评论
暂无评论~