운영체제 기술 이론 강의 2탄으로 세마포어, 모니터, 교착 상태 등의 개념을 쉽게 설명해보겠습니다.
1. 프로세스 동기화의 개념
2. 세마포어(Semaphore)
3. 모니터
4. 교착 상태(Deadlock)
5. 교착 상태 해결 방법
6. 세마포어와 교착 상태에 빠진 사례
1. 프로세스 동기화의 개념
운영체제에서 프로세스는 서로 독립적으로 실행되지만, 공통 자원에 접근하거나 데이터를 교환해야 할 필요도 있습니다. 이를 원활히 처리하기 위해 프로세스 간 통신을 활용하며 이 때 동기화가 매우 중요한데, 아래 상황에서 동기화 관련 문제가 자주 발생합니다.
여러 프로세스가 동일한 공유 자원에 동시에 접근하여 데이터 무결성이 훼손될 때, 프로세스 간 실행 순서가 올바르지 않을 때, 문제를 방지하고 해결하기 위해 운영체제는 세마포어와 같은 동기화 메커니즘을 제공합니다.
2. 세마포어(Semaphore)
세마포어는 프로세스 간 동기화를 구현하는 데 널리 사용되는 기본 도구 중 하나입니다. 세마포어는 공유 자원에 대한 접근을 제어하기 위해 사용하는 정수 값으로, 자원의 사용 가능 상태를 나타냅니다.
동작 원리는 다음과 같습니다. 세마포어 값을 1 감소시키며, 세마포어 값이 0 이하가 되면 프로세스가 대기 상태로 전환하는 P연산과 세마포어 값을 1 증가시키며, 대기 중인 프로세스가 있다면 깨워 실행을 재개하는 V연산이 있습니다.
여러 프로세스가 서버의 하나뿐인 프린터를 공유한다고 가정하겠습니다. 프린터를 사용하려는 프로세스는 먼저 P 연산을 호출하여 자원을 요청합니다. 사용이 끝난 프로세스는 V 연산을 호출하여 자원을 해제하고, 대기 중인 프로세스를 깨웁니다.
세마포어 유형으로는 0과 1의 값만 가지며, 주로 상호 배제를 구현하는 락(Lock)으로 사용되는 이진세마포어, 특정 자원의 개수를 추적하여 관리하며, 여러 개의 동일 자원이 있는 경우 활용되는 카운팅 세마포어가 있습니다.
3. 모니터(Monitor)
세마포어보다 고수준의 동기화 기법으로 보다 쉽게 자원을 관리할 수 있도록 설계된 동기화 메커니즘입니다. 모니터는 자원 접근 시 한 번에 하나의 프로세스만 코드 실행을 허용하여 충돌을 방지합니다.
세마포어와 모니터의 차이점은 다음과 같습니다. 세마포어는 개발자가 동작을 직접 제어해야 하므로 관리가 복잡할 수 있는 반면 모니터는 운영체제가 동기화를 자동으로 처리하여 코드가 더 직관적이고 관리가 용이합니다.
4. 교착 상태(Deadlock)
교착 상태는 두 개 이상의 프로세스가 서로 자원을 점유한 채, 상대방이 점유한 자원을 기다리며 무한히 멈춰 있는 상태를 의미합니다.
교착 상태는 다음 네 가지 조건이 모두 충족될 때 발생합니다. 자원은 한 번에 하나의 프로세스만 사용할 수 있는 상호배제 상태에서, 자원을 점유한 프로세스가 추가 자원을 요청하며 대기합니다. 할당된 자원은 강제로 회수되지 않으며, 프로세스 간 자원 요청이 순환적으로 연결되는 상황입니다.
5. 교착 상태 해결 방법
교착 상태를 방지하거나 해결하기 위한 주요 방법은 다음과 같습니다
5.1. 예방
교착 상태 조건 중 하나 이상을 만족하지 않도록 시스템을 설계합니다. 순환 대기를 방지하기 위해 자원에 고유한 순서를 부여하면 됩니다.
5.2. 회피
교착 상태 가능성을 분석하여 자원 요청을 안전하게 처리합니다. 은행가 알고리즘은 프로세스의 자원 요청이 시스템의 안정성을 해치지 않는 경우에만 자원을 할당하는 방식입니다.
5.3. 탐지 및 복구
교착 상태 발생 여부를 탐지한 후, 프로세스를 종료하거나 자원을 회수하여 문제를 해결합니다.
6. 세마포어와 교착 상태의 실제 사례
DBMS에서 다중 트랜잭션이 동일 데이터에 접근하면 교착 상태가 발생할 수 있습니다. 이를 방지하기 위해 락 타임아웃 설정이나 트랜잭션 우선순위 조정을 해야됩니다.
다중 스레드 웹 서버에서 클라이언트 요청 처리 중 리소스를 과도하게 점유하면 성능 저하와 교착 상태가 초래될 수 있는데, 스레드풀과 세마포어를 조합하여 자원을 효율적으로 관리합니다.
세마포어와 모니터는 서버 환경에서 교착상태에 빠지지 않기 위한 안정적인 시스템 운영을 위한 중요한 기술입니다. 서버관리 하실 때 유의하시기 바랍니다.