死锁活锁饥饿

死锁定义:一组进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的,因而永远无法得到的资源,这种现象称为进程死锁。结论:

参与死锁的进程至少有二个

每个参与死锁的进程均等待资源

参与死锁的进程中至少有两个进程占有资源;

死锁进程是系统中当前进程集合的一个子集。

在一个动态系统中,资源请求与释放是经常性发生的进程行为.对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序。 资源分配策略可能是公平的(fair),能保证请求者在有限的时间内获得所需资源;资源分配策略也可能是不公平的(unfair),即不能保证等待时间上界的存在。 在后一种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待.当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿(starvation),当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死(starve to death)。       

 

     考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟,导致饥饿以至饿死。                                                                 

 

与饥饿相关的另外一个概念称为活锁 (live lock) ,在忙式等待条件下发生的饥饿,称为活锁。例如不公平的互斥算法 

 

不进入等待状态的等待称为忙式等待。另一种等待方式是阻塞式等待,进程得不到共享资源时将进入阻塞状态,让 出 CPU 给其他进程使用。忙等待和阻塞式等待的相同之处在于进程都不具备继续向前推进的条件,不同之处在于处于忙等待的进程不主动放 弃 CPU , 尽 管 CPU 可 能被剥夺,因而是低效的;而处于阻塞状态的进程主动放弃 CPU ,因而是高效的。

 

有人说活锁是数据资源分配引起的,而饿死是处理器资源分配引起的。不同领域中,本质应该是一样的。

 

我认为活锁的进程不放弃CPU的情况下无法完成工作的情况,就如上面网络中说的报文围绕目的节点转悠,却不能真正到达目的节点。而饿死则是放弃CPU让其他进程工作,但这一让就成了无限期的让,从而导致了饿死。

posted on 2013-11-10 20:28  heartstage  阅读(1602)  评论(0编辑  收藏  举报

导航