작성완료

병행 프로세스와 상호 배제
The blog discusses concurrent processes and mutual exclusion in computing.
병행 프로세스 (Concurrent Process)
병행 프로세스는 두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것을 의미한다.
- 한정된 컴퓨터 하드웨어나 자원을 공유하고, 동시에 작업을 수행하기 위해 사용하는 개념이다.
임계 구역 (Critical Section)
임계 구역은 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 지점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 지정된 공유 자원(영역)을 의미한다.
- 임계 구역에는 하나의 프로세스만 접근할 수 있으며, 해당 프로세스가 자원을 반납한 후에만 다른 프로세스가 자원이나 데이터를 사용할 수 있다.
- 임계 구역의 문제를 해결하기 위해서는 상호 배제(Mutual Exclusion), 진행(Progress), 한계 대기 (Bounded Waiting)라는 3가지 조건을 충족해야 한다.
상호 배제 : 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.
진행 : 임계 구역에 아무 것도 접근하지 않았다면 접근이 가능하다.
한계 대기 : 하나의 프로세스가 임계 구역을 진입하기 위해 무한정 대기하지 않아야 한다.
동기화 기법 (Synchronization)
두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는것으로, 상호 배제의 한 형태이다.
세마포어 (Semaphore)
- '신호기', '깃발'을 뜻하며, 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법이다.
- 세마포어는 다익스트라(E.J.Dijkstra)가 제안하였으며, P와 V라는 두 개의 연산에 의해서 동기화를 유지시키고 상호 배제의 원리를 보장한다.
- 세마포어의 변수는 0과 1 혹은 0과 양의 값을 가진다.
모니터 (Monitor)
- 모니터는 동기화를 구현하기 위한 특수 프로그램 기법으로 특정 공유 자원을 프로세스에게 할당하는 데 필요한 데이터와 이 데이터를 처리하는 프로시저로 구성된다.
- 자료 추상화와 은폐 개념을 기초로 하며 공유 자원을 할당하기 위한 병행성 구조로 이루어져 있다.
- 모니터의 경계에서 상호 배제가 시행된다.
- 모니터에는 한순간에 하나의 프로세스만 진입하여 자원을 사용할 수 있다.
교착상태 (Dead Lock)
상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미한다.
교착상태 발생의 필요 충분 조건
교착상태가 발생하기 위해서는 아래 네 가지 조건이 충족되어야 하는데, 이 네 가지 조건 중 하나라도 충족되지 않으면 교착상태가 발생하지 않는다.
- 상호 배제 (Mutual Exclusion)
한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다. - 점유와 대기 (Hold and Wait)
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다. - 비선점 (Non-preemption)
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다. - 환형 대기 (Circular Wait)
공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.
교착상태의 해결 방법
예방 기법 (Prevention)
- 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법이다.
- 교착상태 발생의 네 가지 조건 중에서 어느 하나를 제거함으로써 수행된다.
- 자원의 낭비가 가장 심한 기법이다.
회피기법 (Avoidance) - 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법이다.
- 주로 은행원 알고리즘이 사용된다.
- 은행원 알고리즘(Banker's Algorithm) : E.J.Dijkstra가 제안한 것으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데에서 유래한 기법이다.
발견 기법 (Detection) - 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것이다.
- 교착상태 발견 알고리즘과 자원 할당 그래프 등을 사용할 수 있다.
회복기법 (Recovery) - 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것이다.