
在操作系统的设计中,我们往往无法回避一个问题,那就是进程对有限资源的占用问题。在计算机系统中有很多独占性的资源,在任一时刻,它们都只能被一个进程使用。常见的有打印机、磁带驱动器等。例如:两个进程同时打印会引起打印混乱。鉴于此,操作系统全都具有授权一进程(临时)独占地访问某一种资源的能力。
在很多情形中,需要一个进程独占地访问若干种资源而不是一种。例如将一个大文件由磁带拷贝至打印机,进程需要同时访问磁带驱动器和打印机,并且不允许其他进程这时访问它们。在只有一个进程的系统中,该进程可以要求任何它所需要的资源,然后进行工作。但是,在一个多道程序系统中,就有可能出现严重的问题。例如,两个进程分别准备打印一个非常大的磁带文件。进程A申请打印机,并得到授权。进程B申请磁带机,也得到授权。现在,A申请磁带机,但该请求在B释放磁带机前会被拒绝。不幸的是,B非但不放弃磁带机,而且去申请打印机,而A在申请到磁带机之前也不会释放打印机。这时,两个进程都被阻塞,并且保持下去,这种状况就是死锁(deadlock).
下面系统阐述一下死锁的定义:所谓死锁,就是多个进程循环等待它方占有的资源而无限期的僵持下去的局面。显然,如果没有外力的作用,那么死锁涉及到的各个进程都将永远处于封锁状态。
在操作系统的设计中,我们往往无法回避一个问题,那就是进程对有限资源的占用问题。在计算机系统中有很多独占性的资源,在任一时刻,它们都只能被一个进程使用。常见的有打印机、磁带驱动器等。例如:两个进程同时打印会引起打印混乱。鉴于此,操作系统全都具有授权一进程(临时)独占地访问某一种资源的能力。
在很多情形中,需要一个进程独占地访问若干种资源而不是一种。例如将一个大文件由磁带拷贝至打印机,进程需要同时访问磁带驱动器和打印机,并且不允许其他进程这时访问它们。在只有一个进程的系统中,该进程可以要求任何它所需要的资源,然后进行工作。但是,在一个多道程序系统中,就有可能出现严重的问题。例如,两个进程分别准备打印一个非常大的磁带文件。进程A申请打印机,并得到授权。进程B申请磁带机,也得到授权。现在,A申请磁带机,但该请求在B释放磁带机前会被拒绝。不幸的是,B非但不放弃磁带机,而且去申请打印机,而A在申请到磁带机之前也不会释放打印机。这时,两个进程都被阻塞,并且保持下去,这种状况就是死锁(deadlock).
下面系统阐述一下死锁的定义:所谓死锁,就是多个进程循环等待它方占有的资源而无限期的僵持下去的局面。显然,如果没有外力的作用,那么死锁涉及到的各个进程都将永远处于封锁状态。
计算机系统产生死锁的根本原因就是资源有限且操作不当。即:一种原因是系统提供的资源太少了,远不能满足并发进程对资源的需求。这种竞争资源引起的死锁是我们要讨论的核心。例如:消息是一种临时性资源。某一时刻,进程A等待进程B发来的消息,进程B等待进程C发来的消息,而进程C又等待进程A发来的消息。消息未到,A,B,C三个进程均无法向前推进,也会发生进程通信上的死锁。
我们可以对资源进行以下分类:
可重用资源(reusable resource):每个时刻只有一个进程使用,但不会耗尽,在宏观上各个进程轮流使用。如CPU、主存和辅存、I/O通道、外设、数据结构如文件、和信号量。有可能剥夺资源:由高优进程剥夺低优进程,或OS核心剥夺进程。
可重用资源死锁

死锁发生:双方都拥有部分资源,同时在请求对方已占有的资源。如次序:P1 P2 P1 P2
非可剥夺资源(consumable resource):可以动态生成和消耗,一般不限制数量。如硬件中断、信号、消息、缓冲区内的数据。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-47006-1.html
生蛆也不奇怪
因为现代战争将没有胜利者
假的