도구스개발

은행원 알고리즘 안전상태 판정기

Allocation·Max·Available 행렬에서 Need를 구하고 안전순서가 존재하는지 판정합니다. 자원 요청 하나를 넣어 들어줘도 안전한지, 기다리게 해야 하는지도 함께 봅니다.

한 줄이 프로세스 하나, 한 칸이 자원 한 종류입니다

각 프로세스가 처음 밝힌 최대 요구량입니다

지금 남아 있는 자원. 한 줄에 자원 종류만큼

프로세스 5개 · 자원 3종류

안전상태

안전순서 P1 → P3 → P0 → P2 → P4

Need = Max − Allocation

프로세스AllocationMaxNeed
P00 1 07 5 37 4 3
P12 0 03 2 21 2 2
P23 0 29 0 26 0 0
P32 1 12 2 20 1 1
P40 0 24 3 34 3 1
총량10 5 7 (Allocation 합 + Available 3 3 2)

안전순서를 찾아 가며

#끝낼 수 있는 것남은 자원반납 뒤
1P1Need 1 2 23 3 25 3 2
2P3Need 0 1 15 3 27 4 3
3P0Need 7 4 37 4 37 5 3
4P2Need 6 0 07 5 310 5 5
5P4Need 4 3 110 5 510 5 7

P1이 1 0 2를 요청하면

판정들어줘도 됨

들어줘도 안전상태가 유지됩니다.

들어준 뒤의 안전순서: P1 → P3 → P0 → P2 → P4

불안전상태는 교착상태가 아닙니다. «교착에 빠질 수도 있는 상태»일 뿐이라, 프로세스들이 최대치까지 요구하지 않으면 아무 일 없이 끝나기도 합니다. 은행원 알고리즘은 그 «될 수도 있는» 위험을 아예 만들지 않으려고 요청을 미루는 것이라, 그만큼 보수적입니다. 가장 흔한 오해입니다.
안전순서는 대개 여러 개입니다. 어느 프로세스부터 고르느냐에 따라 달라지며, 이 도구는 결과가 재현되도록 «번호가 작은 프로세스부터» 찾아 그중 하나만 보여 줍니다. 교재의 답과 순서가 달라도 둘 다 맞습니다. 다만 «안전한가 아닌가»라는 판정 자체는 하나로 정해집니다.

사용 방법

  1. 1Allocation과 Max 행렬을 한 줄에 프로세스 하나씩 넣습니다. 한 칸이 자원 한 종류입니다.
  2. 2Available에 지금 남아 있는 자원을 한 줄로 넣습니다.
  3. 3안전순서를 찾아 가는 과정을 확인하고, 아래에서 자원 요청 하나를 넣어 들어줘도 되는지 봅니다.

자주 묻는 질문

지금 상태가 «안전상태»인지, 즉 모든 프로세스가 최대 요구량까지 다 요구하더라도 하나씩 끝내 나갈 수 있는 순서가 존재하는지를 판정합니다. 남은 자원으로 Need를 채워 줄 수 있는 프로세스를 하나 끝냈다고 치고 그가 쥔 자원을 돌려받기를 되풀이해, 모두 끝낼 수 있으면 안전상태입니다.

아닙니다. 불안전상태는 «교착에 빠질 수도 있는 상태»일 뿐입니다. 프로세스들이 실제로 최대치까지 요구하지 않으면 아무 일 없이 끝나기도 합니다. 은행원 알고리즘은 그 «될 수도 있는» 위험을 아예 만들지 않으려고 요청을 미루는 것이라 그만큼 보수적이며, 이것이 가장 흔한 오해입니다.

틀린 것이 아닙니다. 안전순서는 대개 여러 개 존재하며, 어느 프로세스부터 고르느냐에 따라 달라집니다. 이 도구는 결과가 재현되도록 «번호가 작은 프로세스부터» 찾아 그중 하나만 보여 줍니다. 다만 «안전한가 아닌가»라는 판정 자체는 하나로 정해집니다.

Need = Max − Allocation입니다. 앞으로 더 요구할 수 있는 최대량이며, 이미 쥐고 있는 만큼은 빼고 셉니다. Allocation이 Max보다 큰 값이 있으면 처음 밝힌 한도를 넘게 쥐고 있다는 뜻이라 잘못된 입력이고, 이 도구는 그런 경우 어느 칸이 문제인지 알려 줍니다.

세 가지를 차례로 봅니다. 첫째 요청이 Need를 넘지 않는지(넘으면 처음 밝힌 한도를 어긴 잘못된 요청), 둘째 지금 남은 자원으로 줄 수 있는지(모자라면 기다려야 함), 셋째 줬다고 쳤을 때도 안전상태인지입니다. 셋째에서 걸리면 자원이 있어도 주지 않고 기다리게 합니다.

전송되지 않습니다. 계산은 전부 브라우저 안에서 이뤄지고, 입력값은 이 브라우저의 localStorage에만 남습니다.

알아두면 좋은 점

  • 프로세스는 20개, 자원은 10종류까지 다룹니다.
  • 자원 총량은 Allocation의 합에 Available을 더해 구합니다. 따로 넣지 않아도 됩니다.
  • 안전순서를 찾을 때 번호가 작은 프로세스부터 봅니다. 다른 순서로 찾아도 «안전한가»라는 판정은 같습니다.
  • 운영체제 교재에 널리 실린 예제(프로세스 5개, 자원 A 10·B 5·C 7)의 Need 행렬과 안전 판정, 그리고 이어지는 세 가지 요청 판정을 정답지로 삼아 맞췄습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.