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의 요청은 허가됨.
최적의 상황이 왜 "최대"가 가장 큰 프로세스가 할당해 오는 경우냐면 "최대"가 가장 크면 자원을 할당받았을 때의 "할당"량이 가장 높고 프로세스가 종료되었을 때 자원의 "가용" 수치에 더해지는 값이 가장 크므로 자원의 가용량이 가장 커지기 때문.
이게 또 비슷한 이름인데 다른 알고리즘이 있지 않나
Banker's Rounding은 내가 전에 올렸는데 이거랑은 다른 개념이지. 그건 반올림할 때 소수점 이하의 자리가 .5인 경우에는 짝수 정수로 반올림하는 거 ㅋㄷ
아 그것도 자네가 올렸느가
ㅋㅋ Banker's Rounding 이건 좀 새로웠음. 0.1~0.4에서 반올리하면 0이되고 0.5~0.9에서 반올림하면 1이 되니까 숫자 하나만큼 불공평하다라는거였지
예전에 은행원무슨 글 본적이 있었는데 그내용인가?
http://autogram.tk/이
중고차 어플리케이션 어떤가요?
프로세스2가 끝나면 가용 = 가용 + alloc 으로 332 + 200 = 532입니다