1) 목적은 자원을 할당해 줌에 있어 교착 상태를 방지하기 위함.


2) Banker's Algorithm은 프로세스에서 OS에게 자원을 요청할 때마다 OS에서 수행되는 알고리즘으로,

프로세스에서 OS에게 자원을 요청할 때 OS에서는 일단 이 자원 요청을 허가하고 된다고 가정했을 때

이후에 Deadlock이 발생하지 않는 최적의 케이스가 존재하는지를 Banker's Algorithm으로 시뮬레이션함.


3) 시뮬레이션 방법은:


  할당        최대        요구       가용

  ABC        ABC        ABC       ABC

프로세스 1   010        753        743       332

프로세스 2   200        322        122        "

프로세스 3   302        902        600        "

프로세스 4   211        222        011        "

프로세스 5   002        433        431        "


이런 상황이 있다고 해 보자(내가 예전에 지식iN으로 답변해준 어떤 사람의 질문 글 강의 교안에서 따 온 상황).


A, B, C는 자원의 유형이고,

할당은 현재 프로세스가 점유하고 있는 자원의 수,

요구는 프로세스가 요구할 자원의 수,

최대는 할당 + 요구 = 그 프로세스가 점유할 최대 자원의 수,

가용은 현재 사용 가능한 자원의 개수.


기본적으로 자원을 줄 수 없는 경우 (예: 프로세스 1 - 가용한 자원이 부족) 에는 당연히 요청이 거절되고.

자원을 줄 수 있는 경우의 요청이 들어왔다고 가정해 봄.


예를 들어 프로세스 2(앞으로 P2라고 간단히 쓰겠음)가 요청을 해 왔음.

시스템은 이제 은행원 알고리즘을 돌려서 프로세스 2를 시작으로 모든 프로세스가 모든 자원을

다 할당받을 수 있는 이상적인 상황이 있는지 없는지 검증함.


자원을 할당함에 있어 가장 최적의 상황은 "최대"가 가장 큰 프로세스가 할당해 오는 경우임.

왜냐하면 최대가 가장 큰 프로세스가 할당받을 경우 "할당"의 값은 가장 크게 되고,

이 프로세스가 종료되면 "할당"되었던 자원은 운영체제에 반환될 테니 "할당"은 "가용"에 더해짐.

은행원 알고리즘에서 시뮬레이션할 때는 다음 프로세스가 자원을 할당할 때는 이전 프로세스가 종료되었다고 가정함.


P2가 할당받고 P2가 종료되면, 가용한 자원은 ABC = 332+322 = 654 임.

이제 이후의 프로세스 경로에 "최대"가 최대값인 프로세스가 순서대로 요구하면 모두 할당받을 수 있나 검증함.

이 때 모두 할당받을 수 있으면 "safe"한 상태라고 하고 프로세스 2의 자원 요청이 허가됨.

아니라면 "unsafe"한 상태라고 보고 프로세스 2의 자원 요청이 거절됨.


시뮬레이션 해 보면 P2 - P4 - P5 - P3 - P1로 최적 상황을 시뮬레이션 했을 때 모두 문제없이 할당이 가능하므로

프로세스 2의 요청은 허가됨.