두 가지 이상의 작업이 서로 상대방의 작업이 끝나기를 무한정 기다리는 상태.
멀티 쓰레드 프로그래밍에서 동기화를 통해 락을 획득하여 자원을 여러 곳에서 함부로 사용하지 못하게 한다. 두 개 이상의 쓰레드에서 서로 가지고 있는 락이 해제되기를 기다리는 상태(교착상태)가 되는 것을 막기 위함이다.
두 개 이상의 스레드가 특정 자원을 공유하고 있을 때, 한 번에 하나의 스레드에게만 접근을 허용하고자 하는 영역
한 스레드가 자원을 점유하면, 다른 스레드는 자원을 점유한 스레드가 종료될 때까지 기다려야 한다.
상호배제(mutual exclusion) :
점유대기(Hold And Wait) :
비선점(Non - Preemptive) :
순환대기(Circle Wait)
자원에서 프로세스로 향하는 간선(R → P) 은 P가 R을 점유 중이라는 뜻이고 프로세스에서 자원으로 향하는 간선(P → R)은 P가 R을 대기 중이라는 뜻이다. 프로세스는 동그라미, 자원은 네모로 나타낸다.
상호배제(mutual exclusion) :
점유대기(Hold And Wait) :
첫번째 방법 : 자원 낭비 발생 위험이 있다.
두번째 방법 : 프로세스의 우선순위가 낮은 경우 계속해서 자원을 할당 받을 수 없어 기아 상태 발생이 가능하다.
비선점(Non - Preemptive) :
* 기존에 실행중이던 프로세스가 중단되어 작업 내용을 잃을 수 있다. 자원 낭비 발생
순환대기(Circle Wait) :
* 프로세스 1, 자원 A, B가 잇을 때, 자원 할당 순서를 A > B 라고 가정하면, 프로세스 1번은 자원 B를 점유하기 위해서는 반드시 자원 A를 먼저 점유해야 한다.
시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있다면 안정 상태(Safe State)에 있다고 한다.
이처럼 특정한 순서로 프로세스에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 교착상태가 발생하지 않는 순서를 찾을 수 있다면 그것을 안전 순서(Safe Sequence)라고 한다.
반면 불안정 상태는 안정 상태가 아닌 상황을 말한다. 즉, 교착상태 발생 가능성이 있는 상황이며, 교착상태는 불안정 상태일 때 발생할 수 있다.*교착상태는 불안정 상태의 부분집합
회피 알고리즘은 자원을 할당한 후에도 시스템이 항상 Safe State에 있을 수 있도록 할당을 허용하는 것이 특징이다.
회피 알고리즘 중 가장 유명한 것은 은행원 알고리즘이다.
예를 들어,
예를 들어, 20만원이 필요하면 20만원이 있어야 해결하고, 빌린 돈을 갚을 수 있다. 10만원만 있을 경우, 해결하지도 못하고 다시 갚지도 못한다.
* 고객은 빌려러는 돈이 충족되어야 일을 해결하고, 돈은 다시 갚을 수 있다.
은행에는 지금 25만원이 남아있다.
이 경우, 15만원이 더 필요한 첫번째 고객에게 15만원을 빌려주고 일을 해결하고 갚을 때까지 기다렸다가 다른 고객에게 돈을 빌려주는 방법이 있다.
또 다른 방법은 두 번째 고객에게 남은 25만원을 빌려주고 일을 해결하고 갚을 때까지 기다리는 방법이 있다.
하지만 세 번째 고객은 은행에서 전부 빌려주더라도 일을 해결할 수 없다. 그러므로 돌려 받을 수 없다.
이 순서대로 모든 고객에게 돈을 빌려줄 수 있고, 이를 안전 순서열이 존재한다고 한다.
만약 60만원이 필요한 고객 3이 25만원이 아닌 45만원을 빌려달라고 한다면 은행에는 남은 돈이 5만원 밖에 없게 된다.
이 상황에서는 세 고객 중 아무도 일을 해결할 수 없고, 이 상태를 불안정 상태 또는 교착상태라고 한다.
은행원 알고리즘은 은행이 최소한 한 명에게 대출해줄 수 있는 금액을 항상 보유하고 있어야 한다는 개념에서 나온것이다.
은행원 알고리즘이 수행되기 위해서는 3가지가 필요하다.
안전 상태는 시스템이 교착상태를 일으키지 않고, 각 프로세스가 요구한 양만큼 자원을 할당해줄 수 있는 상태로, 안전 순서열이 존재하는 상태이다.
불안전 상태는 안전 순서열이 존재하지 않는 상태, 즉 아무런 방법이 없는 상태이다. 교착상태는 불안전 상태일 때만 발생한다. 불안전 상태라고 해서 무조건 교착 상태인 것은 아니다.
시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것을 의미한다.
교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것을 의미한다.
1. 프로세스 종료
교착상태에 있는 프로세스를 종료하는 것.
2. 자원 선점
교착 상태에 있는 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하여 해당 프로세스를 일시정지 시키는 방법
자원 선점시 고려사항
- 희상자 선택(selection of a victim)
- 롤백(rollback)
* 프로세스가 실행되는 중간마다 해당 시점의 상태를 표시 해두는 검사점 지정(checkpoint) 방식을 이용
참고 :
https://oingbong.tistory.com/87
임계영역이란?
임계영역: 두개 이상의 쓰레드가 특정 자원을 공유하고 있을 때 한번에 하나의 쓰레드에게만 접근을 허용하고자 하는 영역을 말함 자바는 이러한 임계영역의 처리를 위하여 synchronized 키워드 제
oingbong.tistory.com
https://math-coding.tistory.com/175
[Java] 자바 쓰레드 교착상태(deadlock)
이 글은 "자바 온라인 스터디" 내용을 가지고 공부하여 작성한 글입니다. Thread DeadLock 이란? 멀티 쓰레드 프로그래밍에서 동기화를 통해 락을 획득하여 동일한 자원을 여러 곳에서 함부로 사용하
math-coding.tistory.com
https://velog.io/@mdy0102/DeadLock
DeadLock이란?
멀티 쓰레드 프로그래밍에서 동기화를 통해 락을 획득하여 자원을 여러 곳에서 함부로 사용하지 못하게 하는데두개의 쓰레드에서 서로가 가지고 있는 락이 해제되기를 기다리는 상태가 되는것
velog.io
https://drcode-devblog.tistory.com/297
[java/개념] 세마포어(Semaphore)와 뮤텍스(Mutex)
참고 자료 1) 우테코 : https://www.youtube.com/watch?v=oazGbhBCOfU 2) 세마포어 자바소스 : https://blog.naver.com/vanillasea81/220405264484 이번 포스팅은 세마포어(Semaphore)와 뮤텍스(Mutex)에 대해 알아보겠습니다. 먼저
drcode-devblog.tistory.com
https://chanhuiseok.github.io/posts/cs-2/
[운영체제] 데드락(Deadlock, 교착 상태)이란?
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
https://jerry92k.tistory.com/20
[OS] Deadlock : 교착상태
교착상태란? 두 개 이상의 작업들이 서로의 작업이 끝나기를 기다리면서 더이상 처리와 응답이 불가능해지는 상태 프로세스(스레드)는 아래 4가지 조건을 모두 만족할 경우 교착상태에 빠질 수
jerry92k.tistory.com
https://velog.io/@seorim0801/%EC%9D%80%ED%96%89%EC%9B%90-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
은행원 알고리즘?
교착상태 회피는 데드락이 빠질 가능성이 있는지 없는지 운영체제가 검사하고 빠질 가능성이 없을 경우에만 자원을 할당함으로써 문제 발생을 피하는 방법이다.
velog.io
[운영체제] 병행(Concurrency)과 병렬(Parallelism)의 정리 (0) | 2023.04.27 |
---|---|
[운영체제] 뮤텍스(Mutex), 세마포어(Semaphore), 모니터(Monitor) (0) | 2023.04.20 |
[운영체제] 선점 스케줄링 / 비선점 스케줄링 (0) | 2023.04.04 |
[git] intellij 프로젝트 git 올리기 (0) | 2023.02.06 |
[MySQL] 외부 접속 체크 사항 (0) | 2022.12.26 |