您现在的位置:学赛首页 > 研究生院 > 软件学院 > 正文
操作系统课程第三章-进程和线程的描述与控制[9]
http://www.educity.cn 作者:研究生院 来源:学赛网 2008年4月16日 发表评论 进入社区

  如果合适,则将区装入内存(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(错);

  睡眠于可中断的优先级上(事件:子进程退出);

  }

  }

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]