호비시의 끄적끄적

Dead Lock ? 본문

취준

Dead Lock ?

호비시 2022. 7. 6. 15:59

Dead Lock 이란?

운영체제에서 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태. 다른 프로세스가 점유하고 있는 자원을 둘 이상의 프로세스가 서로 기다릴 때 무한 대기에 빠지는 상황이다.

Dead Lock 이 발생하는 상황

Dead Lock이 발생하려면 한 시스템 내에서 4가지 조건이 동시에 성립할 때 발생한다.

  1. 상호 배제
    한 번에 한 프로세스만 사용할 수 있어야 한다. 사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
  2. 점유 대기
    자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.
  3. 비선점
    이미 할당된 자원을 강제로 빼앗을 수 없다.
  4. 순환 대기
    대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.

Dead Lock 의 해결법

Dead Lock의 해결법은 크게 3가지이다.

  • Dead Lock이 발생하지 않도록 예방하기
  • Dead Lock 발생 가능성을 인정하면서도 적절하게 회피하기
  • Dead Lock 발생을 허용하지만 Dead Lock 을 탐지하여, Dead Lock 에서 빠져나오기

Dead Lock 의 예방

Dead Lock의 발생 조건 4가지중 하나라도 발생하지 않도록 해서 예방하는 방법. 각각의 조건을 방지하여 Dead Lock 발생 가능성을 차단.

  1. 자원의 상호 배제 조건 방지
    한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 설계한다. 하지만 동기화 문제가 발생할 수 있다.
  2. 점유 대기 조건 방지
    프로세스 실행에 필요한 모든 자원을 한꺼번에 할당한다.
  3. 비선점 조건 방지
    자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 가지고 있던 자원을 반납하고, 요구한 자원을 사용하기 위해 기다린다.
  4. 순환 대기 조건 방지
    자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.

위 4가지 조건을 방지해서 Dead Lock을 예방하는 방식은 시스템의 처리량, 효율성을 떨어트릴 수도 있다.

Dead Lock 의 회피

프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있는가를 확인하여 교착상태를 회피하는 방법

Safe state : 시스템의 프로세스들이 요청하는 모둔 자원을 Dead Lock을 발생시키지 않으면서 차례로 모두에게 할당해 줄 수 있는 상태
Safe sequence : 특정한 순서로 프로세스들에게 자원을 할당, 실행, 종료 등의 작업을 할 때 Dead Lock이 발생하지 않는 순서

대표적인 알고리즘으로 은행원 알고리즘이 있다.

Dead Lock 의 탐지, 회복

Dead Lock 을 탐지하여 원인이 되는 프로세스를 종료하거나, 할당된 자원을 해제함으로써 Dead Lock으로부터 회복하는 방법

  1. 탐지
    Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색한다.
  2. 회복
    • 프로세스를 종료하는 방법
      교착 상태의 프로세스를 모두 중지
      교착 상태가 제거될 때 까지 하나의 프로세스씩 중지
    • 자원을 선점하는 방법
      교착 상태의 프로세스가 점유하고 있는 자원을 선점하여, 다른 프로세스에게 할당한 후 해당 프로세스를 일시 정지
      우선순위가 낮은 프로세스, 수행된 횟수가 적은 프로세스 등을 위주로 프로세스 자원을 선점한다.

'취준' 카테고리의 다른 글

취업 후기  (1) 2022.08.03
SOLID ?  (0) 2022.06.30
Process 와 Thread  (0) 2022.06.27
TCP / UDP  (1) 2022.06.24
REST API란?  (0) 2022.06.19
Comments