상호배제는 병행 프로세스에서 프로세스 하나가 공유 자원을 활용할 때 다른 프로세스들이 같은 일을 할 수 없게 만드는 수단이다. 예시를 들면, 특정 공유 자원 두 가지가 있다고 하자 짧은 시간 동안 프로세스 하나만 사용할 수 있으면 이때 공유 자원에 있는 데이터에 접근하는 다른 프로세스를 프로세스 하나가 해당 데이터에 접근할 수 없게 하는 것을 상호배제라고 한다.
상호배제의 개념
프로세스가 어떤 자원을 활용할 때 다른 프로세스가 해당 자원을 활용하지 못하도록 통제하는 능력에 따라 프로세스 동기화의 성공이 결정된다. 따라서 경쟁 관계에 있는 프로세스들은 상호배제가 필수이다.
상호배제의 개념을 구체적인 예시와 함께 살펴보자. 예시를 들어 두 프로세스 p1과 p2를 같은 컴퓨터에서 실행한다고 하자. 여기서 두 프로세서가 같은 순간에 활용할 수 없는 공유 자원을 임계 자원이라고 한다. 또 임계 자원에 접근하고 수행하는 프로그램 코드 부분을 임계 영역이라고 한다. 프로세스가 공동 변수를 읽고, 테이블을 최신화하고, 파일을 고치는 등 공유 데이터에 접근할 때 임계 영역에 있다고 표현한다.
1단계에서 예정된 p1이 공유 메모리에 들어가고, 2단계에서 인터럽트가 일어나서 p1 작업을 완수하기 전에 p2 수행을 예약한다. p2가 공유 메모리에 진입하려고 도전하지만, p1을 공유 메모리에서 실행하므로 p1을 종료할 때까지 p2를 차단한다. 따라서 상호배제는 프로세스가 수정할 수 있는 공유 데이터에 접근할 때만 적용하고, 단순 읽기 등을 할 때는 동시에 실행하도록 허가해야 한다.
이런 상호배제는 프로세스가 수정할 수 있는 공유 데이터에 접근할 때만 적용한다. 프로세스가 다른 프로세스와 부딪히지 않는 계산을 할 때는 프로세스를 같은 순간에 실행하도록 허가해야 하므로 다음 네 가지 조건을 충족시켜야 한다.
- 공유 자원을 활용하는 프로세스만 다른 프로세스를 차단할 수 있다.
- 두 프로세스는 동시에 공유 자원에 들어갈 수 없다.
- 프로세스가 공유 자원을 활용하려고 너무 오래 대기해서는 안 된다.
- 프로세스의 속도나 프로세서 수에 영향을 받지 않는다.
읽기 연산은 공유 데이터에 같은 순간에 접근해도 문제가 일어나지 않는다. 하지만 변수나 파일을 프로세스별로 하나씩 차례로 읽거나 쓰도록 해야 하는데, 공유 자원을 동시에 활용하지 못하게 수행을 통제하는 방법을 동기화라고 한다. 동기화는 순차적으로 재활용할 수 있는 자원을 공유하려고 상호작용하는 프로세스 사이에서 등장한다. 동기화로 상호배제를 보장할 수는 있지만, 이 과정에서 교착 상태와 기아 상태가 일어날 수 있다.
임계 영역
임계 영역을 활용하면 간단하게 상호배제를 재현할 수 있는데, 이는 자물쇠와 열쇠 관계로 정의할 수 있다. 프로세스가 진입하지 못하는 임계 영역은 자물쇠로 잠근 상태와 동일하다. 프로세스가 임계 영역에서 작업을 실행하려면, 먼저 열쇠를 얻어 자물쇠를 열어야 한다. 또 임계 영역은 임계 영역에 있는 프로세스가 열쇠를 반환할 때까지 다른 프로세스는 잠근 상태로 있어야 한다. 곧, 임계 영역에 다른 프로세스가 있으면 이 프로세스는 다른 프로세스가 임계 영역에 진입하지 못하게 진입 상호배제를 실행해야 한다. 그리고 임계 영역에서 나오는 프로세스는 탈출 상호배제를 실행하여 다른 프로세스가 임계 영역에 진입할 수 있도록 해야 한다.
임계 영역을 활용한 상호배제는 어떤 프로세스가 열쇠를 이용할 수 있는지 체크하려고 검사하는 동작과 다른 프로세스의 이용을 금지하는 동작으로 구분할 수 있다. 물론 이 두 동작은 단일 머신 사이클에서 진행해야 한다. 첫 번째 프로세스가 열쇠를 사용할 때 다른 프로세스도 열쇠를 이용하면, 임계 영역에 프로세스가 2개 있어 상호배제를 보장하지 않기 때문이다.
임계 영역은 다음 세 가지 조건을 충족해야 한다.
- 한정 대기는 다른 프로세스가 임계 영역을 무제한으로 기다리는 상황을 예방하려면 임계 영역에 한 번 들어갔던 프로세스는 다음에 임계 영역에 다시 들어갈 때 제한을 둔다.
- 상호배제는 어떤 프로세스가 임계 영역에서 작업 중이면 다른 프로세스는 임계 영역으로 진입할 수 없다.
-진행은 임계 영역은 임계 영역에 프로세스가 없는 상태에서 여러 프로세스가 진입하려고 할 때는 어떤 프로세스가 진입할지 적절히 선택해야 한다.
임계 영역에는 많은 수의 프로세스가 접근할 수 있지만, 어느 한순간에는 프로세스 하나만 이용할 수 있다. 따라서 어떤 프로세스가 임계 영역에 진입하면 다른 프로세스는 임계 영역으로 들어갈 수 없어야 한다. 예시를 들면, 입력과 출력 두 프로세스가 버퍼를 공동으로 이용한다면 버퍼가 임계 영역이 되므로 두 프로세스는 동시에 버퍼를 이용하면 안 된다. 특히 공유 데이터에 여러 프로세스가 같은 순간에 접근하면 시간 차이로 생각지 못한 결과를 만들 수 있다. 그래서 임계 영역에는 반드시 한 번에 프로세스 하나만 들어갈 수 있어야 한다. 임계 영역은 수행 구간에 해당하므로 임계 영역에서는 일을 빠르게 실행하고, 특정 프로세스가 임계 영역에 오래 머물거나 무한 루프 등에 빠지지 않도록 조정해야 한다.
임계 영역을 어떻게 구현했느냐에 따라 상호배제의 성공 여부가 결정된다.
요약 및 결론
• 병행 프로세스에서 프로세스 하나가 공유 자원을 사용할 때 다른 프로세스들이 동일한 일을 할 수 없게 만드는 것을 상호배제라고 한다.
• 상호배제는 프로세스가 수정할 수 있는 공유 데이터에 접근할 때만 적용하고, 단순 읽기 등을 할 때는 동시에 수행하도록 허용해야 한다.
• 임계 영역은 상호배제를 구현하는 방법으로, 자물쇠와 열쇠 관계로 정의할 수 있다.
• 임계 영역은 한정 대기, 상호배제, 진행의 세 가지 조건을 충족해야 한다.
• 임계 영역에는 많은 수의 프로세스가 접근할 수 있지만, 어느 한순간에는 프로세스 하나만 사용할 수 있다.
• 임계 영역을 어떻게 구현했느냐에 따라 상호배제의 성공 여부가 결정된다.
'IT 및 프로그래밍' 카테고리의 다른 글
데이터 통신과 컴퓨터 네트워크의 용어의 정의 - 1 (0) | 2024.10.24 |
---|---|
운영체제의 구조에 대하여 (0) | 2024.10.22 |
교착 상태와 기아 상태 중 교착 상태의 해결 방법 (0) | 2024.10.22 |
교착 상태와 기아 상태 중 교착 상태의 개념과 발생원인 (0) | 2024.10.22 |
병행 프로세스와 상호배제 중 병행 프로세스에 대하여 (0) | 2024.10.22 |
프로세스와 스레드 중 스레드의 구현에 대하여 (0) | 2024.10.22 |
프로세스와 스레드 중 프로세스의 관리에 대하여 - 2 (0) | 2024.10.22 |
운영체제의 발전 과정과 유형 중 유형에 대하여 (0) | 2024.10.22 |