Programming/운영체제

프로세스 동기화

1. 프로세스 동기화

프로세스 동기화는 쓰레드 동기화를 의미한다.

1) Independent process vs Cooperating process

Cooperating process란 시스템 내 다른 프로세스와 영향관계에 있는 프로세스를 의미한다.

- 프로세스 간 통신 : 전자우편, 파일전송

- 프로세스 간 자원공유 : 메모리 상의 자료들, 데이터베이스 등

- 예 : 명절 기차표 예약, 대학 온라인 수강신청, 실시간 주식거래

2) Cooperating process에서 동기화 문제

Concurrent access는 공유하는 데이터에 대해 데이터 정합성 문제를 일으킬 수 있다. 즉, 데이터 오류가 발생할 수 있다. 

데이터 정합성이 유지되도록 Cooperating process의 실행 순서를 정해줄 필요가 있다.

 



2. 임계구역 문제

1) 예제 : BankAccount Problem(은행 계좌 문제)

부모님은 은행 계좌에 계속해서 입금을 하고, 자녀는 출금한다고 가정해보자.

입금(deposit)과 출금(withdraw)는 서로 독립적으로 일어난다.

보통 입출금 과정에 시간 지연이 발생하는데 그러면 잘못된 결과값이 출력된다.

Why? 공통 변수(common variable)에 대한 동시 업데이트(concurrent update) 때문이다!

 => 해결책 : 한번에 한 쓰레드만 업데이트하도록 만든다 -> 임계구역 문제

2) 임계구역 문제

임계구역 문제는 영어로 Critical-Section Problem이라 한다. 직역하면 치명적인 구간에 대한 문제라는 뜻이다.

  • Critical Section

Critical Section은 다중 쓰레드로 구성된 시스템에서 발생한다.

각각의 쓰레드가 critical section이라는 코드 구간을 갖고 있으며, 이 코드는 변수, 테이블, 파일을 쓰레드 간의 공유한다. 

여러 쓰레드가 하나의 공유된 변수에 접근하면서 데이터가 부정확해지는 문제가 발생하게 된다.

3) 프로세스/쓰레드 동기화 목적

 - 임계구역 문제 해결(잘못된 리턴값이 나오지 않도록)

 - 프로세스 실행 순서 제어 (내가 원하는 순서대로 프로세스가 실행되도록)

 - Busy wait 등 비효율성은 제거

4) 동기화 도구

a) Semaphores : 가장 전통적인 동기화도구

b) Monitors

c) Misc.