ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Deadlock 없애는 방법2, 3 - Avoid Deadlock, Detect Deadlock
    CS/OS 2023. 2. 26. 15:43

    - Avoid Deadlock

    데드락이 생길 것 같으면 막는다.

    데드락의 필요충분조건 4개는 존재하더라도, 프로세스의 시작을 금지하거나 자원할당을 금지하는 등 하여 데드락을 피한다.

    대신, 자원을 얼마나 요청할지를 미리 알고 있어야 한다.

    한 번 이상 실행을 시켰거나, 필요한 자원이 정확하게 계산 가능한 프로세스에만 적용할 수 있다.

     

    1. Process Initiation denial(프로세스 실행 거부)

    프로세스의 요구가 데드락으로 이어질 수 있는 경우, 프로세스를 시작하지 않는다.

    즉, 프로세스의 자원 요청 개수가 자원용량을 넘겠다 싶으면 실행을 거부한다.

    예) 자원a가 2개 있다.

    p1에서 a를 두번 사용

    p2에서 a를 두번 사용

    => 순서에 따라 두 프로세스 모두 쓸 수 있음에도 애초에 실행을 거부해버린다.

    이처럼 '최악'을 고려해서 미연에 방지를 한다. (전부 다 한번에 요청한다고 가정)

     

    2. Resource allocation denial(자원 요청할 때 허락할지 말지)

    요청시의 할당으로 인해 데드락이 발생할 가능성이 있는 경우, 자원할당을 거부하는 방식이다.

    banker's algorithm으로 불리기도 함.

    - safe state: 어떤 프로세스에게 자원을 할당하면 끝낼 수 있는 상태

    - unsafe state: 자원을 어떤 프로세스에게 할당하더라도 프로그램을 끝내지 못하는 상태

     

    데드락 회피(Avoid)는 방지(Prevent) 기법보다 덜 제한적이다.

    동시에 데드락 검출(Detect)방식처럼 프로세스를 미리 설정/롤백 할 필요가 없다.

    즉, 프로세스가 독립적으로 돈다고 가정해야 한다.

    그러나 용량 얼마나 필요할지 모르면 실행 불가한 방식이며, Syncronization이 없어야만 한다.

     

    * Syscronization: 순서 맞춰주는 거. 프로듀서가 생성을 해야 소비를 할 수 있게 순서 맞춤

     

     

    - Detect Deadlock

    실행하다 발견하면 후 처리(복구)

    데드락을 실행시키다가 검출되면 그 때 후처리 복구작업을 하는 방식이다.

    그러므로 중요한 곳에서는 이 방식을 사용하지 않는다. (어쨌든 데드락 발생 가능성이 존재하므로)

    allocation + available = resourse (쓰고있는 애들+쓸 수 있는 애들=전체 자원)

     

Designed by Tistory.