ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데드락
    운영체제 2024. 5. 6. 14:43

    컨커런시 버그 (타이밍 버그)

    발생할 수도 있고 아닐 수도 있음

     

    종류

    논 데드락 버그

    원자성 위배

    - 스레드들이 동시에 동작할 경우 문제가 됨

    - 락으로 해결

     

    오더링 문제

    - 특정 스레드 이후에 실행되는게 보장되어야 문제가 없는 경우

    - 조건변수나 세마포 사용


    데드락 (교착 상태)

    2개 이상의 스레드가 발생하지 않을 사건을 기다리게 되는 사건

     

    4가지 조건을 모두 만족해야 발생

    1. Mutual exclusion

    2. Hold-and-Wait

    3. No preemption for resource

    4. Circular wait

     

    데드락의 대처

    1. 데드락 예방

    2. 데드락 회피

    3. 데드락 발견 및 회복

     

    데드락 예방

    1. Hold-and-Wait 없애기

    모든 락을 한번에, 원자적으로 잡아야 함

    -> 큰 락을 잡고 락1, 락2.. 를 잡을 수 있게하기

     

    2. Preemption 하기

    락을 못잡으면 다시 놔주기

    * 트라이락: 못잡으면 놔줌

     

    문제: 라이브락 발생 가능

     

    3. 환형 대기 없애기

    락을 잡는 순서를 적절하게 맞춰서 환형으로 대기하는 현상이 발생하지 않도록 해야 함

     

    4. 상호 배제를 아예 안쓰기

    락 프리 어프로치

    원자성을 보장하면서 락을 안쓰는 방법..

    -> 하드웨어 명령어를 사용

     

    보통 Compare and Swap을 사용

     

    단점: 쓸 수 있는 때가 제한적.. 락, 언락이 제네럴한 방법

     

    데드락 회피

    스케줄링을 잘 해서 데드락이 발생하지 않도록 함

     

      Thread 1 Thread 2 Thread 3 Thread 4
    Lock 1 yes yes no no
    Lock 2 yes yes yes no

    홀드-앤-웨이트는 두 개 이상의 락을 잡아야 해당되는 문제

    Thread1과 Thread2를 같은 CPU에 올리면 둘이 동시에 실행되지 않으니 회피 가능

     

    ** 그래도 스케줄링이 선점형이면 데드락은 발생 가능, 회피할 뿐이고 데드락이 아예 안되는게 아님

     

    Banker's algorithm

    은행원이 돈을 빌려주는 것과 비슷하게 동작

    프리한 상태의 리소스를 가지고 모든 스레드를 종료시킬 수 있으면 세이프, 아니면 언세이프

     

    갚을 수 있는 애한테 자원을 빌려주는 방식

     

    데드락 발견 및 회복

    데드락의 발생은 허용하나 발생하면 탐지하고 리커버리

     

    자원 할당 그래프를 사용

    자원          ->   프로세스 : 가짐

    프로세스   ->           자원: 가지고 싶음

     

    프로세스가 종료 가능하면 엣지를 지움

    계속해서 엣지를 지우고 다 지우면 데드락이 없는 것

    반면, 지울 수 없는 엣지가 있으면 데드락 탐지

     

    보통 수행한 지 얼마 안된 걸 죽임(언두)

    가장 최근이 언두할게 적을 것임

     

    혹은 락을 가장 적게 가지고 있는 걸 죽임

    undo 오버헤드가 가장 적을 만할 걸 골라서 죽임


    데이터베이스는 기록자, 판독자 문제.. 여러가지 상황에서 컨커런시 문제는 고려됨

     

    세가지 팁

    1. 가능하면 심플

    2. 문제가 안되면 내버려 두는 것이 맞다

    3. 맵 리듀스 처럼 공유자원을 안쓰면 락도 안써도 됨 (OS는 어쩔 수 없이 해야되긴 한다)

     

     

    '운영체제' 카테고리의 다른 글

    Hard Disk Drive / Time io, Time rate / Disk Scheduling  (0) 2024.05.19
    I/O Device, Device Driver  (0) 2024.05.06
    Semaphore (세마포)  (0) 2024.04.18
    조건 변수, 생산자/소비자 문제  (0) 2024.04.18
    Lock-based Concurrent Data Structure  (0) 2024.04.18
Designed by Tistory.