- 系统调用是操作系统内核暴露的一组接口函数,用户封装硬件,内核数据等。可以保证系统的安全和稳定
printf
read
open
都是常用的系统调用函数 - 上一个实验 Lab1: xv6 和 Unix 工具 已经使用 system calls 来实现了一些工具,这个实验将增加一些新的 system calls
- 如何切换到内核态?
-
- 触发软件中断
-
- cpu 切换到内核态
-
- 根据系统调用号确定执行的服务,完成后将结果或者错误码存入用户程序的寄存器,并返回用户态继续执行
-
- 涉及的文件:
user/user.h
→ 用户态程序调班函数user/usys.pl
→ 跳板函数使用 CPU 提供的 ecall 指令,切换到内核态kernel/syscall.c
→ 内核态下系统调用处理函数syscall()
,所有的系统调用都在这kernel/syscall.h
→ 设定系统调用号
- 相关知识
- {{embed ((68c35cbe-42aa-4db0-bbce-309a316c2583))}}
System call tracing
moderate
-
增加一个系统调用来追踪特征,trace 系统调用需要一个参数 mask,例如 trace (1 << 5) 指的是追踪系统调用号为 5 的系统调用
- 这个 lab 比较简单,详细内容暂不记录