DeakLock이란?
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 다음 단계로 진행하지 못하는 상태
a, b라는 임계 자원이 있다고 가정하자
ThreadA에서는 a 임계 자원을 요청하고 그 내부에서 b 임계 자원을 요청한다.
ThreadB에서는 b 임계 자원을 요청하고 그 내부에서 a 임계 자원을 요청한다.
이러한 경우에 ThreadA에서 b 임계 자원을 요청하려고 하지만 ThreadB에서 b 임계 자원은 이미 사용 중이기 때문에 lock이 걸려있다.
(ThreadA는 b가 끝날 때까지 기다리는 상태)
반면 ThreadB에서는 a 임계 자원을 요청하지만 ThreadA에서 b를 기다리는 상태이기 때문에 lock이 걸려있다. 결국 서로 사용하지 못하고 끝나기만을 기다리는 상태이다.
데드락은 배치 처리 시스템에서는 일어나지 않는다.
프로세스 스레드 둘 다 이와 같은 상태가 일어날 수 있다.
교착상태 발생 조건
- 상호 배제 : 프로세스들이 필요로 하는 자원에 대해 배타적이 통제권을 요구한다.
- 점유 대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
- 순환 대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
Starvation이란?
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
예를 들어서 50개의 Task가 있고 50개 중 49개는 1번 우선순위를 갖고 나머지 1개는 2번 우선순위를 갖는다고 가정하자.
또한 해당 프로그램은 10번의 실행 과정을 거치면 종료된다.
이때 2번의 우선순위를 갖는 작업은 자원을 할당받을 수 없다. 자원을 할당받더라도 우선순위가 높은 자원에게 자원 할당을 뺏기기 때문이다.
Starvation과 DeadLock
DeadLock은 여러 프로세스가 동일 자원 점유를 요청할 때 발생한다.
Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스는 영원히 자원 할당이 안 되는 경우를 주로 의미한다.
Starvation은 어떻게 해결할까?
우선순위 변경
- 프로세스 우선순위를 수시로 변경해서 각 프로세스가 높은 우선순위를 가질 기회를 준다.
- 오래 기다린 프로세스의 우선순위를 높여준다.
- 우선순위가 아닌 요청 순서대로 처리하는 FIFO 기반 요청 큐를 사용한다.
'CS > O.S' 카테고리의 다른 글
(운영체제) Thread의 개념 (0) | 2020.04.05 |
---|---|
(운영체제) 다양한 IPC 기법 (파이프, 메세지큐) (0) | 2020.03.31 |
(운영체제) 프로세스간 커뮤니케이션 (0) | 2020.03.17 |
(운영체제) 프로세스와 컨텍스트 스위칭 (0) | 2020.03.17 |
(운영체제) 프로세스 구조와 힙 (0) | 2020.03.07 |