1、系统调用
系统调用具体过程。
在任何地方,当我们需要使用系统调用时,只需要include “user/user.h”,就可以通过里面的函数声明来调系统调用,其函数的具体实现由 user/usys.pl 脚本帮我们生成对应的汇编代码(具体代码查看user/usys.s文件),在汇编中该函数被声明为global,因此我们可以在c语言中直接调用该函数(C语言可以调用汇编代码)。
例如trace系统调用:
.global trace
trace:li a7, SYS_traceecallret
上面代码将系统调用号保存到寄存器a7,然后通过ecall进入进入内核态的 syscall() 函数,再去执行具体系统调用。
附上知乎大佬的一张图: