티스토리 뷰
### 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이다.
<예제 설명>
:예제를 보면 총 리소스를 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을 막을 수도 있습니다.
'운영체제 > 이론' 카테고리의 다른 글
(43) Example of Banker's Algorithm (0) | 2020.09.27 |
---|---|
(42) Deadlocks Algorithm (0) | 2020.09.26 |
(40) Handling Deadlocks & Deadlock prevention (0) | 2020.09.26 |
(39) Deadlock - Resource Allocation Graph (2) | 2020.09.25 |
(38) Deadlock이 발생할 수 있는 Condition (0) | 2020.09.25 |