[면접 대비/OS] 교착 상태(deadlock)

AmeriKano·2023년 10월 29일
0

시작하며

이번 주제는 OS(운영체제)이다. 워낙 중요하고 내용이 많은 것 같아서 그 중 어떤 걸 정리해 볼까 고민이 많았는데, 그 중에 나에게 가장 익숙한 단어였으나 생각보다 알아야 할 게 많았던 교착 상태(deadlock)로 정했다.


경쟁 상태와 임계 영역

여러 프로세스 또는 스레드에서 하나의 공유 자원에 접근하는 경우가 있는데, 이 때 이 접근 순서에 따라 결과가 달라질 수 있다. 이런 현상을 동시에 접근해 경쟁하는 상태라고 하여 경쟁 상태라고 하고, 위에서 말한 접근 순서에 따라 결과가 달라지는 코드 영역을 임계 영역이라고 한다. 임계 영역에 여러 접근이 동시에 발생하는 것을 방지하려면 다음 3가지 조건을 충족해야 한다.

  • 상호배제 기법(mutual exclusive) : 어떤 프로세스가 임계 영역을 실행 중일 때 다른 프로세스가 임계 영역에 접근할 수 없다. 상호배제 기법으로는 뮤텍스와 세마포어가 있다.
  • 진행 : 임계 영역을 실행중인 프로세스가 없을 때 다른 프로세스가 임계 영역을 실행한다.
  • 한정된 대기 : 임계 영역에 접근을 요청할 때 무한한 시간을 기다리지 않는다.

뮤텍스(mutex)

상호배제(mutual exclusive) 에서 단어를 가져온 기법으로, 락(lock)을 가진 프로세스만이 공유 자원에 접근할 수 있게 하는 방법이다. 임계 영역에 먼저 접근한 프로세스가 임계 영역에 락을 걸면 다른 프로세스들은 해당 프로세스가 락을 해제하기 전까지 기다려야 한다.
임계 영역에 접근하지 못한 프로세스는 락을 얻기 위해 기다리면서 락이 풀렸는지 반복문을 돌면서 확인한다. 이를 바쁜 대기의 한 종류인 스핀락(spinlock)이라고 한다. 프로세스가 반복문을 돌면서 계속 자원의 사용 가능 여부를 확인하므로 프로세스가 빠르게 교체될 수 있다.

바쁜 대기(busy waiting)란, 프로세스가 공유 자원에 접근할 수 있는 권한을 얻을 때 까지 확인하는 과정을 말한다.

교착 상태(deadlock)

상호배제 기법 때문에 2개 이상의 프로세스가 각각 자원을 가지고 있으면서 서로의 자원을 요구하며 기다리는 상태를 교착 상태(deadlock)라고 한다. 교착 상태가 발생하는 필요충분조건(프로세스들이 각각의 조건을 모두 가지거나 모두 아니어야 한다.) 4가지는 다음과 같다.

  • 상호배제 : 하나의 공유 자원에 하나의 프로세스만 접근할 수 있다.
  • 점유와 대기 : 프로세스가 최소 하나의 자원을 점유하고 있는 상태에서 추가로 다른 프로세스에서 사용 중인 자원을 점유하기 위해 대기한다.
  • 비선점 : 다른 프로세스에 할당된 자원을 뺏을 수 없다.
  • 원형 대기 : 프로세스가 자신의 자원을 점유하면서 앞이나 뒤의 프로세스의 자원을 요구한다.

예상 질문

상호배제 기법에 뮤텍스와 세마포어가 있는데, 각각에 대해 설명해 보세요.

뮤텍스는 락을 가진 프로세스만 공유 자원에 접근할 수 있습니다. 임계 영역에 접근할 수 있는 프로세스는 하나뿐이며, 다른 프로세스는 임계 영역에 접근한 프로세스가 락을 해제할 때까지 기다려야 합니다. 반면 세마포어는 공유 자원에 접근할 수 있는 프로세스의 수를 정해 접근을 제어하는 방법입니다. 임계 영역에 접근할 수 있는 키 n개(2개 이상, 1개라면 뮤텍스와 차이점이 없음)를 지정하고 이 키를 가진 프로세스만이 임계 영역에 접근하게 하는 방식입니다.

교착 상태를 예방할 수 있는 방법을 설명해 보세요.

교착 상태를 막으려면 교착 상태가 발생하는 4가지 조건 중 하나를 제거하면 됩니다. 즉 여러 프로세스가 동시에 하나의 공유 자원을 사용하게 하거나(상호배제 제거), 프로세스가 실행되기 전에 필요한 모든 자원을 할당하여 프로세스 대기를 없애고 프로세스가 자원을 점유하지 않은 상태에만 자원을 요구하게 하거나(점유/대기 제거), 자원을 점유한 프로세스가 다른 자원을 요구 할 때 현재 점유한 자원을 반환하게 하거나(비선점 제거), 자원을 선형으로 정렬하고 방향을 정해 한 쪽 방향으로만 자원을 요구하게 하면(원형 대기 제거) 교착 상태를 예방할 수 있습니다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글