Machineboy空
교착 상태(Dead Lock) - Philosopher's Dining Problem, 교착 상태 발생 조건 4 가지 본문
Computer/CS
교착 상태(Dead Lock) - Philosopher's Dining Problem, 교착 상태 발생 조건 4 가지
안녕도라 2024. 1. 17. 10:37
프로세스 실행을 위해서는 자원이 필요한데,
두 개 이상의 프로세스가 각각의 자원을 그저 기다리기만 한다면
어떤 프로세스도 실행되지 못하고 꽉 막혀 멈춰버리는 현상이 발생할 것.
교착 상태란?
식사하는 철학자 문제 (Dining Philosopher's Problem)
왜 발생하고 어떻게 해결하는지 힌트를 주는 문제.

모든 철학자가 모두 동시에 이 프로세스를 진행하게 되면,
그 누구도 식사를 할 수 없다. 계속 생각만 하게 될 것.
모두 왼쪽 포크를 들게 되면 놓을 때 까지 오른쪽 포크를 사용할 수 없으니
계속 생각만 하게 될 것.
일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상.
- 철학자 = 프로세스, 스레드
- 포크 = 실행에 꼭 필요한 자원
- 식사하는 것 = 실행하는 것
컴퓨터 상황으로 예시를 들어보자면

교착 상태를 해결하기 위해서는?
- 교착 상태가 발생했을 때의 상황을 정확히 표현해보기
- 교착 상태가 일어나는 근본적인 이유 이해하기
자원할당 그래프
교착 상태가 발생했을 때 상황을 표현하는 그래프
교착 상태 발생 조건 파악 가능
- 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능
- 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능
자원 할당 그래프 그리는 법
- 1. 프로세스는 원으로 자원의 종류는 사각형으로 표현
- 2. 사용할 수 있는 자원의 개수는 자원 사각형 내 점으로 표현
- 3. 프로세스가 어떤 자원을 할당 받아 사용중이라면 자원에서 프로세스를 향해 화살표를 표시
- 4.프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시




교착 상태가 일어난 그래프의 특징?
자원 할당 그래프가 원의 형태를 띄고 있다!
교착 상태가 발생하는 조건 4가지
- 상호 배제 (Mutual Exclusion)
- 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
- 점유와 대기 (Hold and Wait)
- 자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다리는 상태
- 게임과 웹브라우저 예시
- 왼쪽 포크를 든 채 오른쪽 포크를 기다린 것
- 자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다리는 상태
- 비선점 (NonPreemtion)
- 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태
- 철학자가 만약 포크를 뺏었다면 문제는 발생하지 않았을 것
- 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태
- 원형 대기 (Circular Wait)
- 프로세스들이 원의 형태로 자원을 대기하는 상태
4가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않고,
위 4가지 조건을 모두 만족하면 교착 상태가 발생할 수 있다.
'Computer > CS' 카테고리의 다른 글
가상 메모리 ① 연속 메모리 할당 (0) | 2024.01.18 |
---|---|
교착 상태 해결 방법 - 예방,회피,검출 후 회복 (0) | 2024.01.17 |
동기화 기법: 뮤텍스 락, 세마포, 모니터 (0) | 2024.01.16 |
프로세스 동기화, 레이스 컨디션, 상호 배제를 위한 동기화의 원칙 (0) | 2024.01.16 |
CPU 스케줄링 ② 스케줄링 알고리즘 (1) | 2024.01.15 |