C# - 교착 상태) 복습을 위해 작성하는 글 2023-04-25

rizz·2023년 4월 25일
0

C

목록 보기
12/25

📒 갈무리 - 교착 상태(Deadlock)

📌 교착 상태란?

- 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태

 

📌 교착 상태 발생 조건

리소스들의 점유와 대기 : 프로세스가 어떤 자원을 가진 상태에서 다른 자원을 기다리는 상태여야 한다.

순환 대기(Circular wait) : 점유와 대기를 하는 프로세스간의 관계가 순환형식으로 이루어진다.

상호 배제(Mutual Exclusion) : 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적 자원이어야 한다.

비선점(No Preemption) : 이미 다른 프로세스에게 할당된 자원은 빼앗을 수 없다.

 

📌 교착 상태 해결 방법

교착 상태 예방 : 교착 상태를 유발하는 4가지 조건을 무력화한다.

교착 상태 회피 : 교착 상태가 발생하지 않는 수준으로 자원을 할당한다.

교착 상태 검출 : 자원 할당 그래프를 사용하여 교착 상태를 발견한다.

교착 상태 회복 : 교착 상태를 검출한 후 해결한다.

 

📌 교착 상태 예방

상호 배제 예방 : 독점적으로 사용할 수 있는 자원을 없애버린다.(시스템 내의 모든 자원을 공유 자원으로 만든다면 교착 상태는 발생하지 않을 것이다.)

비선점 예방 : 모든 자원을 빼앗을 수 있도록 한다.

점유와 대기 예방 : 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 한다.

순환 대기 예방 : 점유와 대기를 하는 프로세스들이 순환형을 이루지 못하도록 한다.

 

📌 교착 상태 회피

- 자원의 총수와 현재 할당된 자원의 수를 기준으로 시스템을 안정 상태(safe state)와 불안정 상태(unsafe state)로 나누고 시스템이 안정 상태를 유지하도록 자원을 할당한다.(이를 구현하는 방법 중에는 은행원 알고리즘이 있다.)

교착 상태 회피의 문제점

- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.

- 시스템의 전체 자원 수가 고정적이어야 한다.

- 자원이 낭비된다.

 

📌 교착 상태 검출

- 교착 상태 예방은 어렵고, 교착 상태 회피는 구현할 수는 있지만 자원을 낭비한다. 그래서 가장 현실적인 방법은 교착 상태 검출 방법이다.

- 운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방법

- 교착 상태를 검출하면 교착 상태 회복 단계를 밟는다.

타임아웃을 이용한 교착 상태 검출 : 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태 발생으로 간주

자원 할당 그래프를 이용한 교착 상태 검출 : 말 그대로 자원 할당 그래프를 이용해 교착 상태 발견

 

📌 교착 상태 회복

- 교착 상태를 일으킨 모든 프로세스를 동시에 종료

- 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료

강제 종료하는 일뿐만 아니라 강제 종료된 프로세스가 실행되기 전에 시스템을 복구하는 일도 해야 한다.

시스템 복구는 명렬어가 실행될 때 체크포인트를 만들어 가장 최근 시점으로 돌아가는데, 작업량이 상당하여 무분별하게 사용할 수 없고 선택적으로 사용해야 한다.

profile
복습하기 위해 쓰는 글

0개의 댓글