
공유 자원
시스템 안에서 각 프로세스, 스레드가 함께 접근 할 수 있는 자원이나 변수
경쟁상태
공유 자원을 두개 이상의 프로세스가 동시에 읽거나 쓰는 상황
동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태
Dead Lock이 발생하기 위해서는 아래의 4가지 조건이 모두 만족되어야 한다.
이러한 특성은 후에 Dead Lock 예방에서 사용한다.
1. Mutual Exclusion (상호 배제)
한 프로세스가 사용하는 자원은 다른 프로세스와 공유 할 수 없는 배타적인 자원이어야 한다.
배타적인 자원은 Criticial Section으로 보호되기 때문에 다른 프로세스와 동시에 사용할 수 없다.
Critical Section이란?
어느 특정 한 순간 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역
공유되는 자원이 문제 동시 접근시 문제가 발생하지 않도록 독점을 보장해줘야 하는 영역
2. Hold and Wait (점유 대기)
프로세스가 특정 자원을 할당받은 상태에서 다른 자원을 기다리는 상태
3. No preemption (비선점)
한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.
비선점 자원이란?
프로세스가 자원을 할당 받았을 경우, 자원을 스스로 반납할 때까지 계속 그 자원을 사용하도록 허용하는 것
4. Circular Wait (순환 대기)
점유 대기를 하는 프로세스 간의 관계가 원을 이루어 자원을 양보하지 않는 경우를 말한다.
위의 4가지 특징 중 하나라도 만족하지 않게 하여 교착 상태를 피하는 것이다.
상호 배제 부정
점유 및 대기 부정
비선점 부정
순환 대기 부정
교착 상태가 발생하기 전에 교착 상태를 예상하여 안전한 상태에서만 자원 요청을 허용하는 방법
교착상태 회피를 위해서는
다음의 조건이 만족해야 하기 때문에 현실성이 부족하다.
운영체제가 프로세스의 작업을 관찰하면서 Dead Lock의 발생 여부를 계속 확인한다.
타임아웃이나 자원 할당 그래프를 통해 Dead Lock을 발견한다.
Check point와 Roll back을 이용하여 Dead Lock 발생 시 회복하는 단계를 거친다.
Check point
- 작업 도중 문제 발생 시 돌아올 수 있도록 현재 시스템의 상태를 하드디스크에 저장하는 것
Roll back
- Check point로 되돌아가는 것
회복(Recovery)
자원선점이란?
교착 상태에 있는 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하여 해당 프로세스를 일시정지 시키는 방법
자원 선점시 고려해야하는 것
1. 희생자 선택
최소의 피해를 줄 수 있는 프로세스 선택
2. 롤백
선점된 프로세스를 문제 없이 이전 상태로 롤백
3. 기아 상태
한 프로세스가 계속 선점되어 기아 상태가 되는 것을 방지
-> 어떻게? 우선 순위 사용하는 것도 방법
Dead Lock이 발생하는 상황은 거의 일어나지 않기 때문에 따로 고려하지 않고 Dead Lock이 발생하면 프로세스를 강제 종료한다.
참고