系统调用例程
syscallFork
syscallFork要做的是在寻找一个空闲的pcb做为子进程的进程控制块,将父进程的资源复制给子进程。 如果没有空闲pcb,则fork失败,父进程返回-1,成功则子进程返回0,父进程返回子进程pid
在处理fork时有以下几点注意事项:
代码段和数据段可以按照进行完全拷贝
pcb的复制时,需要考虑哪些内容可以直接复制,哪些内容通过计算得到,哪些内容和父进程无关
返回值放在哪
Hint: initProc 中有初始化 pcb[0] 和 pcb[1] 的经验可供参考。
syscallExec
调用loadelf把新的程序加载到当前用户进程的地址空间,然后返回0即可(用eax装返回值)。
syscallSleep
将当前的进程的sleepTime设置为传入的参数,将当前进程的状态设置为STATE_BLOCKED,然后利用
模拟时钟中断,利用 timerHandle 进行进程切换 需要注意的是判断传入参数的合法性
syscallExit
将当前进程的状态设置为STATE_DEAD,然后模拟时钟中断进行进程切换。
Last updated