进程互斥、同步、通信、死锁

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
荷兰著名科学家,后来的计算机图灵
奖获得者,E.W.Dijkstra于1965年提 出了用作进程同步工具的信号量 (semaphore)机制,这是一种卓有成 效的进程互斥同步工具,已被广泛应 用于现代计算机系统中
信号量和P、V操作
,将交通管制中 多种颜色的信号灯管理交通的方法引 入操作系统,让两个或多个进程通过 特殊变量展开交互。
信号量的整型分量的物理含义:
当S
.value ≥0时,表示某类可用资 源的数目,或者说表示可以执行P操作 而不会被阻塞的进程的数目 号量S的阻塞队列中的进程数,即系统 中因请求该类资源而被阻塞的进程的数 目,亦即被信号灯挡住的进程数目
当S .value <0时,其绝对值表示信
信号量的使用
必须置一次且只能置一次初值
一种最为简单和直观的解决方法 是: 进程间相互给对方发送执行条件 已经具备的信号
对一个消息赋予唯一的消息名,则可用
过程wait(消息名)表示进程等待合作 进程发来的消息;用signal (消息名) 表示合作进程发送消息 P60
3.6.2 私用信号量
可以把各进程之间发送的消息作为信
号量看待 该信号量只与相互制约的进程有关, 而不是与整组并发进程有关,因此称 为私用信号量Private Sem 称互斥时使用的信号量为公用信号量
2.临界区(Critical Section)



不允许多个并发进程交叉执行的一段程序 在每个进程中访问临界资源的那段代码 注意:临界区是对某一临界资源而言的, 对于不同临界资源的临界区,它们之间不 存在互斥 如有程序段A、B是关于变量X的临界区,而 C、D是关于变量Y的临界区,那么,A、B之 间需要互斥执行,C、D之间也要互斥执行, 而A与C、B与D之间不用互斥执行
P1 P2 P3 P(S)
P(S)
P(S) V(S) V(S) V(S)
临界区
P: P(sem) S V(sem)
P.V操作必须成对出现,有一个P操作
就一定有一个V操作,互斥操作中,同 处于同一进程
信号量机制实施的主要步骤是:
(1)分析清楚涉及的进程间的制约关

