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