CS/운영체제

Deadlock

이충무 2022. 9. 20. 22:21

개념


  • 프로세스는 실행을 위해 CPU, 메모리, 파일 등 여러 하드웨어 자원이 필요
  • 운영체제는 프로세스가 요구하는 자원을 적절하게 배분
  • 프로세스가 자원을 요청 했을 때 해당 자원을 사용할 수 없는 상황이 발생하면 프로세스가 대기상태로 변경
  • 대기 상태의 프로세스들이 실행 상태로 변경될 수 없는 상황을 데드락(Deadlock, 교착상태)라고 부름
  • 한번 교착상태에 빠지면 프로세스가 무한 루프에 빠져 수행하지 못하고 해당 프로세스가 가지고 있는 자원에 대해 아무도 사용하지 못하게 되므로 전체 컴퓨터 환경에 매우 치명적인 문제가 됨

교착상태의 필요조건


개요

  • 교착상태가 발생하기 위한 필요 조건 4가지 존재
  • 필요조건이기 때문에 4가지 모두 해당한다고 반드시 교착상태가 일어나는 것은 아님
  • 4가지 조건에 해당할 때 교착상태가 발생할 확률이 생김

필요조건

상호배타(Mutual exclusion)

  • 한 프로세스가 자원을 사용하고 있다면 다른 프로세스는 해당 자원을 사용하지 못함
  • 공유 불가능한 자원의 동시 사용을 피하기 위해 특정 알고리즘 사용
  • 데커의 알고리즘, 피터슨의 알고리즘, 램퍼드의 베이커리 알고리즘 등
  • 공유 불가능한 자원이란 프로그램 간의 통신에 사용되는 비트 단위의 플래그, 계수기, 큐 등의 자원을 의미

보유 및 대기(Hold and wait)

  • 한 프로세스가 자원을 점유한 상태에서 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하는 경우

비선점(No Preemption)

  • 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼앗을 수 없음
  • 비선점 스케줄링 방식 사용때 발생
  • 프로세스는 자원을 스스로 반납할 때까지 자원 사용 불가능

필요충분조건

환형대기(순환대기, Circular wait)

  • 점유 대기 조건과 비선점 조건 만족 시 순환대기 조건 발생
  • 교착상태의 경우 무조건 환형대기 상태를 만족하게 된다
  • 프로세스가 요구하는 자원의 방향이 원형을 이루는 경우
  • 대기중인 프로세스 집합에서 순환 형태로 자원을 대기하는 경우

교착상태 처리


교착상태 방지(Deadlock Prevention)

개요

  • 교착상태를 방지하기 위해서 필요조건 4가지 중 최소 한가지를 만족 시키지 않도록 만드는 것
  • 가장 현실적인 방법은 보유 및 대기나 환형대기의 조건을 방지하는 것이나 두 방법 모두 자원를 비효율적으로 사용하게 됨
  • 군사, 우주, 의료 산업과 같은 크리티컬한 곳에서 사용

상호배타

  • 자원을 공유가능하게 하여 상호배타 문제 해결
  • 현실적으로 불가능한 경우가 많음

보유 및 대기

  • 프로세스가 자원을 가지고 있는 상태에서 다른 자원을 기다리느라 대기상태에 빠지지 않도록 함
  • 여러개의 자원이 필요한 프로세스는 필요한 모든 자원을 얻을 수 있는 경우에만 해당 자원들에 대해 요청할 수 있도록 처리
  • 필요한 자원 중 일부만 가지고 있는 경우 할당 받은 자원을 모두 운영체제에 반납하도록 처리
  • 자원의 활용률을 저하시키고 Starvation 현상이 발생
  • 프로세스가 요구하는 자원을 파악하는 비용, 자원에 대한 내용을 저장하고 복원하는 비용 발생
  • 무한 대기 문제 발생

※ 기아 상태(Starvation)

  • 특정 프로세스의 우선순위가 낮아 원하는 자원을 계속 할당 받지 못하는 상태
  • 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스는 영원히 자원할당이 안되는 경우
  • SJF 나 SRT, 우선순위 스케줄링 등 우선순위와 관련 있는 스케줄링 기법 사용 시 기아 상태 발생 가능
  • 우선순위를 계속해서 변경해 모든 프로세스가 높은 우선순위를 가질 수 있는 기회를 제공하여 해결 가능
  • 오래 기다린 프로세스의 우선순위를 높이는 기법으로 해결 가능(aging 기법)
  • 우선 순위가 아닌 요청 순서대로 처리하는 FIFO 기반 요청 큐 사용으로 해결 가능

비선점

  • 선점이 가능하도록 처리
  • 자원을 점유중인 프로세스가 다른 자원을 요구할 때 자신이 가진 자원을 반납하도록 처리
  • 대부분의 자원에서는 불가능한 방식

환형대기(순환대기)

  • 대표적인 예시로 모든 자원에 번호를 부여해 번호에 대한 오름차순으로 자원 요청하는 방식
  • 자원의 활용률을 저하시키는 단점

교착상태 회피(Deadlock Avoidance)

개요

  • 교착상태에 대해 교착상태 방지와는 다른 시점으로 접근
  • 교착상태 회피에서는 교착상태를 자원 요청에 대한 잘못된 승인으로 판단
  • 대표적인 교착상태 회피 기법 → 은행원 알고리즘

