경쟁상태(Race Condition) vs 교착상태(Dead Lock)

경쟁상태 vs 교착상태 (Dead Lock vs Race Condition)

1. 경쟁상태

개념

둘 이상의 프로세스가 동시에 공유 자원에 접근하여 결과값에 영향을 줄 수 있는 상태를 말한다.

경쟁 상태로 인해 생기는 영역이 바로 임계구역(critical section)이다.

임계구역(Critical Section)

프로세스들이 공유 자원을 접근할 때 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용할 수 있게 다른 프로세스의 접근을 제한하는 영역을 말한다.

이는 즉, 상호 배제를 할 수 있도록 도와주는 것인데, 상호 배제를 한다고 하여도 교착 상태와 같은 문제가 발생할 수 있다.

2. 교착상태

개념

데드락, 교착상태란 경쟁상태에서 서로 lock을 가졌을 때 생길 수 있는 상태이다.

즉, 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태이다. 즉, 무한히 자원을 기다리는 상태를 말한다.

시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.

데드락 발생 조건

데드락은 아래 4가지 조건이 모두 충족해야 발생한다. 한 개라도 충족하지 못한다면 데드락은 해결할 수 있음

  • 상호 배제 (Mutual Exclusion)

자원은 한 번에 한 프로세스만 사용할 수 있음

  • 점유와 대기 (Hold and Wait)

자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태

  • 비선점 (No Preemption)

자원을 이용하는 프로세스의 작업이 끝나야 이용할 수 있는 상태. 즉, 다른 프로세스의 자원을 강제로 뺏을 수 없는 상태

  • 원형 대기 (Circular Wait)

자원 할당 그래프가 원의 형태로 그려진 상태. 즉, 프로세스의 집합에서 순환 형태로 자원을 대기하고 있는 상태

교착 상태 해결 방법

교착 상태를 해결하는 기법에는 예방, 회피, 검출이 있다.

[예방]

교착 상태 발생의 네 가지 조건 중 하나를 제거함으로써 수행하는 방법이다. 자원의 낭비가 심한 기법이다.

  • 자원의 상호 배제 없애기

현실적으로 모든 자원의 상호 배제를 없애기는 어렵다.

  • 점유와 대기 없애기

특정 프로세스에게 필요한 자원을 몰아주면, 당장 자원이 필요해도 기다릴 수밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원이 발생하기 때문에 자원 활용률이 낮아질 수 있다는 단점이 있다.

많은 자원을 사용하는 프로세스는 많은 자원을 동시에 사용할 타이밍을 확보하기 어렵기 때문에 불리해진다.

  • 비선점 조건 없애기

비선점 조건을 없애면 자원을 이용 중인 프로세스로부터 해당 장원을 뺏어올 수 있다. 이 방법은 일부 자원에 대해 효과적이다.

(효과적) 한 프로세스가 CPU를 이용하다가 일정 시간이 지나면 작업이 끝나지 않았더라도 다른 프로세스가 CPU를 할당받아 사용할 수 있다.

(비효과적) 한 프로세스가 프린트를 사용하고 있다면 도중에 프린트 자원을 빼앗을 수는 없다.

  • 원형 대기 조건 없애기

모든 자원에 번호를 붙이고 오름차순으로 자원을 할당하는 방식이다. 시스템 내에 존재하는 모든 자원에 번호를 붙이는 일이 간단한 작업은 아니다. 또한 어떤 번호를 붙이느냐에 따라 자원의 활용률이 떨어질 수 있다는 단점이 있다.

[회피]

회피 방식은 데드락에 빠질 가능성이 있는지 없는지 운영체제가 검사하고, 빠질 가능성이 없을 경우에만 자원을 할당함으로써 문제 발생을 회피하는 방식이다.

  • 안전 상태 : 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
  • 불안정 상태 : 교착 상태가 발생할 수도 있는 상태
  • 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서

즉, 회피란 안전 순서열에 맞춰 항싱 안전 상태를 유지하도록 자원을 할당방하는 방식이다.

회피 기법에는 은행원 알고리즘이 있다.

은행원 알고리즘

은행원 알고리즘에서 운영체제는 안전상태를 유지할 수 있는 요구만 수락하고, 불안정 상태를 초래할 수 있는 사용자의 요구는 나중에 만족될 수 있을 때까지 거절하는 알고리즘

[회복]

회복이란, 교착 상태 발생을 인정하고 사후에 조치하는 방식이다.

  • 선점을 통한 회복

교착 상태가 해결될 때까지 한 프로세스에게 자원을 몰아주는 방식이다.

  • 프로세스 강제 종료를 통한 회복

교착 상태에 놓인 프로세스를 모두 강제 종료하거나, 교착 상태가 없어질 때까지 흔 프로세스씩 강제 종료하는 방식이다.