当用户进程进行系统调用时,会进行以下一系列操作
- 系统调用发生时,都会首先调用_syscall函数,该函数的作用是生成一个消息,消息的类型指定为系统调用函数,消息的目的进程因当前系统调用函数的不同而不同,PM_PROC_NR(进程管理器)、VFS_PROC_NR(文件系统)、VM_PROC_NR三者其一;
- _syscall函数会使用进程通信原语_sendrec,将消息发送出去;
- 在原语_sendrec中,通过软中断指令(int 33),从用户空间跳转到内核空间;
- 在软中断处理程序中,在经过一系列的合法性检查后,首先调用mini_send向目标进程发送消息,如果发送失败,直接返回;如果发送成功,会继续调用mini_receive函数接收目标进程传过来的消息,并将执行结果返回;(即无论操作失败或成功,函数都会立马返回)
- 当软中断处理程序返回时会重新调用_restart,_restart完成的功能是查看next_ptr是否为空,如果为空,则继续执行进程proc_ptr(指向引发本系统调用的进程);如果为非空,这将next_ptr的值赋给proc_ptr,调度一个由next_ptr指向的新进程执行。
09-29 18:08