교착 상태

38
교교 교교 최최최

Upload: yoonjong-choi

Post on 29-Jun-2015

647 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 교착 상태

교착 상태최윤종

Page 2: 교착 상태

시스템 모델 교착 상태의 특징 교착 상태 처리 방법 교착 상태 예방 교착 상태 회피 교착 상태 탐지 교착 상태로부터 회복

목차

Page 3: 교착 상태

시스템 모델

Page 4: 교착 상태

장치 1 == 인스턴스 1 프로세스는 자원 수보다 많은 자원 요청 불가 커널 함수 호출

◦ request/release, open/close, max/free 등◦ 자원에 대한 wait/signal 연산 지원

자원 사용 시나리오◦ 요청 : 사용 가능할 때까지 프로세스 대기◦ 사용 : 사용합니다◦ 방출 : 자원 사용 후 방출합니다

시스템 모델

Page 5: 교착 상태

자원을 할당할 때마다 자원 상태 조사◦ 자원의 사용 여부 (idle/use)◦ 프로세스의 사용 요청 여부◦ 자원을 사용중인 프로세스

시스템 모델

Page 6: 교착 상태

시스템 모델

hdd0 dev

monitor dev

keyboard dev

hdd1 dev

instance

instance

instance

instance

process 1

process 2

process 3

kernel

hdd0 input

monitor output

hdd0 input

request

request

request

Page 7: 교착 상태

교착 상태의 특징

Page 8: 교착 상태

한 프로세스 집한 내의 모든 프로세스가 그 집합 내의 다른 프로세스에 의해서만 발생될 수 있는 사건을 기다림

물리적인 자원 / 논리적인 자원에 대해서 정의◦ 물리 : 각종 장치들◦ 논리 : 커널 객체

교착 상태의 정의

Page 9: 교착 상태

교착 상태 ( 전체 시점 )◦ 프로세스 집합 내에서 다른 프로세스를 대기

기아 ( 프로세스 시점 )◦ 교착 상태의 부산물◦ 프로세스가 자원을 무한정 대기◦ 무한 봉쇄라고도 합니다 .

교착 상태와 기아

Page 10: 교착 상태

상호 배제 (mutual exclusion)◦ 뮤텍스와 이름이 같습니다◦ 최소한 하나의 자원이 비 ( 非 ) 공유 모드로 점유

점유하며 대기 (hold and wait)◦ 프로세스는 최소한 하나의 자원을 점유한 채 , 다른

프로세스가 점유한 자원을 얻기 위해 대기 비선점 (no preemption)

◦ 다른 프로세스가 자원을 해제할 수 없습니다 순환 대기 (circular wait)

◦ 대기하고 있는 프로세스의 집합 내에서 각각의 프로세스가 자원을 점유하고 있고 다른 프로세스의 자원이 필요

교착 상태의 필요 조건

Page 11: 교착 상태

뮤텍스 사용시 교착 상태

Page 12: 교착 상태

R1 의 인스턴스는 P2 가 소유 R3 의 인스턴스는 P3 이 소유 R2 의 인스턴스는 P1, P2 가 소유 P1 이 R1 을 요청 P2 가 R3 을 요청

자원 할당 그래프

P1 P2 P3

R1 R3

R2 R4

Page 13: 교착 상태

R1 의 인스턴스는 P2 가 소유 R3 의 인스턴스는 P3 이 소유 R2 의 인스턴스는 P1, P2 가 소유 P1 이 R1 을 요청 P2 가 R3 을 요청 P3 이 R2 를 요청

교착 상태의 자원 할당 그래프

P1 P2 P3

R1 R3

R2 R4

Page 14: 교착 상태

R1 의 인스턴스는 P2, P3 이 소유 R2 의 인스턴스는 P1, P4 가 소유 P1 이 R1 을 요청 P3 이 R2 을 요청

사이클이 있지만 교착상태는 아닌 자원 할당 그래프

P1

P2

P3

P4

R1

R2

Page 15: 교착 상태

교착 상태 처리 방법

Page 16: 교착 상태

시스템이 결코 교착 상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나 회피하는 프로토콜 사용하는 방법

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

문제를 무시하고 , 교착 상태가 시스템에서 결코 발생하지 않는 척 하는 방법◦ 대부분의 운영체제가 사용합니다◦ 프로그래밍은 우리들의 몫

교착 상태 처리 방법의 예

Page 17: 교착 상태

교착 상태 예방

Page 18: 교착 상태

상호 배제 (mutual exclusion)◦ 뮤텍스와 이름이 같습니다◦ 최소한 하나의 자원이 비 ( 非 ) 공유 모드로 점유

점유하며 대기 (hold and wait)◦ 프로세스는 최소한 하나의 자원을 점유한 채 , 다른

프로세스가 점유한 자원을 얻기 위해 대기 비선점 (no preemption)

◦ 다른 프로세스가 자원을 해제할 수 없습니다 순환 대기 (circular wait)

◦ 대기하고 있는 프로세스의 집합 내에서 각각의 프로세스가 자원을 점유하고 있고 다른 프로세스의 자원이 필요

교착 상태의 필요 조건교착 상태를 예방하려면 저 상황만 아니게 만들면 됩니다

Page 19: 교착 상태

상호 배제는 도저히 막을 수가 없습니다 .◦ 출력 장치 등

read-only lock◦ 읽기 전용 상태에서는 어떤 프로세스든 읽기 가능

상호 배제

Page 20: 교착 상태

요청할 자원이 있는 프로세스는 모든 자원 방출◦ 자원이 없을 때에만 자원 요청 가능하게 유도◦ 프로세스 수행 중 자원 요청

프로세스의 시작과 동시에 자원을 요청하지 않습니다◦ 두 방법의 문제점

