[OS] 6. Synchronization
Synchronization, 동기화는 메모리에 대한 동기화를 의미한다. 컴퓨터가 singlecore가 아닌 이상 우리는 같은 데이터를 동시에 접근할 수 있는 가능성이 생긴다. 이 상황에 대해서 아무 조치도 하지 않는다면 우리가 의도한 대로 데이터를 조작할 수 없을 수 있다. 이를 방지하기 위해 사용하는 기법이 synchronization이다.
synchronization 기법을 이용해 data의 consistency를 보장할 수 있게 되는것이다.
Consumer-Producer Problem
대표적인 data inconsistency 상황으로 data를 만들어내는 producer와 data를 소비하는 consumer 사이의 관계에서 발생한다. 해결하는 간단한 예시로 producer는 circular bounded queue를 이용해 차례대로 데이터를 쌓아가고 consumer는 데이터를 차례대로 소비한다.
Race condition
번역하면 경쟁상황인데 한 메모리를 두고 두 프로세스가 경쟁을 하는 상황을 의미한다. 이 경쟁을 해결해주지 않으면 두 프로세스중 하나는 제대로 작업을 수행하지 못하게 될 것이다.
Critical Section Problem
프로세스는 다른 프로세스와 공유하는 메모리 공간을 작업해야 하는 상황이 생길 수 있다. 이때 그 공간을 critical section이라 한다. 한 프로세스가 critical section을 실행 할 때 다른 프로세스는 critical section을 실행할 수 없다.
프로세스의 구조를 이처럼 나눌 수 있는데 critical section을 실행할때 도입부를 entry section, 후반부를 exit section이라고 한다. entry section과 exit section을 통해 critical section의 독립된 실행을 보장해야 한다. 이후의 부분은 remainder section이라 한다.
Solution to Critical section problem
- Mutual Exclusion
번역하면 상호 배타성으로 한 프로세스가 critical section을 실행중일 때 다른 프로세스는 critical section을 실행할 수 없다는 뜻이다. - Progress
critical section을 실행중인 프로세스가 없을 때 critical section 실행을 기다리는 프로세스중 하나는 무조건 유한시간 내에 critical section을 실행해야 한다. - Bounded Waiting
process가 critical section 요청을 한 시점으로부터 실행까지 대기하는 시간에 제한이 있어야한다.Race condition for assigning PID
fork() 함수를 두 프로세스가 실행했을 때 다음 PID에 대해 critical section을 처리해주지 않으면 동일한 PID가 두 자식 프로세스에 할당될 수 있다.