교착상태 (DeadLock)

이태혁·2020년 11월 10일
0
post-custom-banner

🦊 데드락의 발생조건(4가지)

  • Mutual Exclusion
  • Hold and Wait
  • No Preemtion
  • Circular Wait

🦊 데드락의 처리방법(4가지)

  • Deadlock prevention
  • Deadlock Avoidance
  • Deadlock Detection and recovery
  • Deadlock Ignorance

위 2개는 데드락이 생기기 전에 방지하는 방법
현대의 운영체제는 대부분 4번째 방법을 택함. 예방이나 진단에 오버헤드가 크므로 생겨도 무시함
(예: Utilization 저하, Throughput 감소, Starvation 문제 등등)

🦊 Deadlock Prevention의 경우

데드락의 발생조건이 형성되지 않게 만듬
1. Mutual Exxclusion: 이것은 동기화를 위해 꼭 필요한 요소이므로 제거 불능
2. Hold and Wait:
방법1: 한 프로세스가 종료될때까지 필요한 모든 리소스를 프로세스에게 다 할당해줌
방법2: 프로세스가 새로운 자원을 요청하려면 갖고 있던 모든 자원을 내려놓게 만듬
3. No preemtion
프로세스가 어떤 자원을 기다려야하는 경우 갖고 있던 자원을 다 내려놓게 함
모든 자원에 구현 불가능
CPU, Memory같이 빼앗겼다가 다시 주는 경우 하던 일을 계속 할 수 있지만 그 이외에 자원들은 하던 일을 다시 하는게 불가능 할 수도 있기 때문에

  1. Circular Wait
    자원의 순서를 매겨서 요청한 자원 중 낮은 자원을 다 획득해야지만 그 다음 높은 자원을 획득할 수 있게 순위를 매겨놓음
    -> 이렇게 되면 낮은자원이 없음에도 높은자원을 획득해서 다른 프로세스에게 영향을 줘서 만드는 교착상태를 방지할 수 있음

🦊 Deadlock Avoidance

점선: 프로세스가 미래에 자원을 요청할 예정
데드락이 걸리지 않게 자원 요청의 순서를 정해줌

Banker's Algorithm

profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.
post-custom-banner

0개의 댓글