操作系统中死锁问题(共5篇)
操作系统中死锁问题 篇1
在计算机系统中,系统资源是有限的,但是往往会有进程对有限资源的占用问题,在早期的系统中,由于系统结构、规模以及资源分配等问题都相对简单,使得操作系统尚未暴露出死锁问题的严重性。但随着计算机技术的不断发展,软件系统变得很复杂,系统资源的种类日益增多,而且许多资源是独占资源,又由于进程的并发执行和资源的动态申请以及进程之间的相互通信等,使得系统出现死锁现象的频率增加。死锁的出现,使系统无法正常运行,给系统带来了极大的危害。因此,死锁问题的研究已成为操作系统理论的重要课题之一。下面就操作系统的死锁相关问题进行讨论
在多道程序设计中,多个进程可能要去竞争有限的资源。进程请求资源,如果当前这些资源不可用,因为它有可能正在被其它的进程使用着,那么该进程就必须进入等待状态。正在等待的进程可能不会再改变状态,因为它所请求的资源一直被其它进程所持有。这种情况被称为死锁(deadlock)。
1 死锁产生的原因
1)竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
2)进程间推进顺序不合理。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
竞争资源引起的死锁。系统中的资源分成两类:可剥夺性资源和非可剥夺性资源。可剥夺性资源是指某进程获得该类资源后,如果有其他的进程或系统请求使用该资源,该资源就可以被其它的进程或系统剥夺。比如优先级高的进程可以剥夺优先级权低的进程的处理机。不可剥性夺资源是指当系统把该类资源分配给某进程后,再不能强行驳回,只能在该进程使用完后自行释放,比如,磁带机,打印机等。系统中所配置的非剥夺性资源,当它们的数量不能满足诸进程运行的需要,会使进程在运行过程中,因争夺这些资源而陷入僵局。例如系统中只有一台打印机和一台CD-ROM,而此时进程A占有CD-ROM,而进程B占有打印机。若A要求使用打印机,则A将被阻塞。若B要求使用CD-ROM,则B也将被阻塞。于是,在A与B之间便形成了僵局,它们都在等待对方释放自己所需要的资源。但它们又都因为不能获得自己需要的资源而不能向前推进,也不能释放出自己已经占有的资源,因此,就会进入死锁状态。如图1所示。
3)信号量使用不当也会照成死锁
进程间彼此相互等待对方发来的消息,结果也会使得这些进程间无法继续向前推进,即发生了死锁。例如,A进程等待B进程发来的消息,B进程等待C进程发来的消息,C进程又在等待A进程发来的消息,可以看出A、B和C不是因为竞争同一种资源,而是在等待对方的资源陷入死锁状态。这种类型的死锁在基于消息的系统中比较常见。
4)其他类型的死锁
在程序设计中,如果程序设计的不合理,也会产生广义上的死锁,这种情况经常可以见到,比如,程序中用到的一些变量、数据结构和一些存储区。并发进程在使用时,一旦程序设计不合理,往往就会以为别的进程在使用,结果彼此都在等待对方使用完后再使用,结果就出现了死锁。
2 死锁产生的必要条件
1)互斥条件:一个资源每次只能被一个进程使用。
2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
3 死锁的预防方法
死锁预防是设法破坏产生死锁的必要条件之一,从而消除产生死锁的任何可能性,严格地防止死锁的出现。但方法过于保守,对资源限制严格,使资源利用率和进程执行效率大大降低,它是以降低处理速度作为代价的。
3.1 阻止互斥
破坏第一个条件,使资源可以同时访问而不是互斥使用,这是个简单的方法,但在进程并发执行的情况下往往有许多资源是不能同时访问的(写操作),所以这种做法不是都可行的。
只能对可共享的资源(如只读文件)这样做。
不适合非共享资源,例如,为写而打开的文件,打印机等。
3.2 破坏“请求与保持”条件
必须保证:当一个进程申请一个资源时,它不能占有其它资源。也既是采用资源的静态预分配策略,进程在运行之前,一次申请它所需要的所有资源。此时,如果系统有足够的资源,便把需要的所有资源分配给该进程,因此,该进程在运行期间就不会在提出资源要求,从而就破坏了请求条件。如果在分配资源时,只要有一种资源不能满足该进程的需要,就不会分配给它任何资源,而是让它等待,也即破坏了保持条件,从而避免了死锁的发生。
优点:简单安全,易于实施;在进程的活动较单一时性能好;无须抢占。
缺点:资源利用率低;启动进程慢,效率低;有“饥饿”现象存在。
3.3 破坏“不剥夺”条件(允许抢占)
方法1:若拥有某种资源的进程在申请其他资源时遭到拒绝,则它必须释放其占用的资源,以后若有必要可再次申请上述资源。也就是说某一进程已经占有的资源,在运行过程会被暂时释放掉,也可以说是被剥夺了,从而破坏了“不剥夺”条件。
方法2:当一进程申请的资源正被其他进程占用时,可通过操作系统抢占该资源,此方法在两个进程优先级相同时,不能防止死锁。
优点:对状态容易保留和恢复的资源较为方便。
缺点:实现困难,恢复现场代价高;导致过多的不必要抢占;易导致循环重启。
3.4 破坏“循环等待”条件
采用资源定序方法,将所有资源按类型进行线性排队,并按递增规则编号。例如,把输入机的序号为1,打印机的序号为2,磁盘的为3.进程只能以递增方式申请资源,因而不会导致循环等待。
如果进程申请一个资源,它首先必须释放所有比该资源编号大的资源。
优点:资源的申请与分配逐步进行,比预分配策略的资源利用率高;易实现编译期间的检查;无须执行时间,在系统设计阶段问题就已解决。
缺点:严格限制资源的顺序性,不允许增加资源请求;在使用资源的顺序与系统规定不一致时,资源利用率降低;不能抢占。
4 银行家算法
死锁避免方法并不是严格限制产生死锁必要条件的存在,而只是防止系统进入不安全状态,从而避免死锁的发生。死锁避免算法就是避免系统进入不安全状态的算法。银行家(Banker)算法是最著名的死锁避免算法。
银行家算法的主要思想是:它是从当前的状态S出发,逐个检查各申请者中谁获得资源能完成其工作,然后假定其完成工作且归还全部资源,再进一步检查谁又获得资源能完成其工作。若所有申请者均能完成工作,则系统状态是安全的。
如果存在一个安全序列,那么系统处于安全状态。
存在进程顺序P1、P2、P3、…、Pn
如果对于每个Pi,Pi申请的资源小于当前可用资源加上所有进程Pj(其中j
如果没有这样的顺序存在,那么系统就处于不安全状态。
首先引入两个向量:Resourse(资源总量):
Available(剩余资源量):
两个矩阵:Max(进程最大需求量)
其中Max(2,3)元素值为2,表示进程P2对资源R3的最大需求为3个Allocation(进程已分配量)
其中Allocation(2,2)元素值为1,表示系统为进程P2已分配R2资源1个
进程尚需量:Need=Max-Allocation
银行家算法如下:
1)if(Request[i]<=Need[i])执行2);
2)if(Request[i]<=Available)执行3);
else wait();表示尚无足够资源,Pi须等待。
3)系统试探性把要求的资源分给Pi(类似回溯算法)。
并根据分配修改下面数据结构中的值。
Available[i]=Available[i]–Request[i];
Allocation[i]=Allocation[i]+Request[i];
Need[i]=Need[i]-Request[i];
4)执行安全性检查,检查此次资源分配后,系统是否还处于安全状态。若安全,才正式将资源分配给进程;否则,试探方案作废,恢复原资源分配表,进程Pi等待。
安全性检测算法:
设置两个向量:
Free:是一个纵向量,表示系统空闲的各类资源数
Finish:是一个纵向量,表示进程能否得到全部资源使之运行完成。
执行安全算法开始时:
1)从进程集中找一个能满足下述条件的进程Pi
(1)Finish[i]=false(未定)(2)Need[i]<=Free(资源够分)
2)当Pi获得资源后,认为它完成,回收资源:
若Finish[1…n]=true,则系统是安全的,可以实施分配,否则系统不安全,撤销分配。
5 总结
死锁发生的原因和预防的方法是操作系统的核心问题之一,而如何有效的利用死锁的充分必要条件去预防,判断和解除可能存在的死锁危机,是死锁问题研究的核心。在一个系统的执行过程中应经常检测是否发生了死锁,而一旦发生了死锁,又应该如何的去解决它。希望本文的讨论有利于读者对死锁问题的深刻理解,并能进一步研究解决死锁问题的方法。
摘要:主要研究操作系统进程的死锁问题。进程死锁问题是操作系统的主要问题之一,很多学者专家一直在研究怎样解决这个问题。首先提出了死锁的概念,死锁发生的原因及产生死锁的四个必要条件,然后又讨论了破坏死锁发生的必要条件,就能预防死锁的发生,最后具体的谈论了死锁避免的最著名的算法—银行家算法,从而阻止死锁的发生。
关键词:死锁,多道程序,死锁的必要条件,死锁的预防,银行家算法
参考文献
[1]汤子赢,哲凤屏,汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社,2006.
[2]张尧学,史美林.计算机操作系统教程[M].北京:清华大学出版社,1992.
[3]庞丽萍.操作系统原理[M].3版.武汉:华中科技大学出版社,2004.
[4]吴企渊.计算机操作系统[M].北京:清华大学出版社,2006.
[5]左万历,王拉柱.银行家算法的改进[J].吉林大学自然科学学报,1997(1).
[6]甄志龙,于远诚.OS中死锁问题的状态模型探讨[J].通化师范学院学报,2005(26):23-25.
[7]刘义常.操作系统原理[M].北京:中国水电出版社,2006.
[8]陆丽娜.分布式操作系统[M].北京:电子工业出版社,2005.
死锁问题的相关研究 篇2
关键词银行家算法;存储转发;重装死锁
中图分类号TH文献标识码A文章编号1673-9671-(2011)041-0129-01
所谓死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
1产生死锁的原因及其必要条件
1)产生死锁的原因。因为系统资源不足;进程运行推进的顺序不合适;资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
2)产生死锁的四个必要条件。互斥条件:一个资源每次只能被一个进程使用。请求与保持条件(占有等待):一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件(不可抢占):进程已获得的资源,在未使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
2死锁的解除与预防
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。
1)有序资源分配法。这种算法资源按某种规则系统中的所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3、等等),申请时必须以上升的次序。
采用有序资源分配法:R1的编号为1,R2的编号为2;PA:申请次序应是:R1,R2;PB:申请次序应是:R1,R2;这样就破坏了环路条件,避免了死锁的发生。
2)银行算法。避免死锁算法中最有代表性的算法是DijkstraE.W于1968年提出的银行家算法。该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。
3死锁排除的方法
撤消陷于死锁的全部进程;逐个撤消陷于死锁的进程,直到死锁不存在;从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失;从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态。死锁是网络中最容易发生的故障之一,即使在网络负荷不很重时也会发生。死锁发生时,一组节点由于没有空闲缓冲区而元法接收和转发分组,节点之间相互等待,既不能接收分组也不能转发分组,并一直保持这一僵局,严重时甚至导致整个网络的瘫痪。
1)存储转发死锁及其防止。最常见的死锁是发生在两个节点之间的直接存储转发死锁。例如,A节点的所有缓冲区装满了等待输出到B节点的分组,而B节点的所有缓冲区也全部装满了等待输出到A节点的分组;此时,A节点不能从B节点接收分组,B节点也不能从A节点接收分组,从而造成两节点间的死锁。这种情况也可能发生在一组节点之间,例如,A节点企图向B节点发送分组、B节点企图向C节点发送分组、而C节点又企圖向A节点发送分组,但此时每个节点都无空闲缓冲区用于接收分组,这种情形称做间接存储转发死锁。当一个节点处于死锁状态时,所有与之相连的链路将被完全拥塞。
一种防止存储转发死锁的方法是,每个节点设置M+1个缓冲区,并以0到M编号。M为通信子网的直径,即从任一源节点到任一目的节点间的最大链路段数。每个源节点仅当其0号缓冲区空时才能接收源端系统来的分组,而此分组仅能转发给1号缓冲区空闲的相邻节点,再由该节点将分组转发给它的2号缓冲区空闲的相邻节点,最后,该分组或者顺利到达目的节点并被递交给目的端系统,或者到了某个节点编号为M的缓冲区中再也转发不下去,此时一定发生了循环,应该将该分组丢弃。由于每个分组都是按照编号递增规则分配缓冲区,所以节点之间不会相互等待空闲缓冲区而发生死锁现象。另一种防止存储转发死锁的方法是,使每个分组上都携带一个全局性的惟一的”时间戳”,每个节点要为每条输入链路保留一个特殊的接收缓冲区,而其它缓冲区均可用于存放中转分组。
2)重装死锁及其防止。死锁中比较严重的情况是重装死锁。假设发给一个端系统的报文很长,被源节点拆成若干个分组发送,目的节点要将所有具有相同编号的分组重新装配成报文递交给目的端系统,若目的节点用于重装报文的缓冲区空间有限,而且它无法知道正在接收的报文究竟被拆成多少个分组,此时,就可能发生严重的问题:为了接收更多的分组,该目的节点用完了它的缓冲空间,但它又不能将尚未拼装完整的报文递送给目的端系统,而邻节点仍在不断地向它传送分组,但它却无法接收。这样,经过多次尝试后,邻节点就会绕道从其它途径再向该目的节点传送分组,但该目的节点已被死锁,其周边区域也由此发生了拥塞。下面几种方法可用以避免重装死锁的发生:①允许目的节点将不完整的报文递交给目的端系统;②一个不能完整重装的报文能被检测出来,并要求发送该报文的源端系统重新传送;③为每个节点配备一个后备缓冲空间,用以暂存不完整的报文。
4操作系统死锁检测与解除相关设计
void jiesuo(int *work,int **request,int **allocation,int *finish,int *p,int m,int n)
{int i,j,t,flag;
int *sum=new int[m];
for(i=0;i sum[i]=0; for(i=0;i if(p[i]==FALSE) { for(j=0;j sum[i]=sum[i]+allocation[i][j]; allocation[i][j]=0; } t=sum[0]; for(i=1;i if(t cout<<”撤消占资源最大的进程:"< for(j=0;j work[j]+=allocation[flag][j]; finish[flag]=TRUE; //完成flag进程的操作 p[flag]=FALSE; //不再对它进行判断 flag=check(work,request,allocation,finish,p,m, n); //判断是否已经解除死锁 1 死锁概述 1.1 死锁概念 计算机操作系统中, 进程需要相互访问, 例如:想要把磁盘中的文件打印出来, 进程会同时访问打印机和磁盘驱动器, 并且阻止其它进程访问他们。当系统中只有一个进程时, 此进程可任意要求它所需的资源进行工作;当系统中有多个进程时, 这些进程共同利用系统资源, 提高系统处理能力, 但也有可能发生死锁现象。 1.2 死锁的必要条件 互斥的条件:一个资源只能被一个进程应用。 保持和请求的条件:保持原占用资源, 再请求新资源。 不可剥夺的条件:只有占有这个资源的进程可以释放它, 其它进程不可剥夺。 环路等待的条件:系统处于进程环形链情况时, 每个进程都会占据一些资源, 并且等待其它进程占据的资源。 1.3 死锁产生的原因 第一, 资源的竞争产生死锁。当计算机操作系统资源有限时, 有可能发生死锁, 但是此时的死锁要满足四个必要条件, 缺一不可。第二, 通信的进程产生死锁。进程之间不会占用同一个资源, 它们会等待彼此的消息, 因此这些进程不能连续运转, 造成死锁。第三, 其它类型的死锁。一个程序设计的不合理, 会产生广义的死锁, 经常发生在程序运用的数据结构、存储区和变量上面。不合理的设计程序, 造成操作系统以为是别的进程在使用, 其实都在等待对方的消息。 2 解决死锁的方法 2.1 预防死锁 这是一种静态方法, 死锁有四个必然条件 (四个必然条件见下文叙述) , 破坏其中一条来限制计算机操作系统进程占用资源的活动, 从而预防死锁。 2.2 避免死锁 这是一种动态方法, 检查进程占用所需资源的命令, 而不是限制进程占用所需资源的命令, 根据检查结果合理分配资源。确定分配资源的安全, 预防分配资源中产生死锁的现象。 2.3 检测和系统恢复 检测计算机操作系统是否处于环路等待现象, 一旦检测到死锁, 应及时解除死锁, 恢复到正常的系统应用。 3 预防死锁的方法 3.1 阻碍互斥现象 破坏第一个必然条件, 让资源被同时访问, 并且他们之间不互相排斥, 但是进程工作时很多资源是不可以被同时访问利用的, 因此这种简单方法有时是不可应用的, 只有在资源可被共享的情况下使用。 3.2 破坏保持和请求条件 一个进程在申请利用某个资源时, 便不能在占用其它的资源, 这是一种静态分配的方法。在进程工作之前, 让它一次性的申请出所有需要应用的资源, 如果系统资源充足, 就可以把进程所需的所有资源分配给它, 所以在进程工作中就不会在提出应用资源的申请, 这样就破坏了请求等待条件。如果系统资源分配过程中, 有一种资源无法满足进程的需求, 那么就不分配给它任何资源, 让它一直等待, 以此破坏保持条件, 避免死锁现象的发生。 3.3 对不可剥夺条件进行破坏 3.3.1 方法一 一个进程在占用其它资源, 还要继续申请资源被拒绝时, 那么该进程就必须释放原本所占用的资源, 以后需要资源可以再次申请。简单来讲就是, 已占用资源的进程在运行时, 会将原本占用的资源释放, 也就是说权利被剥夺, 因此破坏了不可剥夺的条件。 3.3.2 方法二 一个进程正在申请的资源被其它进程占用时, 可以利用操作系统去抢占资源, 这种方法要建立在不同优先级别的两个进程上, 如果两个进程的优先级别相同, 就不能防止死锁。优点:方便保留状态和恢复资源。缺点:恢复代价较高, 实现起来比较困难, 容易导致循环的重启和不必要的抢占。 3.3.3 对循环等待进行破坏 规则编号, 定序排练所有资源, 进程只能根据递增的方式占用资源, 如果进程想要占用某个资源, 就必须释放所有比此资源编号大的资源。优点:分配资源可以逐步进行, 资源的利用率被提高, 方便检查。缺点:限制资源的顺序, 不能增加资源占用, 当系统规定和资源顺序不同时, 其利用率较低, 不可抢占。 4 结语 综上所述, 我们可以清楚地认识到死锁在计算机操作系统中的影响, 对死锁的必然条件和预防方法、解决方法基本了解。我们还要经常检测计算机操作系统是否发生死锁, 一旦发现死锁现象, 要及时采取相应的解决方法, 确保计算机的正常运行。 摘要:死锁是计算机故障中常见的问题之一, 想要最优化使用计算机操作系统, 首要任务就是解决死锁问题。当然死锁故障不是无缘无故产生的, 它连带着自身的必然条件, 而这些必然条件是解决死锁问题的突破点。笔者介绍计算机死锁问题, 分析死锁现象的发生条件, 并提出可实行的解决方法。 关键词:计算机,操作系统,死锁问题 参考文献 [1]张伟杰.计算机操作系统中死锁问题研究[J].计算机光盘软件与应用, 2014 (18) . [2]申雪琴.计算机操作系统中死锁问题研究[J].计算机与数字工程, 2008 (7) . [3]汪江桦, 汤建国.关于操作系统中死锁问题的探讨[J].科技信息, 2009 (17) . 1 预防死锁发生的算法 如前所述, 对资源的竞争访问是产生死锁的根本原因。1971年, Coffman提出了死锁发生的四个条件, 即互斥访问条件, 请求和保持条件, 不可抢占条件, 环路等待条件。只有当这四个条件同时成立时, 才有可能会出现死锁。 为了解决死锁的问题, 人们提出了一些列算法。包括银行家算法, 运用资源轨迹图来避免死锁的算法以及在当前的操作系统当中广泛采用的“鸵鸟”算法。这些算法的提出对计算机操作系统的研究起了很大的推动作用。在学习操作系统课程的过程中, 我认为有一种方法可以很好地预防死锁的发生, 所以在此做一简单介绍。 1.1 算法一 对于系统中的每一个进程, 执行如下操作: (1) 进程在运行过程中, 发现还要申请其它的资源, 转 (2) 。 (2) 进程释放已经占有的全部不可抢占资源, 转 (3) 。 (3) 进程一次性申请在第二步中释放的资源与在第一步中所需的新的资源, 转 (4) 。 (4) 若申请资源成功, 即得到所需的全部系统资源, 继续运行, 并转 (6) 。 (5) 若申请资源失败, 即进程所需的全部系统资源无法一次性得到满足, 则该进程需要先唤醒阻塞队列中的第一个进程, 然后进入阻塞队列的尾部变为阻塞状态。算法结束。 (6) 进程运行结束时释放资源并唤醒在阻塞队列中的第一个进程。算法结束。 可以看出, 这个算法的实质就是要求进程在请求一个新资源时, 先暂时释放它已经占用的各个资源, 然后再重新申请它所需的全部资源, 包括它原来占用的资源和新的资源。 事实上, 如果系统中的所有进程都采用这种运行方式, 系统将肯定不会发生死锁现象。但是这种方式可能会降低系统的使用效率, 因为如果所有进程都要在每一次申请资源时先释放已有资源再去重新申请, 则进程浪费在申请资源上的时间还是比较多的。基于此, 我们可以对算法一做出如下改进。 1.2 算法二 对于系统中的每一个进程, 执行如下操作: (1) 进程在运行过程中, 发现还要申请其它的资源, 执行第二步。 (2) 进程判断该资源属于可抢占资源还是不可抢占资源, 如果是可抢占资源, 则直接申请, 如果是不可抢占资源, 则转第三步。 (3) 进程检查当前阻塞队列是否为空, 如果为空, 则说明当前系统中没有被阻塞的进程, 转 (4) ;如果阻塞队列非空, 说明当前系统中存在被阻塞的进程, 转 (6) 。 (4) 若系统中剩余的资源数大于进程申请的资源数, 则申请资源成功, 转 (10) 。否则, 转 (5) 。 (5) 若系统中剩余的资源数小于进程申请的资源数, 则该进程进入阻塞状态。算法结束。 (6) 进程释放已经占有的全部不可抢占资源, 转 (7) 。 (7) 进程一次性申请在第二步中释放的资源与在第一步中所需的新的资源, 转 (8) 。 (8) 若申请资源成功, 即得到所需的全部系统资源, 进程继续运行, 转 (10) 。否则, 转 (9) 。 (9) 若申请资源失败, 即进程所需的全部系统资源无法一次性得到满足, 此时该进程需要首先唤醒阻塞队列中的第一个进程, 然后该进程进入阻塞队列的尾部转化为阻塞状态。算法结束。 (10) 进程运行结束时释放占有的所有资源并唤醒在阻塞队列中的第一个进程。算法结束。 在该算法中, 首先要判断申请的资源是可抢占资源还是不可抢占资源, 如果是可抢占资源, 则一定不会引发死锁, 因为进程得到该资源后依然无法满足死锁所发生的四个必要条件之一的不可抢占条件。所以, 我们在进行死锁避免的考察时, 只需对不可抢占资源进行讨论。接下来需要检查阻塞队列是否为空, 为了提高系统的运行效率, 我们可以规定只有当阻塞队列中已经有进程时才让其它进程执行在申请资源前先释放资源的操作。因为在发生死锁时至少要有两个进程同时处在阻塞队列中, 所以我们允许第一个申请非抢占资源的进程在执行到算法二的第 (5) 项时进入阻塞状态。 采用这种算法可以保证系统当中不会出现死锁现象, 并且对操作系统的运行效率的影响相对较小。 2 结论 本文简单介绍了一种操作系统的死锁预防算法, 即要求进程在申请资源前先释放它所占有资源, 然后再一次申请全部的资源。这种算法能够保证系统不发生死锁, 但频繁地释放与申请资源也增加了系统开销, 因此本文对该算法进行了改进。在对运行时的稳定性要求较高的操作系统中, 在进程调度时使用该算法是能够满足系统运行要求的。 参考文献 [1]谌卫军等.操作系统[M].北京:清华大学出版社, 2012. 微格教学具有现代化教学的优势, 但相对于传统课堂形式教学对配套软硬件设备要求较高。通过硬件如摄像录音设备, 以及软件如视频处理音频处理软件将授课录制成的数字视频通常较大, 而微格化的教学要求具有连续性和时效性, 要保证每个用户均可享受服务, 就务必保证数字信号传输的稳定性以及足够带宽。但往往硬件条件满足时, 亦会出现多用户分段传输过程中, 锁死情况的出现, 造成网络传输冲突。为网络传输冲突, 必须针对特定的硬件条件配合具体算法来对系统进行优化。 1 微格教学构成介绍 优化整个系统首先对微格教学硬件设施进行分析。微格教学包括主控室以及微格教室两部分。 1.1 主控室 主控室里布置了大量用于教学以及辅助教学的设备, 这些设备至少应包括服务器、主控计算机、高清摄像头、录像机、监控台、监视器以及功放设备等。主控室对微格教室设备工作进行监视和控制。通过安装在微格教室的摄像装置, 来采集微格教室的教学环境情况。并可以对微格教室播放教学录像与电视节目。可以把接受微格教室的请求, 亦可对微格教室教学情况以及课堂质量进行录制, 为以后教学作为分析。 1.2 微格教室 微格教室是教学主体, 其中包括主要包括监控摄像头, 视频音频设备, 用户分控器等。微格教室内计算机可上传请求给主控室, 亦可呼叫主控室, 并与主控室进行沟通。微格教室也可以自行控制位于本教室的监控设备, 音频视频设备, 收集录制教室声音和图像, 作为后续的分析和评估资料。分控机可以选择数据库课程资源, 并控制显示设备, 音频设备的播放、暂停、停止、快进退等。 2 微格教学系统死锁分析 因为微格教室具有远程控制, 传输数据量大以及节点多等特点, 使得其系统较为复杂, 为保证多个任务同时工作, 须采用同步和多线程技术。但多线程工作容易产生阻塞形成死锁, 影响系统工作效率。 死锁是数据传输过程中数个等待进程下载服务器共享资源产生冲突而形成的互相等待现象, 这种等待使得进程请求阻塞, 须借助其他程序或认为控制解除。由于服务器CPU工作的分时性, 所以节点请求资源传输是互斥操作, 为了提高系统性能和数据传输吞吐量需引入锁机制, 锁也对系统高效和安全运行具有明显作用, 但产生死锁后, 节点请求无法满足会产生停滞反而会影响系统工作。 死锁是一种程序BUG, 有非常多的种类, Linux内核源码有上千万行, 锁具有大量产生点, 在现有技术条件下, 不可能避免死锁的产生。所以在数据传输中应采用有效方式, 应对死锁。 3 冗余传输系统设计 为了避免传输过程中死锁影响教学流畅性, 我们设计了死锁的检测模块, 提出一种快速地死锁检测机制。当检测到死锁后, 系统即使报告检测信息。由于解锁过程较为困难, 会导致系统无法传输信息, 此处我们构建冗余服务器进行数据传输, 避免解锁困难。下面分工作流程以及锁检测模块两方面介绍分析系统。 3.1 冗余系统的设计 首先, 控制系统会将目标视频分成若干数据包, 数据包大小依据服务器与用户网络传输速度而定, 网速越, 数据包可设置越大。另外也要考虑用户数量, 数量较多时须设置较小的数据包, 避免单个用户传输时间过长, 以保证用户下载的同步性。以100个用户, 10Mbps网络带宽为例, 可设置100Kb数据包, 此时若用户同时发出传输请求, 延迟为1s, 不会影响教学效果。 数据包的分割要遵循视频文件的时序, 不可措置时间, 而且要掌握视频信息与音频信息时间对应, 数据包同时也被严格按时间先后编号。我们在控制端设置与主机功能相近的服务器作为主机的冗余, 在主机工作过程中, 引入锁检测模块, 对数据包传输中死锁进行检测。如若传输正常, 则多线程继续用户传输, 如若发现死锁, 则启动冗余, 并重启主机程序, 从而消锁, 重启程序后的主机为冗余, 交替工作。此时冗余机为达到视频信号传输同步需查找用户接受数据包时序信息, 传输下一时刻数据包。其工作原理同主机工作相同。在传输过程依然引入锁检测模块, 一旦发现死锁立即切换至已经重启的主机继续传输。 3.2 死锁检测算法的设计 互斥进程同时请求服务器服务时, 在同一时刻只能有一个线程访问该对象。如果一个进程已经将资源锁定, 就会使传输序列冲突, 导致了另外的用户服务请求进程不停地循环, 无法获取服务, 进而产生死锁。设计死锁检测模块是系统的主要部分之一。系统死锁后会进入强烈的自旋状态, 数据传输停止, 并出现进程阻塞情况。 4 结论 微格教学对数据传输稳定性要求较高, 但易产生死锁导致系统卡滞。本文针对这个问题, 分析了微格教学的构成, 并设计与之配套的死锁检测方案, 同时设计了冗余传输系统, 可在产生死锁后切换至冗余服务器传输数据。最后通过仿真证实系统工作正常, 并在短时间内完成冗余切换和主机程序重启, 可满足微格教学的要求。 摘要:为了应对微格教学系统数据传输过程中产生死锁导致数据中断的问题, 并保证教学过程的流畅进行, 设计了一套与微格教学相匹配的死锁监测方案和冗余传输系统, 可实现实时监测系统, 在产生死锁后快速切换至冗余服务器继续传输数据, 并重启主机传输程序。通过仿真证实系统可快速切换冗余服务器, 且切换时间与主机程序重启时间较短, 可在保证用户播放视频质量的同时使微格教学系统满足教学要求。 关键词:微格教学,数据传输,死锁检测,冗余 参考文献 [1]李晋, 葛敬国.Linux下互斥机制及其分析[J].计算机应用研究, 2005 (8) :72-77. [2]彭正文, 徐新爱.基于SMP的Linux内核自旋锁分析[J].江西教育学院学报:综合版, 2005 (3) :23-28. 【操作系统中死锁问题】推荐阅读: UNIX操作系统中进程通信机制的应用Windows系统10-12 山东大学操作系统实验五理发师问题报告06-13 linux下Shell中调用/引用/包含脚本文件方法linux操作系统08-27 电力系统中的谐波问题10-18 ERP系统中的物料管理问题06-05 净化空调系统调试中的常见问题和改进建议07-23 系统操作05-16 系统操作站06-25 操作平台系统07-31探究计算机操作系统中死锁问题 篇3
一种操作系统的死锁预防算法 篇4
操作系统中死锁问题 篇5