课件:UNIX的进程管理.pptVIP

  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文档。上传文档
查看更多
* 优先数计算公式: P-pri= P-cpu/2+PUSER+P-nice+NZERO 其中: PUSER,NZERO—是优先数基值; P-cpu—是每个进程最近一次使用CPU的时间; P-nice—是用户设置的进程优先数偏置值。 普通用户只可使用nice加大优先数 % nice -5 myprog 公式分析: 对于新创建的进程 由于P-cpu/2=0,所以其优先数会最小。因此会比较快的得到调度。 对于原有进程 a) 当被调度时:随着进程被调度执行,其P-cpu的值不断增加,会被其它进程抢先; b) 当不被调度时:由于公式中P-cpu是被一个常数“2”所除,因此每当计算优先数时,早先被调度过的P-cpu/2项会衰减。因此当优先数小于当前进程和其它进程时,又会重新抢占CPU。 进程调度的实现实质上是完成进程之间上下文(映象)的切换。 分三步完成: 第一步:检查是否做且系统允许做上下文切换,若条件满足,则保存: 进程中各段内容(数据,正文,栈) 有关寄存器中内容 相关的栈指针 否则返回有关信息,不作调度。6) 进程调度的实现过程 第二步:0号进程选取就绪队列中一个优先级最高的进程使之占有CPU;若没有满足条件的进程存在,0号进程循环等待直到条件满足为止。 第三步:被选中的进程变为当前进程。 系统从它的核心栈或user结构中恢复该进程的有关寄存器内容和栈指针,新进程开始执行。 进程管理的系统调用 1.系统调用控制进程的产生、运行、消亡 Unix中进程是由系统调用fork创建的实体。 调用fork的是父进程,由fork创建的是子进程。 一个进程可以有多个子进程,但只有一个父进程。父子进程的关系图示如下: parent zomb child child parent wait fork exec exit 2.进程的创建 进程创建:fork() 调用格式:pid=fork(); 若调用失败,pid=-1 若调用成功,返回子进程pid的值(pid=0)及proc结构中的某些参数; 此时子进程得到的返回值是0,且子进程是父进程的副本。 在创建进程时,Unix的核心程序为fork完成: 1)在进程表中为子进程分配proc结构; 2)给子进程赋唯一的标识符pid; 3)复制父进程上下文的一个逻辑副本; 4)增加父进程的文件表、索引节点表的引用数; 5)为父进程返回子进程的标识符pid;为子进程返回标识符0。 fork系统调用举例: /*例题fork_test.c*/ main() { int pid; printf(“Just1 process new.\n”); printf(“Callingfork()…\n”); pid=fork(); if(pid= =0) printf(“I’mthe child.\n”); else if(pid0) printf(“I’mthe parent.\n”) else printf(“forkfailed.\n”); printf(“programend.\n); } 分析运行结果可发现 子进程的存在! 3.终止进程:exit 使用exit系统调用,可以终止进程的运行. 核心程序使进程进入僵死态并释放它所占有的资源: 关闭所有打开的文件; 撤除进程上下文占有的内存。 Exit的调用方式为: exit(satus); 注意: 程序中使用Return 和exit的区别,return是函数结束的返回,而exit是进程结束的返回。 孤儿进程及僵死进程的处理 孤儿进程 当子进程的父进程终止后,该子进程就变成了孤儿进程(orphan process)。 孤儿进程由1(init)号进程收养。 父进程终止后,子进程变成后台进程。 2) 僵死进程 子进程被创建并工作完成后,等待父进程回收时变为僵死进程. 父进程使用wait回收子进程. 孤儿进程由init进程中的特定机制回收. 4.指定进程执行另一程序的系统调用 exec系统调用功能是:用一可执行程序副本覆盖调用程序的正文段和数据段,并用调用进程提供的参数执行新的代码段。 例:main() { …… printf(“one\n”); execl(“/bin/ls”,”ls”,0); printf(“two\n”); perror(“execerror”); } 程序执行情况: 1)execl调用成功时,只输出“one”,然后用ls的执行结果覆盖后面的程序代码; 2)execl调用失败时,输出: one Two exec error:No sushfile or dir

文档评论(0)

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

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

1亿VIP精品文档

相关文档