07 교착 상태
- 대기 상태\(_{blocked\ /\ asleep state}\)
- 프로세스가 특정 사건의 발생을 기다리는 상태 (추상적 설명)
- 프로세스가 원하는 자원의 할당을 기다리는 상태 (구체적 설명)
- 프로세스가 시스템 자원을 필요로 할 때: 시스템 호출 사용
- 시스템 호출을 불러서 커널을 사용할 수 있게 함
- 커널을 통해서 자원을 할당 받음
- 프로세스 실행 모드: 커널모드로 변환
- 커널은 프로세스가 요구한 자원의 가용 여부 검사
- 가용: 자원 확보 및 활용
- 불가용: 프로세스를 대기 상태로 전환
- 이후 자원이 가용하면, 커널 → (signal 전송) → 대기 중인 프로세스: wakeup
- signal 전송: I/O 컨트롤러에서 인터럽트와 관련된 이벤트가 발생하면 CPU에게 알리는 단계
- 특정 사건 = 프로세스가 요청한 자원의 할당
- 시스템 호출을 불러서 커널을 사용할 수 있게 함
- 교착상태\(_{deadlock \ state}\)
- 두 개 이상의 프로세스들이 (대기상태의 특정한 프로세스만이 발생시킬 수 있는) 이벤트를 무한 대기하는 것
- 프로세스가 전혀 발생할 가능성이 없는 사건을 기다리는 경우 [대기 상태의 한 종류, wakeup 가능성이 없음]
- 외부의 개입(OS 또는 시스템 운영자가 강제 종료)에 의해서만 대기상태를 벗어 날 수 있음
- 교착 상태에 빠진 프로세스는 할당된 자원을 다른 프로세스가 사용하지 못함
-
교착상태의 예
-
무기한 연기 상태\(_{starvation}\)
- 어떤 프로세스가 필요한 자원을 얻기 위해 무한정 기다리는 상태
- 즉, 교착 상태에 빠진 프로세스는 무기한 연기 상태에 들어가게 된다.
-
연기 상태에 빠진 프로세스의 자원을 뺏어서 타 프로세스에게 할당하면 해결됨
-
교착상태를 포함한 프로세스 상태 전이도
자원의 분류
- 일반적인 자원의 분류
- 하드웨어 자원
- 소프트웨어 자원
- 교착 상태를 설명하기 힘듦
- 선점 가능성에 의한 분류
- 선점 가능의 기준
-
선점가능 자원\(_{preemptible \ resources}\)
- 선점된 후 복귀시 아무런 문제점이 발생하지 않는 자원
- 프로세서\(_{processor}\) , 메모리\(_{memory}\) 등
-
선점불가능(비선점) 자원\(_{nonpreemptible \ resources}\)
- 자원을 선점하였을 때 이를 선점 당한 프로세스에게 어떤 형태로든 영향을 미치게 되는 경우
- 자기테이프 장치\(_{tape \ drive}\) , 광학 스캐너, 프린터, 플로피디스크 등
- 할당 방식에 따른 분류
- 전체 할당식\(_{total \ allocation}\)
자원
- 프로세스에 할당될 때 항상 자원 전체를 할당하게 되는 경우
- 프로세서, 자기테이프 장치 등
- 분할 할당식\(_{partitioned \ allocation}\)
자원
- 하나의 자원을 여러 조각들로 분할하고 이렇게 분할된 조각 단위로 프로세스에게 할당할 수 있는 자원
- 메모리 등
- 전체 할당식\(_{total \ allocation}\)
자원
- 공유 형태에 따른 분류
- 기준
- 자원을 여러 프로세스가 할당 받아 [동시에 사용 가능] 여부
- 배타적(비공유) 할당\(_{exclusive \ allocation}\)
자원
- 여러 프로세스가 동시에 같이 사용할 수 없는 자원
- 프로세서, 메모리, 자기테이프 장치, 버퍼, 터미널 등
- 공유식 할당\(_{sharable \ allocation}\)
자원
- 여러 프로세스가 동시에 같이 할당 받아 사용할 수 있는 자원
- 대부분 공유 소프트웨어나 데이터 자원
- 프로그램(시스템/유틸리티 프로그램 등), 공유 데이터 등
- 기준
- 자원의 속성에 따른 분류
- 순차적 재사용\(_{SR : Serially \ Reusable \ Resources}\)
자원
- 없어지지 않고 영구적으로 존재하는 자원
- 한번에 한 프로세스만 안전하게 사용 가능한 자원
- 프로세서, 메모리, 버퍼, 테이프 장치, 프로그램, 파일 등
- 소비성\(_{CR : Consumable \ Resources}\)
자원
- 한 프로세스가 사용한 후 그 자원이 사라지는 형태의 자원
- 인터럽트, 신호\(_{signal}\) , 메시지 등
- 순차적 재사용\(_{SR : Serially \ Reusable \ Resources}\)
자원
- 교착상태 모델이 고려되는 자원의 일반적인 형태
-
선점불가능(비선점) 자원\(_{nonpreemptible \ resources}\)
-
배타적 할당 자원\(_{exclusive \ resources}\)
-
순차적 재사용 자원\(_{serially \ reusable \ resources}\)
-
- 소비성 자원\(_{consumable \ resources}\)을 대상으로 하는 교착상태 모델도 있음
교착상태 예시
- 2개의 프로세스(P1, P2)
- 2개의 자원(R1, R2)
그래프 모형(순환 대기)
- 노드\(_{node}\)
- 프로세스 노드(Pi), 자원 노드(Rj)
- 엣지\(_{edge}\)
- Rj → Pi : 해당 자원이 프로세스에게 할당됨
- Pi → Rj : 프로세스가 해당 자원을 요청, 대기 중
- 순환 형태가 된다. = 교착 상태가 된다.
시스템 상태 전이 모델
- 시스템 상태 전이 모델
- 프로세스들이 자원에 대해 요구, 할당, 반납이 수행되는 과정에 대한 시스템 상태의 변화 과정 모델 (교착상태 전이 과정 분석을 위해)
- 가정
- 2 개의 프로세스, 2 개의 단위 자원
- 프로세스는 한번에 하나의 단위 자원만을 요청/반납 가능함
-
각 프로세스의 상태
-
- 자원형\(_{resource \ type}\)
- 자기테이프 장치(2개)
-
- 단위 자원\(_{resource \ unit}\)
- 특정 자기테이프 장치
-
2x2 시스템
- 프로세스: P1, P2
- holds: 점유
- needs: 요청
- S33은 교착 상태에 빠짐
- 각 프로세스에 자원이 1개씩 할당된 상태에서 추가로 자원을 1개씩 달라고 요청하기 때문
교착상태 발생원인
- 4가지 필요조건
- 다음 4가지 조건이 모두 만족되는 경우에 교착상태 발생됨
-
상호배제\(_{Mutual \ exclusion}\)
- 한 번에 한 프로세스만이 자원을 혼자만 사용
- 자원에 대한 배타적 사용\(_{exclusive \ use}\)
-
비선점\(_{No \ preemption}\)
- 자원을 선점하지 못함
- 선점불가능 자원\(_{nonpreemptible \ resources}\)
-
점유와 대기\(_{Hold \ and \ wait}\)
- 자원을 보유한 프로세스가 다른 프로세스에 할당된 자원을 추가로 얻으려고 대기
- 프로세스에 대한 자원의 부분 할당\(_{partial \ allocation}\) → 추가로 필요한 자원 요청가능
-
순환대기\(_{Circular \ wait}\)
- 위 3가지 교착상태의 발생 원인 조건에 의하여 발생 가능
- 두 프로세스 이상이 순환고리 형태(그래프 모형)
- 각 프로세스는 고리 안에 있는 다음 프로세스가 점유하고 있는 자원을 대기
- 환형대기 상태\(_{circular \ wait \ condition}\) 의 발생
-
- 위 4가지 원인 중에서 한 가지 조건만이라도 배제 → 교착상태 발생X
- 4개의 조건이 모두 독립적인 것은 아님 (순환대기는 점유와 대기 조건을 포함하는 개념)
교착상태 해결 기법(교재, 강의자료 참고)
- 예방, 회피, 검출, 복구 기법
교착상태 예방 기법
- 교착상태 발생 원인의 조건을 제거
- 비현실적임
- 자원에 대한 상호배제 조건 거부
- 시스템 내의 모든 자원들을 공유 가능하게 하는 방법
- 하드웨어 특성상 공유가 불가능한 자원 존재 (쓰기 동작의 경우)
- 불가능
- 시스템 내의 모든 자원들을 공유 가능하게 하는 방법
- 원에 대한 비선점 조건 방지
- 모든 자원이 선점 가능해야 함
- 선점 불가능한 자원이 존재하기 때문에 불가능
- 모든 자원이 선점 가능해야 함
- 점유와 대기 조건 방지
- 프로세스들로 하여금 필요한 모든 자원들을 실행 전에 미리 할당 받도록 하는 기법
- 무기한 연기 상태 발생 가능
- 프로세스들로 하여금 필요한 모든 자원들을 실행 전에 미리 할당 받도록 하는 기법
- 순환대기 조건의 방지
- 모든 프로세스들은 순서상의 한쪽 방향으로만 자원을 요구하고 할당 받을 수 있도록 하는 기법
교착상태 회피\(_{avoidance}\) 기법
- 교착상태 예방 기법 보다 덜 엄격한 조건 → 자원의 효율적 이용 목적
- 항상 시스템 상태를 감시
- 자원의 할당 과정에서 시스템 상태가 교착상태로 전이될 가능성이 있다고 판단되면 자원 할당을 유보
- 시스템을 항상 안전 상태로 유도
-
안전 상태와 불안전 상태
- 안전 상태의 의미
- 시스템의 상태가 교착상태로 전이되지 않도록 보장할 수 있음
- 유한 시간 내에 모든 프로세스를 정상 종료 가능
- 불안전 상태의 의미
- 교착상태로의 전이를 피하지 못할 가능성 존재
- 반드시 교착상태가 발생한다는 의미 아님
- 안전 상태의 의미
Dijkstra의 은행원 알고리즘
- 교착상태 회피를 위한 간단한 이론적 기법
- 시스템 내에 자원형이 한 가지만 존재하는 경우
- 1 resource type, multiple units
- 시스템의 상태를 항상 안전상태로만 진행 시킴
- 프로세스의 자원 할당/요청하는 자원의 종류(최대 수)에 대한 정보 필요
- 은행원이 대출 업무를 수행하는 원리
- 모든 고객은 계좌를 개설할 때 최대 대출 한도를 명시하여야 한다.
- 어떠한 고객도 최대 대출 한도를 넘어서 대출할 수 없다.
- 모든 고객이 대출한 금액의 총액은 은행의 총 대출금을 초과할 수 없다
- 안전 상태의 예시
- 한가지 종류의 자원 R, 단위 자원 10개, 프로세스 3개
- Available resource units : 2
- 실행 종료 순서 : P1 → P3 → P2
- 안전 순서\(_{safe \ sequence}\)
- 현재 상태에서 안전 순서가 하나 이상 존재하면 안전 상태임
- 불안전 상태의 예시
- 한가지 종류의 자원 R, 단위 자원 10개, 프로세스 3개
- Available resource units : 2
- 안전 순서 : 없음
- 불안정 상태: 반드시 교착상태로 전이되는 것은 아님
- 일부 자원을 반납하는 경우, 다시 안전상태로 진입 가능
- 시스템의 상태를 항상 안전 상태로만 진행
- 자원을 추가로 요구했을 때, 해당 자원을 할당한 뒤 안전상태인지 검사
- 안전 상태: 자원할당 승인
- 불안전 상태: 가용 자원이 남아 있어도 거절, 프로세스 대기, 추후 안전 상태로 전이될 수 있을 때 자원할당 승인
교착상태 검출(탐지) 기법
- 교착상태 발생에 대비한 어떠한 예비 행동 (예방 또는 회피)도 취하지 않음
- 교착상태가 발생할 수 있음
- 주기적으로 또는 필요 시에 교착상태 프로세스 존재 유무 검사 (그래프모델 사용)
- 실행 시 시스템 성능 감소
- 검출을 통해 교착상태라고 판단되면 복구 기법을 사용
-
자원할당 그래프 단순화
- 실제론 잘 사용하지 않음
교착상태 복구 기법
- 교착상태가 검출되면, 교착상태의 프로세스를 강제 종료 또는 자원 선점
- 검출과 복구는 한 세트로 묶임
댓글남기기