운영 체계 - 교착 상태

동시성 : 교착 상태와 기아

교착 상태

기본 개념

교착 상태 : 시스템 자원 경쟁이나 통신 "영구"혼잡 상황 사이의 일련의 프로세스. 그룹의 각 프로세스는 이벤트를 기다리고 있으며,이 기 처리에서 유일한 차단 프로세스가 이벤트를 트리거 할 수있는 처리 할 때, 프로세스의이 그룹은 교착. 거기에 어떤 이벤트가 트리거 될 수 없다, 그래서 교착 상태가 영구적이기 때문입니다.

 

라이브 락 : 작업을 참조하거나 뭐라고해도 일부 조건이 반복 시도의 결과로 충족되지 않기 때문에, 차단되지 않습니다 - 실패 - 시도 - 프로세스의 실패를. 법인이 활성화 잠금이 변화의 일정한 상태에서, 자신의 잠금 해제 잠금에 살 수입니다. (일정한 겸손의 프로세스와 유사)

 

재사용 가능한 자원 : 당신은 안전하게 프로세스 및 고갈 된 자원을 사용하지 않고 사용할 수 있습니다. 프로세서 / IO 채널, 메모리, 외부 기억 장치와 파일, 데이터베이스, 세마포어.

 

소비 자원 : 자원의 생성 할 수 있습니다 (생산)과 소멸 (소비). 이러한 자원의 수는 자원의 수를 만들 수 있습니다 비 차단 프로세스를 생산하기 위해 표시되지 않습니다. 소비자 프로세스가 자원을 얻을 때 자원이 존재 중단 할 때. 인터럽트 정보 신호, 메시지, 및 I / O 버퍼.

 

자원 할당 맵 : 프로세스 자원 할당 유향 그래프의 특성화. 참고

의 image.png의 image.png의 image.png

 

교착 상태

주된 이유 경쟁 시스템 리소스를 포함하여 교착 상태 및 불법 순서의 과정을 촉진한다.

교착 상태는 세 가지 필요 조건이 있습니다 :

  1. 상호 배타적 : 하나 개의 프로세스는 자원을 사용할 수있다. 리소스에 액세스 할 수 없습니다 다른 프로세스가 다른 프로세스에 할당 된 

  1. 점유율 기다립니다 : 프로세스가 다른 프로세스를 대기하는 경우, 할당 된 자원을 차지하기 위해 계속
  2. 포착되지 않음 : 자원이 프로세스의 소유를 포착하도록 강요하지 않는있다

첫 번째 세 가지 조건은, 순환 해결 못하는 대기 발생할 수 있습니다 발생할 수있는 일련의 이벤트를 충족. 해결할 수없는 교착 상태주기는 실제로 정의를 기다리고, 따라서 충분 조건이된다 :

  1. 루프 기다려 각 프로세스 체인 요구에서 다음 공정에 적어도 하나 개의 자원을 차지하도록 폐쇄 프로세스 체인이 존재한다.

교착 상태 처리 전략

 

원칙

자원 할당 정책

계획

이점

결점

예방

보수적, 것보다는 유휴 자원

한 번만 요청 모든 자원

포착 할 필요가 없습니다 매우 효과적인 과정은 일련의 활동을 수행하는

초기화 비효율적 인 프로세스를 지연

당신은 미래의 자원 요청을 알고 있어야합니다

잡다

상태에 대한 자료를 저장하고 쉽게 복원

잡을 너무 자주 필요가 없습니다

정렬 자원

검출은 컴파일하여 구현 될 수있다 때

런타임에 계산 될 필요는 없다

새로운 자원의 불편 유연한 응용 프로그램

기피

런타임 판사

작동 이상 안전한 경로를 찾을 수

不需要抢占

必须知道将来的资源请求

进程不能被长时间阻塞

检测

非常自由,只要允许就分配

周期性地调用以测试死锁

不会延迟进程的初始化

易于在线处理

通过抢占解除死锁,造成损失

死锁的预防

防止死锁的发生只需要破坏死锁产生的四个条件之一即可。

1.破坏互斥条件

    允许系统的资源都能共享使用,但是有些资源根本不能同时访问,如打印机等。因此,破坏互斥不太可行

