https://steady-coding.tistory.com/520
Deadlock 이란?
이는 동기화 문제에서 이어진다.
교착상태라고도 하며, 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 말한다. 교착상태라고 하며, 두 개 이상의 작업이 서로 작업이 끝나기만을 기다리기 때문에 결과적으로 아무것도 완료되지 못한다.
deadlock 발생 조건
4가지가 존재한다. 4가지 모두 만족해야 교착상태가 발생한다.
상호 배제 : 자원은 한프로세스만 사용 가능하다는 조건
점유 대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다리고 있다는 조건
비선점 : 다른 프로세스에 할당된 자원은 사용을 끝날 때 까지 강제로 빼앗을 수 없다는 조건
순환 대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다는 조건
이는 동기화 문제에서 다룬적 있으니 아래의 글에서 참고하면 될 듯하다.
그렇다면 어떻게 데드락을 관리할 수 있을까?
일단 예방하는 방법 먼저..
예방 ( Prevention )
위에서 봤던 발생 조건 4개 중 하나를 제거하여 발생하기 전에 예방한다.
- 상호 배제 부정
- 여러 프로세스가 공유 자원을 사용하도록 한다.
- 점유 대기 부정
- 한 프로세스가 수행되기 전에 모든 자원을 할당하고, 자원이 점유되지 않을 때에만 다른 프로세스에서 요구할 수 있도록 한다.
- 자원 과다 사용으로 인한 효율성 문제
- 프로세스가 요규하는 자원을 파악하는 데에 대한 비용
- 자원에 대한 내용을 저장 및 복원하기 위한 비용
- 기아 상태
- 무한 대기 문제
- 한 프로세스가 수행되기 전에 모든 자원을 할당하고, 자원이 점유되지 않을 때에만 다른 프로세스에서 요구할 수 있도록 한다.
- 비선점 부정
- 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원을 반납하도록 한다.
- 순환 대기 부정
- 자원에 고유 번호를 할당하여 순서대로 자원을 요구하도록 한다.
하지만 자원 낭비가 심하고, 비용이 많이 든다는 단점이 있다.
회피 ( avoidance )
앞 내용은 예방이었지만, 만약 교착상태가 발생한다면 어떻게 대처할까?
그 방법중 하나인 회피이다.
교착상태가 발생하면 탐지 후 회피해서 해결한다. 자원이 어떻게 요청될 지에 대한 추가 정보를 제공하도록 요구하여 순환 대기가 발생하지 않도록 자원 할당 상태를 검사한다.
안전 상태와 불안전 상태
운영 체제는 교착 상태에 빠질 수 있는 가능성이 있는 불안정 상태와 그렇지 않은 안전 상태를 나눈다.
그래서 프로세스가 자원을 요청할 때, 안전 상태를 유지할 수 있는 요청만 수락하고
불안전 상태를 초래하는 요청은 거절한다.
++)
Avoidance Algorithms
교착 상태가 발생하면 탐지 후 회피한다고 했는데, 우리는 어떻게 리소스 할당으로 인해 시스템이 불안정해지는지 확인할 수 있을까?
는 ... 다음 글에서 마저 다루고 deadlock 을 마무리 하도록 하자
'프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] External Fragmentation (외부 단편화) (3) | 2023.11.27 |
---|---|
[운영체제] 주소공간( Address Space, Memory Management ) (0) | 2023.11.26 |
운영체제 (2) - 시스템은 어떻게 보호 되는가? (system call) (0) | 2023.09.29 |
운영체제(1) - 시스템은 어떻게 작동하는가(Multicore system, Interrupt) (0) | 2023.09.26 |