(2)设置信号量(包括信号量的个数
进程同步:指的是两个或多个进程为了合 作完成同一个任务,在执行速度或某些 个确定的时序点上必须相互协调,即一 个进程的执行依赖于另一个进程——其 合作伙伴的消息,当一个进程到达了某 一确定点而没有得到合作伙伴发来的 “已完成某些操作”的消息时必须等待, 直到该消息到达被唤醒后,才能继续向 前推进。


临界区的描述:临界区按不同的公用 数据划分为不同的集合。这些集合称 为类class When<类名>do<临界区>od
3.互斥是间接制约 进程间要通过某种中介发生联系, 是无意识安排的,例如受共享资源 制约 同步是直接制约 进程间的相互联系是有意识的安 排的
4.什么是互斥 定义:一组并发过程中的一个或多 个程序段,因共享某一公有资源而 导致它们必须以一个不允许交叉执 行的单位执行 不允许两个以上的共享该资源的并 发进程同时进入临界区称为互斥
缺点:存在一些影响系统可靠性和执行 效率的问题 循环测试定位消耗较多CPU计算时间 某些情况下出现不公平现象,某进程 永久饥饿状态(举例)。原因:每个 进程是否能进入临界区是依靠自己的 测试判断,这样没有获得执行机会的 进程就无法判断 解决方法:设置管理员也就是操作系 统中的信号量
3.5.3 信号量和P,V原语
P操作
P(sem) { sem.value = sem.value -1 ; if (sem.value < 0) { 保护当前进程CPU现场 该进程状态置为等待状态 将该进程的PCB插入相应的等待队列末尾 sem.queue 转进程调度 }else return }
V原语操作 1. sem.value加1 2. 若sem.value加1后大于零,则进 程继续执行 3. 若sem.value加1后小于或等于零, 则从该信号的等待队列中唤醒一 个等待进程,转进程调度
并发执行的多个进程可能产生互斥或
同步的相互制约关系,不采取措施, 可能导致结果的不可再现性。影响系 统效率,而且还可以导致系统崩溃。 为此,现代操作系统都在内核中设有 进程的互斥同步机制,以控制并发执 行的诸进程能有效的共享资源和相互 合作,同时使并发程序的执行仍具有 可再现性。
3.5 进程互斥
保证平等、独立的竞争和使用公有资
源的权力,且保证任一时刻至多只有 一个进程在临界区 有限等待:任何进入互斥区的要求应 在有限的时间内得到满足 保证并发进程不发生死锁
实现互斥的方法
软件:不同的算法实现
加锁
硬件:
在硬件中设置了测试与设置指令
Test-and-Set实现互斥
V操作
V(sem) { sem.value = sem.value +1; if (sem.value < = 0) { 唤醒相应等待队列sem.queue中等待的一 个进程 改变其状态为就绪态 并将其插入就绪队列 } else return
P,V操作用原语来实现,保证了 对临界资源信号量sem的互斥访 问,因为在P,V操作中都要改变 sem值
3.5.4 用P,V原语实现进程互斥
把临界区置于P(sem)和V(sem)之间
用P、V操作原语实现进程的互斥,只
需在相关进程的临界区的前后分别施 以P操作和V操作即可,即在相关进程 的程序里由P操作和V操作原语紧夹着 临界区,就能保证这些进程互斥地进 入各自的临界区
用P.V操作解决进程间互斥问题
3.5.1
资源共享所引起的制约 3.5.2 互斥的加锁实现 3.5.3 信号量和P,V原语 3.5.4 用 P,V原语实现进程互斥
3.5.1.资源共享所引起的制约

课本上的例子 一飞机订票系统,两个终端,运行T1、 T2进程 T1 : T2: ... ... Read(x); Read(x); if x>=1 then if x>=1 then x:=x-1; x:=x-1; write(x); write(x); ... ...
3.5.2 互斥的加锁实现
加锁是一种最简单的实现进程互斥的
方法,它使用一个锁变量W来表示某种 临界资源的状态 W=1表示资源空闲可用;W=0表示资源 正被使用
对临界区加锁以实现互斥
lock(w)= begin local v repeat v <- w until v=1 w <- 0 end 使用完以后unlock(w)将w赋值为1
3.6.3 用 P,V原语操作实现同步
为各并发进程设置私用信号量 为私用信号量赋初值
利用P,V原语和私用信号量规定各
进程的执行顺序
主要步骤是: (1)分析清楚涉及的进程间的制约关

(2)设置信号量(包括信号量的个数
和初值,信号量的物理含义)。
(3)给出进程相应程序的算法描述或
共享缓冲区的进程的同步

设某计算进程C和打印进程P共用一个缓 冲区Buf,C进程负责不断地计算数据并送 入缓冲区Buf中,P进程负责不断地从缓冲 区Buf中取出数据去打印。
分析
通过分析可知,C、P进程必须遵守以下同 步规则: 当C进程把计算结果送入缓冲区时,P进程 才能从缓冲区中取出结果去打印; 当P进程把缓冲区中的数据取出打印后,C 进程才能把下一个计算结果送入缓冲区 C的输出结果是P的执行条件,P的执行结果 也是C的执行条件 P59
和初值,信号量的物理含义)。
(3)给出进程相应程序的算法描述或
流程控制,并把P、V操作加到程序的适 当处。
3.6
3.6.1
进程同步
同步的概念 3.6.2 私用信号量 3.6.3 用 P,V原语操作实现同步 3.6.4 生产者-消费者问题
3.6.1同步的概念
相互合作的进程之间存在同步 属于直接制约
操作系统中,信号量表示物理资源的
实体,它是整型变量。 实现时,信号量是一种记录型数据结 构,有两个分量:一个是信号量的值 另一个是信号量队列的队列指针。
信号量:semaphore
是一个数据结构 定义如下: struct sem { int value; pointer_PCB queue; } 信号量说明: sem s;
1.临界资源(Critical Resource)



系统中某些资源一次只允许一个进程使用, 称这样的资源为临界资源或互斥资源或共 享变量 如:进程AB共享一台打印机,若让它们 交替使用则得到的结果肯定不是我们希望 的。 临界资源可能是硬件,也可能是软件:变 量,数据,表格,队列等。 并发进程对临界资源的访问必须作某种限 制,否则就可能出与时间有关的错误。
ຫໍສະໝຸດ Baidu
5.互斥的原则: 有空让进 让权等待 忙则等待 有限等待
5.互斥的原则: 有空让进:当无进程在互斥区时,任何 有权使用互斥区的进程可进入 让权等待:并发进程中的某个进程不在 临界区时,不阻止其它进程进入临界区 忙则等待:同时有多个进程要求进入临 界区,只能让其中之一进入临界区,其 他进程必须等待
初值不能为负数
必须说明该信号量所代表的意义
只能执行P、V操作
P,V原语 原语的执行必须是连续的,在执行过程 中不允许被中断 信号量sem是与临界区内的临界资源有 关的信号量 一次P原语操作使得sem.value减1 一次V原语操作使得sem.value加1
P代表荷兰语的Passeren/proberen,
P、V操作的物理含义:
P操作表示“等信号”,即测试一个要
等的信号是否到达;
V操作表示“发信号”。在实现互斥时
就是“临界资源可用”。
在互斥问题中,每执行一次P操作的含
义,可理解为进程请求一个单位的资源; 每执行一次V操作的含义,可理解为进程 释放一个单位的资源
信号量及P、V操作
信号量的物理含义: S>0表示有S个资源可用 S=0表示无资源可用 S<0则| S |表示S等待队列中的进程个数 P(S):表示申请一个资源 V(S):表示释放一个资源。
信号量的初值应该大于等于0
对于两个并发进程,1个可用资源互 斥信号量的值仅取1、0和-1三个值 若sem=1表示没有进程进入临界区 若sem =0表示有一个进程进入临界 区 若sem =-1表示一个进程进入临界 区,另一个进程等待进入。
思考
对于N个并发进程,1个可用资源,
信号量的取值范围是什么,有什 么含义,m个可用资源呢?
意为“通过/测试或等待”;
V代表荷兰语的Vrijgeren/verhogen,
意为“释放/增加或发信号”。
P原语操作
1.
sem.value减1
2.
3.
若sem.value减1后仍大于或等于 零,则进程继续执行 若sem.value减1后小于零,则进 程被阻塞后插入与该信号相对应 的队列中,转进程调度
流程控制,并把P、V操作加到程序的适 当处。
共享缓冲区的进程的同步

设某计算进程C和打印进程P共用一个缓 冲区Buf,C进程负责不断地计算数据并送 入缓冲区Buf中,P进程负责不断地从缓冲 区Buf中取出数据去打印。
设有两个信号量,Sb表示缓冲区空,Sa表示 缓冲区满,初始化Sb=1,Sa=0。 两个进程的同步可以描述如下:
系统中存在的这些进程之间存在两种 关系: 资源共享关系:例如共享CPU和I/O 设备、共享数据内存等 相互合作关系:例如在输入进程、 计算进程和打印进程三者之间
针对进程之间存在的两种关系,进程间的作用 方式也有两种: 互斥:由于各进程要求共享资源,而有些资 源需要互斥使用,因此各进程间竞争使用这 些资源,进程的这种关系为进程的互斥 同步:系统中一些进程需要相互合作,共同 完成一项任务。具体说,一个进程运行到某 一点时要求另一伙伴进程为它提供消息,在 未获得消息之前,该进程处于等待状态,获 得消息后被唤醒进入就绪态

P、V操作的物理含义:
P操作表示“等信号”,即测试一个要
等的信号是否到达;
V操作表示“发信号”。这个信号在实
现同步时就是“合作者的伙伴进程已完 成前趋任务”,在实现互斥时就是“临 界资源可用”。
相关文档
最新文档