网站大量收购独家精品文档,联系QQ:2885784924

[理学]中南大学数学院计算机操作系统第三章课件存储管理进程管理.ppt

[理学]中南大学数学院计算机操作系统第三章课件存储管理进程管理.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]中南大学数学院计算机操作系统第三章课件存储管理进程管理

* 2.创建进程的主要步骤 (1)为新进程分配唯一的进程标识数。接着为新进程分配进程控制块的空间,在进程表中加入新项。 (2)为新进程分配进程各部分映像所需的内存空间。 (3)初始化进程控制块,如进程标识数、父进程标识数、程序计数器、系统栈指针、进程的状态等,根据进程的性质或缺省值初始化进程的控制信息。进程的运行状态一般初始化为就绪状态 (4)子进程复制父进程扩充控制块,子进程将共享父进程的全部打开文件、信号处理方式等。 (5)子进程复制了父进程的数据区、核心栈和用户栈,父子进程程序执行的当前位置、状态、数据区、变量的当前值都是相同的。但随着父、子进程的各自独立执行,子进程的映像将会与父进程有明显的差异。 * 如何使父子进程完成不同的任务? 由上可知,当一个子进程刚创建完成,它与父进程共享执行代码,且起始执行位置相同,数据区与栈段也相同,那么两者以后是否只能执行相同的程序段和完成相同的功能呢?如果确实这样,那么创建子进程就显然毫无意义的了。 UNIX采用了在调用创建子进程的系统调用后,使父子进程具有不同的返回值,这样就可以采用判断语句,使父子进程可以执行不同的程序段,以便完成不同的任务。 在执行系统调用fork后,父进程得到的返回值是所创建子进程的标识数,而子进程的返回值为0。下面是一个使用系统调用fork的简例。 * main() { int pid; printf(“Before fork\n”); while ( (pid=fork() ) == -1 ); if (pid) { printf (“Parent process: PID= %d\n”, getpid()); printf “Produced child’s PID= %d\n”, pid); } else printf (“Child process: PID= %d\n”, getpid()); printf(“Parent or child process: PID= %d\n”,getpid()); } * 3.6.2 进程图像的改换 fork是一个很有特色而且非常有用的系统调用,但如果仅有它,那么UNIX系统的性能就会受到不可容忍的影响。 fork虽然能产生子进程,将一个进程变成了两个,使它们能执行不同的程序段和完成不同的功能,形成了多进程并发运行的必要条件,但这两个进程的图像基本相同。 对子进程来说,fork 之前的图像已由父进程执行过了,子进程是不会再从头开始执行的,因而这部分图像的存在对子进程是毫无意义的;fork之后父进程所执行的图像部分的存在对子进程来说也是一个浪费。父进程也有相似的问题。 * UNIX为了配合fork,还提供了进程图像改换的exec系列的系统调用。 exec的调用进程用一个可执行文件中的程序和数据取代当前正在运行的程序和数据,从而使主调进程的图像改换成新的图像。 尽管新执行的程序与原进程的执行程序完全不同,但该调用并不形成新进程,因为原进程的proc结构和user结构并不改换,其进程标识数p_pid与主调进程相同,与父进程的关系也没有改变。 * execl系统调用 用于装入一个带路径的可执行文件,用新程序覆盖老程序,然后运行这个新程序,老进程。 一般情况这个系统调用不返回到主调程序,仅当调用出错时(如不存在指定的可执行文件),系统才返回错误码。 execl的调用格式是: execl(pathname,cmdname,arg1, arg2, …, (char*)0); char *pathname,*cmdname,*arg1, *arg2,…,,*argn; ret=execl (“/bin/ls,ls,-l,(char*)0) * execv系统调用 execv (pathname,argv) char *pathanme,*argv[ ]; pathname 意义同上, argv是指针数组,其中argv [0]指向对应于execl调用中的cmdname, argv [1]指向arg1,…,指针数组最后一个元素的值是0。 分别与execl和execv对应的另两个系统调用是execlp和execvp,使用这两个系统调用与上面两个的区别是主调函数的第一参数不必带路径,如 execlp(ls,ls,-l,(char*)0); * 执行含有元字符的命令 要使exec通过标准shell来执行,其调用格式为: execl(“/bin/sh”,”

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档