操作系统实验4-进程管理与控制.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE # / 36 操作系统实验4-进程管理及控制 第3章进程管理及控制 一、Linux进程管理 1、 fork () 创建一个新的子进程。其子进程会复制父进程的数据及堆栈 空间,并继承父进程的用户代码、组代码、环境变量、已打开的 文件代码、工作目录和资源限制。 系统调用格式: int fork() 如果Fork成功则在父进程会返回新建立的子进程代码 (PID),而在新建立的子进程中则返回Oo如果fork失败则直 接返回-1。 2、 wait () 等待子进程运行结束。如果子进程没有完成,父进程一直等 待。wait()将调用进程挂起,直至其子进程因暂停或终止而发 来软屮断信号为止。如果在wait()前已有子进程暂停或终止, 则调用进程做适当处理后便返回。 系统调用格式: int wait(int *status) 其中,status是用户空间的地址。它的低8位反应子进程 状态,为0表示子进程正常结束,非0则表示岀现了各种各样的 问题;高8位则带回了 exit()的返回值。exit()返回值由系 统给出。核心对wait()作以下处理: 操作系统实验 操作系统实验4-进程管理及控制 PAGE PAGE # / 36 首先查找调用进程是否有子进程,若无,则返回出错码; 若找到一处于“僵死状态”的子进程,则将子进程的执行 时间加到父进程的执行时间上,并释放子进程的进程表项; 若未找到处于“僵死状态”的子进程,则调用进程便在可 被屮断的优先级上睡眠,等待其子进程发来软中断信号时被唤 醒。 3、 exit() 终止进程的执行。 系统调用格式: void exit(int status) 其中,status是返回给父进程的一个整数,以备查考。 为了及时回收进程所占用的资源并减少父进程的干预, UNIX/LINUX利用exitO来实现进程的自我终止,通常父进程在 创建子进程时,应在进程的末尾安排一条exit(),使子进程自 我终止。exit (0)表示进程正常终止,exit(l)表示进程运行有错, 异常终止。 如果调用进程在执行exit()时,其父进程正在等待它的终 止,则父进程可立即得到其返回的整数。核心须为exit()完成 以下操作: 关闭软屮断 回收资源 写记帐信息 置进程为“僵死状态” 4、exec ()函数族 fork()只是将父进程的用户级上下文拷贝到新进程中,而 exec()系列可以将一个可执行的二进制文件覆盖在新进程的用 户级上下文的存储空间上,以更改新进程的用户级上下文。 exec()系列屮的系统调用都完成相同的功能,它们把一个新程 序装入内存,来改变调用进程的执行代码,从而形成新进程。如 果exec()调用成功,调用进程将被覆盖,然后从新程序的入口 开始执行,这样就产生了一个新进程,新进程的进程标识符id及 调用进程相同。 exec ()没有建立一个及调用进程并发的子进程,而是用新进 程取代了原来进程。所以exec()调用成功后,没有任何数据返 回。exec()系列系统调用在UNIX系统库unistd. h中,共有 execl execlp execle^ execv、execvp 五个,其基本功能相 同,只是以不同的方式来给出参数。 execl () int execl (char *path, char * argO, char * argl, char *argn, 0); 种是直接给出参数的指针 execv () int execv (char *path, char *argv); 给出指向参数表的指针 execlp () int execlp (const char * char * arg, . . . , (char *)0); execlpO会从PATH环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个以后的参数当做 该文件的argv[0] > argv[l] ,最后一个参数必须用空担铉 (NULL)作结束。 二、Linux信号机制 (一)信号的基本概念 每个信号都对应一个正整数常量(称为signal number,即 信号编号。定义在系统头文件<signal. h>屮),代表同一用户的 诸进程之间传送事先约定的信息的类型,用于通知某进程发生了 某异常事件。每个进程在运行时,都要通过信号机制来检查是否 有信号到达。若有,便屮断正在执行的程序,转向及该信号相对 应的处理程序,以完成对该事件的处理;处理结束后再返回到原 来的断点继续执行。实质上,信号机制是对屮断机制的一种模拟, 故在早期的UNIX版本屮又把它称为软屮断。 ⑴信号及屮断的相似点: 采用了相同的异步通信方式; 当检测岀有信号或屮断请求时,都暂停正在执行的程序而转去 执行相应的处理

文档评论(0)

kunpengchaoyue + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档