# 系统调用

​		我们系统调用的设计根据比赛的要求，遵循RISC-V ABI,即调用号存放在a7寄存器中,6个参数分别储存在a0-a5寄存器 中,返回值保存在a0中。

​		发生系统调用时，即用户进程调用ecall指令陷入内核异常处理程序时，异常处理程序将异常TrapFrame转发到TrapFunc_Syscall，在这个函数中，将判断系统调用号并分发给对应的程序处理。如果一个系统调用号不存在或还未实现，则将进入switch的default分支，将用户进程强制退出。

​		我们的系统调用的编写理念是，系统调用是用户进程与内核的接口，那么对于用户进程提出的一个要求，我们将通过转发、转换等方式调用不同的内核方法，为其提供服务。如果有未直接实现的内核功能，则通过内核功能的组合间接为用户实现，而非随意在内核中添加功能。

​		在当前的设计中，我们直接用系统调用号对应到不同的函数处理，我们计划设计一个调用子系统，类似于Windows子系统的设计，用于兼容不同ABI的系统调用，发生系统调用时，根据进程所处子系统调用相应的系统调用。



--------------------

By：qianpinyi

2022.06.05