|
|
|
@ -68,7 +68,7 @@ RISC-V中提供了ecall指令,用于向运行时环境发出请求,我们可
|
|
|
|
|
|
|
|
|
|
**3.2.3 练习三:自定义系统调用(需要编程)**
|
|
|
|
|
|
|
|
|
|
阅读pk目录system.c文件,增加一个系统调用sys_get_memsize(),系统调用返回spike设置的内存空间大小, 系统调用号为81。
|
|
|
|
|
阅读pk目录syscall.c文件,增加一个系统调用sys_get_memsize(),系统调用返回spike设置的内存空间大小, 系统调用号为81。
|
|
|
|
|
|
|
|
|
|
提升:在pk目录下的mmap.c文件中,函数pk_vm_init中定义了代理内核的内存空间大小。
|
|
|
|
|
|
|
|
|
@ -121,7 +121,7 @@ Score: 20/20
|
|
|
|
|
|
|
|
|
|
系统调用的英文名字是System Call。由于用户进程只能在操作系统给它圈定好的“用户环境”中执行,但“用户环境”限制了用户进程能够执行的指令,即用户进程只能执行一般的指令,无法执行特权指令。如果用户进程想执行一些需要特权指令的任务,比如通过网卡发网络包等,只能让操作系统来代劳了。系统调用就是用户模式下请求操作系统执行某些特权指令的任务的机制。
|
|
|
|
|
|
|
|
|
|
相交于函数调用在普通的用户模式下运行,系统调用则运行在内核模式中。
|
|
|
|
|
相较于函数调用在普通的用户模式下运行,系统调用则运行在内核模式中。
|
|
|
|
|
|
|
|
|
|
见下图:
|
|
|
|
|
|
|
|
|
|