교착상태: 두 판 사이의 차이

IT위키
편집 요약 없음
편집 요약 없음
(사용자 4명의 중간 판 8개는 보이지 않습니다)
2번째 줄: 2번째 줄:
* 교착상태 : Deadlock
* 교착상태 : Deadlock
* 두개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 둘다 영원히 끝나지 않는 상황을 가리킨다.
* 두개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 둘다 영원히 끝나지 않는 상황을 가리킨다.


== 예시 ==
== 예시 ==
16번째 줄: 15번째 줄:
| wait(A);
| wait(A);
|}
|}


== 교착상태의 4가지 필요조건 ==
== 교착상태의 4가지 필요조건 ==
* 아래 4가지 조건<ref name="example_cat">고양이의 품종 중 하나</ref>이 모두 만족하면 데드락이 발생할 가능성이 있다. 하나라도 만족하지 않으면 절대 발생하지 않는다.
* 아래 4가지 조건<ref>순서나 우선순위는 없다.</ref>이 모두 만족하면 데드락이 '''발생할 가능성'''이 있다.
{{아래 4가지 조건의 순서나 우선순위는 없음}}
* 하나라도 만족하지 않으면 절대 발생하지 않는다.
# '''상호 배제(Mutual exclusion)'''  
# '''상호 배제(Mutual exclusion)'''  
#* 한 리소스는 한번에 한 프로세스만이 사용 할 수 있다.
#* 한 리소스는 한번에 한 프로세스만이 사용 할 수 있음
# '''점유와 대기(Hold and wait)'''  
# '''점유와 대기(Hold and wait)'''  
#* 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있다.
#* 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있음
# '''비선점(No preemption)'''
# '''비선점(No preemption)'''
#* 프로세스가 테스크를 마친 후 리소스를 자발적으로 반환한다. (강제로 빼앗지 않는다)
#* 프로세스가 테스크를 마친 후 리소스를 자발적으로 반환할 때 까지 기다림 (강제로 빼앗지 않는다)
# '''환형 대기(Circular wait)'''  
# '''환형 대기(Circular wait)'''  
#* Hold and wait관계의 프로세스들이 circle을 이룬다.
#* Hold and wait관계의 프로세스들이 서로를 기다림
<ref name="foo">내용</ref>


== 교착상태의 방지법 ==
== 교착상태의 방지법 ==
* 사전에 데드락이 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다.
* 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다.
# '''방지(Prevention)'''
# '''방지(Prevention)'''
#* 할당 구조 측면에서, 데드락이 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 데드락을 방지한다.
#* 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다.
# '''회피(Avoidance)'''
# '''회피(Avoidance)'''
#* 리소스 할당의 측면에서, Deadlock이 발생할 가능성이 있는 allocation(unsafe allocation)을 하지 않는다.
#* 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다.
#* 대표적으로 [[은행원 알고리즘]]이 있다.
# '''탐지 및 회복(Detection and Recovery)'''
# '''탐지 및 회복(Detection and Recovery)'''
#* 데드락이 발생 할 수 있도록 놔 두고 데드락이 발생 할 경우 찾아내어 고친다.
#* 교착상태가 발생 할 수 있도록 놔 두고 교착상태가 발생 할 경우 찾아내어 고친다.


== 참고 ==
* 초기 원문 출처 : [http://raisonde.tistory.com/entry/Deadlock의-발생-조건과-해결법 [지식잡식 블로그]]


== 참조 링크 ==
[[분류:운영체제]]
* 초기 원문 출처 : [http://raisonde.tistory.com/entry/Deadlock의-발생-조건과-해결법 [지식잡식 블로그]]
[[분류:정보처리기사]]

2020년 9월 26일 (토) 10:03 판

개요

  • 교착상태 : Deadlock
  • 두개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 둘다 영원히 끝나지 않는 상황을 가리킨다.

예시

semaphores A and B, initialized to 1

Process1 Process2
wait(A); wait(B);
wait(B); wait(A);

교착상태의 4가지 필요조건

  • 아래 4가지 조건[1]이 모두 만족하면 데드락이 발생할 가능성이 있다.
  • 하나라도 만족하지 않으면 절대 발생하지 않는다.
  1. 상호 배제(Mutual exclusion)
    • 한 리소스는 한번에 한 프로세스만이 사용 할 수 있음
  2. 점유와 대기(Hold and wait)
    • 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있음
  3. 비선점(No preemption)
    • 프로세스가 테스크를 마친 후 리소스를 자발적으로 반환할 때 까지 기다림 (강제로 빼앗지 않는다)
  4. 환형 대기(Circular wait)
    • Hold and wait관계의 프로세스들이 서로를 기다림

교착상태의 방지법

  • 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다.
  1. 방지(Prevention)
    • 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다.
  2. 회피(Avoidance)
    • 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다.
    • 대표적으로 은행원 알고리즘이 있다.
  3. 탐지 및 회복(Detection and Recovery)
    • 교착상태가 발생 할 수 있도록 놔 두고 교착상태가 발생 할 경우 찾아내어 고친다.

참고

  1. 순서나 우선순위는 없다.