Lock/DeadLock

최시열·2023년 3월 30일
0

Dead Lock

  • 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태

  • 무한히 다음 자원을 기다리고 있음

  • 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생

  • 데이터베이스의 관점에서는 Transaction간 발생하는 것을 의미

Dead Lock 발생 필요 충분 조건

  1. 상호 배제 (Mutual Exclusion)

    자원은 한번에 한 프로세스만 사용할 수 있다.

  2. 점유 대기 (Hold and Wait)

    프로세스가 한 개의 자원을 점유하고 있고 추가적으로 다른 프로세스의 자원을 점유하기 위해서는 대기 해야 한다.

  3. 비선점 (Non-Preemption)

    점유 되어 있는 자원은 강제로 해제할 수 없고, 프로세스가 자원의 사용을 자발적으로 해제하기 전까지 그 자원은 얻을 수 없다.

  4. 순환 대기 (Circular Wait)

    자원과 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.

네 가지의 조건을 모두 충족해야 교착 상태 발생.

⇒ 네 가지의 조건 중 한 가지만 제거한다면 교착 상태가 발생하지 않을 수 있다.

Dead Lock 처리

  • 예방 (Prevention)

    • Dead Lock의 발생 조건 중 한 가지를 발생하지 않도록 하는 방법

    • Dead Lock 발생 가능성 차단

    • 대체적으로 자원 낭비가 심하다.

    • 상호 배제 조건 방지

      • 한 번에 여러 프로세스가 공유 자원을 사용할 수 있도록 조치
    • 점유 대기 조건 방지

      • 프로세스 실행에 필요한 모든 자원을 한번에 요구하고 허용할 때까지 작업을 보류하여 나중에 또 다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 함
    • 비선점 조건 방지

      • 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선 순위의 프로세스가 해당 자원을 선점 할 수 있도록 함
    • 순환 대기 조건 방지

      • 자원을 일정한 한 쪽 방향으로만 요구할 수 있도록 조치
  • 회피 (Avoidance)

    • 교착 상태 발생 시 피해 나가는 방법 ex. 은행원 알고리즘

    • Safe State

      • 안전 상태
      • 시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않게 할당 가능한 상태
    • Safe Sequence

      • 안전 순서
      • 특정 순서로 프로세스에게 자원을 할당하고 종료하는 작업 중 데드락이 발생하지 않는 순서
    • 이런 것을 찾는 것이 은행원 알고리즘

  • 탐지 및 회복 (Detection and Recovery)

    • 탐지

      • Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색

      • 자원 할당 그래프를 통해 교착 상태 탐지도 가능

    • 회복 (탐지를 통해 데드락을 발견하면)

      • 프로세스 중단 : 데드락이 탐지된 모든 프로세스 종료, 하나의 프로세스 중단 후 데드락 다시 탐지 및 프로세스 중단 반복

      • 자원 선점 : 프로세스에 할당된 자원을 선점해서, 교착 상태를 해결할 때까지 그 자원을 다른 프로세스에 할당해 주는 방법


LOCK

  • 데이터의 무결성을 보장하기 위한 방법 중 한가지

  • 같은 데이터를 사용자가 동시에 업데이트 하는 것을 막기 위해 사용

  • 락이 걸린 데이터는 락이 풀릴 때까지 다른 사용자가 조작할 수 없음

  • COMMIT, ROLLBACK 이후에 Lock이 풀린다.

  • 공유 Lock (Shared Lock, Read Lock)

    • 데이터를 읽을 때 사용

    • 내가 보고 있는 데이터를 다른 사용자가 볼 수는 있지만 변경은 불가능

  • 배타적 Lock (Exclusive Lock, Write Lock)

    • 데이터를 변경할 때 사용

    • 읽기와 쓰기가 불가능

  • Blocking

    • Lock들이 경합이 발생하여 특정 세션이 작업을 진행하지 못하고 멈춰선 상태

    • 공유 & 배타적, 배타적 & 배타적끼리 Blocking 발생

    • 해결하기 위해서는 COMMIT 또는 ROLLBACK 필요

profile
최시열

0개의 댓글