计算机操作系统(第三章)_3.5(进程的互斥与同步)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 假如初始时“count = 5” ,可能会出现下面的交替执行情况: S0: 生产者执行 register1 = count {register1 = 5} S1: 生产者执行 register1 = register1 + 1 {register1 = 6} S2: 消费者执行 register2 = count {register2 = 5} S3: 消费者执行 register2 = register2 - 1 {register2 = 4} S4: 生产者执行 count = register1 {count = 6 } S5: 消费者执行 count = register2 {count = 4}
第三章 进程管理
第13页
1.临界区: 每个进程中访问临界资源 的那段程序段称为临界区(临 界段)。 进入区(entry section):在进入临 界区之前,检查可否进入临界区 的一段代码。如果可以进入临界 区,通常设置相应"正在访问临界 区"标志 退出区(exit section):用于将"正 在访问临界区"标志清除。 剩余区(remainder section):代 码中的其余部分。
pc ( )
: p(mutex); CSc; v(mutex); : }
信号灯mutex的取值范围:-2、-1、0、1
2014-1-6
第三章 进程管理
第30页
思考:信号量的值有什么含义? 信号量的值可以大于1吗?
P/V原语的使用方法
进程在进入临界区之前,执行P操作(申请资源) 进程在退出临界区之后,执行V操作(归还资源)
2014-1-6
第三章 进程管理
第16页
互斥的例子:
例1:进程A、B共享一台打印机,则当一进程占用打印机后,另 一进程若也要使用打印机,则必须等待,直至它释放打印机。 例2:机票预订系统 A 旅行社A查到某机座空; : 与其顾客商量; : 旅行社A预订该机座; : B
: 旅行社B查到某机座空;
: B预订该机座;
第三章 进程管理
第33页
直接制约:一组在异步环境下的并发进程,各自的执行结果 互为对方的执行条件,从而限制各进程的执行速度的过程 异步环境主要指各并发进程的执行起始时间的随机性和执行 速度的独立性 直接制约的进程互相给对方进程发送执行条件已经具备的信 号,只要收到了制约进程发来的信号便开始执行,而在未 收到制约进程发来的信号时便进入等待状态 进程间的同步:把异步环境下的一组并发进程,因直接制 约而互相发送消息而进行互相合作、互相等待,使得各进 程按一定的速度执行的过程。 合作进程:具有同步关系的一组并发进程称为合作进程, 合作进程间互相发送的信号称为消息或事件
的管理办法,以制约并发进程。这就是互斥
2014-1-6
第三章 进程管理
第பைடு நூலகம்5页
3.互斥
定义: 一组并发进程中的一个或多个程序段,因共享某 一公有资源而导致它们必须以一个不允许交叉执行 的单位执行。也就是说,不允许两个以上的共享该 资源的并发进程同时进入临界区称为互斥。 一般情况下,作为程序段的一个过程不允许多 个进程共同访问它。
2014-1-6
第三章 进程管理
第28页
操作系统利用信号灯的状态对并发进程和共享资源进行 控制和管理。 s代表资源的实体,是整型变量。 s > 0 时,表示绿灯,进程执行。(表示系统拥有的 资源个数) s ≤ 0 时,表示红灯,进程停止执行。( |s|表示等待 某资源的进程个数) 注意:创建信号灯时,应准确说明信号灯 s 的意义和 初值 (这个初值绝不能为负值)。
进入临界区csb
开锁原语
开锁原语
2014-1-6
第三章 进程管理
第22页
main ( ) { {
ppa ( ) {
ppb ( )
int w=0;
cobegin ppa(); ppb(); coend
:
lock(w); CSa; unlock(w); :
:
lock(w); CSb; unlock(w); :
消费者进程
while (true) { while (count == 0) ; // do nothing nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count --; /* consume the item in nextConsumed */ }
生产者进程 while (true) { /* produce an item and put in nextProduced */ while (count == BUFFER_SIZE) ; // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count ++; }
2014-1-6
第三章 进程管理
第18页
• 进入临界区的准则: • (1)每次至多有一个进程处于临界区; • (2)当有若干个进程欲进入临界区时,应在有限 的时间内使其进入; • (3)进程在临界区内仅逗留有限的时间。
2014-1-6
第三章 进程管理
第19页
3.5.2 互斥的加锁实现
人们可能认为只需把临界区中的各个过程按不同的时间排列 调用就行了,但由于用户程序执行开始的随机性,要求该组并发 进程中的每个进程事先知道其他并发进程与系统的动作。不可能 把临界区中的各个过程按不同的时间排列调用。因此,互斥的实 现必须通过加锁的方式进行解决。
2014-1-6
第三章 进程管理
第12页
进程的并发执行不仅仅是用户程序的执行开始时间的随机 性和提高资源利用率的结果,也是资源有限性导致资源的竞 争与共享对进程的执行过程进行制约所造成的
一. 互斥的概念 引例: 宿舍电话的使用 打印机的使用 1. 临界资源:一次仅允许一个进程使用的资源称为临界资源 引例中的电话和打印机都属于临界资源。除此之外,还有内 存变量、指针、数组等等也是临界资源。
time
第三章 进程管理
第7页
例2 对于生产者消费者问题。我们需要用一个变量 (count)来记录当前缓冲区中的数据个数。开始时,count 的值设为零,如果生产者生产了一个产品放到一个新的缓 冲中,则将count的值加1,如果消费者消费了某个缓冲区 中的产品,则将count的值减1。
生产者消费者1.exe
在系统中为每个临界资源设置一个锁位, 0 表示资源可用, 1 表示资源已被占用(不可用)。 同时,系统要提供上锁原语和开锁原语,供进程在 使用临界资源之前和使用完临界资源之后使用。
2014-1-6
第三章 进程管理
第21页
2.用上锁原语和开锁原语实现进程互斥
进程A 进程B
上锁原语
上锁原语
进入临界区csa
第三章 进程管理
第25页
V操作: (1) sem加1; (2) 若结果大于零,进程继续执行; (3) 若相加结果小于或等于零,则从该信号的等待队列中唤 醒一等待进程,然后再返回原进程继续执行或转进程调度。
第三章 进程管理
第26页
信号量
图3.11 P原语操作功能
2014-1-6
图 3.12V原语操作功能
2014-1-6
第三章 进程管理
第29页
main ( ) { int mutex=1; cobegin pa( ); pb( ); pc( ); coend } {
pa ( ) { : p(mutex); CSa; v(mutex); : } }
pb ( ) { : p(mutex); CSb; v(mutex); :
}
}
}
2014-1-6
第三章 进程管理
第23页
3.5.3信号量和P,V原语
1.信号量(Semaphore)(信号灯) 信号量:除赋初值外仅能由同步原语(P、V操作)对其操作的整 型变量,其值与其所代表的资源使用情况有关。 信号量的物理意义: 当其值≥0代表可用资源的数量 当其值<0,其绝对值代表因请求该信号量所代表的资源而被阻塞 的进程数量。建立一个信号量时,必须说明所建信号量所代表 的意义和赋初值 信号量代表的是某一个资源,其初值代表的资源的可用数
time
第三章 进程管理
第5页
如果两个进程的执行顺序为:
P1: R1=x; R1=R1+1; x=R1; P2: R2=x; R2=R2+1; x=R2
time
第三章 进程管理
第6页
如果两个进程的执行顺序为:
P1: R1=x; P2: R2=x; R2=R2+1; x=R2 R1=R1+1; x=R1;
计算机操作系统
第三章 进程管理_2
3.5
进程互斥
3.5.1 资源共享引起的制约
多进程对共享变量的并发访问 可能会导致数据的不一致!
2014-1-6
第三章 进程管理
第2页
• 例1
假设有两个并发执行的进程P1和P2。
cobegin p1; p2; coend
P1: …. x = x + 1; …
P2: …. x = x + 1; …
2014-1-6
第三章 进程管理
第17页
并发进程互斥必须满足的原则
(1) 不能假设各并发进程的相对执行速度。即各并发进程
享有平等的、独立的竞争共有资源的权利,且在不采取任 何措施的条件下,在临界区内任一指令结束时,其他并发 进程可以进入临界区。 (2) 并发进程中的某个进程不在临界区时,它不阻止其他 进程进入临界区。(空闲让进) (3) 并发进程中的若干个进程申请进入临界区时,只能允 许一个进程进入 (4) 并发进程中的某个进程申请进入临界区时开始,应在 有限时间内得以进入临界区 准则(1),(2),(3)是保证各并发进程享有平等的、独立的竞争 和使用公有资源的权利,且保证每一时刻至多只有一个进程在 临界区。而准则(4)则是并发进程不发生死锁(将在后面讲述) 的重要保证。
竞争条件
• count++ 指令的执行可能被实现为
register1 = count register1 = register1 + 1 count = register1 • count– 指令的执行可能被实现为
register2 = count register2 = register2 - 1 count = register2
1、互斥的实现
当某个进程进入临界区之后,它将锁上临界区,直到它 退出临界区时为止。并发进程在申请进入临界区时,首先测试该 临界区是否是上锁的。如果该临界区已被锁住,则该进程要等到 该临界区开锁之后才有可能获得临界区。
2014-1-6
第三章 进程管理
第20页
二. 用锁实现互斥
1.锁和上锁、开锁操作
解决进程互斥的最简单的办法是加锁。
2014-1-6
第三章 进程管理
第14页
2. 间接制约
• 间接制约:把由于共享某一公有资源而引起的在临界区
内不允许并发进程交叉执行的现象,称为由共享公有资
源而造成的对并发进程执行速度的间接制约
• 直接制约:一组在异步环境下的并发进程,各自的执行 结果互为对方的执行条件,从而限制各进程的执行速度 的过程 • 对于每一类,系统应有相应的分配和释放相应公有资源
第三章 进程管理
第32页
3.6 进程同步
3.6.1. 同步的概念
互斥的概念来自于诸进程对独占使用资源(设备)的 竞争,同步来源于多个进程的合作。在人类社会中竞争与 合作是永恒的。 同步:所谓同步就是并发进程在一些关键点上可能需 要相互等待与互通消息,这样的相互制约关系称为进程同 步。
2014-1-6
2014-1-6
第三章 进程管理
第24页
2.
P、V操作
P操作和V操作都是用原语的方式来实现的。
P,V操作都必须以原语实现,且在P,V原语执行期间 不允许中断发生。
P操作: (1) sem减 1; (2) 若sem大于或等于零,则进程继续执行; (3) 若sem减1后小于零,则该进程被阻塞后与该信号相对 应的队列中,然后转进程调度。
第三章 进程管理
第3页
X = X + 1 操作将被分解为几条机器指令来实现,如:
1
将变量x的值放入寄存器
register = x
2
3
把寄存器中的值加1
把寄存器的值存到x中
register = register + 1
x = register
第三章 进程管理
第4页
如果两个进程的执行顺序为:
P1: R1=x; R1=R1+1; x=R1; P2: R2=x; R2=R2+1; x=R2
第27页
第三章 进程管理
3.用信号灯的 P、V操作实现进程互斥
利用P,V原语和信号量,可以方便地解决并发进程的 互斥问题,而且不会产生使用加锁法解决互斥问题时所出现 的问题。 设:mutex为互斥信号灯,初值为1。
进程 pa 进程 pb
p(mutex) 进入临界区csa v(mutex)
p(mutex) 进入临界区csb v(mutex)