프로세스 동기화
컴퓨터 환경에서 여러 프로세스가 동시에 실행될 때, 공동의 목적을 올바르게 수행하기 위해 서로 협력하고 영향을 주고 받는다. 예를 들어, 워드 프로세서에서는 사용자 입력을 받는 프로세스,입력된 내용의 맞춤법을 검사하는 프로세스, 그리고 그 내용을 화면에 출력하는 프로세스가 있다. 이러한 프로세스들은 각기 독립적이지만 공동의 목적을 위해 서로 협력한다.
이렇게 협력하여 실행되는 프로세스들을 올바르게 관리하기 위해 프로세스 동기화가 필요하다.
< 프로세스 동기화란? >
프로세스 동기화는 한마디로 말하자면, 여러 프로세스 사이의 실행 순서를 조정하는 것이다. 이를 통해 다음과 같은 두 가지 중요한 기능을 수행한다.
- 실행 순서 제어 : 프로세스를 올바른 "순서대로" 실행하기
- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
※ 스레드 등 실행의 흐름을 갖는 모든 것도 동기화에 대상이며, 이를 통해 특정 자원에 한 개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하는 것을 보장한다.
< 동기화 예시 >
실행 순서 제어 예시: "Writer" 프로세스와 "Reader" 프로세스가 동시에 실행되고 있다고 가정해 보자. Writer 프로세스는 파일에 값을 쓰는 역할을 하고, Reader 프로세스는 해당 파일에서 값을 읽어 들이는 역할을 한다. 이 경우, Reader 프로세스가 Writer 프로세스가 파일에 값을 쓴 이후에야 실행될 수 있어야 한다. 이렇게 실행 순서를 제어하는 것이 프로세스 동기화의 첫 번째 요소이다.
상호 배제 예시: 두 프로세스가 동시에 한 계좌에 입금을 하는 상황을 생각해 보자. 프로세스 A는 2만 원을 입금하고, 프로세스 B는 5만 원을 입금한다. 이 두 프로세스가 동시에 계좌에 접근하면 잔액이 올바르게 갱신되지 않을 수 있다. 이런 상황을 방지하기 위해 한 번에 하나의 프로세스만 계좌에 접근할 수 있도록 하는 것이 상호 배제이다. 이것이 프로세스 동기화의 두 번째 요소이다.
프로세스 A가 실행되는 과정을 조금 더 자세히 표현해 보면 아래와 같이 나타낼 수 있다.
①계좌에 잔액을 읽어 들인다.
②읽어 들인 잔액에 2만 원을 더한다.
③더한 값을 저장한다.
마찬가지로 프로세스 B가 실행되는 과정은 아래와 같은 순서로 나타낼 수 있다.
①계좌의 잔액을 읽어 들인다.
②읽어 들인 잔액에 5만 원을 더한다.
③더한 값을 저장한다.
이제 프로세스 A와 B와 동시에 실행되었다고 가정해 보자. 당연히 실행 결과 17만 원이 계좌에 남을 것을 기대할 것이다. 하지만 동기화가 제대로 이루어지지 않은 경우 아래와 같이 전혀 엉뚱한 결과가 나올 수 있다.
왜 이런 일이 발생했을까? A와 B는 '잔액'이라는 데이터를 동시에 사용하는데, A가 끝나기도 전에 B가 잔액을 읽어 버렸기 때문에 엉둥한 결과가 나온 것이다. A와 B를 올바르게 실행하기 위해서는 한 프로세스가 잔액에 접근했을 때 다른 프로세스는 기다려야 한다. 아래와 같이 말이다.
이렇게 동시에 접근해서는 안 되는 자원에 동시에 접근하지 못하게 하는 것이 상호 배제를 위한 동기화 이다.
동시에 실행되는 프로세스나 스레드는 종종 공유 자원에 대한 접근이 필요하다. 이 공유 자원은 메모리,파일,데이터베이스 연결 등 다양한 형태를 가질 수 있다. 이런 공유 자원에 대한 접근이 잘못 관리되면 데이터 불일치와 같은 문제가 발생할 수 있다. 그래서 이를 방지하기 위해 프로세스 동기화를 통해 공유 자원에 대해 접근을 제어한다.
< 공유 자원과 임계 구역 >
공유 자원은 여러 프로세스나 스레드가 동시에 접근하려고 하는 자원이다. 이런 자원에 동시에 접근하면 데이터의 일관성이 깨질 수 있으므로, 이를 방지하기 위한 동기화 메커니즘이 필요하다.
이런 공유 자원을 접근하는 코드 영역을 임계 구역이라고 한다. 임계 구역은 한 번에 하나의 프로세스나 스레드만이 실행할 수 있어야 하는 부분이므로, 두 개 이상의 프로세스가 동시에 임계 구역을 실행하면 문제가 발생할 수 있다.
< 상호 배제 >
이러한 문제를 방지하기 위한 주요 동기화 기법 중 하나가 상호 배제 이다. 상호 배제는 한 번에 하나의 프로세스만이 임계 구역을 실행하도록 하는 동기화 기법이다. 상호 배제는 다양한 방법으로 구현될 수 있으며, 그 중 일부는 세마포어,뮤텍스,모니터 등의 동기화 메커니즘을 사용한다.
Reference : 혼자 공부하는 컴퓨터 구조+운영체제