进程的同步与死锁.ppt

  1. 1、本文档共113页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 4 章 进程的同步和死锁 §4.1 进程的同步和互斥 4.1.1 进程的同步 1.进程同步举例 例.公共汽车中的司机和售票员。 §4.1 进程的同步和互斥 2.进程同步的概念 进程的同步是指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。 通常,把共同完成一个任务的若干进程称为合作进程。合作进程在并发执行时必须同步推进才能得到正确的执行结果。 §4.1 进程的同步和互斥 4.1.2 进程互斥 1.进程互斥举例 假定系统中只有一台打印机,进程p1,p2都需要使用打印机,如果让它们同时使用,则两个进程的输出交织在一起,打印出的结果无法使用。 为了解决这一问题,进程使用之前先要提出申请,一旦系统将打印机分配给它,就一直由它独占使用,其它申请使用打印机的进程则必须等待。 进程p1和p2在逻辑上完全独立,毫无关系,只是由于竞争同一个物理资源而相互制约。这种进程之间的间接制约关系不具有时间次序的特征,谁先向系统提出申请,谁就先执行。这种对共享资源的排他性的使用关系就是进程的互斥关系。 §4.1 进程的同步和互斥 2.临界资源 在计算机的资源中,有些资源,如上面提到的打印机资源,一次能被一个进程使用,这类资源称为临界资源(Critical Resource)。 临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。它们虽然可以被若干个进程所共享,但一次能为一个进程所利用。 为了保证共享临界资源的各个进程能正确运行,当临界资源由一个进程占用后,其它进程如果要使用它,必须等待占用进程使用完毕并把它释放后,才能由另一个进程使用。多个进程在共享临界资源时的这种制约关系称为进程的互斥。 §4.1 进程的同步和互斥 3.临界区的概念 一个程序片段的集合,这些程序片段分散在不同的进程中,对某个共享的数据结构(共享资源)进行操作。在进程中涉及到临界资源的程序段叫临界区或临界段。 对临界区操作的诸进程必须互斥地进入临界区。 §4.1 进程的同步和互斥 临界区是对某一临界资源而言的,对于不同临界资源的临界区,它们之间不相交,所以不必互斥地执行,而相对于同一临界资源的若干个临界区,则必须互斥的进入,即对临界资源的操作必须互斥地执行。 例如有程序段A、B是关于变量X的临界区,而C、D是关于变量Y的临界区,那么,A、B之间需要互斥执行,C、D之间也要互斥执行,而A与C、B与D之间不用互斥执行。 §4.1 进程的同步和互斥 临界区进入准则: 空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区。 忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待。 有限等待。对任何要求访问临界资源的进程,应保证在有限的时间内能进入自己的临界区,以免陷入“死等”状态。 让权等待。当进程不能进入自己的临界区,应立即放弃占用CPU,以使其他进程有机会得到CPU的使用权,以免陷入“忙等”。 §4.1 进程的同步和互斥 4.进程同步和互斥的区别 互斥的各个进程在各自单独执行时都可以得到正确的运行结果,但是当它们在临界区内交叉执行时就可能出现问题。 而同步的各个进程,如果各自单独执行将不会完成作业的特定任务,只要当它们互相配合、共同协调推进时才能得到正确的运行结果。 互斥的进程只要求它们不能同时进入临界区,而至于哪个进程先进入则不会产生运行的错误。但同步的进程的协调关系是建立在它们之间执行时序的基础上,所以,各个进程必须按照严格的先后次序执行。 一般情况下,互斥的进程并不知道对方的存在,而同步的进程不仅知道其它进程的存在,还要通过与其它进程的通信来达到相互的协调。 §4.1 进程的同步和互斥 4.1.3 信号量机制 信号量(Semaphore)机制是荷兰学者E.W.Dijkstra在1965年提出的一种解决进程同步、互斥问题的更通用工具,并在THE操作系统中得到实现。 信号量S是个整数变量,除了初始化外,它只能通过两个标准的原子操作wait和signal来访问。这两个操作原来被称为P(用于wait,表测试)和V(用于signal,表增加)操作。 §4.1 进程的同步和互斥 wait的经典定义可用伪代码表示为: wait(s) { while (s=0) ; // no.op s - - . .; } signal的经典定义可用伪代码表示为: signal (s) { s + +; } §4.1 进程的同步和互斥 1.信号量的使用 可使用信号量来解决n个进程的临

文档评论(0)

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

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

1亿VIP精品文档

相关文档