6.S081

添加用户函数

在 Makefile 的 UPROGS 处添加

添加系统调用

系统调用的用户空间代码在user/user.h和user/usys.pl中。

内核空间代码是kernel/syscall.h、kernel/syscall.c。

与进程相关的代码是kernel/proc.h和kernel/proc.c。

  1. kernel/syscall.h 枚举 SYS_xxx
  2. kernel/syscall.c 的两处地方按照格式添加
  3. kernel/sysfile.c 添加 sys_xxx 函数(主要实现)
  4. user/user.h 添加系统调用函数的定义
  5. user/usys.pl 添加系统调用的 entry

系统调用的步骤

  1. 操作系统初始化时注册系统调用
  2. 系统调用函数将对应的调用存到寄存器
  3. 保存用户空间的状态
  4. 执行 ECALL 指令,提升权限
  5. 执行 trampoline 里面的 uservec() ,保存现有的用户寄存器到 trapframe,切换页表
  6. 执行 usertrap(),判断陷入类型并处理
  7. 执行 syscall(),进行系统调用
  8. 执行 usertrapret() ,设置 trapframe
  9. 执行 trampoline 里面的 userret,恢复寄存器,返回用户空间

reference

schedule

translation

updatedupdated2024-04-122024-04-12