当前位置:文档之家› 进程同步及死锁之欧阳光明创编

进程同步及死锁之欧阳光明创编

进程同步及死锁之欧阳光明创编
进程同步及死锁之欧阳光明创编

附件(四)

欧阳光明(2021.03.07)

深圳大学实验报告课程名称:操作系统

实验项目名称:进程(线程)同步及死锁学院:计算机与软件学院

专业:计算机科学与技术

指导教师:

报告人:学号:班级:

实验时间:2015/10/23

实验报告提交时间:2015/11/13

教务处制

二、方法、步骤:

设计解决哲学家就餐问题的并发线程。

假定有6个哲学家,围着圆桌交替地进行思考和进餐;每次进餐时,必须同时拿到左右两边的两只筷子才能进餐;进餐后,再放下筷子思考。

这是一个典型的同时需要两个资源的例子,如果申请资源顺序不当,可能会引起死锁。

本实验设计6个哲学家共享一个相同的线程Philosopher,既完成线程同步,又预防死锁发生。实验中采用了3种预防死锁的方法(摒弃‘环路等待’条件,摒弃‘请求和保持’条件,摒弃‘不剥夺’条件),要预防死锁,只采用其中的任何一种方法即可。

三.实验过程及内容:(其中:提供有简短说明的程序代码。要求:程序运行正确、符合设计要求。)

1.创建工程,注意勾选Win32 Application,点击确定

2.勾选第三个选项

3.创建菜单,有Eat、About、Exit

4.在进程(线程)同步及死锁.cpp中编写代码,此时代码有“摒弃‘环路等待’条件”、“摒弃‘请求和保持’条件”、“摒弃‘不剥夺’条件”三种代码,当检测其中一个时须将其余两个加以注释,一一检测其对死锁的影响。

运行结果:

运行前:

运行后:

5.在运行时可知,在分别“摒弃‘环路等待’条件”和“摒弃‘不剥夺’条件”的代码时不会出现死锁,而使用“摒弃‘请求和保持’条件”时会产生死锁,在理论正确前提下,此种情况说明了代码出现错误。

6.代码解释及修改⑴摒弃‘环路等待’条件

R1=ThreadID;

R2=(ThreadID+1)%6;

if (ThreadID == 0)

{

R1= (ThreadID+1) % 6;

R2= ThreadID;

}

依据摒弃‘环路等待’条件,要有至少一位哲学家与其他哲学家拿筷子顺序不同,则使第0位(ThreadID = 0)哲学家从右边开始拿筷子,其他哲学家相反。

⑵摒弃‘不剥夺’条件

Wait(Mutex);

if (ChopstickUsed[R2])

{

Signal(Mutex);

goto ReleaseChopstick;//将左筷子放弃掉

}

Signal(Mutex);

若分配给的哲学家拿不到右筷子,则将他拿到的左筷子收回。

⑶摒弃‘请求和保持’条件

原代码:

Wait(Mutex);

if((ChopstickUsed[R1])||(ChopstickUsed[R2]))

