如果合适则将区装入内存(loadreg); } 将exec参数拷贝到新的用户栈区; 对setuid程序和进程跟蹤做特别处理; 为返回用户态初始化用户寄存器保护区; 释放文件的索引节点(算法iput); } 系统调用exit 系统调用exit实现进程的自我终止 exit的语法格式如下 void exit(status); int status; 其中status是返回给父进程的一个整数以备父进程检查 exit的算法描述 算法 exit输入参数是给父进程的返回码无输出 { 忽略所有软中断信号; if (是与控制终端关联的进程组组长) { 向该进程组的所有组员发送挂起信号; 将所有组员的进程组号置为;} 关闭所有打开的文件(算法close的内部形式); 释放当前目录(算法iput); 释放改变的根目录(如果存在的话)(算法iput) 释放区及与该进程有关的内存(算法freereg); 写记账记录; exit的算法描述(续) 使进程状态为僵死状态; 将所有子进程的父进程置为init进程(); 若任何子进程僵死则向init发送子进程死信号; 向父进程发送子进程死信号; 上下文切换; } 系统调用wait 系统调用wait用于将调用进程挂起直至其子进程因暂停或终止而发来软中断信号为止 wait调用的语法格式如下 int wait(stat_loc); int stat_loc; 其中stat_loc是用户空间的一个地址它含有子进程的退出状态码 wait的算法描述 算法 wait输入参数是存放退出进程状态的变量地址返回子进程标识号子进程退出码 { if (等待进程没有子进程) return(错); for (;;) /*该循环直到从循环内返回时结束*/ { if (等待进程有僵死子进程) { 取任一僵死子进程; 将子进程的CPU使用量加到父进程; 释放子进程的进程表项; return(子进程标识号子进程退出码); } wait的算法描述(续) if (该进程没有子进程) return(错); 睡眠于可中断的优先级上(事件子进程退出); } } [] [] [] [] [] [] [] [] [] |