[데이터베이스] 데드락

Narcoker·2024년 12월 5일
0

데이터베이스

목록 보기
18/18

데드락(교착상태)

2개 이상의 프로세스가 특정 공유 데이터를 확득하지 못하고 무한정 대기하는 상태

발생 조건

다음 4가지 조건 중 하나라도 만족하면 발생한다.

비선점 상태

다른 프로세스가 가지고 있는 공유 데이터의 권한을 뺏어오지 못하는 상태
비선점 상태에서는 자원을 점유한 프로세스가 자원을 강제로 반납할 수 없다

환형 대기

프로세스들이 원형 형태로 공유 데이터를 대기하는 상태

점유와 대기

어떤 자원을 획득한 상태에서 다른 자원을 획득하고자 대기하는 상황

상호배제

여러 프로세스가 동시에 자원을 사용할 수 없는 상황

해결 방법

예방

4가지 발생 조건 중 하나 이상의 조건이 발생하지 않도록 강제하는 방법

  • 상호배제 부정 : 여러 프로세스가 공유 자원 사용
    • 현실적으로는 모든 자원의 상호배제를 없애는 것은 어렵기 떄문에 사용 무리.
  • 점유대기 부정 : 프로세스 실행전 모든 자원을 할당 또는 아예 어떤 자원도 획득하지 못하도록 하는 것
    • 자원 이용률(Resource Utilization) 이 낮아진다는 치명적인 단점
      • 점유와 대기를 금지하면 한 프로세스에 필요한 자원들을 몰아주고, 그 다음에 다른 프로세스에 필요한 자원들을 몰아줘야 한다.
      • 즉, 여러 프로세스가 동시간대에 병렬적인 작업을 하지 못하고, 한 프로세스만 작업해야 하므로 효율성이 떨어진다.
  • 비선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
    • 선점 모드 전환
  • 순환대기 부정 : 자원에 고유번호 할당 후 순서대로 자원 요구
    • 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기가 발생하지 않는다
    • 앞서 3가지 방식들보다 비교적 현실적이고 실용적
    • 수 많은 자원에 번호를 붙이는 일은 다소 번거로운 작업
    • 각 자원에 어떤 번호를 붙이는지에 따라 특정 자원에 이용률(utilization) 이 떨어질 수 있으므로 설계 측면에서 어렵다는 것이 단점

회피

회피 기법은 데드락이 발생하지 않을 정도로만 조심스럽게 자원을 할당하는 방식이다.
이 기법에선 데드락을 한정된 자원의 무분별한 할당으로 인해 데드락이 발생한다고 가정하여,
마구잡이로 자원을 할당하지 않고 더욱 신중하게 자원을 할당하는 방식이다.

  • 안전 상태(Safe State) : 자원을 할당받고 종료될 수 있는 상태
  • 불안정 상태(Unsafe State) : 교착 상태가 발생할 수도 있는 상태
  • 안전 순서(Safe Sequence) : 데드락 발생없이 안전하게 프로세스들이 자원을 할당할 수 있는 순서
    • 운영체게가 데드락을 회피하기 위해서는 시스템 상태가 안전 상태 에서 안전 상태 로 움직이는 경우에만 자원을 할당

즉, 데드락 회피 기법은 항상 안전 상태를 유지하도록 자원을 할당하는 방식이다.

탐지와 회복

데드락 탐지 & 회복 기법은 데드락이 발생했을 때가 되어서야 그떄가서 조치를 취하는 방법이다.

  • 선점을 통한 회복
    데드락이 해결될 때 까지 한 프로세스씩 자원을 몰아주는(일명 몰빵) 방식이다. 데드락이 해결될 떄 까지 다른 프로세스로부터 자원을 강제로 빼앗아 버린뒤, 빼앗은 자원들을 한 프로세스에 할당한다.

  • 프로세스 강제 종료를 통한 회복
    프로세스를 강제로 종료시켜서 데드락을 회복할 수 있다. 가장 단순하면서 확실한 방식이다. 운영체제는 데드락에 빠진 프로세스들을 모두 강제 종료할 수도 있고, 데드락이 없어질 떄 까지 한 프로세스만 강제 종료할 수도 있다. 하지만 많은 프로세스들이 작업한 내역을 잃게 될 수 있다.

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글