프로세스 동기화

동기화란

프로세스 동기화란?

프로세스들 사이의 수행 시기를 맞추는 것

동시다발적으로 실행되는 많은 프로세스들은 서로 데이터를 주고받으며 협력하며 실행되는데, 아무렇게나 마구잡이로 실행되면 안된다.

실행 순서 제어를 위한 동기화

Reader 프로세스, Writer 프로세스가 있다고 가정 시, Reader 프로세스는 일반적으로 Writer 프로세스와 공유하는 자원인 Book.txt에 값이 존재한다는 조건을 만족해야 실행이 가능하다. 따라서 Writer 프로세스 이후에 Reader 프로세스가 실행되어야하며, 이처럼 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것이 실행 순서 제어를 위한 동기화이다.

상호 배제를 위한 동기화

상호 배제(mutual exclusion)는 공유가 불가능한 자원의 동시 사용을 피하기 위한 알고리즘이다.

계좌 잔액이라는 자원에 2만원을 추가하는 프로세스 A, 5만원을 추가하는 프로세스 B가 있다고 가정 시, 일반적으로 프로세스 A와 B를 동시에 실행했다고 가정하면 계좌 잔액에서 7만원이 추가될 거라고 예상할 것이다. 그러나 만약 프로세스 A가 계좌 잔액에 2만원을 더했지만 그 결과값을 계좌 잔액에 반영하기 전 문맥이 교환되어 프로세스 B가 실행된다면, 계좌 잔액은 결과적으로 5만원만 추가될 것이다.

이 경우에 계좌 잔액이라는 자원은 동시에 접근해서는 안 되는 자원이고, 이런 자원에 동시에 접근하지 못하게 하는 것이 상호 배제를 위한 동기화이다.

생산자와 소비자 문제

상호 배제를 위한 동기화 문제에 대한 유명한 예시 중 하나로, 물건을 계속해서 생산하는 생산자와 물건을 계속해서 소비하는 소비자가 있다고 가정하자. 둘은 물건의 ‘총합’ 이라는 자원을 공유하고 있다.