chap8-进程讲解.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文档。上传文档
查看更多
。对就绪进程的两种处理方法 内存就绪进程参与竞争,外存就绪应先换入内存。换入过程由0#进程管理。 。有些状态只能做单向转换 内存睡眠的进程可调出到外存睡眠,而外存睡眠的进程不能调入到内存睡眠,外存睡眠的进程在被唤醒时只能进入外存就绪态,等待下一次的调度时再进入内存,转换是单向的。 2. UNIX进程调度问题 1) 进程调度程序主要责任 对参与竞争CPU且已具备执行条件的进程进行分析和裁决 对选中的进程做CPU控制权转交 管理进程运行中各种状态的转换 完成进程在系统内外存之间的交换 2) UNIX进程调度原理 传统UNIX采用:动态优先级多级反馈循环调度法(Round Robin With Multiple Feedback). 调度原理:*)首先给进程分配一个时间片 *)时间片结束时计算进程优先级 *) 用优先数做比较,选出高优先级进程 *)分析情况重置状态 *)调度高优先级进程开始运行 *)被抢夺了cpu的进程反馈到相应的优先级 队列中 3) 调度时机 UNIX中有两种调度时机: a)进程自动放弃CPU b) 进程由核心态转为用户态时 调度时机可实现性说明: 具体调度由0#进程中的swtch程序完成。 且第二种调度时机特点是:综合考虑减少系统设计复杂度及实际运行中的可行性。 第一种调度时机是可捕获的,插入swtch很容易。 4) 调度标志的设置 在调度管理中设置三种调度标志: Runrun --- 请求cpu调度 Runin --- 请求换入内存的调度标志 Runout --- 请求换出内存的标志 5) 调度策略及优先级计算 Unix sysV采用动态优先数调度策略,并且规定 优先数越大,其优先级越低。 优先数计算公式: 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) 进程调度的实现过程 第三步:被选中的进程变为当前进程。 系统从它的核心栈或user结构中恢复该进程的有关寄存器 内容和栈指针,新进程开始执行。 第二步:0号进程选取就绪队列中一个优先级最高的进程 使之占有CPU;若没有满足条件的进程存在,0号进程循环 等待直到条件满足为止。 1.系统调用控制进程的产生、运行、消亡 Unix中进程是由系统调用fork创建的实体。 调用fork的是父进程,由fork创建的是子进程。 一个进程可以有多个子进程,但只有一个父进程。父子进程的关系图示如下: 8.4 用于进程管理的系统调用 fork 2.进程的创建 进程创建:fork() 调用格式:pid=fork(); 若调用失败,pid=-1 若调用成功,返回子进程pid的值(pid=0)及proc结构中的某些参数; 此时子进程得到的返回值是0,且子进程是父进程的副本。 1)在进程表中为子进程分配proc结构; 2)给子进程赋唯一的标识符pid; 3)复制父进程上下文的一个逻辑副本; 4)增加父进程的文件表、索引节点表的引用数; 5)为父进程返回子进程的标识符pid;为子进程返回 标识符0。 在创建进程时,Unix的核心程序为fork完成: /*例题 fork_test.c*/ main() {int pid; printf(“Just 1 process new.\n”)

文档评论(0)

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

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

1亿VIP精品文档

相关文档