{

Signal(Mutex);

goto LoopAgain;//思考

第3章死锁习题及答案

第三章死锁习题 一、填空题 1.进程的“同步”和“互斥”反映了进程间①和②的关系。 【答案】①直接制约、②间接制约 【解析】进程的同步是指在异步环境下的并发进程因直接制约而互相发送消息,进行相互合作、相互等待,使得各进程按一定的速度执行的过程;而进程的互斥是由并发进程同时共享公有资源而造成的对并发进程执行速度的间接制约。 2.死锁产生的原因是①和②。 【答案】①系统资源不足、②进程推进路径非法 【解析】死锁产生的根本原因是系统的资源不足而引发了并发进程之间的资源竞争。由于资源总是有限的,我们不可能为所有要求资源的进程无限地提供资源。而另一个原因是操作系统应用的动态分配系统各种资源的策略不当,造成并发进程联合推进的路径进入进程相互封锁的危险区。所以,采用适当的资源分配算法,来达到消除死锁的目的是操作系统主要研究的课题之一。 3.产生死锁的四个必要条件是①、②、③、④。 【答案】①互斥条件、②非抢占条件、③占有且等待资源条件、④循环等待条件 【解析】 互斥条件:进程对它所需的资源进行排它性控制,即在一段时间内,某资源为一进程所独占。 非抢占条件:进程所获得的资源在未使用完毕之前,不能被其它进程强行夺走,即只能由获得资源的进程自己释放。 占有且等待资源条件:进程每次申请它所需的一部分资源,在等待新资源的同时,继续占有已分配到的资源, 循环等待条件:存在一进程循环链,链中每一个进程已获得的资源同时被下一个进程所请求。 4.在操作系统中,信号量是表示①的物理实体,它是一个与②有关的整型变量,其值仅能由③原语来改变。 【答案】①资源,②队列,③P-V 【解析】信号量的概念和P-V原语是荷兰科学家E.W.Dijkstra提出来的。信号量是一个特殊的整型量,它与一个初始状态为空的队列相联系。信号量代表了资源的实体,操作系统利用它的状态对并发进程共享资源进行管理。信号量的值只能由P-V原语来改变。 5.每执行一次P原语,信号量的数值S减1。如果S>=0,该进程①;若S<0,则②该进程,并把它插入该③对应的④队列中。 【答案】①继续执行,②阻塞(等待),③信号量,④阻塞(等待) 【解析】从物理概念上讲,S>0时的数值表示某类资源可用的数量。执行一次P原语,意味着请求分配一个单位的资源,因此描述为S=S-1。当S<0时,表示已无资源,这时请求资源的进程将被阻塞,把它排在信号量S的等待队列中。此时,S的绝对值等于信号量队列上的阻塞的进程数目。 6.每执行一次V原语,信号量的数值S加1。如果①,Q进程继续执行;如果S<=0,则从对应的②队列中移出一个进程R,该进程状态变为③。 【答案】①S>0,②等待,③就绪 【解析】执行一次V原语,意味着释放一个单位的资源。因此,描述为S=S+1。当S<0时,表示信号量请求队列中仍然有因请求该资源而被阻塞的进程。因此,应将信号量对应的阻塞队列中的第一个进程唤醒,使之转至就绪队列。 7.利用信号量实现进程的①,应为临界区设置一个信号量mutex。其初值为②,表示该资源尚未使用,临界区应置于③和④原语之间。

线程死锁

主线程A等待另一个线程B的完成才能继续,在线程B中又要更新主线程A的界面,这里涉及了同步问题以及由此可能产生的死锁问题,同步问题在修改后的文章中讲得比较清楚了,对于线程之间可能产生死锁的浅析如下: 在等待线程B中更新主线程A的界面,如果未能正确处理A,B两线程同步的问题,极有可能导致两线程间的死锁 C#线程同步与死锁 在上一讲介绍了使用lock来实现C#线程同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码: 1.public static void MyLock() 2.{ 3.lock (typeof(Program)) 4. { 5. } 6.} 7. 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。

图1 从上图被标注的区域可以看到,一条lock语句被编译成了调用Monitor的Enter和Exit方法。Monitor 在System.Threading命名空间中。lock的功能就相当于直接调用Monitor的Entry方法,所不同的是,lock方法在结束后,会自动解除锁定,当然,在IL中是调用了Monitor的Exit方法,但在C#程序中,看起来是自动解锁的,这类似于C#中的using语句,可以自动释放数据库等的资源。但如果直接在C#源程序中使用Monitor类,就必须调用Exit方法来显式地解除锁定。如下面的代码所示: 1.Monitor.Entry(lockObj); 2.try 3.{ 4.// lockObj的同布区 5.} 6.catch(Exception e) 7.{ 8.// 异常处理代码 9.} 10.finally 11.{ 12. Monitor.Exit(lockObj); // 解除锁定

进程调度与死锁部分练习题

第三章进程调度与死锁练习题 (一)单项选择题 1.为了根据进程的紧迫性做进程调度,应采用(B )。 A.先来先服务调度算法 B. 优先数调度算法 C.时间片轮转调度法 D.分级调度算法 2.采用时间片轮转法调度是为了( A)。 A.多个终端都能得到系统的及时响应 B.先来先服务 C. 优先数高的进程先使用处理器 D.紧急事件优先处理 3.采用优先数调度算法时,对那些具有相同优先数的进程再按( A )的次序分配处理器。 A 先来先服务 B. 时间片轮转 C. 运行时间长短 D.使用外围设备多少 4. 当一进程运行时,系统强行将其撤下,让另一个更高优先数的进程占用处理器,这种调度方式是( B )。 A. 非抢占方式 B.抢占方式 C. 中断方式 D.查询方式 5.( B)必定会引起进程切换。 A.一个进程被创建后进入就绪态 B.一个进程从运行态变成阻塞态 C.一个进程从阻塞态变成就绪态 6.( B)只考虑用户估计的计算机时间,可能使计算时间长的作业等待太久。 A.先来先服务算法 B.计算时间短的作业优先算法 C.响应比最高者优先算法 D.优先数算法 7.先来先服务算法以( A )去选作业,可能会使计算时间短的作业等待时间过长。A.进入的先后次序 B.计算时间的长短 C.响应比的高低 D.优先数的大小8.可以证明,采用( C )能使平均等待时间最小。 A.优先数调度算法 B.均衡调度算法 C.计算时间短的作业优先算法 D.响应比最高者优先算法

9.在进行作业调度时.要想兼顾作业等待时间和计算时间,应选取(D )。 A均衡调度算法 B.优先数调度算法 C.先来先服务算法 D.响应比最高者优先算法 10.作业调度算法提到的响应比是指( B )。 A.作业计算时间与等待时间之比 B.作业等待时间与计算时间之比 C.系统调度时间与作业等待时间之比 D.作业等待时间与系统调度时间之比 11.作业调度选择一个作业装入主存后,该作业能否占用处理器必须由( D )来决定。 A.设备管理 B.作业控制 C.驱动调度 D.进程调度 12.系统出现死锁的根本原因是( D )。 A.作业调度不当 B.系统中进程太多 C.资源的独占性 D.资源竞争和进程推进顺序都不得当 13.死锁的防止是根据( C )采取措施实现的。 A.配置足够的系统资源 B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一 D.防止系统进入不安全状态 14.采用按序分配资源的策略可以防止死锁.这是利用了使( B)条件不成立。 A.互斥使用资源 B.循环等待资源 C.不可抢夺资源 D.占有并等待资源 15.可抢夺的资源分配策略可预防死锁,但它只适用于(D )。 A.打印机 B.磁带机 C.绘图仪 D.主存空间和处理器 16.进程调度算法中的( A )属于抢夺式的分配处理器的策略。 A.时间片轮转算法 B.非抢占式优先数算法 C.先来先服务算法 D.分级调度算法 17.用银行家算法避免死锁时,检测到(C )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量

《操作系统原理》5资源管理(死锁)习题

第五章死锁练习题 (一)单项选择题 1.系统出现死锁的根本原因是( )。 A.作业调度不当B.系统中进程太多C.资源的独占性D.资源管理和进程推进顺序都不得当 2.死锁的防止是根据( )采取措施实现的。 A.配置足够的系统资源B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一D.防止系统进入不安全状态 3.采用按序分配资源的策略可以防止死锁.这是利用了使( )条件不成立。 A.互斥使用资源B循环等待资源C.不可抢夺资源D.占有并等待资源 4.可抢夺的资源分配策略可预防死锁,但它只适用于( )。 A.打印机B.磁带机C.绘图仪D.主存空间和处理器 5.进程调度算法中的( )属于抢夺式的分配处理器的策略。 A.时间片轮转算法B.非抢占式优先数算法C.先来先服务算法D.分级调度算法 6.用银行家算法避免死锁时,检测到( )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量 C.进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足尚需的最大资源量 D进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大资源量 7.实际的操作系统要兼顾资源的使用效率和安全可靠,对资源的分配策略,往往采用( )策略。 A死锁的防止B.死锁的避免C.死锁的检测D.死锁的防止、避免和检测的混合 (二)填空题 1.若系统中存在一种进程,它们中的每一个进程都占有了某种资源而又都在等待其中另一个进程所占用的资源。这种等待永远不能结束,则说明出现了______。 2.如果操作系统对______或没有顾及进程______可能出现的情况,则就可能形成死锁。 3.系统出现死锁的四个必要条件是:互斥使用资源,______,不可抢夺资源和______。 4.如果进程申请一个某类资源时,可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是______。 5.如果资源分配图中无环路,则系统中______发生。 6.为了防止死锁的发生,只要采用分配策略使四个必要条件中的______。 7.使占有并等待资源的条件不成立而防止死锁常用两种方法:______和______. 8静态分配资源也称______,要求每—个进程在______就申请它需要的全部资源。 9.释放已占资源的分配策略是仅当进程______时才允许它去申请资源。 10.抢夺式分配资源约定,如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以______该进程已占有的资源。 11.目前抢夺式的分配策略只适用于______和______。 12.对资源采用______的策略可以使循环等待资源的条件不成立。 13.如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于______。14.只要能保持系统处于安全状态就可______的发生。 15.______是一种古典的安全状态测试方法。 16.要实现______,只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。

第三章处理机调度与死锁 (2)

考点一调度的基本概念和基本准则 一、单项选择题 1.假设就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms。则系统开销所占的比率约为()。 A.1% B.5% C.10% D.20% 2.下面关于进程的叙述不正确的是()。 A.进程申请CPU得不到满足时,其状态变为就绪状态 B.在单CUP系统中,任一时刻有一个进程处于运行状态 C.优先级是进行进程调度的重要证据,一旦确定不能改变 D.进程获得处理机而运行的是通过调度实现的 二、综合应用题 1.分析调度的三种形式:短期调度、中期调度和长期调度的差别。 2.引起进程调度的原因有哪些? 3.高级调度与低级调度的主要任务是什么?为什么要引入中级调度? 4.选择调度方式和调度算法时,应遵循的准则是什么? 5.下列问题应由哪一些调度程序负责? (1)发生时间片中断后,决定将处理机分给哪一个就绪进程? (2)在短期繁重负荷情况下,应将哪个进程挂起? (3)一个作业运行结束后,从后备作业队列中选具备能够装入内存的作业。 6.CPU调度算法决定了进程执行的顺序。若有n 个进程需要调度,有多少种可能的调度算法顺序? 7.有些系统如MS-DOS没有提供并发处理手段。引入并发处理会导致操作系统设计的复杂性。试分析引入并发处理后导致的操作系统设计的三个主要的复杂性。 8.说明抢占式调度与非抢占式调度的区别。为什么说计算中心不适合采用非抢占式调度? 考点二典型调度算法 一、单项选择题 1.以下哪一种说法对剥夺式系统来讲结论正确()。 A.若系统采用轮转法调度进程,则系统采用的是剥夺式调度。 B.若现行进程要等待某一事件时引起调度,则该系统是剥夺式调度。 C.实时系统通常采用剥夺式调度。 D.在剥夺式系统中,进程的周转时间较之非剥夺式系统可预见。 2.既考虑作业的等待时间又考虑作业的执行时间的调度算法是()。 A.相应比高者优先 B.端作业优先 C.优先级调度 D.先来先服务 3.关于作业优先权大小的论述中,正确的论述是()。 A.计算型作业的优先级,应高于I/O型作业的优先权。 B.用户进程的优先权,应高于系统进程的优先权。 C.长作业的优先权,应高于短作业的优先权。 D.资源要求多的作业,其优先权应高于资源要求少的作业。 E.在动态优先权中,随着作业等待时间的增加,其优先权将随之下降。 F.在动态优先权中,随着进程执行时间的增加,其优先权降低。 二、综合应用题 1.设有一组进程,它们需要占用CPU的时间及优先级如下所示:

死锁进程实验报告

死锁进程实验报告 一、实验目的: 观察死锁发生的现象,了解死锁发生的原因。掌握如何判断死锁发生的方法。二、实验分析: 死锁现象是操作系统各个进程竞争系统中有限的资源引起的。如果随机给进程分配资源,就可能发生死锁, 因此就应有办法检测死锁的发生。本次实验中采用“银行家算法”判断死锁的发生。 三、实验设计: 本实验设计一个3个并发进程共享3种系统资源且每种系统资源有10个的系统。系统能显示各种进程的进展情况以及检察是否有错误和死锁现象产生。 四、算法说明: “银行家算法”。按每个进程的申请数量给各个进程试探性分配资源,看能否找个一个序列使各个进程都能正常运行结束。若能,则不会发生死锁;若不能,则会发生死锁。 五、程序使用说明: 一、本程序用于检测错误和是否会发生死锁。系统有3个进程竞争3种系统资源,每种资源有10个。 二、输入各个进程的最大需求资源数目数组max[3]和已经得到的资源数目组 [3],系统计算出各个进程还应申请的资源数目数组need[3]。 三、若进程最大需求数大于系统资源数(10),则出错;若进程申请的资源数目大于其需要的最大资源数目,则出错。 /*死锁实验源程序*/ include

include typedef struct { int state; int max[3]; int alloc[3]; int need[3]; }Pc; int whefinish(Pc *p) { if((p[0].state&&p[1].state&&p[2].state)==1) return 1; else return 0; } inpalloc(Pc *P,int *q1,int *q2) { int m,n; for(m=0;m<3;m++) for(n=0;n<3;n++) {

李建伟版实用操作系统第二版最新习题 3 进程同步与通信

李建伟版实用操作系统第二版最新习题 3 进程同步与通信 一、选择题 题号1 2 3 4 5 6 7 8 9 10 答案A D D C B C A B A A 题号11 12 答案D C 二、综合题 1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。 为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。但是,不论是软件算法还是同步机构都应遵循下述准则: ①空闲让进。②忙则等待。③有限等待。④让权等待。 2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。 其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。如进程阻塞自己并且等待在合适的时间被唤醒。忙等可以采用更为有效的办法来避免。例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。 3、答: 在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。先 执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。 在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。 4、答:

处理机调度与死锁作业题

第三章处理机调度与死锁作业 一、判断题 1、先来先服务(FCFS)算法是一种简单的调度算法,但其效率比较高。(错) 2、FCFS调度算法对短作业有利。(错) 3、时间片的大小对轮转法(RR)的性能有很大的影响,时间片太短,会导致系统开销大大增加。(对) 二、选择题 1、在进行作业调度时,要想兼顾作业等待时间和作业执行时间,应选取(C)。 A.轮转法 B.先进先出调度算法 C.响应比高优先算法 D.短作业优先调度 2、若系统中有五台绘图仪,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则至多允许(D)个进程参于竞争,而不会发生死锁。 A、5 B、2 C、3 D、4 解析:由于系统资源总共只有5台,若有5个进程参与竞争,每个进程在拥有一台打印机后,由于都需要两台打印机,所有进程都不能向前推进,假设又都不愿意放弃已申请到的打印机,系统便进入死锁状态,若有4个进程参与竞争,每个进程拥有一台打印机后,任意一个进程在获得剩余的一台打印机后就可以运行,在该进程运行完后,释放拥有的两台打印机,其他3个进程就可以顺利推进,完成各自任务。 3、在进程资源图中( C )是发生死锁的必要条件。 A.互斥 B.可剥夺件 C.环路 D.同步 三、填空题 1、在响应比最高者优先的作业调度算法中,当各个作业等待时间相同时,计算时间短的作业将得到优先调度;当各个作业要求运行的时间相同时,等待时间长的作业得到优先调度。 2、分时系统采用的调度方法是时间片轮转调度算法。在分时系统中,当用户数目为100时,为保证响应时间不超过2秒,此时时间片最大应为20ms。 3、有三个同时到达的作业J1,J2和J3,它们的执行时间分别是T1,T2和T3,且T1

进程同步与互斥练习

进程同步与互斥 练习题 选择题 .任何两个并发进程之间存在着()地关系. .各自完全独立 .拥有共享变量 .必须互斥 .可能相互制约文档收集自网络,仅用于个人学习 .并发进程执行地相对速度是(). .由进程地程序结构决定地 .由进程自己来控制地 .在进程被创建时确定地 .与进程调度策略有关地文档收集自网络,仅用于个人学习 .并发进程执行时可能会出现“与时间有关地错误”,这种错误是由于并发进程()引起地. .使用共享资源 .执行地顺序性 .要求计算时间地长短 .程序地长度文档收集自网络,仅用于个人学习 .并发进程中与共享变量有关地程序段称为(). .共享子程序 .临界区 .管理区 .公共数据区文档收集自网络,仅用于个人学习 .用来实现进程同步与互斥地操作实际上是由()过程组成地. .一个可被中断地 .一个不可被中断地 .两个可被中断地 . 两个不可被中断地文档收集自网络,仅用于个人学习 .进程从运行态变为等待态可能由于(). .执行了操作 .执行了操作 .时间片用完 .有高优先级进程就绪文档收集自网络,仅用于个人学习 .用操作管理互斥使用地资源时,信号量地初值应定义为(). .任意正整数 . . .文档收集自网络,仅用于个人学习 .用、操作管理临界区时,互斥信号量地初值应定义为( ). .任意值 . . . .现有个具有相关临界区地并发进程,如果某进程调用操作后变为等待状态,则调用操作时

信号量地值必定为(). .≤ . . .文档收集自网络,仅用于个人学习 .用操作管理临界区时把信号量地初值定义为,现已有一个进程在临界区,但有个进程在等待进人临界区,这时信号量地值为(). . . . .文档收集自网络,仅用于个人学习 .用操作唤醒一个等待进程时,被唤醒进程地状态应变成()状态. .执行 .就绪 .运行 .收容文档收集自网络,仅用于个人学习 .进程间地同步是指进程间在逻辑上地相互( )关系. .联接.制约文档收集自网络,仅用于个人学习 .继续.调用 多项选择题 .有关并发进程地下列叙述中,()是正确地. .任何时刻允许多个进程在同一上运行 .进程执行地速度完全由进程自己控制 .并发进程在访问共享资源时可能出现与时间有关地错误 .同步是指并发进程中存在地一种制约关系 .各自独立地并发进程在执行时不会相互影响文档收集自网络,仅用于个人学习.一个正在运行地进程调用()后,若地值为(),则该进程可以继续运行. .> .< .≠ .≥ .≤ 文档收集自网络,仅用于个人学习 判断题 .有交往地并发进程一定共享某些资源. () .如果不能控制并发进程执行地相对速度,则它们在共享资源时一定会出现与时间有关地错误. () .并发进程地执行结果只取决于进程本身,不受外界影响. () .多道程序设计必然导致进程地并发执行. () 有个进程共享同一临界资源,若使用信号量机制实现对资源地互斥访问,则信号量值地变化范围是. 文档收集自网络,仅用于个人学习 对于两个并发进程,设互斥信号量为,若,则 表示没有进程进入临界区表示有一个进程进入临界区 表示有一个进程进入临界区,另一个进程等待进入 表示有两个进程进入临界区

进程调度、死锁

进程调度、死锁 试验一:进程调度 一、实验目的 进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立地用 C 或 C++语言编写一个简单的进程管理程序,其主要部分是进程调度。调度算法可由学生自行选择,如基于动态优先级的调度算法或多级反馈队列调度算法。 通过本实验可加深学生对进程各种状态的转化和各种调度算法的理解,提高系统程序设计能力。 二、实验题目 以链式结构组成空闲 PCB 栈,以双向链式结构组成进程的就绪队列和睡眠队列,模拟UNIX 的进程管理程序,实现以下操作(可用键盘命令或由产生的随机数决定操作和参数)。 1( 创建一个新进程:如 pid=newp(pri,size,time),申请空闲 PCB 和所需内存, 填写 PCB的各项初始数据,将该 PCB 送入就绪队列。 2( 调度和执行:自己设计优先调度算法,在就绪队列中选择一个优先级最高的进程,使其运行若干个单位时间。要求在运行期间进程的 p_cpu、p_pri 和 p_time 要变化,并在适当的时机重新调度。 3( 进程睡眠:进程运行时可调用自编的睡眠函数,主动进入睡眠状态,并转调度程序。也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时要在 PCB 中记录睡眠原因和优先数。 4( 进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就绪

队列。如该进程优先级比现运行进程优先级高,转调度程序。 5( 进程的终止:如一个进程运行完作业所需的时间,或者用操作杀死该进程,该进程就终止,释放所占用的内存和 PCB 资源,转调度程序。 三、设计思路和流程图 1、设计思路 将程序主要分为两部分:排序、分派。排队:事先将系统中所有就绪的进程按照一定的方式排成一个队列;分派:把由所选定的进程,从就绪队列取出该进程,然后上下文切换。 2、流程图 开始 输入进程 对进程排序 选择运行时间最短的进程 否运行完毕 是 结束 四、主要数据结构及其说明 float arrivetime 到达时间 float servicetime 运行时间 float starttime 开始时间 float finishtime 完成时间 五、源程序并附上注释 //最短进程优先调度算法、 #include #include #include using namespace std;

进程同步及死锁之欧阳光明创编

附件(四) 欧阳光明(2021.03.07) 深圳大学实验报告课程名称:操作系统 实验项目名称:进程(线程)同步及死锁学院:计算机与软件学院 专业:计算机科学与技术 指导教师: 报告人:学号:班级: 实验时间:2015/10/23 实验报告提交时间:2015/11/13 教务处制

二、方法、步骤: 设计解决哲学家就餐问题的并发线程。 假定有6个哲学家,围着圆桌交替地进行思考和进餐;每次进餐时,必须同时拿到左右两边的两只筷子才能进餐;进餐后,再放下筷子思考。 这是一个典型的同时需要两个资源的例子,如果申请资源顺序不当,可能会引起死锁。 本实验设计6个哲学家共享一个相同的线程Philosopher,既完成线程同步,又预防死锁发生。实验中采用了3种预防死锁的方法(摒弃‘环路等待’条件,摒弃‘请求和保持’条件,摒弃‘不剥夺’条件),要预防死锁,只采用其中的任何一种方法即可。 三.实验过程及内容:(其中:提供有简短说明的程序代码。要求:程序运行正确、符合设计要求。) 1.创建工程,注意勾选Win32 Application,点击确定 2.勾选第三个选项

3.创建菜单,有Eat、About、Exit 4.在进程(线程)同步及死锁.cpp中编写代码,此时代码有“摒弃‘环路等待’条件”、“摒弃‘请求和保持’条件”、“摒弃‘不剥夺’条件”三种代码,当检测其中一个时须将其余两个加以注释,一一检测其对死锁的影响。 运行结果: 运行前:

运行后: 5.在运行时可知,在分别“摒弃‘环路等待’条件”和“摒弃‘不剥夺’条件”的代码时不会出现死锁,而使用“摒弃‘请求和保持’条件”时会产生死锁,在理论正确前提下,此种情况说明了代码出现错误。 6.代码解释及修改⑴摒弃‘环路等待’条件 R1=ThreadID; R2=(ThreadID+1)%6; if (ThreadID == 0) { R1= (ThreadID+1) % 6; R2= ThreadID; } 依据摒弃‘环路等待’条件,要有至少一位哲学家与其他哲学家拿筷子顺序不同,则使第0位(ThreadID = 0)哲学家从右边开始拿筷子,其他哲学家相反。 ⑵摒弃‘不剥夺’条件 Wait(Mutex); if (ChopstickUsed[R2]) { Signal(Mutex); goto ReleaseChopstick;//将左筷子放弃掉 } Signal(Mutex); 若分配给的哲学家拿不到右筷子,则将他拿到的左筷子收回。 ⑶摒弃‘请求和保持’条件 原代码: Wait(Mutex); if((ChopstickUsed[R1])||(ChopstickUsed[R2])) { Signal(Mutex); goto LoopAgain;//思考

操作系统同步例题

13. 对于生产者—消费者问题,假设缓冲区是无界的,试用信号灯与PV操作给出解法。答:由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞,不需要对空缓冲区进行管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。 semaphore mutex_in=1; semaphore mutex_out=1; semaphore empty=0; int in=0,out=0; 生产者活动: while(1){ produce next product; P(mutex_in); add the product to buffer[in]; in++; v(mutex_in); V(empty); } 消费者活动: while(1){ P(empty); P(mutex_out); take the product from buffer[out]; out++; V(mutex_out); } 14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式: -M≤A物品数量-B物品数量≤N 其中M和N为正整数。试用信号灯和PV操作描述A、B两种物品的入库过程。 答:已知条件 -M≤A物品数量-B物品数量≤N 可以拆成两个不等式,即 A物品数量-B物品数量≤N,

B物品数量-A物品数量≤M。 这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;B物品可以比A 物品多,但不能超过M个。 semaphore a=n; semaphore b=m; void main(){ createprocess(A,…); createprocess(B,…); } A物品入库:void A(){ while(1){ P(a); A物品入库; V(b); } }B物品入库:void B(){ while(1){ P(b); B物品入库; V(a); } } 15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。设公共汽车上有一个司机和一个售票员,其活动如下图 所示。

操作系统死锁练习及答案

死锁练习题 (一)单项选择题 l系统出现死锁的根本原因是( )。 A.作业调度不当 B.系统中进程太多 C.资源的独占性 D.资源管理和进程推进顺序都不得当 2.死锁的防止是根据( )采取措施实现的。 A.配置足够的系统资源 B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一 D.防止系统进入不安全状态 3.采用按序分配资源的策略可以防止死锁.这是利用了使( )条件不成立。 A.互斥使用资源 B循环等待资源 c.不可抢夺资源 D.占有并等待资源 4.可抢夺的资源分配策略可预防死锁,但它只适用于( )。A.打印机 B.磁带机 c.绘图仪 D.主存空间和处理器 5.进程调度算法中的( )属于抢夺式的分配处理器的策略。A.时间片轮转算法 B.非抢占式优先数算法 c.先来先服务算法 D.分级调度算法 6.用银行家算法避免死锁时,检测到( )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量 c.进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足尚需的最大资源量 D进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大资源量 7.实际的操作系统要兼顾资源的使用效率和安全可靠,对资源的分配策略,往往采用 ( )策略。 A死锁的防止 B.死锁的避免 c.死锁的检测 D.死锁的防止、避免和检测的混合(一)单项选择题 1.D 2.C 3.B 4.D 5.A 6 C 7 D (二)填空题 l若系统中存在一种进程,它们中的每一个进程都占有了某种资源而又都在等待其中另一个进程所占用的资源。这种等待永远不能结束,则说明出现了______。 2.如果操作系统对 ______或没有顾及进程______可能出现的情况,则就可能形成死锁。3.系统出现死锁的四个必要条件是:互斥使用资源,______,不可抢夺资源和______。 4.如果进程申请一个某类资源时,可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是______。 5.如果资源分配图中无环路,则系统中______发生。 6.为了防止死锁的发生,只要采用分配策略使四个必要条件中的______。 7.使占有并等待资源的条件不成立而防止死锁常用两种方法:______和______. 8静态分配资源也称______,要求每—个进程在______就申请它需要的全部资源。 9.释放已占资源的分配策略是仅当进程______时才允许它去申请资源。 10抢夺式分配资源约定,如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以______该进程已占有的资源。 11.目前抢夺式的分配策略只适用于______和______。 12.对资源采用______的策略可以使循环等待资源的条件不成立。 13.如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于______。 14.只要能保持系统处于安全状态就可______的发生。 15.______是一种古典的安全状态测试方法。 16.要实现______,只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。 17.可以证明,M个同类资源被n个进程共享时,只要不等式______成立,则系统一定不会发生死锁,其中x为每个进程申请该类资源的最大量。 18.______对资源的分配不加限制,只要有剩余的资源,就可把资源分配给申请者。 19.死锁检测方法要解决两个问题,一是______是否出现了死锁,二是当有死锁发生时怎样去______。 20.对每个资源类中只有一个资源的死锁检测程序根据______和______两张表中记录的资源情况,把进程等待资源的关系在矩阵中表示出

进程同步与死锁习题答案

第 4 章进程同步与死锁 (1) 什么是进程同步?什么是进程互斥? 解: 同步是进程间的直接制约关系,这种制约主要源于进程间的合作。进程同步的主要任务就是使并发执行的各进程之间能有效地共享资源和相互合作,从而在执行时间、次序上相互制约,按照一定的协议协调执行,使程序的执行具有可再现性。 进程互斥是进程间的间接制约关系,当多个进程需要使用相同的资源,而此类资源在任一时刻却只能供一个进程使用,获得资源的进程可以继续执行,没有获得资源的进程必须等待,进程的运行具有时间次序的特征,谁先从系统获得共享资源,谁就先运行,这种对共享资源的排它性使用所造成的进程间的间接制约关系称为进程互斥。互斥是一种特殊的同步方式。 (2) 进程执行时为什么要设置进入区和退出区? 解: 为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为“进入区”代码;在退出临界区后,必须执行“退出区”代码,用于恢复未被访问标志。 (3) 同步机构需要遵循的基本准则是什么?请简要说明。 解: 同步机制都应遵循下面的4 条准则: 1. 空闲让进。当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。 2. 忙则等待。当有一个进程在临界区时,其它欲进入临界区的进程必须等待,以保证进程互斥地访问临界 资源。 3. 有限等待。对要求访问临界资源的进程,应保证进程能在有限时间内进入临界区,以免陷入“饥饿”状 态。 4. 让权等待。当进程不能进入临界区时,应立即放弃占用CPU ,以使其它进程有机 会得到CPU 的使用权,以免陷入“饥饿”状态。 (4) 整型信号量是否能完全遵循同步机构的四条基本准则?为什么? 解:不能。在整型信号量机制中,未遵循“让权等待”的准则。 (5) 在生产者-消费者问题中,若缺少了V(full) 或V(empty) ,对进程的执行有什么影响?解: 如果缺少了V(full) ,那么表明从第一个生产者进程开始就没有对信号量full 值改变,即使缓冲池存放的产品已满了,但full 的值还是0,这样消费者进程在执行P(full) 时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。 如果缺少了V(empty) ,例如在生产者进程向n 个缓冲区放满产品后消费者进程才开始从中取产品,这时empty=0 ,full=n ,那么每当消费者进程取走一个产品时empty 并没有被改变,直到缓冲池中的产品都取走了,empty 的值也一直是0,即使目前缓冲池有n 个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。 (6) 在生产者-消费者问题中,若将P(full) 和P(empty) 交换位置,或将V(full) 或V(empty) 交换位置,对进程执行有什么影响? 解: 对full 和empty 信号量的P、V 操作应分别出现在合作进程中,这样做的目的是能正确表征各进程对临界资源的使用情况,保证正确的进程通信联络。 (7) 利用信号量写出不会出现死锁的哲学家进餐问题的算法。

死锁题型

四、死锁题型 死锁题型一般以交通题目(如过河问题)为代表。 在讲解生产者---消费者题型时,曾讲过死锁与PV操作的关系,再重复一遍: 在一些PV操作习题里,尤其是生产者---消费者题型,要求给出“无死锁”的解法。PV操作和死锁有什么关系?我们又怎样在PV操作习题中找到死锁的可能呢? 我们在课程第一轮,学习过死锁的四个必要条件: ●资源独占(一个资源不能同时分配给两个以上进程) ●资源非抢占式 ●资源保持申请(申请新资源时不释放老资源) ●循环等待(参与死锁的进程互相等待彼此的资源)。 指出:只有上述四个必要条件同时存在,系统才有可能发生死锁。 我们还学习过死锁的预防(资源预先分配、有序分配)、死锁的避免(进程安全序列、银行家算法),这些策略都是针对死锁的四个必要条件,打破或避免其中一个必要条件而进行的。 我们还指出,多道程序环境下死锁是小概率事件,而用专门的算法(比如银行家算法)解决死锁问题开销太大,在实际的操作系统中一般不含有专门的“死锁处理”模块,死锁的解决由各个并发程序自行负责。这就引出了死锁和PV操作的关系。 PV操作是操作系统内核及并发应用程序常用的,本着死锁的分散处理原则,我们在PV操作习题中应该考虑死锁的处理。 PV操作习题中考虑死锁的处理,其理论依据仍是死锁的四个必要条件,但前三个必要条件一般是题目隐含的且不可避免和打破的,所以我们一般只需考虑第四个必要条件“循环等待”,我们要考虑题目中是否存在循环等待资源的进程

并设法避开或打破它。常用的是资源的有序分配方法(给资源编号,按从大到小或从小到大的次序申请)。 一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一人过桥,南侧桥段和北侧桥段较窄只能通过一人,桥中央一处宽敞,允许两个人通过或歇息。试用信号灯和PV操作写出南、北两侧过桥的同步算法。 解:把南北两岸换成左右两岸,桥可分成以下区: 2 1 3 4 按题意:左岸过河者同时只能有一个(互斥),过河顺序为1,2,4。右岸过河者同时只能有一个(互斥),过河顺序为4,3,1。 每个区也都是互斥的,过河者走到下一个区时要使上一个区可用。 semaphore s1=1, s2=1; //左右岸过河者的互斥 semaphore a1=1, a2=1, a3=1, a4=1; //四个区的互斥

关于进程中死锁问题的研究

关于进程中死锁问题的研究 摘要 死锁问题是Dijkstra于1965年研究银行家算法时首先提出的,也是计算机操作系统乃至并发程序设计中非常重要但又最难处理的问题之一。实际上死锁问题是一种具有普遍性的现象。不仅在计算机系统中,就是在其它各个领域乃至日常生活中,也都是屡见不鲜的。掌握对死锁的处理方法,对于指导我们的现实生活,都会有积极地意义。本文研究的是操作系统进程中的死锁问题。从理论上说,死锁问题的研究涉及到计算机科学中一个基本问题,即并行程序的终止性问题。本文将通过对死锁的基本概念、产生的原因和产生死锁的四个必要条件的了解,找出合理的预防、避免、检测和解除的有效方法,并将其运用到实际问题中去。 关键字:死锁的预防死锁的避免银行家算法死锁的检测死锁的解除 一、死锁的基本概念 1.1 死锁的概念 当两个或两个以上的进程因竞争系统资源而无休止的相互等待时,我们就称这些进程是死锁的,或者说它们处于死锁状态。 1.2 死锁产生的原因 1、各进程竞争有限的资源。 2、进程推进顺序不当。 1.3 产生死锁的四个必要条件 1、互斥条件。指在一段时间内,一个资源只能由一个进程独占使用,若别的进程也要求该资源,则须等待直至其占用者释放。 2、请求和保持条件。指进程已经保持了至少一个资源,但又提出新的请求,而该资源已被其他进程占用,此时请求进程阻塞,但又不释放自己已获得的资源。 3、不可剥夺条件。进程所获得的资源在未使用完之前,不能被其他进程强行夺走,而只能由其自身释放。

4、环路条件。指存在一个等待进程集合{}n P P P P ,,,,210 ,0P 正在等待一个1P 占用的资源,1P 正在等待一个2P 占用的资源,…,n P 正在的等待一个由0P 占用的资源。这些进程及其请求的资源构成一个“进程——资源”的有向循环图。 二、死锁的处理 2.1 死锁的预防 死锁的预防是排除死锁的静态策略,因为我们已经知道了导致死锁产生的四个必要条件,那么我们只须破坏这四个条件中的一个即可预防死锁。为此介绍如下4种方法。 1、共享使用法 允许一个资源部件可以由多个进程“同时”使用。这种方法在早期曾使用过,但实践证明这种方法对有些资源是行不通的。如对宽行就是由各个进程“同时”使用,结果在打印纸上交替出现了不同进程的不同信息,从而给用户带来很大的不便,故对此类资源一般都采用独占方式。由于对大多数资源来说互斥使用是完全必要的,所以通过破坏互斥条件来防止死锁是不现实的。 2、预先静态分配法 在进程调度程序选择进程时,仅当进程所需要的全部资源都能满足时,才调度它进入内存运行。或者说,在进程尚处于运行前的静态情况下,就为它分配了所需要的全部资源。显然这是一种简单而安全的预防死锁的方法,但是,若资源搭配不当,就会导致进程将延迟运行,资源利用率低。 3、采用剥夺式调度法 这种方法主要用在处理器和存储器资源调度上,是调度进程自身的开销,以及主存和磁盘的对换进程、数据的开销。但对于需要由操作员装卸私有数据的外围设备,此法就不宜使用。这种方法实现起来比较复杂,且要付出很大的代价,还可能导致反复地请求和释放资源,而使进程的执行无限延迟。这不仅延长了进程的周转时间,还增加了系统的开销,降低了系统的吞吐量。 4、有序资源使用法 系统设计者把系统中所有资源都赋予一个唯一的编号。如令输入机为1,

相关主题
文本预览
相关文档 最新文档