哈工大操作系统试验2 系统调用

由于一时疏忽,导致who.c的代码不能通过部分测试数据,现已经改正。今天整理了一下实验报告在unistd.h中可以看到现在Linux 0.11 支持3个参数的传递。添加参数的方法大概有3条               1.可以采用ESI,EDI,EBP,ESP这几个寄存器传递参数。               2.可以采用《Linux 0.11注释》中提到的系统调用门的办法
摘要由CSDN通过智能技术生成

由于一时疏忽,导致who.c的代码不能通过部分测试数据,现已经改正。


今天整理了一下实验报告

在unistd.h中可以看到现在Linux 0.11 支持3个参数的传递。添加参数的方法大概有3条

               1.可以采用ESI,EDI,EBP,ESP这几个寄存器传递参数。

               2.可以采用《Linux 0.11注释》中提到的系统调用门的办法。

               3.可以开辟一块用户态的空间,允许内核态访问,传递参数时,只需传递此空间的首地址指针即可。

向linux 0.11添加一个系统调用foo()的步骤:

               首先。在内核中编写系统调用处理函数。
              其次。在include/unistd.h中添加系统调用的功能号(#define   __NR_foo   **)
                        并且相应的在include/linux/sys.h中声明新的系统调用处理函数以及添加系统
                        调用处理程序指针数组表中该项的索引值。在make file中添加新系统调用所在
                        文件的编译、链接规则(依赖关系)。修改system_call.s中系统调用总数。
              最后。在应用程序中提供接口,调用系统调用。




这次试验,需要用c来写,比上次要简单一些。

需要改写unistd.h       sys.h           system_call.s     makefile  4个文件

而且需要自己写出 who.c   iam.c    whoami.c   3个文件


sys.h在     linux-0.11/include/linux  之中,源文件关键处如下

extern int sys_ssetmask();
extern int sys_setreuid();
extern int sys_setregid();

fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sy
  • 16
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值