一、实验目的:
建立对系统调用接口的深入认识;
掌握系统调用的基本过程;
能完成系统调用的全面控制;
为后续实验做准备。
二、实验环境:
三、实验内容:
在 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 下的多进程编程技术有了基本的了解,可以基本通过对进程运行轨迹的跟踪来形象化进程的概念,总体来说还是有些收获。
学习时间 34分钟
操作时间 0分钟
按键次数 0次
实验次数 2次
报告字数 2288字
是否完成 完成