4第四章 进程同步和死锁
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
signal(S): S.value=S.value+1; if S.value<=0 then wakeup(S.L);
26
记录型信号量
在记录型信号量机制中,S.value 的初值表示 系统中某类资源的数目,因而又称为资源信 号量。 对S.value的每次wait 操作,意味着进程请求 一个单位的该类资源,则系统中可供分配的 该类资源数减少一个,因此描述为 S.value=S.value-1; 当S.value<0 时,表示该类资源已分配完毕, 进程调用block原语,进行自我阻塞,放弃处 理机,并插入到信号量链表S.L 中。 可见,该机制遵循了“让权等待”准则。
17
思考:一个交通拥 挤的十字路口,怎 么组织行人和车辆 在最短时间内通过 这个十字路口呢?
进程同步的实现
18
4.2 信号量机制
19
信号量机制
十字路 口交通
VS
操作 系统
在计算机世界发明 了“信号量机制” 来解决进程共享临 界资源的问题
人类发明红绿灯 机制让交通有序 进行,共享这个 十字路口
20
12
进程同步的基本概念
打印机场景:员工A和 员工B申请打印机资源, 分析:下列几种情况下, 我们如何让他们顺利申 请到打印资源?
13
进程通信
情景1:员工A和员工B目前都只是想用此台打印机, 还没有开始使用的情况,怎么办?
按照先来先用的使用原则或者任务紧急的 进程同步的准则一: A或者B 有限度原则:我们应该立即让员工 空闲让进:当无进程处于临界区时,表明临 使用其打印机资源。 界资源处于空闲状态,应允许一个请求进入临 界区的进程立即进入自己的临界区,以有效地 利用临界资源
10
通过上述场景描述, 场景中的打印机应该 属于什么样的资源?
11
进程同步的基本概念
一台电脑远程 生活中是否还 许多硬件资源(如打印 不论是硬件临界资源,还 连接时,是不 遇到共享硬件 机、磁带机等)或者整 是软件临界资源,多个进 是可以两个人 资源(如打印 台电脑中的操作系统和 程必须互斥地对它进行访 同时使用这台 机、磁带机) 应用软件等软件资源都 问。人们把在每个进程中 电脑所有软件 的情形? 属于临界资源 (Critical 访问临界资源的那段代码 资源? Resouce) 称为临界区(critical section)
络连接到这台打印机,目前公司员工A正在通过网络打印
《笑傲江湖》小说;公司员工B想用这台打印机,打印一
些资料,这种情况下,打印机被两个请求所要求,会怎么
样呢? 两个人都想占用这台打印机资源,怎么办?
6
案例分析
上述案例中提到了两个申请请求,员工A和员工B同 时申请一台有限的资源——打印机。分析如果遇到这 种情况,怎么处理这个事情? 按顺序先后 互相不 使用? 让?
背景
机器语言实现
counter++: ① R1=counter ② R1=R1+1 ③ counter=R1 counter--: ④ R2=counter ⑤ R2=R2-1 ⑥ counter=R2
多个进程并访问和操作同一数据且执 行结果与访问发生的特定顺序有关, 称为竞争条件
5
思考案例
一个公司只有一台打印机,目前所有的电脑都通过网
21
整型信号量
信号量机制之一:整型信号量
最初由Dijkstra把整型信号量定义为一个用于表示
资源数目的整型量S,它与一般整型量不同,除初始化
外,仅能通过原子操作:Wait(S)和Signal(S)来访问
P、V操作的思想来源于红绿灯机制的启示
22
整型信号量
P,V 操作比喻 P,V 操作含义 对于应用程序而言,解决临界区问题需要信号量这 临界区门前有棵树 (S), 定义信号量S 用来挂红灯 个同步工具。P、V操作是信号量机制的核心资源。 进程想进CPU的门 进程欲进入临界区 先得上树取盏灯 调用一次P操作 若树上没灯,排队等待 S≤0,Wait (S):调用阻塞原语Block(Q), 插入到信号量S的阻塞队列Q中 有灯,取下一个去敲门 S=S-1(进程请求一个单位的S类资源) 得灯进程续运行 若S≥0,则调用P(S)的进程返回,继续 执行 运行完了要出门 调用一次V操作 马上还回一盏灯 S=S+1(进程释放一个单位的S类资源) S≤0 若有进程在催债 Release (S) 放个进去事完成
15
进程通信
情景3:如果员工A使用打印机资源打印很多资料, 员工B要打印一份很重要的材料,在15分钟内要交 给老板。 怎么办?
进程同步的准则三: 员工B在这个时间内必须使用打印机资 A一直使用,陷入“死等”状 源,避免 有限等待:对要求访问临界资源的进程, 态。 应保证在有限时间内能进入自己的临界区,以 免陷入“死等”状态。
process A: wait(Dmutex); wait(Emutex);
29
process B: wait(Dmutex); wait(Emutex);
信号量机制
若进程 A和B按下述次序交替执行wait操作
process process process process A: B: A: B: wait(Dmutex); wait(Emutex); wait(Emutex); wait(Dmutex); // Dmutex=0 // Emutex=0 // Emutex=-1,A阻塞 // Dmutex=-1,B阻塞
第四章 进程同步和死锁
1
本章内容
4.1 进程同步的基本概念 4.2 信号量机制 4.3 经典同步问题 4.4 管程
2
本章内wk.baidu.com(续)
4.5死锁产生的原因和必要条件
4.6 死锁处理方法 4.7 作业和实验
3
背景
消费者进程代码: while(true) { 生产者-消费者问题: while(counter==0) ; nextConsumed=buffer[out]; out = (out+1)%buffer_size; 生产者进程代码: counter--; while(true) { while(counter==buffer_size) } ; buffer[in]=nextProduced; in = (in+1)%buffer_size; counter++; } 4
31
AND型信号量
Swait(S1,S2,…,Sn ): wait 操作中, if这样就可避免死锁情况的发生。为此,在 S1 >1 and … and Sn >1 then 增加了一个“ for i=1 to n do AND”条件,故称为AND 同步,或称为 同时 Si = wait Si -1; 操作,即Swait(Simultaneous wait),定义如下: end for else place the process in the waiting queue associated with the first Si found with Si <1,and set the program count of this process to the beginning of Swait operation end if Ssignal(S1,S2,…,Sn ): for i=1 to n do Si = Si +1; Remove all process waiting in the queue associated with Si into the ready queue end for 32
两种形 式制约 关系
间接相互制约关系
直接相互制约关系
9
进程同步的基本概念
间接相互制约关系
同处于一个系统中的进程,通常都共享着某种 系统资源,如共享CPU、共享I/O 设备等。所谓间接 相互制约即源于这种资源共享。
直接相互制约关系
这种制约主要源于进程间的合作。有一输入进 程A通过单缓冲向进程B 提供数据。当该缓冲空时, 计算进程因不能获得所需数据而阻塞,而当进程A把 数据输入缓冲区后,便将进程B唤醒。
最后,进程A和B处于僵持状态。在无外力作 用下,两者都将无法从僵持状态中解脱出来。 我们称此时的进程A和B已进入死锁状态。
30
AND型信号量
信号量机制之三:AND型信号量 将进程在整个运行过程中需要的所有资源, 一次性全部地分配给进程,待进程使用完后再一 起释放。 只要尚有一个资源未能分配给进程,其它所 有可能为之分配的资源也不分配给它。亦即,对 若干个临界资源的分配,采取原子操作方式:要 么把它所请求的资源全部分配到进程,要么一个 也不分配。
回顾和思考:回顾 进程同步的信号量 机制,生活中有哪 些常用的经典同步 案例?
33
4.3 经典同步问题
34
生产者-消费者问题
案例1:生活中,我们的商品被商家生产,被买 家买走消费掉,形成了金钱和物品的流通。但是 如果产品生产过多,超过需求,会造成什么样的 状况?反之,生产过少,买家又处于什么状况, 这些问题怎么解决? 这是我们日常生活中常见的生产者和消费者问题, 生产者生产商品,消费者消费商品。只有达到供给 平衡,才能让消费者不至于产生没有产品可取和生 产者生产过剩。
27
上述的进程互 斥问题,是针 对各进程之间 只共享一个临 界资源而言的。
在有些应用场合, 若一个进程需要获 得两个或更多的共 享资源方能执行其 任务。怎么办呢?
28
信号量机制
假定现有两个进程A和B,他们都要求访问共享 数据D 和E。可为这两个数据分别设置用于互斥 的信号量Dmutex 和Emutex,并令它们的初值都 是1。相应地,在两个进程中都要包含两个对 Dmutex 和Emutex 的操作。
进程同步的主要任务是对多个相关进程在执行次序上 进行协调,以使并发执行的诸进程之间能有效地共享 资源和相互合作,从而使程序的执行具有可再现性。
7
4.1 进程同步的基本概念
8
进程同步的基本概念
当程序并发执行时,由于资源共享和进程合作,使同
处于一个系统中的诸进程之间可能存在着以下两种形式的
制约关系。
14
进程通信
情景2:如果员工A正在使用打印机资源,员工B
在A使用过程中来申请打印机资源,怎么办?
进程同步的准则二: 可以应该让员工B 等待 A使用完之后,再 忙则等待:当已有进程进入临界区时,表明 使用打印机资源,来保证两个人都能到打 临界资源正在被访问,因而其它试图进入临界 印机。 区的进程必须等待,以保证对临界资源的互斥 访问。
P、V操作
Wait(S)和Signal(S) 原子操作也称为P、V操作:
wait(S){ While(S<=0) ; // no-op S--; } signal(S){ S++; }
Wait(S)和Signal(S)是两个原子操作(Atomic Operation),因此,它们在执行时是不可中断的。 亦即,当一个进程在修改某信号量时,没有其他 进程可同时对该信号量进行修改。此外,在wait 操作中,对S值的测试和S--;的执行都不可中断。
16
进程通信
情景4:如果员工A正在使用打印机资源,并且打印 的是很重要的材料,而且可能要使用一天。员工B 打印一份不太重要的材料,这种情况下,怎么办?
员工B应该立即放弃打印,回到自己的 进程同步的准则四: 工作岗位上进行工作,避免陷入“忙 让权等待:当进程不能进入自己的临界 等”,浪费人力资源。 区时,应立即释放处理机,以免进程陷入 “忙等”状态。
23
整型信号量
在整型信号量机制中的wait操作,只要是信号量 S<=0,就会不断测试。因此,该机制并未遵循“让 权等待”准则,而是使进程处于“忙等”状态
24
记录型信号量
信号量机制之二:记录型信号量 记录型信号量机制则是一种不存在“忙等”现象 的进程同步机制。采取的是“让权等待”的策略,但 又会出现多个进程等待访问同一临界资源的情况。 在此信号量机制中,除了需要一个用于代表资源 数目的整型变量value外,还应增加一个进程链表指针 L,用于链接上述的所有等待进程。 记录型信号量是由于它采用了记录型的数据结构 而得名的。
25
记录型信号量
value和链表L数据项定 义如下: type semaphore=record value: integer L: list of process; end Wait(S)和Signal(S)操作可描 述为:
wait(S): S.value=S.value-1; if S.value<0 then block(S.L);