철학과 학생의 개발자 도전기

Race Condition과 Dead Lock 본문

운영체제

Race Condition과 Dead Lock

Younghun 2024. 2. 5. 14:22

1. Race Condition

  • 둘 이상이 공유 자원에 동시에 접근하여 결과값에 영향을 줄 수 있는 상황
  • race condition이 발생하는 코드 영역을 critical section이라고 한다.
  • race condition을 해결하기 위해 동기화 기법을 사용한다.

2. Dead Lock

  • race condition일 때 서로 자원을 잠그고 있어 진행이 안되는 상태
  • 다음 4가지를 모두 충족할 때 발생한다.
    1. Mutual Exclusion
      자원을 둘 이상이 동시에 사용할 수 없다.
    2. Non-Preemptive
      할당된 자원을 외부에서 강제로 뺏을 수 없다.
    3. Hold & Wait
      최소 하나의 자원을 점유하면서 다른 자원을 기다리고 있는 상태다.
    4. Circular Wait
      자원을 대기하는 상태가 원형을 이룬다. (A는 B의 자원을 요구, B는 C의 자원을 요구, C는 A의 자원을 요구)
  • Dead Lokc 해결 방법에는 다음이 있다.
    1. 예방(Prevention)
      • 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법이다.
      • 교착상태 발생의 네 가지 조건 중 어느 하나를 제거함으로써 수행된다.
      • ex) Hold & Wait 조건을 제거하려면 프로세스가 실행되기 전에 필요한 모든 자원을 한 번에 요청하게 하여 대기 상태를 없앨 수 있다.
      • 그러나 이 방법은 자원의 활용도를 떨어뜨릴 수 있어 비효율적이라는 단점이 있다.
    2. 회피(Avoidance)
      • 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해가는 방법이다.
      • 대표적인 방법으로 Banker's Algorithm이 있다. 이 알고리즘은 프로세스가 자원을 요청할 때 시스템이 안전 상태(Safe State)를 유지할 수 있으면 자원을 할당하고, 그렇지 않으면 자원 할당을 보류한다.
      • 이 방법은 프로세스의 자원 요구량을 사전에 알아야 하므로 실제 시스템에서는 잘 사용되지 않는다.
    3. 검출(Detection)
      • 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 방식이다.
      • 교착상태의 발생 빈도가 낮고, 교착상태를 복구하는 비용이 적을 때 사용하는 방법이다.
      • 교착상태 검출 알고리즘을 주기적으로 실행하여 교착상태를 검출하고, 이를 해결한다.
    4. 회복(Recovery)
      • 교착상태를 일으킨 프로세스를 종료시키거나, 교착상태의 프로세스에 할당된 자원을 선점(preempt)하여 프로세스나 자원을 회복하는 방식이다.

'운영체제' 카테고리의 다른 글

페이징과 세그먼테이션  (0) 2024.02.12
뮤텍스와 세마포어  (0) 2024.02.05
CPU 스케줄링  (0) 2024.02.05
Inter Process Communication  (0) 2024.01.22
PCB와 Context Switching  (0) 2024.01.22