DeadLock 이란??

HEETAE HEO·2022년 6월 24일
0
post-thumbnail
post-custom-banner

DeadLock (데드락)

: DeadLock은 하나 또는 여러 개의 프로세스가 일어날 수 없는 사건을 영원히 기다리는 상태를 말합니다.

예를 들어 심부름으로 물건을 사러 갑니다. 슈퍼에 가서 계산을 하려고 보니 보유하고 있는 돈이 없거나 부족해서 "구매"라는 작업을 하지못하고 가만히 있는 상태로 "교착상태"라고도 하며 시스템적으로 한정된 자원을 여려 곳에서 사용하려고 할 때 발생합니다.

  • P1이 R1을 사용 중인 상태에서 P2가 R1을 사용하기 위해서 접근합니다.

  • P2이 R2을 사용 중인 상태에서 P1가 R2을 사용하기 위해서 접근합니다.

이럴경우 접근한 리소스가 상대방에게 할당되어 있기 때문에 p1과 p2는 무한정 대기 상태에 빠지게 됩니다.

이와 같은 현상을 DeadLock 상태라고 합니다.

교착 상태의 4가지 조건

교착 상태가 일어나려면 아래의 4가지 필요 조건을 충족 시켜야합니다. 이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않습니다.

  • 상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구합니다.

  • 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다립니다.

  • 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없습니다.

  • 순환대기 (Circle wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있습니다.

DeadLock를 예방 & 회피 방법

1. 예방

교착 상태 발생 조건 중 하나를 제거하면서 해결합니다. (자원의 낭비가 엄청 심합니다.)

  • 상호배제 부정 : 여러 프로세스가 공유 자원 사용
  • 점유대기 부정 : 프로세스 실행전 모든 자원을 할당
  • 비선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
  • 순환대기 부정 : 자원에 고유번호 할당 후 순서대로 자원 요구

2. 회피

교착 상태 발생 시 피해나가는 방법

은행원 알고리즘(Banker's Algorithm)

  • 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래함
  • 프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사하여 교착 상태 회피
  • 안정 상태면 자원 할당, 아니면 다른 프로세스들이 자원 해지까지 대기

Android에서는 멀티스레드 환경에서 여러 개의 스레드가 동시에 공통 메모리 리소스에 접근하려고 하면 데드락이 발생할 수 있습니다.

profile
Android 개발 잘하고 싶어요!!!
post-custom-banner

0개의 댓글