두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음처리를 하지 못하는 상태
무한히 다음 자원을 기다리게 되는 상태임. 한정된 자원을 여러 곳에서 사용하려고 할 때 발생함
4가지 모두 성립해야 데드락이 발생
상호 배제
한 번에 프로세스 하나만 해당 자원을 사용할 수 있음. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야함
점유 대기
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
비선점
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음
순환 대기
프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야함
크게 3가지로 분류할 수 있음
발생하지 않도록 예방하기
발생 가능성을 인정하면서도 적절하게 회피하기
발생을 허용하지만 데드락을 탐지하여, 회복하기
교착 상태 발생 조건 중 하나를 제거하면서 해결하는 방법임. 자원 낭비가 굉장히 심함
상호배제 조건 방지: 여러 프로세스가 공유 자원을 사용
점유대기 조건 방지: 프로세스가 자원을 요청할 때 다른 어떤 자원도 가지고 있으면 안됨. 그래서 한 프로세스가 수행되기 전에 모든 자원을 할당받게 하거나, 자원이 필요한 경우 보유하고 있던 자원을 모두 반납하고 다시 요청하는 방식을 이용
비선점 조건 방지: 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
순환대기 조건 방지: 자원에 고유번호 할당 후 순서대로 자원 요구
데드락이 발생할 위험이 있는 자원이 생기면 자원 할당 요청을 보류하여 시스템을 안전하게 유지
단점 : 오버헤드가 많이 발생
프로세스들이 필요로 하는 각 자원별 최대 사용량을 미리 선언하도록 하는 방법
자원 할당 그래프를 통해 데드락 탐지 가능
단점 : 자원을 요청할때마다 탐지 알고리즘 실행하면, 오버헤드 발생
데드락을 일으킨 프로세스를 종료하거나 할당된 자원을 해제하면서 회복
프로세스 종료 방법
자원 선점 방법
다중 프로세스 환경에서 데드락을 방지하기 위해 사용되는 사용되는 알고리즘
각 프로세스가 필요로 하는 자원의 최대값과 현재 할당된 자원의 양을 바탕으로 안정적인 상태를 유지할 수 있는지 여부를 판단
식사하는 철학자 문제는 데드락이나 동기화 같은 기본 개념을 이해하는데 도움이 되는 유명한 문제임
다섯 명의 철학자가 원형 테이블에 앉아서 식사를 하는 상황을 가정함. 각 철학자는 식사를 위해 포크 두개를 필요로하는데, 각 포크는 인접한 철학자와 공유 됨. 이로 인해 포크를 서로 가져가는 상황에서 데드락이 발생할 수 있음. 해결방법으로는 세마포어를 이용하거나, 모니터 해결방안이 있다.
시스템의 복잡성으로 인해 교착 상태를 완전히 방지하는 것은 불가능할뿐 더러, 빈번히 발생하는 이벤트가 아니기 때문에 미연에 방지하기 위해 훨씬 더 많은 오버헤드를 들이는것이 비효율적이라고 판단했기 때문
🫠
출처:
https://velog.io/@yanghl98/운영체제OS-Deadlock데드락-정의-발생-조건-해결-방법
https://gyoogle.dev/blog/computer-science/operating-system/DeadLock.html