添加用户函数
在 Makefile 的 UPROGS 处添加
添加系统调用
系统调用的用户空间代码在user/user.h和user/usys.pl中。
内核空间代码是kernel/syscall.h、kernel/syscall.c。
与进程相关的代码是kernel/proc.h和kernel/proc.c。
- kernel/syscall.h 枚举 SYS_xxx
- kernel/syscall.c 的两处地方按照格式添加
- kernel/sysfile.c 添加 sys_xxx 函数(主要实现)
- user/user.h 添加系统调用函数的定义
- user/usys.pl 添加系统调用的 entry
系统调用的步骤
- 操作系统初始化时注册系统调用
- 系统调用函数将对应的调用存到寄存器
- 保存用户空间的状态
- 执行 ECALL 指令,提升权限
- 执行 trampoline 里面的 uservec() ,保存现有的用户寄存器到 trapframe,切换页表
- 执行 usertrap(),判断陷入类型并处理
- 执行 syscall(),进行系统调用
- 执行 usertrapret() ,设置 trapframe
- 执行 trampoline 里面的 userret,恢复寄存器,返回用户空间