티스토리 뷰

운영체제/이론

(41) Deadlock avoidance

geonwoopaeng@gmail.com 2020. 9. 26. 12:28

### Deadlock avoidance ###

: 운영체제에게 자원 요청이 들어오면 자원을 할당해주었다고 가정한 상태에서 잠재적으로

Deadlock이 일어나는지 유무를 판단하여 Deadlock이 일어난다면 자원이 충분함에도 불구하고 할당해주지 않는 방법

: 운영체제에게 미리 정보를 알려줘야 한다.

(thread 에게 리소스를 얼마나 할당할지를 정해준다)

<Safe State>

: thread들이 리소스 사용 상황을 봤을 때 최악의 상황(모든 thread가 한 번에 다 리소스를 요청)을 감안하더라도 그리고 각 thread들이 사용 예정일 리소스를 사용하더라도 Deadlock이 되지 않는다.

=> 모든 thread가 요청하는 리소스 양을 봤을 때 모든 thread를 다 만족 시켜줄 수 있다

=> safe sequence(자원을 필요로 하는 thread/process들에게 자원을 할당해주는 순서)

==>> safe sequence가 1개라도 존재하면 safe state입니다.

: 시스템이 safe state인 경우 -> Deadlock 없음

: 시스템이 unsafe state인 경우 -> Deadlock 가능성 있다.

: safe 상태가 유지 되면 instance(리소스)를 주고 safe 상태가 유지되지 않으면 리소스가 있어도 대기 상태를 준다

=> 리소스 사용 효율이 조금 떨어진다.

: <safe sequence>

=> 바로 이전 thread가 작업을 마치고 반납한 자원 + 현재 할당 가능한 자원을 이용해 현재 thread를 수행

=> 당장 할당이 불가능해도 이전의 thread들이 자원을 반납하여 할당 가능해도 safe sequence이다.

출처: Operating System Concepts 10th Ed (John Wiley & Sons, Inc. 2018)

 

 

<예제 설명>

:예제를 보면 총 리소스를 12개로 놓고 thread를 T0, T1, T2로 놓습니다.

maximum needs는 각 thread가 요구하는 최대 리소스입니다.

current needs는 현재 필요한 리소스를 말합니다.

 

T0는 5개 , T1는 2개 , T2는 2개로 5+2+2 = 9로 가용 리소스는 12 - 9 = 3개입니다.

다음에 제일 먼저 처리하는 thread는 T1입니다. 왜냐하면 T1 maximum needs가 4개고 current needs가 2개로 이미 할당받았기 때문에 앞으로 2개(추가 instance)만 할당받으면 되기 때문입니다.

 

현재 가용 instance는 3개가 있기 때문에 3-2= 1개가 남습니다.

그 후 T1이 완료가 된후 할당된 리소스를 반납하면 1+4 = 5개의 리소스가 있습니다.

 

그다음 T0가 리소스 5개를 가져가서 사용한 후(5-5=0) 작업 완료 후 리소스를 반납하면 0+10=10 리소스

가 있습니다. 이 리소스를 가지고 마지막 T2를 수행하면 됩니다.

=> Deadlock이 발생하지 않는 것을 보여줍니다.

그러나 thread들이 더 많은 current needs를 더 요구하면 리소스가 부족한 상태가 되어 Deadlock이 발생하게 됩니다.

=> 대기 시간을 주는 방법으로 deadlock을 막을 수도 있습니다.

반응형
공지사항
최근에 올라온 글