1. 시스템의 안전 상태 유지를 위한 전략, 은행가 알고리즘의 개요
정의: 다중 자원 환경에서 프로세스의 자원 요청 시, 자원을 할당해 주었을 때 시스템이 교착상태에 빠지지 않는 **안전 상태(Safe State)**로 남을 수 있는지를 사전에 검증하여 할당 여부를 결정하는 알고리즘.
등장 배경: 교착상태 예방(Prevention)의 자원 낭비 문제를 해결하고, 발견(Detection) 후 복구의 높은 비용을 회피하기 위해 다익스트라(Dijkstra)가 제안함.
2. 은행가 알고리즘의 핵심 메커니즘과 자료구조
가. 안전 상태(Safe State)와 안전 순서열(Safe Sequence)
안전 상태: 시스템 내의 모든 프로세스가 유한한 시간 내에 정상적으로 종료될 수 있는 특정 프로세스 실행 순서(안전 순서열)가 하나 이상 존재하는 상태.
불안전 상태: 교착상태가 발생할 가능성이 있는 상태(반드시 발생하는 것은 아님).
나. 알고리즘 운용을 위한 주요 자료구조
| 자료구조 | 크기 | 설명 |
| Available | [m] | 현재 시스템이 보유한 각 자원별 가용 수량 |
| Max | [n, m] | 각 프로세스가 실행을 위해 최대로 요구하는 자원 수량 |
| Allocation | [n, m] | 현재 각 프로세스에 할당되어 있는 자원 수량 |
| Need | [n, m] | 프로세스 종료를 위해 추가로 필요한 자원 수량 (Max - Allocation) |
3. 은행가 알고리즘의 동작 프로세스
알고리즘은 크게 자원 요청 알고리즘과 안전성 알고리즘의 2단계로 수행됩니다.
가. 자원 요청 알고리즘 (Resource-Request Algorithm)
프로세스 $P_i$가 자원을 요청하면, $Request_i \le Need_i$인지 확인 (최대 요구량 초과 여부).
$Request_i \le Available$인지 확인 (가용 자원 충분 여부).
조건 충족 시, 자원을 할당한 것으로 가정하여 상태를 가상 업데이트함.
$Available = Available - Request_i$
$Allocation_i = Allocation_i + Request_i$
$Need_i = Need_i - Request_i$
업데이트된 상태에서 안전성 알고리즘을 수행함.
나. 안전성 알고리즘 (Safety Algorithm)
$Work = Available$, $Finish[i] = false$로 초기화.
$Finish[i] == false$이고 $Need_i \le Work$인 프로세스 $P_i$를 탐색.
찾으면 $Work = Work + Allocation_i$, $Finish[i] = true$로 설정 후 다시 2단계 반복.
모든 $Finish[i]$가 $true$가 되면 안전 상태, 그렇지 않으면 불안전 상태로 판정하여 요청을 거절함.
4. 은행가 알고리즘의 특징 및 한계점
| 구분 | 주요 내용 및 특징 |
| 장점 | 교착상태가 절대 발생하지 않음을 보장, 예방 기법 대비 자원 이용률 향상 |
| 단점 | 프로세스 수와 자원 수가 고정되어야 함, 최대 자원 요구량을 미리 알아야 함 |
| 오버헤드 | 자원 요청 시마다 안전성 알고리즘을 수행해야 하므로 CPU 부하 발생 |
| 가정의 한계 | 프로세스가 자원을 반납한다는 보장이 필요하며, 실시간 시스템 적용 어려움 |
5. 기술사적 제언: 현대 OS와 클라우드 환경에서의 시사점
현대 운영체제의 선택: 은행가 알고리즘은 이론적으로 완벽하나 오버헤드와 사전 정보 확보의 어려움으로 인해, 범용 OS(Windows, Linux 등)에서는 주로 **교착상태 무시(Ostrich Algorithm)**나 발견 후 복구 전략을 취함.
클라우드 및 MSA 환경: 자원 할당이 동적으로 일어나는 환경에서는 고정된 수치 기반의 은행가 알고리즘보다는 **오토스케일링(Auto-scaling)**과 **서킷 브레이커(Circuit Breaker)**를 통한 가용성 확보 전략이 더 실무적임.
결언: 은행가 알고리즘은 자원 관리의 '안전성'이라는 본질적 가치를 증명하는 모델임. 기술사는 이 알고리즘의 논리적 구조를 이해하고, 시스템 설계 시 자원 경합을 최소화하는 데드락 프리(Deadlock-free) 아키텍처를 지향해야 함.
댓글 없음:
댓글 쓰기