데드락 (DeadLock, 교착 상태)

2023. 7. 25. 18:24·CS 지식/[운영체제]
목차
  1.  
  2. 데드락(DeadLock) 발생 조건
  3. 데드락(DeadLock) 처리
  4. 교착 상태를 예방 & 회피
  5. 교착 상태를 탐지 & 회복

두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태

무한히 다음 자원을 기다리게 되는 상태를 말함

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

  • 데드락이 일어나는 경우

프로세스1과 2가 자원1, 2를 모두 얻어야 한다고 가정해보자

t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음

t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림

⇒ 현재 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠짐

→ 이것이 바로 DeadLock

 

멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생

한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생할 수 있음. 이때 프로세스는 대기 상태로 들어감

대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 '교착 상태' 발생

 

데드락(DeadLock) 발생 조건

4가지 모두 성립해야 데드락 발생

(하나라도 성립하지 않으면 데드락 문제 해결 가능)

  1. 상호 배제(Mutual exclusion)
    • 자원은 한 번에 한 프로세스만 사용할 수 있음
  2. 점유 대기(Hold and wait)
    • 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
  3. 비선점(No preemption)
    • 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음
  4. 순환 대기(Circular wait)
    • 프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 함

 

데드락(DeadLock) 처리

교착 상태를 예방 & 회피

1. 예방(prevention)

  • 교착 상태 발생 조건 중 하나를 제거하면서 해결한다 (자원 낭비 엄청 심함)

2. 회피(avoidance)

  • 교착 상태 발생 시 피해나가는 방법

 

교착 상태를 탐지 & 회복

교착 상태가 되도록 허용한 다음 회복시키는 방법

  1. 자원 할당 그래프를 통해 교착 상태를 탐지함
    • 자원 요청 시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드 발생함
  2. 회복(Recovery)
    • 교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [운영체제]' 카테고리의 다른 글

CPU 스케줄링  (0) 2023.07.25
프로세스 & 스레드  (0) 2023.07.25
운영체제(OS, Operating System)  (0) 2023.07.25
  1.  
  2. 데드락(DeadLock) 발생 조건
  3. 데드락(DeadLock) 처리
  4. 교착 상태를 예방 & 회피
  5. 교착 상태를 탐지 & 회복
'CS 지식/[운영체제]' 카테고리의 다른 글
  • CPU 스케줄링
  • 프로세스 & 스레드
  • 운영체제(OS, Operating System)
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (794)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (410)
        • 백준[JAVA] (76)
        • 프로그래머스[JAVA] (257)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Linux
    스프링
    JPA
    데이터베이스
    스프링 부트 쇼핑몰 프로젝트 with JPA
    baekjoon
    프로그래머스
    Flutter
    자바
    플러터
    springboot
    programmers
    CS
    pcce 기출문제
    Spring Security
    postgresql
    backjoon
    python
    CS지식
    데이터
    리눅스
    DB
    Java
    spring
    시큐리티
    백준
    리눅스마스터
    리눅스마스터 1급
    스프링부트
    Oracle
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
데드락 (DeadLock, 교착 상태)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.