이용 빈도가 낮은 자원을 불필요하게 점유 이용 빈도가 높은 자원에 대해 기아 상태 야기

점유하며 대기

Page 21: 교착 상태

다른 프로세스가 소유중인 자원을 요청하는 경우 해당 자원을 커널이 선점

프로세스는 선점된 자원을 다시 소유할 때까지 대기 주로 레지스터 / 메모리에 적용됩니다 .

◦ 프린터 등에 적용할 수 없습니다 .

비선점

Page 22: 교착 상태

자원에 순서 부여 프로세스는 순서대로만 자원을 점유

◦ 저장 장치 키보드 모니터 순서 등 역시 구현은 우리들의 몫

순환 대기

Page 23: 교착 상태

교착 상태 회피

Page 24: 교착 상태

교착 상태 예방은 장치 /CPU 효율에 영향 교착 상태 회피

◦ 프로세스가 커널에 자원 요청 방법 , 추가 정보 제공 프로세스의 자원 요청 / 해제 순서 등

교착 상태 회피

Page 25: 교착 상태

시스템이 어떤 순서로든 프로세스들이 요청하는 자원을 차례대로 모두 할당해 줄 수 있는 상태

프로세스 순서 (process sequence)◦ 다른 프로세스가 소유중인 자원을 요청하는 순서

프로세스 순서에서 안전 순서 (safe sequence) 를 찾을 수 있는 상태

안전 상태

Page 26: 교착 상태

처음에는 무조건 안전 상태 많은 자원 중 하나를 할당 그냥 안전 상태 안전 상태에서 불안전 상태로 전이할 수 있습니다 . 불안전 상태 ∋ 교착 상태

안전 상태 , 불안전 상태 , 교착 상태

불안전 상태

안전 상태

교착 상태

Page 27: 교착 상태

예약 간선◦ P1, P2 가 차후 R2 를 요청

사이클 탐지 알고리즘◦ R2 를 P2 에게 먼저 할당하지 않음◦ ( 프로세스 수 )² 만큼의 연산이 필요합니다◦ 같은 종류의 자원이 여러 개 있으면 적용 불가

O(n²)

자원 할당 그래프 알고리즘

R2

P1 P2

R1

R2

P1 P2

R1

Page 28: 교착 상태

자원 할당 그래프 알고리즘에 비해 효율성이 다소 떨어집니다 .

O(m*n²) 자료 구조 소개

◦ 가용 자원 (available) 벡터 n 번 자원의 가용 개수◦ 최대 자원 벡터 (max) m 번 프로세스가 가질 수 있는 자원

n 번의 최대 개수◦ 할당 벡터 (allocate) m 번 프로세스의 n 번 자원의 사용

수◦ 요구 벡터 (need) m 번 프로세스가 향후 요청할 수 있는 n

번 자원의 개수

은행원 알고리즘

Page 29: 교착 상태

1. work 와 finish 는 크기가 m 과 n 인 벡터이다 . work = available 로 초기값을 준다 . finish[i] = false 를 초기값으로 준다 .2. if(finish[i] == false && need[i] <= work) {

work = work + allocation[i]finish[i] = true

} else모든 i 에 대해finish[i] == true 이면 안전 상태이다 .

은행원 알고리즘 – 안전성 알고리즘

Page 30: 교착 상태

request[i] 는 i 번 프로세스의 요청 벡터 p[i] 가 자원을 요청하는 경우if(request[i] <= need[i]) {

if(request[i] <= available) {결과를 need 에 반영해서안전성 알고리즘 수행

} elsewait()

} else {초과 요청에 따른 오류

은행원 알고리즘 – 자원 요청 알고리즘

Page 31: 교착 상태

교착 상태 탐지

Page 32: 교착 상태

교착 상태인지 검사하는 알고리즘 지원 여부 교착 상태로 회복하는 알고리즘 지원 여부 알고리즘을 수행하는 데에 드는 비용 , 교착 상태에서

회복하면서 드는 손실에 대한 추가 비용 발생

교착 상태 탐지 요구 사항

Page 33: 교착 상태

자원 할당 그래프에 대응되는 대기 그래프 작성 대기 그래프에 사이클이 있는지 탐지하는 알고리즘

호출 O(n²)

각 자원이 한 개씩 있는 경우

P1 P2

R2

R1

P3

P4

R3

R4

R5

P5

P1 P2 P3

P4

P5

Page 34: 교착 상태

은행원 알고리즘을 대기 그래프처럼 적용하면 됩니다 . O(m*n²)

각 자원이 여려 개 있는 경우

Page 35: 교착 상태

교착 상태 발생 빈도 교착 상태 발생 시 참여하는 프로세스의 평균 개수

교착 상태 탐지 빈도의 단점들◦ 너무 적으면 한번에 여러 개의 사이클 발생◦ 너무 자주하면 많은 비용 소모

탐지 알고리즘 사용시 고려사항

Page 36: 교착 상태

교착 상태로부터 회복

Page 37: 교착 상태

프로세스 종료◦ 교착 상태에 빠진 프로세스 모두 종료

매우 많은 비용 소모◦ 교착 상태가 제거될 때까지 한 프로세스씩 중지

프로세스가 중지될 때마다 다시 탐지 알고리즘 호출 종료할 프로세스를 선택해야 하는 문제

교착 상태 회복 방법

Page 38: 교착 상태

자원 선점◦ 희생자 선택

비용을 최소한으로 줄일 수 있는 희생자로 선택◦ 롤백

프로세스가 자원을 할당 받기 전의 상태로 롤백◦ 기아 상태

특정 프로세스는 자원을 계속 선점 당할 수 있습니다 .

교착 상태 회복 방법