第051章 进程管理和进程间通讯.ppt

  1. 1、本文档共128页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11. 解释进程、管程、线程、过程、例程、类程。 12.在使用线程的系统中,是每个线程有一个堆栈还是每个进程有一个堆栈,说明原因。 13.什么是竞争条件? 14.n个进程分别有标识号(整数)1,2,,N。它们可同时存取文件file,但要满足条件:参与同时存取文件的进程的标识号之和小于N。写一个管程,协调多个进程对该文件的存取。 15.缓冲区buffer1的容量和缓冲区buffer2的容量为无穷。进程p1向buffer1输入产品,进程p2向buffer输入产品。但p1和p2必须保证buffer1中的产品数量与buffer2中产品数量之差在指定的范围[m,n]之间。试用P、V操作描述两个输入进程之间的协同关系。 16.在按优先级算法的进程调度中,如果不算闲逛进程,是否可能没有现行进程或没有就绪进程或两者都没有?各是什么情况?运行进程是否一定是就绪队列中优先级最高的? 17.证明SBF(最短周期优先)对周转时间来说是最优的。 18.说明剥夺调度和非剥夺式调度的适用场合。 19.一个CPU分配给n个进程有多少不相同的分配方式使进程的执行顺序都不一样?如果n个进程在2个CPU上运行,有多少种不同的执行顺序?(提示:从排列组合上考虑) 20.简述LinuxUnix系统V的进程调度算法的特点。 21.在集中式系统中,进程间的通信有哪些方式?这些方式各适用于什么场合? 22.设系统中仅有一类资源,数量为m,由n个进程竞争m个资源。当Needi=0对i=1,2,...,n且所有进程对该类资源的需求总和∑m+n。证明该系统是无死锁的。如果不限定∑小于m+n,则该系统死锁的必要条件是什么? 23.系统处于不安全状态,但有可能不导致死锁。请举例验证之。 24.考虑十字路口的交通死锁问题:把通过十字路口的汽车看作进程,十字路作为资源,画出进程资源图,说明产生死锁问题的4个必要条件在此例中均成立。请用信号量方法建立避免死锁的交通规则。 _down()表示当前进程进入wait等待队列,状态为不可中断的挂起(sleepers++)如果这是第一次申请失败,则sleepers值为1,否则为2。这个设置纯粹是为了下面这句原子加而安排的。 在真正进入休眠以前,_down()还是需要判断一下是不是确实没有资源可用,因为在spin_lock之前什么都可能发生。atomic_add_negative()将sleepers-1(只可能是0或者1,分别表示仅有一个等待进程或是多个)加到count(如果有多个进程申请资源失败进入_down(),count可能为-2、-3等)之上,这个加法完成后,结果为0只可能是在sleepers等于1的时候发生(因为如果sleepers等于2,表示有多个进程执行了down(),则count必然小于-1,因此sleepers-1+count必然小于0),表示count在此之前已经变为0了,也就是说已经有进程释放了资源,因此本进程不用休眠而是获得资源退出_down(),从而也从down()中返回。如果没有进程释放资源,那么在所有等待进程的这一加法完成后,count将等于-1。 因此,从down()调用外面看(无论是在down()中休眠还是获得资源离开down()),count为负时只可能为-1(此时sleepers等于1),这么设计使得up()操作只需要对count加1,判断是否为0就可以知道是否有必要执行唤醒操作_up_wakeup()了。 获得了资源的进程将把sleepers设为0,并唤醒所有其他等待进程,这个操作实际上只是起到恢复count为-1,并使它们再次进入休眠的作用,因为第一个被唤醒的等待进程执行atomic_add_negative()操作后会将count恢复为-1,然后将sleepers置为1;以后的等待进程则会像往常一样重新休眠。 将down()操作设计得如此复杂的结果是up操作相当简单。up()利用汇编原子加将count加1,如果小于等于0表示有等待进程,则调用_up_wakeup()调用_up()唤醒wait;否则直接返回。 在down()中竞争获得资源的进程并不是按照优先级排序的,只是在up()操作完成后第一个被唤醒或者正在_down()中运行而暂未进入休眠的进程成功的可能性稍高一些。 尽管可以将信号量的count初始化为1从而实现一种互斥锁(mutex),但Linux并不保证这个count不会超过1,因为up操作并不考虑count的初值,所以只能依靠程序员自己来控制。相关的初始化接口定义在include/asm/semaphore.h中,但一般程序员可以通过sema_init()接口来初始化信

文档评论(0)

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

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

1亿VIP精品文档

相关文档