Lec03 OS Organization and System Calls

学生提问:之前提到,设置处理器中kernel mode的bit位的指令是一条特殊权限指令,那么一个用户程序怎么才能让内核执行任何内核指令?因为现在切换到kernel mode的指令都是一条特殊权限指令了,对于用户程序来说也没法修改那个bit位。 Frans教授:你说的对,这也是我们想要看到的结果。可以这么来看这个问题,首先这里不是完全按照你说的方式工作,在RISC-V中,如果你在用户空间(user space)尝试执行一条特殊权限指令(后面Frans那边的Zoom就断了,等他重新接入,他也没有再继续回答,所以后半段回答是我补充的)用户程序会通过系统调用来切换到kernel mode。当用户程序执行系统调用,会通过ECALL触发一个软中断(software interrupt),软中断会查询操作系统预先设定的中断向量表,并执行中断向量表中包含的中断处理程序。中断处理程序在内核中,这样就完成了user mode到kernel mode的切换,并执行用户程序想要执行的特殊权限指令。

基本上来说,page table定义了对于内存的视图,而每一个用户进程都有自己对于内存的独立视图。这给了我们非常强的内存隔离性。

所以,需要有一种方式能够让应用程序可以将控制权转移给内核(Entering Kernel)。

在RISC-V中,有一个专门的指令用来实现这个功能,叫做ECALL。ECALL接收一个数字参数,当一个用户程序想要将程序执行的控制权转移到内核,它只需要执行ECALL指令,并传入一个数字。这里的数字参数代表了应用程序想要调用的System Call

最后更新于