第4章进程同步与死锁

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
入口区
临界区
退出区
其余代码区
进程A进入临界区 进程A
进程A离开临界区
进程B
进程B阻塞 进程B尝试进入临界区 进程B进入临界区 进程B离开临界区
3.临界区访问准则
无论使用将导致进程同步的错误。
(1) 空闲让进:当没有进程处于临界区,临界 资源处于空闲状态时,立即可以允许一个 进程进入临界区。
4.3 信号量
4.3.1整型信号量机制 4.3.2记录型信号量机制 4.3.3 AND型信号量机制
4.3 信号量
• 从概念上将信号量类似于交通管理中的信 号灯,通过信号量的状态来决定并发进程 对临界资源的访问顺序。信号量可以在多 进程间传递简单的信号,使一个进程可以 在某位置阻塞,直到接收到特定信号后继 续运行,从而达到多进程相互协作的目的。
第四章 进程同步与死锁
本章主要讲述以下几方面的内容:
(1) 进程同步和互斥,临界资源及临界区的基 本概念
(2) 实现进程互斥的方法 (3) 信号量机制与P、V操作 (4) 一些经典的进程同步问题 (5) 利用管程实现进程同步 (6) 进程的死锁及处理机制 (7) Linux系统的进程同步及死锁
4.1 进程同步的基本概念
临界区; turn=0;
int turn=0;
进程A:
算法2:利用双标志法判断进程是否进入临界 区。
这种算法通过使用一个flag数组来表示进程是 否希望进入临界区。对两个并发进程A与B ,若flag[0]=1则表示进程A期望进入临界区 ,若flag[1]=1则表示进f进la程g[1程B]:=1;B期望进入临界区 。进程A与B在真正进twuhr入nile=(0f;临lag[0界]&&区turn之==0)前; 先查看 一下对方的flag标志,临fla界g[如1区]=;0果; 对方正在进入临 界区则将进行等待。另外,为了避免并发 执行时的错误还需要通过一个变量turn来避
量或硬件资源,由于进程的执行具有不确 定性,如果不对进程的执行加以制约其执 行结果往往是错误的。
例4-1 假设有两个并发进程P1及P2。
P1 S1:X=1 S2:X=X+1 S3:A=X
P2 S4:X=2 S5:X=X*2 S6:B=X
4.1.3 进程的同步与互斥
1.进程的同步 所谓进程同步是指,当进程运行到某一点 时,若其他进程已完成了某种操作,使进 程满足了继续运行的条件,进程才能够继 续运行,否则必须停下来等待。通常将进 程等待的那一点称为“同步点”而将等待运行 的条件称为“同步条件”。
• 在信号量同步机制中包含“检测”与“归 还”两个操作。检测操作称为P操作,用来 发出检测信号量的操作,查看是否可访问 临界资源,若检测通过,则开始访问临界
4.3.1整型信号量机制
整型信号量是最简单的一种信号量,它通 常是一个需要初始化值的正整型量。对整 型信号量x,定义P操作及V操作原语如下。
P操作: P(x) { while(x<=0); x=x-1;
• 1 禁止中断
进程
入口区 关中断
临界区
开中断 退出区
2 专用机器指令 (1)TS(Test-and-Set)指令
TS指令的功能是检查指定标志后把该标志设置位,可以将TS指令看作一个不可中断 的函数,该函数以一个测试标志为参数。当测试标志置位时函数返回0,表示资源 被占用,否则函数返回1,表示资源可被占用,同时将测试标志置位。 (2)Swap指令 Swap对换指令的功能是交换两个字节的内容
(2) 忙则等待:任何时候,处于临界区内的进 程不可多于一个。当已有进程在临界区, 其它欲进入的进程必须等待。
4.2 互斥实现方法
• 4.2.1 硬件方法 • 4.2.2 软件方法
4.2.1 硬件方法
• 采用硬件方法实现互斥的主要思想就是用一条指令来完成标志的检查 和修改两个操作,从而保证检查操作与修改操作不被打断;或者通过 禁止中断的方式来保证检查和修改作为一个整体来执行。
使用硬件方法管理临界区主要有以下优点: • 适用范围广:可用于多个并发进程及单处理器或多处理器环境。 • 方法简单:只需要硬件指令即可实现。 • 支持多个临界区:可为每个临界区设置单独的标志,在支持的临界区的个数上没有
限制。 但是,硬件方法也存在着一些比较明显的缺点: • 忙等待:从TS指令与Swap指令可以看出,在进程无法进入临界区时会对标志进行循
• 4.1.1 并发性 • 4.1.2 与时间有关的错误 • 4.1.3 进程的同步与互斥 • 4.1.4 临界资源和临界区
4.1.1 并发性
所谓并发性是指一组进程执行在时间点上相 互交替,在时间段上相互重叠。
I1
P1
O1
I2
P2
O2
I3
P3
O3
4.1.2 与时间有关的错误
在多进程并发的情况下,进程共享某些变
环测试,从而耗费大量处理器资源。
• 进程饥饿现象:在某进程释放临界资源后,下一个进入临界区的进程是不确定的,
4.2.2 软件方法
算法1:利用共享的标志位来表示哪个并发进 程可以进入临界区。
对并发进程A与B,设置标志变量turn。若变 量turn为0则允许进程A进入临界区访问,若 变量turn为1则进允程许B:进程B进入临界区访问。 算法实现代码如whi下le(t。urn!=1);
4.3.2记录型信号量机制
由于整型信号量在P操作不成功时需要进行循 环等待,而这种等待没有放弃CPU资源,违 背了让权等待的原则,造成了系统资源的 浪费。记录型信号量VV在操(x)作整: 型信号量的基础 上进行了改进,它除{包含一x.val个ue=x整.valu型e+1值; Value 外还包含一个阻塞队列queif(xu.vealu。e<=0) 对记录型信号量x,定} 义P操wak作eup(及x.quVeu操e); 作原语 如下:
2.进程的互斥 对系统中的某些进程来说,为保证程序的 正确执行,必须相互协调共享资源的使用
4.1.4 临界资源和临界区
1. 临界资源 进程在运行过程中,可能会与其它进程共享资源,而对互斥
共享资源的访问需要具有排他性。 2. 临界区
将程序中对临界资源访问的代码部分称为临界区。图4-2 所示为访问临界资源的程序的一般结构。
相关文档
最新文档