CS

CS) 데드락(교착 상태)

zzugest1 2026. 1. 15. 12:42

 

데드락(교착 상태)

데드락이란 두 개 이상의 프로세스나 스레드가 각자 자원을 점유한 상태에서, 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 대기를 하는 상태를 말한다. (여기서 말하는 자원은 프로세스나 스레드가 작업을 수행하기 위해 필요로 하는 모든 것)

결과적으로, 해당 프로세스 집합 내의 어떤 프로세스도 상태를 변경할 수 없으며, 영구적으로 진행이 멈추게 되는 상태이다.

 

 

 

발생 메커니즘 (Resource Allocation Graph)

운영체제에서는 이를 자원 할당 그래프(Resource Allocation Graph, RAG)로 표현합니다.

  • 상황:
    1. 프로세스 P1은 자원 R1을 점유(Holding)하고 있습니다.
    2. 프로세스 P2는 자원 R2를 점유(Holding)하고 있습니다.
    3. P1은 실행을 계속하기 위해 R2를 요청(Request)하고 대기합니다.
    4. P2는 실행을 계속하기 위해 R1을 요청(Request)하고 대기합니다

P1 -> R2 -> P2 -> R1 -> P1 ..... 이런 식으로

그래프 상에서 프로세스와 자원 간의 화살표가 원형을 그리게 되면 데드락이 발생한다.

 

 

 

데드락의 발생 조건은 4가지가 있다.

 

  • 상호 배제 : 자원은 한 번에 하나의 프로세스만 사용할 수 있는 상황

- 자원은 공유 가능한 자원, 여러 명이 동시에 써도 문제 없는 자원이면 데드락이 걸리지 않는다.

  • 점유 대기 : 최소한 하나의 자원을 점유하고 있는 상태에서, 다른 프로세스가 점유 중인 자원을 추가로 요구는 상황

- 자원이 독점적이라도, 프로세스가 자원을 한번에 하나씩만 쓰고 반납하면 데드락이 걸리지 않는다.

  • 비선점 : 다른 프로세스가 자원을 다 사용하고 반납하기 전까지는, 또 다른 프로세스가 그 자원을 강제로 뺏을 수 없는 상황

- 어떤 프로세스가 무한 루프를 돌면서 CPU를 안놓아주고 있다면 CPU 스케줄러로 인해 그 프로세스를 강제로 끝낼 것이다. 그래서 데드락에 걸리지 않고 여러 프로그램이 잘 돌아가는 것이다.

  • 순환 대기 : 대기 중인 프로세스의 집합이 순환 형태로 자원을 대기하고 있는 상황

 

데드락은 위 조건 4가지 모두가 충족되어야 발생한다. 만약 하나라도 만족하지 못하면 데드락은 걸리지 않는다.

 

 

 

'CS' 카테고리의 다른 글

CS) 인터럽트  (0) 2026.01.15
CS) 물리적 메모리 vs 논리적 메모리  (0) 2026.01.15
CS) CPU 스케줄링  (0) 2026.01.14
CS) 스택 프레임  (0) 2026.01.14
CS) 프로세스와 스레드  (1) 2026.01.14