도구스개발

교착상태 검출(자원 할당 그래프) 계산기

프로세스-자원 요청/보유 간선을 입력하면 자원 할당 그래프에서 사이클을 찾아 교착 여부와 관련 프로세스를 판정합니다. 자원마다 인스턴스가 하나뿐이라는 전제 아래, 사이클이 곧 교착상태입니다.

한 줄에 하나씩 「P1 -> R1」(요청) 또는 「R1 -> P1」(할당)로 적습니다. 화살표 대신 공백이나 쉼표도 됩니다.

교착상태

있습니다

1개의 독립된 교착 그룹을 찾았습니다.

정점 수 · 간선 수4개 · 4개

교착 그룹 1

P1 → P2 → R1 → R2P1

자원 종류마다 인스턴스가 하나뿐이라고 전제합니다. 이 전제 아래서는 자원 할당 그래프에 사이클이 있는 것과 교착상태가 있는 것이 정확히 같은 말입니다. 인스턴스가 여럿인 자원이 섞여 있으면 사이클이 있어도 사이클 밖의 프로세스가 자원을 반납해 실제로는 풀릴 수 있어, 이 계산기의 판정은 그런 경우 실제와 다를 수 있습니다.
dev/bankers-algorithm과 무엇이 다른가. 은행원 알고리즘은 요청을 «들어주기 전에» 미리 안전한지 검사해 교착 자체를 막는 회피(avoidance) 기법이고, 이 계산기는 이미 벌어진 상태에서 사이클을 찾아 교착을 확인하는 검출(detection) 기법이라 적용 시점 자체가 다릅니다.

사용 방법

  1. 1프로세스가 자원을 요청하는 간선(P1 → R1)과 자원이 프로세스에 할당된 간선(R1 → P1)을 한 줄에 하나씩 입력합니다.
  2. 2교착상태가 있는지, 있다면 어떤 프로세스·자원이 얽혀 있는지 확인합니다.
  3. 3예시(고전적 원형 대기·교착 없음·독립된 교착 둘)를 눌러 결과가 어떻게 갈리는지 비교합니다.

자주 묻는 질문

프로세스와 자원을 정점으로 놓고, 프로세스가 자원을 요청하면 프로세스→자원 간선을, 자원이 프로세스에 할당되면 자원→프로세스 간선을 그은 방향 그래프입니다. 이 그래프에서 사이클을 찾으면 교착상태를 판정할 수 있습니다.

P1이 R1을 쥔 채 R2를 기다리고 P2가 R2를 쥔 채 R1을 기다리면, 둘 다 상대가 자원을 놓아 주기를 기다리는데 상대도 마찬가지라 영원히 못 풀립니다. 이 관계가 정확히 그래프의 사이클(P1→R2→P2→R1→P1)로 나타납니다 — 단, 자원마다 인스턴스가 하나뿐일 때만 그렇습니다.

사이클이 있어도 반드시 교착은 아닙니다. 사이클 밖의 프로세스가 자원을 반납하면 사이클 안의 프로세스도 그 자원을 받아 풀릴 수 있기 때문입니다. 정확히 판정하려면 «축약(reduction)» 절차 — 끝낼 수 있는 프로세스를 하나씩 지워 나가는 것 — 가 필요합니다. 이 계산기는 인스턴스가 하나뿐이라고 전제하므로, 여러 개인 자원이 섞여 있으면 실제와 다를 수 있습니다.

은행원 알고리즘은 요청을 «들어주기 전에» 미리 안전한지 검사해 교착 자체가 생기지 않도록 막는 회피(avoidance) 기법입니다. 이 계산기는 이미 벌어진 상태에서 사이클을 찾아 교착을 확인하는 검출(detection) 기법이라, 적용하는 시점 자체가 다릅니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 사이클 검출은 강한 연결 요소(SCC) 계산과 같은 문제라 dev/tarjan-scc의 알고리즘을 그대로 재사용합니다.
  • 자원 종류마다 인스턴스가 하나뿐이라고 전제합니다. 인스턴스가 여러 개인 자원이 섞여 있으면 실제 교착 여부와 다를 수 있습니다.
  • 한 그래프 안에 서로 독립된 교착이 여럿 있을 수 있으며, 이 경우 그룹을 나눠 모두 보여줍니다.
  • 입력한 값은 브라우저 안에서만 계산되며 서버로 전송되지 않습니다.

함께 보면 좋은 도구

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