[운영체제] 데드락(DeadLock,교착상태)

함민혁·2023년 8월 1일
0

cs면접준비

목록 보기
18/43

데드락이란?

두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음처리를 하지 못하는 상태
무한히 다음 자원을 기다리게 되는 상태임. 한정된 자원을 여러 곳에서 사용하려고 할 때 발생함

데드락 발생 조건 4가지

4가지 모두 성립해야 데드락이 발생

상호 배제
한 번에 프로세스 하나만 해당 자원을 사용할 수 있음. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야함

점유 대기
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함

비선점
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음

순환 대기
프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야함

데드락 헤결 방법

크게 3가지로 분류할 수 있음

발생하지 않도록 예방하기
발생 가능성을 인정하면서도 적절하게 회피하기
발생을 허용하지만 데드락을 탐지하여, 회복하기

데드락 예방(Prevention)

교착 상태 발생 조건 중 하나를 제거하면서 해결하는 방법임. 자원 낭비가 굉장히 심함

상호배제 조건 방지: 여러 프로세스가 공유 자원을 사용
점유대기 조건 방지: 프로세스가 자원을 요청할 때 다른 어떤 자원도 가지고 있으면 안됨. 그래서 한 프로세스가 수행되기 전에 모든 자원을 할당받게 하거나, 자원이 필요한 경우 보유하고 있던 자원을 모두 반납하고 다시 요청하는 방식을 이용
비선점 조건 방지: 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
순환대기 조건 방지: 자원에 고유번호 할당 후 순서대로 자원 요구

데드락 회피(Avoidance)

데드락이 발생할 위험이 있는 자원이 생기면 자원 할당 요청을 보류하여 시스템을 안전하게 유지
단점 : 오버헤드가 많이 발생
프로세스들이 필요로 하는 각 자원별 최대 사용량을 미리 선언하도록 하는 방법

데드락 탐지

자원 할당 그래프를 통해 데드락 탐지 가능
단점 : 자원을 요청할때마다 탐지 알고리즘 실행하면, 오버헤드 발생

데드락 회복

데드락을 일으킨 프로세스를 종료하거나 할당된 자원을 해제하면서 회복

프로세스 종료 방법

  • 데드락인 프로세스를 모두 중지
  • 데드릭이 제거될 때까지 하나씩 프로세스를 중지

자원 선점 방법

  • 자원을 빼앗긴 프로세스는 강제 종료 이후 재시작
  • 교착 상태에 빠진 프로세스가 필요로하는 자원을 강제로 가져옴

데드락 회피 기법인 은행원 알고리즘이 뭔지 설명해보세요

다중 프로세스 환경에서 데드락을 방지하기 위해 사용되는 사용되는 알고리즘
각 프로세스가 필요로 하는 자원의 최대값과 현재 할당된 자원의 양을 바탕으로 안정적인 상태를 유지할 수 있는지 여부를 판단

기아상태를 설명하는 식사하는 철학자 문제에 대해 설명해보세요

식사하는 철학자 문제는 데드락이나 동기화 같은 기본 개념을 이해하는데 도움이 되는 유명한 문제임
다섯 명의 철학자가 원형 테이블에 앉아서 식사를 하는 상황을 가정함. 각 철학자는 식사를 위해 포크 두개를 필요로하는데, 각 포크는 인접한 철학자와 공유 됨. 이로 인해 포크를 서로 가져가는 상황에서 데드락이 발생할 수 있음. 해결방법으로는 세마포어를 이용하거나, 모니터 해결방안이 있다.

왜 현대 OS는 데드락을 처리하지 않을까?

시스템의 복잡성으로 인해 교착 상태를 완전히 방지하는 것은 불가능할뿐 더러, 빈번히 발생하는 이벤트가 아니기 때문에 미연에 방지하기 위해 훨씬 더 많은 오버헤드를 들이는것이 비효율적이라고 판단했기 때문

🫠
출처:
https://velog.io/@yanghl98/운영체제OS-Deadlock데드락-정의-발생-조건-해결-방법
https://gyoogle.dev/blog/computer-science/operating-system/DeadLock.html

profile
Born to be FE developer 🧑🏻‍💻

0개의 댓글