前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >2.5.2 死锁与饥饿

2.5.2 死锁与饥饿

作者头像
week
发布2018-08-24 18:00:34
发布2018-08-24 18:00:34
1K0
举报
文章被收录于专栏:用户画像用户画像

 具有等待队列的信号量的实现可能导致这样的情况: 两个或多个进程无限地等待一个事件,而该事件只能由这些等待进程之一来产生。这里的事件是V操作的执行(即释放资源)。 当出现这样的状态时,这些进程称为死锁。

与死锁相关的另一个问题是无限期阻塞或饥饿,即进程在信号量内无穷等待的情况。

产生饥饿的主要原因是:在一个动态系统中,对于每类系统资源,操作系统需要一个分配策略,当多个进程同时申请 某类资源时,由分配策略确定资源分配给进程的次序。有时资源分配策略是不公平的,即不能保证等待时间上限的存在。在这种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待。当等待时间给进程推进和响应带来明显影响时,称发生了进程“饥饿”。当“饥饿”到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被“饿死”。

例如,当有多个进程需要打印文件时,如果系统分配打印机的策略是最短文件优先,那么长文件的打印任务将由于短文件的源源不断到来而被无限期推迟,导致最终的“饥饿”甚至饿死。

“饥饿”并不表示系统一定死锁,但至少有一个进程的执行被无限期推迟。饥饿与死锁的主要差别有:

1)进入“饥饿”状态的进程可以只有一个,而由于循环等待条件而进入死锁状态的进程却必须大于或等于两个。

2)处于饥饿状态的进程可以是一个就绪进程,如静态优先权调度算法时的低优先权进程,而处于死锁状态的进程则必定是阻塞进程。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年06月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档