#13. 컴퓨터 구조 및 운영체제

Maengkkong·2024년 1월 9일
0

스터디

목록 보기
13/14

교착 상태 (deadlock)

두 개 이상의 프로세스가 각자 가지고 있는 자원을 무작정 기다리면 어떤 프로세스도 더 이상 진행할 수 없는 교착 상태가 된다.

ex) 식사하는 철학자(dining philosophers problem)

  • 식사하는 철학자 : 프로세스 / 스레드
  • 포크 : 자원 / 한 번에 하나의 프로세스 혹은 스레드만 접근할 수 있기에 임계구역이라고 할 수 있다.
  • 생각하는 행위 : 자원 대기

자원 할당 그래프(resource-allocation graph)

어떤 프로세스가 어떤 자원을 사용하고, 어떤 프로세스가 어떤 자원을 기다리고 있는지 표현한 그래프

  1. 프로세스는 원으로 자원의 종류는 사각형으로 표현
  2. 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
  3. 프로세스가 어떤 자원을 할당받아 사용 중이라면 프로세스를 향해 화살표를 표시
  4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

교착 상태 발생 조건

  • 상호 배제 (mutual exclusion)
    : 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때 발생

  • 점유와 대기 (hold and wait)
    : 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태

  • 비선점 (nonpreemptive)
    : 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문에 발생

  • 원형 대기 (circular wait)
    : 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문 발생할 가능성이 있다.


해결방안

1. 교착 상태 예방

  • 상호 배제 제거
    : '모든 자원을 공유 가능하게 만든다.'는 이론적으로 가능하나 현실적으로 사용하기에 무리가 있다.

  • 점유와 대기 제거
    : 점유와 대기를 제거한다면 운영체제는 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분한다.
    : 이론적으로 교착 상태를 해결할 수 있다.
    : 자원의 활용률이 낮아질 우려가 있다.
    : 많은 자원을 사용하는 프로세스는 자원을 사용할 타이밍 확보가 어려워 자원을 필요로 하는 프로세스가 무한정 기다리게 되는 기아 현상을 야기한다.

  • 비선점 조건 제거
    : 자원을 이용 중인 프로세스로부터 해당 자원을 빼앗을 수 잇다.
    : 선점하여 사용할 수 있는 일부 자원에 대해 효과적이다.
    : CPU는 프로세스들이 선점할 수 있는 대표적인 자원이다.
    : 비선점 조건을 없애 모든 자원을 빼앗을 수 있도록 하여 교착 상태를 예방하는 방법은 다소 범용성이 떨어지는 방안이다.

  • 원형 대기 조건 제거
    : 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당
    : 자원에 번호를 붙이는 일은 간단한 작업이 아니기에 단점이 될 수 있다.
    : 각 자원에 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있다.

교착 상태의 발생 조건을 제거하여 교착 상태를 사전에 방지하는 예방 방식은 교착 상태가 발생하지 않음을 보장할 수 있지만 여러 부작용이 있다.


2. 교착 상태 회피

: 교착 상태가 발생하지 않을 정도로만 조심하여 자원을 할당하는 방식
: 교착 상태 회피 방식에서는 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주한다.

  • 안전 상태 (safe state)
    : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
    : 안전 순서열대로 프로세스들에 자원을 배분하여 교착 상태가 발생하지 않는 상태

  • 불안전 상태 (unsafe state)
    : 교착 상태가 발생할 수도 있는 상황
    : 안전 순서열이 없는 상태

  • 안전 순서열 (safe sequence)
    : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서를 의미


교착 상태 검출 후 회복

교착 상태 발생을 인정하고 사후에 조치하는 방식

검출 후 회복 방식에서 운영체제는 프로세스들이 자원을 요구할 때마다 자원을 할당한다.
교착 상태 발생 영부를 주기적으로 검사하여 교착 상태가 검출되면 비로소 1) 선점을 통한 회복, 2) 프로세스 강제 종료를 통한 회복 방식으로 회복한다.

1. 선점을 통한 회복
: 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식

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

  • 운영체제는 교착 상태에 놓인 프로세스를 모두 강제 종료할 수 있다.
    : 한 번에 교착 상태를 해결할 수 있는 가장 확실한 방법
    : 그만큼 많으 프로세스들이 작업 내역을 잃을 가능성이 있다.

  • 교착 상태가 업어질 때까지 한 프로세스씩 강제 종료할 수 있다.
    : 작업 내역을 잃는 프로세스는 최대한 줄일 수 있다.
    : 교착 상태가 없어졌는지에 대한 여부를 확인하는 과정에서 오버헤드를 야기한다.


교착 상태 무시

  • 타조 알고리즘 (ostrich algorithm)
    드물게 발생하는 잠재적 문제를 무시로 대처하는 방식

혼자 공부하는 컴퓨터구조 + 운영체제
13. 교착 상태 (366p - 385p)

0개의 댓글