哈工大操作系统实验2—系统接口

本文详细介绍了在哈工大的操作系统实验中,如何添加并实现新的系统调用iam和whoami。实验内容包括理解系统调用的工作原理,修改相关源文件如unistd.h、sys.h、system_call.s和Makefile,编写实现函数的who.c、iam.c、whoami.c,以及编译内核、编写测试程序和脚本,最终在虚拟机上进行测试。
摘要由CSDN通过智能技术生成
实验步骤

(1)了解应用程序如何调用系统调用

在通常情况下,调用系统调用和调用一个普通的自定义函数在代码上并没有什么区别,但调用后发生的事情有很大不同。调用自定义函数是通过call指令直接跳转到该函数的地址,继续运行。而调用系统调用,是调用系统库中为该系统调用编写的一个接口函数,叫API(Application Programming Interface)(它对应一个宏_syscallx,在unistd.h中)。API并不能完成系统调用的真正功能,它要做的是去调用真正的系统调用,过程是:

  • 把系统调用的编号存入EAX
  • 把函数参数存入其它通用寄存器
  • 触发0x80号中断(int 0x80)
  • 接下来就是内核的中断处理了,自动调用函数system_call(在kernel/system_call.s中),到sys_call_table找到系统调用号对用的系统调用sys_xxx,执行它。

(2)阅读文件lib/close.c、fs/open.c、kernel/system_call.s、include/unistd.h、include/linux/sys.h,找出系统调用close与这些文件之间的关系,清晰close系统调用的过程;

(3)参照系统调用close,在上面一系列文件中添加或修改系统调用iam和whoami相关的内容(系统调用号、系统调用表、系统调用总数等);

(4)创建who.c文件,在其中分别编写包含具体实现细节的sys_iam()和sys_whoami()函数;

(5)修改Makefile,以便在执行make命令时可以编译who.c文件;

(6)编译linux内核,运行bochs;

(7)编写测试程序iam.c和whoiam.c;

(8)将测试程序、unistd.h及测试脚本复制到 hdc目录,以便bochs启动后能够共享这些文件;

(9)运行bochs;

(10)在虚拟机上编译测试程序iam.c和whoiam.c,并运行测试;

(11)运行测试脚本,测试得分情况。


此次实验需要修改unistd.h       sys.h           system_call.s     makefile,并编写who.c   iam.c    whoami.c

(1)修改linux-0.11/include/linux/sys.h

根据Linux调用系统调用的过程,需要把 iam()与whoami()两个函数加到全局变量,和中断函数表中就可以了,中断被调用的时候,先查找中断向量表,找到相应的函数名,调用其函数。

分别添加声明到最下面和数组中


extern int sys_setup();
extern int sys_exit();
extern int sys_fork();
extern int sys_read();
extern int sys_write();
extern int sys_open();
extern int sys_close();
extern int sys_waitpid();
extern int sys_creat();
extern int sys_link();
extern int sys_unlink();
extern int sys_execve();
extern int sys_chdir();
extern int sys_time();
extern int sys_mknod();
extern int sys_chmod();
extern int sys_chown();
extern int sys_break();
extern int sys_stat();
extern int sys_lseek();
extern int sys_getpid();
extern int sys_mount();
extern 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值