Lab2: System Calls

如何添加一个系统调用?

  1. user/user.h 中添加系统调用的跳板函数
    跳板函数可能和内核函数同名,但别搞混,跳板函数是为了跳到 user/usys.S 文件下,陷入系统调用,也即让用户态切换到内核态,向内核传递需要调用的内核函数编号
  2. user/usys.S 文件是通过脚本生成的,需要user/usys.pl 脚本文件中添加一条语句,具体参考已有的语句
  3. kernel/syscall.h 文件中新增内核函数编号
  4. kernel/syscall.c 文件中新增内核函数指针,以及内核函数声明
  5. 根据内核函数的作用,在相应的函数实现文件下实现该内核函数

用户进程和系统进程之间如何传递参数?

  1. 跳板函数的参数会被依次写入到 trapframe a0 a1……中,第一个参数对应 a0,第二个参数对应 a1
  2. 参数的形式一般只有 int、指针、字符串等,可以通过 argint()argaddr()argstr() 函数获取
  3. 通过 copyout() 从内核拷贝到用户进程页表里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值