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

  算法 fork,无输入参数,父进程返回子进程PID,子进程返回0

  { 检查可用的内核资源;

  取一个空闲的进程表项和惟一的PID号;

  检查用户没有过多运行进程;

  将子进程的状态设置为“创建”状态;

  将父进程进程表项的数据拷贝到子进程进程表项中;

  当前目录和根目录的索引节点引用计数加1;

  文件表中打开文件的引用计数加1;

  在内存中作父进程上下文的拷贝;

  fork的算法描述(续)

  在子进程的系统级上下文中压入虚设系统级上下文层;

  if (正在执行的进程是父进程)

  { 将子进程的状态设置为“就绪”状态;

  return(子进程的PID);

  }

  else {

  初始化U区的计时域;

  return(0);

  }}

  系统调用exec

  exec系列中的系统调用都完成同样的功能,它们把一个新的程序装入调用进程的内存空间,以改变调用进程的执行代码,从而使调用进程执行新引入的程序功能。

  这一组系统调用的主要差别在于给出参数的数目和形式不同。下面给出两种基本的exec调用格式说明:

  int execl(path , arg0 [,arg1,…,argn],0);

  char *path,*arg0,*arg1, …,*argn ;

  int execv(path,argv);

  char *path,*argv[ ];

  exec算法描述

  算法 exec,输入参数有文件名、参数表、环境变量,无输出。

  { 取文件的索引节点(算法namei);

  验证文件可被执行,用户有执行许可权;

  读文件头,检查它是否为装入模块;

  将exec参数从老地址空间拷贝到系统空间;

  for (与该进程附接的每个区)

  使区与进程断接(算法detachreg);

  for (装入模块中指定的每个区);

  { 分配新区(算法alloreg);

  exec算法描述(续)

  将新区附接到进程(算法attachreg);

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