Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BFS
- 자바
- BOJ
- 프로그래머스
- 운영체제
- 이분탐색
- 안드로이드
- 백준
- 코딩
- 문자열
- GIT
- 트리
- 스택
- dfs
- 코딩테스트
- 그래프
- 세그먼트트리
- component
- 다이나믹프로그래밍
- 분할정복
- Android
- 완전탐색
- 배열
- 알고리즘
- 문자열다루기
- 생명주기
- activity
- 동적계획법
- 카카오블라인드
- 코틀린
Archives
- Today
- Total
HS_development_log
교착상태 본문
반응형
교착상태(Deadlock)
교착상태(Deadlock)
- 여러 프로세스 들이 각자 자원을 점유하고 있으면서 다른 프로세스가 점유하고 있는 자원을 요청하면서 무한하게 대기하는 상태
<프로세스의 자원>
- 시스템 자원 : CPU, 기억장치, I/O장치 ,파일, 세마포어 등
- 프로세스가 자원을 사용하려면 다음 순서로 수행한다
- 요청(request) : 요청이 즉시 허용되지 않는 경우, 자원을 얻을때까지 대기한다
- 사용(use)
- 해제(release) or 반환
교착상태 조건
- 상호배제(Mutual exclusion)
- 한 번에 오직 한 프로세스만이 자원을 사용할 수 있다
- 점유와 대기(Hold and wait)
- 프로세스가 적어도 하나의 자원을 점유하면서 다른 프로세스가 점유하고 있는 자원을 추가로 얻기 위해 대기한다
- 비선점(No preemption)
- 점유된 자원은 강제로 반환될 수 없고, 점유하고 있는 프로세스가 작업을 마치고 자원을 자발적으로 반환한다.
- 순환대기(Circular wait)
- 대기하고 있는 프로세스 집합{P0,P1...Pn}에서 P0->P1, P1->P2.. Pn-1->Pn, Pn->P0식으로 자원을 요청한다.
4가지 조건이 동시에 만족될 때 교착상태가 발생한다
교착상태 처리 방법
- 교착상태가 발생하지 않도록 예방(prevention)
- 교착상태를 가능한 회피(avoidance)
- 교착상태를 허용하고, 발생을 탐지한 후, 복구(dectection & recovery)
<교착상태에 관해>
대부분의 운영체제는 문제를 무시하고 교착상태가 발생하지 않는다고 가정한다. 교착상태가 잘 발생하지 않을 뿐더러, 교착상태 예방, 회피, 탐지 및 복구 방법을 사용하는 것은 비용이 많이 들기 때문이다
교착상태 예방(prevention)
교착상태 발생 4가지 조건 중에서 하나라도 성립되지 않으면 된다.
-
상호배제 예방 방법
- 공유가 가능한 자원들은 동시접근을 허용한다
-
점유와 대기 예방 방법
- 프로세스가 실행되기 전에 사용할 모든 자원을 함께 요청
- 프로세스가 자원을 전혀 갖고 있지 않을 때만 자원을 요청
- 단점
- 자원의 낮은 사용률 : 자원을 실제로 사용하지 않는 동안에도 자원을 점유하고 있어야 함
- 기아 상태 가능성 : 프로세스가 필요한 자원들을 영원히 할당받지 못해서 계속 기다리고 있는 상태
-
비선점 예방 방법
- 어떤 자원을 가진 프로세스가 추가 자원을 요청하여 대기하게 되면, 가지고 있던 자원을 반환하고 대기함
- 이후, 대기 중인 프로세스는 이전의 자원들과 새 자원을 모두 갖게 되면 다시 작업을 시작함
-
순환대기 예방 방법
- 모든 자원 유형에 일련 번호를 부여하고, 프로세스는 오름차순으로 자원을 요청
교착상태 예방법들은 자원의 사용률을 저하시키는 문제점이 있다
교착상태 회피(avoidance)
- 각 프로세스는 자원 유형마다 필요한 최대 개수를 선언하고, 운영체제는 이 정보를 이용해서 다음과 같이 교착상태가 되지 않도록 한다
- 어떤 프로세스가 자원을 요청하면, 이 자원을 할당한 후의 사애가 안정 상태인지 검사한다
- 안정 상태이면 자원을 할당
- 불안정 상태이면 자원을 할당하지 않는다 -> 교착상태 회피
<안정 상태(Safe State)>
<안정 상태와 교착상태의 상관관계>
- 시스템이 안정상태라면 교착상태가 없다
- 시스템이 불안정 상태라면 교착상태 가능성이 있다
- 교착상태는 불안정 상태이지만, 불안정 상태라고 모두 교착상태는 아니다
- 교착상태 회피는 시스템이 불안정 상태에 들어가지 않도록 하는 것이다
<교착상태 회피 알고리즘 : 은행가 알고리즘(Banker's Algorithm)>
은행가 알고리즘 단점
- 할당할 수 있는 자원의 수가 일정해야 한다
- 사용자 수가 일정해야 한다
- 항상 불안정 상태를 방지해야 하므로 자원 이용도가 낮다
- 최대 자원 요구량을 미리 알아야 한다
- 프로세스들은 유한한 시간 안에 자원을 반납해야 한다
서술된 단점들에 의해 운영체제의 오버헤드가 너무 커서 현재 채택되고 있는 방식은 아니다
교착상태 탐지(detection)
- 교착상태가 일어나도록 허용함
- 교착상태가 발생했는 지를 탐지하는 알고리즘 수행
- 교착상태로부터 회복하는 알고리즘 수행
유형1 - 각 자원 유형이 하나의 자원을 가진 경우
- 탐지 알고리즘은 주기적으로 수행하면서 대기 그래프에 주기가 생기는지 검사
- 그래프의 정점이 n개이면, n^2의 연산이 필요함
- 대기그래프는 자원 할당 그래프를 변형해서 그린다. 자원형태의 정점을 제거하고, 정점을 프로세스로 표현한다.
유형2 - 각 자원 유형이 여러 자원을 가진 경우
- 교착상태 회피 알고리즘은 은행가 알고리즘과 비슷한 방법을 사용
- 차이점
- 프로세스가 사용할 자원의 최대 개수를 미리 알지 않는다
- 자원을 할당한 후의 상태를 검사하는 것이 아니라 현재 상태를 검사하여 교착상태를 탐지
- 주기적으로 탐지 알고리즘을 수행해야 한다
<교착상태 탐지 알고리즘>
은행가 알고리즘과 매우 유사하다.
- 사용 가능한 자원을 할당 했을때 해당 프로세스가 완료되면 자원을 돌려받는다
- 돌려받은 자원으로 다른 프로세스에게 1번을 수행한다
- 모든 프로세스에 대하여 1~2번의 작업이 가능한 순서가 존재한다면 교착상태가 아니다. 순서가 존재하지 않으면 교착상태 이다
교착상태 회복(recovery)
- 프로세스 종료
- 교착상태에 있는 모든 프로세스를 종료시킨다
- 교착상태가 해결될 때까지 프로세스를 하나씩 종료한다
- 자원 선점
- 프로세스로부터 자원을 빼앗아서 이들을 교착상태가 해결될 때까지 다른 프로세스에게 준다
참고
- 교착상태 회피 - 은행원 알고리즘
- [System Software & Security Lab @ Myongji Univ. - Operating System ppt]
반응형
'CS > 운영체제' 카테고리의 다른 글
주소 바인딩(Address Binding)과 주소 변환(Address Translation) (0) | 2020.09.28 |
---|---|
동기화 (0) | 2020.09.28 |
CPU 스케줄링 (0) | 2020.09.28 |
멀티 프로세스 vs 멀티 쓰레드 (0) | 2020.09.28 |
쓰레드 (0) | 2020.09.28 |