호비시의 끄적끄적
Dead Lock ? 본문
Dead Lock 이란?
운영체제에서 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태. 다른 프로세스가 점유하고 있는 자원을 둘 이상의 프로세스가 서로 기다릴 때 무한 대기에 빠지는 상황이다.
Dead Lock 이 발생하는 상황
Dead Lock이 발생하려면 한 시스템 내에서 4가지 조건이 동시에 성립할 때 발생한다.
- 상호 배제
한 번에 한 프로세스만 사용할 수 있어야 한다. 사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다. - 점유 대기
자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다. - 비선점
이미 할당된 자원을 강제로 빼앗을 수 없다. - 순환 대기
대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.
Dead Lock 의 해결법
Dead Lock의 해결법은 크게 3가지이다.
- Dead Lock이 발생하지 않도록 예방하기
- Dead Lock 발생 가능성을 인정하면서도 적절하게 회피하기
- Dead Lock 발생을 허용하지만 Dead Lock 을 탐지하여, Dead Lock 에서 빠져나오기
Dead Lock 의 예방
Dead Lock의 발생 조건 4가지중 하나라도 발생하지 않도록 해서 예방하는 방법. 각각의 조건을 방지하여 Dead Lock 발생 가능성을 차단.
- 자원의 상호 배제 조건 방지
한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 설계한다. 하지만 동기화 문제가 발생할 수 있다. - 점유 대기 조건 방지
프로세스 실행에 필요한 모든 자원을 한꺼번에 할당한다. - 비선점 조건 방지
자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 가지고 있던 자원을 반납하고, 요구한 자원을 사용하기 위해 기다린다. - 순환 대기 조건 방지
자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.
위 4가지 조건을 방지해서 Dead Lock을 예방하는 방식은 시스템의 처리량, 효율성을 떨어트릴 수도 있다.
Dead Lock 의 회피
프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있는가를 확인하여 교착상태를 회피하는 방법
Safe state : 시스템의 프로세스들이 요청하는 모둔 자원을 Dead Lock을 발생시키지 않으면서 차례로 모두에게 할당해 줄 수 있는 상태
Safe sequence : 특정한 순서로 프로세스들에게 자원을 할당, 실행, 종료 등의 작업을 할 때 Dead Lock이 발생하지 않는 순서
대표적인 알고리즘으로 은행원 알고리즘이 있다.
Dead Lock 의 탐지, 회복
Dead Lock 을 탐지하여 원인이 되는 프로세스를 종료하거나, 할당된 자원을 해제함으로써 Dead Lock으로부터 회복하는 방법
- 탐지
Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색한다. - 회복
- 프로세스를 종료하는 방법
교착 상태의 프로세스를 모두 중지
교착 상태가 제거될 때 까지 하나의 프로세스씩 중지 - 자원을 선점하는 방법
교착 상태의 프로세스가 점유하고 있는 자원을 선점하여, 다른 프로세스에게 할당한 후 해당 프로세스를 일시 정지
우선순위가 낮은 프로세스, 수행된 횟수가 적은 프로세스 등을 위주로 프로세스 자원을 선점한다.
- 프로세스를 종료하는 방법
'취준' 카테고리의 다른 글
취업 후기 (1) | 2022.08.03 |
---|---|
SOLID ? (0) | 2022.06.30 |
Process 와 Thread (0) | 2022.06.27 |
TCP / UDP (1) | 2022.06.24 |
REST API란? (0) | 2022.06.19 |
Comments