은행원 알고리즘

  • 운영체제는 안전상태를 유지할 수 있는 요청만 수락
  • 불안전상태를 초래할 사용자의 요청은 안전상태를 유지할 수 있을 때까지 거절
  • 은행원 알고리즘의 단점
    • 할당할수 있는 자원 수가 일정해야함
    • 사용자 수가 일정해야함
    • 불안전상태를 방지해야하기 때문에 자원 이용도가 낮음
    • 최대 자원 요구량을 미리 알아야함
    • 프로세스들이 유한한 시간안에 자원을 반납해야함
  • 은행원 알고리즘은 매우 복잡하고 최대 자원 요구량을 미리 알아야 하기 때문에 현재 채택하는 방식이 아님

※ 안전상태

  • 교착상태에 빠지지 않으면서 프로세스가 요구한 최대 요구량 만큼 필요한 자원을 할당 해줄 수 있는 상태
  • 안전순서열이 존재하는 상태

※ 불안전상태

  • 안전 순서열이 존재하지 않는 상태
  • 교착상태는 불안전상태에서만 발생 가능

※ 안전 순서열

  • 자원을 순서대로 주고 받을 수 있는 순서

교착상태 검출 및 복구(Deadlock Detection & Recovery)

개요

  • 교착상태가 발생하는 것을 허용
  • 교착상태 발생 시 이를 인식하고 복구
  • 교착상태 발생을 감지하기 위해 운영체제 내부에서 주기적으로 교착상태 발생 여부 검사
  • 검사 주기가 짧으면 오버헤드가 커지고 길어지면 오버헤드는 줄어들지만 복구 가능성이 낮아짐

복구 방식

  1. 교착상태가 발생하는지 주기적으로 검사
  2. 메모리 상태를 주기적으로 메모리에 저장
  3. 교착상태 발생 시 메모리에 저장된 메모리 상태를 바탕으로 복구 시작
  4. 그 외 일부 프로세스 강제 종료, 자원을 강제로 선점해 프로세스에 할당해주는 방식 존재

단점

  • 복구가 제대로 이루어 지지 않는 경우 존재
  • 검출을 위해서 추가적인 오버헤드 발생

교착상태 무시

개요

  • 교착상태는 매우 드문 상황이기 때문에 이를 위해 오버헤드를 감수하는 것은 비효율적
  • 교착상태에 대한 아무런 조치를 하지 않는 방식
  • 현재 채택되는 방식

식사하는 철학자 문제


개요

  • 5명의 철학자가 원탁에 앉아서 식사
  • 철학자 사이에는 포크가 하나씩 위치
  • 철학자들의 식사과정
    1. 왼쪽 포크가 사용 가능할 때까지 대기(사용 가능하다면 잡기)
    2. 오른쪽 포크가 사용 가능할 때까지 대기(사용 가능하다면 잡기)
    3. 양쪽 포크를 잡으면 일정 시간 만큼 식사 시작
    4. 오른쪽 포크 내려 놓기
    5. 왼쪽 포크 내려놓기
    6. 1번 행동부터 7번 행동까지 반복
    1. 일정 시간 생각
  • 모든 철학자들이 왼쪽 포크를 잡는 다면 오른쪽 포크가 사용 가능해 질 때까지 대기하므로 계속해서 3번 상태에서 더이상 진행할 수 없게 되어 교착상태에 빠지게 됨

해결방안 1

  • 왼쪽 포크와 오른쪽 포크를 동시에 들을 수 있을 때가 아니면 포크를 모두 내려놓기
  • 모든 철학자가 왼쪽 포크를 들었을 때 남는 포크가 없기 때문에 내려놓고 다시 왼쪽 포크를 드는 행위를 반복
  • 계속해서 반복하는 행위만 발생하기 때문에 결국 기아문제 발생

해결방안 2

  • 왼쪽 포크를 잡고 나서 오른쪽 포크를 확인한 뒤 오른쪽 포크가 없다면 모든 포크를 내려 놓고 랜덤한 시간동안 기다린 후 다시 왼쪽포크와 오른쪽 포크를 확인하기
  • 모두가 동시에 왼쪽 포크를 집는다고 하더라도 서로 대기하는 시간이 다르기 때문에 식사가 가능
  • 낮은 확률로 기아문제가 발생할 수 있어 원자력 발전소나 비행기의 프로그램 처럼 완벽을 요구하는 프로그램에는 부적합

해결방안 3

  • 이진 세마포어(mutex)를 사용하여 임계구역 설정
  • 포크를 들어 식사를 하기 위해서는 mutex의 제어를 받게 되어 같은 시간대에 한 철학자만이 포크를 들 수 있음
  • mutex를 사용해 임계구역 설정 시 하나의 철학자가 임계구역에 있다면 다른 철학자들은 모두 임계구역 밖에서 대기
  • 포크가 5개이기 때문에 다른 철학자 한명도 식사가 가능하지만 임계구역에 철학자가 들어가 있기 때문에 식사 불가능
  • mutex 외에 프로세스 별로 세마포어를 따로 두어 최대한 많은 사람들이 식사가 가능하도록 설계

참고자료


사나이들의 자강두천, 데드락 (DeadLock)

[OS] 교착상태(데드락, Deadlock)

[운영체제]교착상태 처리방법(Handling deadlocks) 예방법, 해결방안

[운영체제] Deadlock

교착상태(데드락, Deadlock)의 개념과 조건

 

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

Interrupt  (0) 2022.09.20
PCB와 Context Switching  (0) 2022.09.20
페이지 교체 알고리즘  (0) 2022.09.20
Memory  (1) 2022.09.20
Monitor  (0) 2022.09.20