나무 숲

Deadlock Detection Algorithm 본문

Career

Deadlock Detection Algorithm

wood.forest 2016. 6. 8. 15:56

* Allow systems to enter the deadlock state


Single instance of a resource type - Use a wait-for graph

Multiple instance of a resource type - Variant of the banker's algorithm


* Recovery scheme




1 Wait-for graph

a) resource allocation graph

b) wait-for graph


위 그림처름 Pi가 Pj가 끝나기를 기다리고 있을 때! ->화살표로 표시한다

(b에서 모든 자원이 single instance이므로 cycle이 발생하여 데드락 발생가능성이 생긴다..는 걸 탐지함)




2 Variant of the banker's algorithm

- Available : 각 타입의 가능한 자원들을 길이 m의 벡터로 표현

- Allocation : n*m 행렬은 현재 각 프로세스에 할당된 자원의 수를 나타냄

- Request : n*m 행렬은 각 프로세스의 요청을 나타냄. Request[i][j]=k라면 Pi는 Rj에게서 k개의 instance를 추가로 요청중인 상태


- Algorithm

1) Work와 Finish 가 각각 길이 m, n인 벡터가 되도록 하고, Work=Available, 그리고 Allocation이 0이 아닐 때 Finish[i]=false로 초기화한다. (0이면 할당 가능한 것이 없어 할당이 안되므로 Finish[i]=true)

2) Finish[i]==False이고 Requesti <=Work 인 i를 찾는다. 그러한 i가 없으면 4번으로 ㄱㄱ

3) Work+=Allocation; Finish[i]=true; 2번으로 ㄱㄱ

4) 만약 몇몇 i에 대해 Finish[i]==false 이면 시스템은 데드락(교착) 상태에 빠진 것이다. 나아가 만약 모든 i에 대해 Finish[i]==false이면 프로세스 Pi는 deadlocked process이다!


예)

5 process, 3 resource types (A 7, B 2, C 6)

 

 Allocation

 Request

 Available

 Work

 

 A

 B

 C

 A

 B

 C

 A

 B

 C

 A 

 B

 C

 P0

0

 P1

 

 

 

7

 P2

 

 

 

3

 P3

2

 

 

 

5

 P4

0

 

 

 

7


위 알고리즘대로 실행하면 맨 처음 Work는 available 0,0,0으로 초기화된 상태. 

P0에서 시작! request<=work이므로 P0의 allo를 할당하고 work+=allo가 되어 0,1,0

내려가서 P1을 보니 안되네.. 한칸 더내려감. P2를 보니 가능하다! work+=allo가 되어 3,1,3

같은 방식으로 돌고돌고 하니 Sequence P0 P2 P3 P1 P4가 나오고 Finish[i]=true for all i이다!


예2)

P2가 type C의 additional instance를 요청할 때


일단 기본적으로 위 표와 같다. 단, P2의 Request가 0 0 1이 된 상태.

이 때에는 위에서 나온 것처럼 P0 이후의 Sequence가 나올 수 없으므로 deadlock이 P1 P2 P3 P4 모두에 존재한다는 것을 알 수 있다.






3 Recovery Scheme

- Process termination

* Abort all deadlocked processes

* Abort one process at a time until the deadlock cycle is eliminated






728x90
반응형

'Career' 카테고리의 다른 글

Segmentation  (0) 2016.06.08
Paging  (0) 2016.06.08
DeadLock Avoidance Algorithms  (0) 2016.06.08
RISC vs CISC  (0) 2016.06.07
File System  (0) 2016.06.06
Comments