2.破坏占有且等待

    要求进程一次性地请求所有需要的资源,并且阻塞这个进程直到所有的请求都满足。但是这个方法是低效率的,一方面进程可能被长时间阻塞。另一方面,分配给一个进程的资源可能长时间不会使用到,但是在此期间,也不能被其他进程使用。

3.破坏不可抢占

   如果占有某些资源的进程进一步申请资源被拒绝的时候,该进程必须释放它最初占有的资源。

   一个进程请求当前被另一个进程占有的一个资源,操作系统可以抢占另一个进程,要求它释放资源,要求优先级不同。

4.破坏循环等待

   定义资源类型的线性顺序,如果一个进程分配到了R型,则接下来的资源只能是排在R型之后的资源类型。

死锁的避免

死锁的避免同样也是属于事先预防的策略,但并不是事先采取某种限制措施破坏死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。死锁避免允许三个必要条件,限制条件更弱,能够获得更好的系统性能和允许更多的并发。

 

死锁避免不需要死锁预防中的抢占和回滚进程,限制也少。但是,死锁避免的限制在于:必须事先声明每个进程请求的最大资源,所讨论的进程是无关的,没有同步要求的限制,分配的资源数目必须是固定的,在占有资源的时候,进程不能退出。

1.进程启动拒绝

 如果一个进程的请求会导致死锁,则不启动此进程。

 在分配资源给进程之前需要考虑是否会导致系统进入不安全状态。

 安全状态指的是系统能按某种进程推进顺序,为每个进程分配所需资源,直到满足每个进程对资源的最大需求,使得每个进程都可顺序地完成。如果不存在这样的序列,则系统就是不安全的。系统进入不安全状态,就有可能进入死锁状态,反之,只要系统处于安全状态,系统便可避免进入死锁状态。

2.资源分配拒绝

 资源分配拒绝策略又称之银行家算法。进程向操作系统请求分配资源,操作系统按照规则为进程分配资源。当进程首次申请资源的时候,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求则进行分配,否则就推迟分配。当进程在执行中继续申请资源的时候,先测试该进程已占用的资源与本次申请的资源数之和是否超过了它自身的最大需求量,如果超过则拒绝,如果没有超过再测试系统现存的资源能否满足进程的需要。若能则分配,否则延迟分配。

 

数据结构描述:

struct state{
    int resource[m];    //表示资源数目 int available[m]; //未分配给进程的每种资源的总量 int claim[n][m]; //进程对资源的最大需求 有时也用max表示 int allocation[n][m] //n是进程数,m是资源种类数目 }

银行家算法描述:

의 image.png

安全性算法

의 image.png

举例说明

의 image.png

의 image.png

 

의 image.png

 

의 image.png

 

의 image.png

 

의 image.png

死锁的检测

系统在分配资源的时候不采取任何措施,而是周期性地执行一个算法(前面的安全性算法)检测死锁条件4-循环等待条件。

死锁定理-资源分配图

찾을 수있는 자원 할당 방법 1.은 고립 된 노드 만들기도 방해가 파이는 모든 요청과 유통 측면 가장자리를 제거 프로세스의 독방 점없는 것입니다.

2. 파이 출시 자원의 과정은 일부 차단 프로세스를 깨울 수 있습니다. 원래 차단 프로세스는 비 차단 처리가 될 수 있습니다. 반복 1)

모든 소거 에지하면 그래프가 단순화 될 수 있고, 그렇지 않으면 교착 존재, 존재하지 않는다.

교착 상태 리프트

  •  모든 프로세스 교착 취소
  •  각각은 다시 이전 체크 포인트로 롤백하고 모든 프로세스를 다시 시작하는 과정을 교착 상태.
  •  더 교착 상태가 없을 때까지 지속적인 프로세스의 교착 상태를 취소 할 수 있습니다.
  •  교착 상태가 더 이상 존재하지 때까지 지속적인 자원을 점유하지 않습니다. 선점 과정은 롤백 될 필요가있다.

추천

출처www.cnblogs.com/suntorlearning/p/11031247.html