hmk run dev

교착상태(Dead lock) 본문

OS

교착상태(Dead lock)

hmk run dev 2024. 3. 15. 00:03

프로세스가 실행이 되려면 자원이 필요합니다

두 개 이상의 프로세스가 각자 갖고 있는 자원들을 그저 기다리기만 한다면,

그 어떤 프로세스도 실행되지 못하고 이를 교착상태라고 합니다.

 

 

 

식사하는 철학자 문제로 엿보는 교착상태

 

보이는 것처럼 원형 식탁에 다섯 명의 철학자가 앉아 있고

철학자 앞에는 음식과 포크가 있습니다.

 

음식을 먹으려면 꼭 2개의 포크가 필요합니다.

 

 

 

 

모든 철학자들이 동시에 위와 같은 순서로 식사를 한다면,

모든 철학자들이 식사를 하지 못하게 된다.

 

이런 식으로 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상을 "교착상태"라고 합니다.

 

여기서 철학자는 프로세스고

포크는 실행에 꼭 필요한 자원

식사는 자원을 이용함 => 실행에 빗댈 수 있습니다.

 

서로가 점거하고 있는 자원을 서로가 기다리면 그 어떤 스레드나 프로세스가 실행될 수 없음을 시사합니다.

 

 


 

실제 예시로는

 

게임과 브라우저가 각각 필요한 자원을 계속 점거하고 있어서,

서로 실행을 할 수 없는 경우를 예로 들 수 있습니다.


교착 상태 해결하기

 

교착 상태가 발생했을 때의 상확을 정확히 표현해 보기

 

자원 할당 그래프

 

- 어떤 프로세스가 어떤 자원을 할당받아 사용 중인지 확인 가능

- 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능

 

1. 프로세스는 원으로, 자원(cpu, 메모리 등등)의 종류는 사각형으로 표현

2. 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현

 

 

3. 어떤 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표 표시

 

4. 프로세스가 어떤 자월을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

 

아래 그래프를 보면

 

SSD는 3개 CPU가 3개 프린터가 1대인데

 

각각

 

A - SSD

B - CPU

C - CPU

D - 프린터

E - 프린터의 사용 기다림

F - CPU 할당을 기다림

 

 

교착 상태가 일어난 그래프의 특징은

자원 할당 그래프가 원의 형태를 띄고 있다!

 

 


교착 상태가 일어나는 근본적인 이유 이해하기

교착 상태가 발생할 조건

 

1. 상호 배제 - 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태

2. 점유와 대기 - 자원을 할당 받은 상태에서 다른 자원을 기다리고 있는 상태 (위의 예시 중 게임과 브라우저 그림 & 철학자 식사 그림 참고)

3. 비선점 - 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태

4. 원형 대기 - 프로세스들이 원의 형태로 자원을 대기하는 상태

 

위 네 가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않음

위 네 가지 조건 중 모두 만족하면 교착 상태가 발생할 수 있음

 

'OS' 카테고리의 다른 글

교착 상태 해결 방법  (0) 2024.03.16
CPU 스케줄링  (0) 2024.03.05
스레드란?  (0) 2024.03.05
프로세스의 개요  (0) 2024.03.03
운영체제의 큰 그림  (0) 2024.03.02
Comments