操作系统OS中的死锁和饥饿

Anonim

操作系统是在计算机上运行的最基本的软件。它负责管理计算机的内存和进程,并使用它来屏蔽应用程序中的硬件细节。计算机的操作系统还确保向用户和程序公平分配资源,而不是在进程之间平等分配。公平的调度系统允许一个进程使用CPU而另一个进程在队列中等待。因此,每个线程都可以获得对有限资源的足够访问,从而防止两个最常见的情况,否则会延迟进程:死锁和饥饿。两者都是流程无法访问资源的相关概念。本文重点介绍了在不同方面比较两者的一些关键点。

什么是死锁?

死锁是一组线程被阻塞的情况,因为持有资源的每个进程都试图访问另一个进程持有的其他资源,最终阻止公平的系统调度。当以下四个条件成立时,就会出现死锁情况:相互排斥意味着一次只能有一个进程访问资源;没有抢占条件意味着资源只能由持有资源的进程自愿释放;保持和等待意味着持有资源的过程可以请求其他过程持有的额外资源;循环等待意味着两个或多个进程卡在循环链中,等待每个进程释放其各自的资源。

什么是饥饿?

当进程无限期地进入等待期时,饥饿是一种条件,因为低优先级进程由于访问相同资源的高优先级进程的持续流而永远不会有机会访问资源。这是一个资源管理问题,因为拒绝进程访问它所需的资源,从而将进程推入无限期等待期。之所以会发生这种情况,是因为它所需的资源永远不会分配给流程,从而导致流程缺乏资源,因此也就是名称。避免饥饿的最佳方法是使用老化技术,该技术逐渐增加长时间等待期间的进程的优先级,以确保公平的调度系统。

操作系统中死锁与饥饿的区别

  1. 死锁和饥饿的定义

死锁和饥饿都是相关的概念,它们阻止了公平的系统调度,阻止进程访问资源。死锁,顾名思义,指的是一组线程或进程被阻塞的情况,因为每个进程都在等待获取另一个进程持有的资源,从而导致程序停止运行的死锁情况。另一方面,Starvation由死锁触发,导致进程冻结,因为低优先级进程被拒绝访问分配给高优先级进程的资源。

  1. 条件

死锁是指线程或进程进入等待期间时发生的特定情况,因为它请求的系统资源由另一个进程持有,而另一个进程又等待另一个进程释放其资源,从而产生死锁。这是由资源利用率低造成的。饥饿是一种无限期的延迟条件,其中低优先级进程被拒绝访问它所需的资源,因为资源被分配给另一个高优先级进程。这是一个资源管理问题,它迫使系统仅将资源分配给高优先级进程。

  1. 死锁和饥饿的特征

死锁是在以下四个条件同时发生时引起的最终饥饿形式:相互排斥,无抢占,保持和等待以及循环等待。只有在所有四个条件都成立的系统中才会出现死锁情况。饥饿基于不同的条件发生,例如当没有足够的资源可用时,进程的优先级开始降低,或者进程在没有控制的情况下开始将资源交给其他进程。如果低优先级进程请求为最高优先级进程保留的资源,则该进程将永远饿死。当资源被任意分配导致进程等待更长的时间时,也会发生饥饿。

  1. 预防

通过使用具有优先级队列的适当调度算法可以防止饥饿,优先级队列实际上也使用老化技术 - 一种调度技术,它将老化因子添加到每个请求的优先级,这意味着它增加了等待的低优先级进程的优先级需很长时间。同时为计划提供更多资源应避免资源持续拥挤。为了防止系统进入死锁,必须拒绝进程访问一个或多个资源,同时等待其他资源,并且一次只允许一个进程访问资源。

僵局与饥饿:比较图表

死锁VS的总结饥饿

死锁和饥饿都是多处理操作系统或分布式系统中的相关概念,它们导致一个或多个线程或进程停留在等待所需的资源。死锁是当一个或多个进程请求访问同一资源导致进程冻结时出现的情况,而饥饿是由死锁引起的,死锁将进程推迟到无限期的延迟状态,因为进程被拒绝访问由a持有的资源。高优先级的过程,需要永远等待。