process synchronization : 임계구역 (critical section) & 경쟁상태 (race condition)
목차
process synchronization : 임계 구역 (critical section) & 경쟁상태 (race condition)
공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있습니다.
process synchronization은 일관성(consistency)을 위해 협력 프로세스 간의 실행 순서를 정해주는 메커니즘이 입니다.
임계 구역 (critical section)
임계 구역이란 한 번에 하나의 프로세스만 액세스 할 수 있는 코드 영역을 말합니다.
프로세스는 일반적으로 4가지 코드 영역으로 나뉩니다.
do {
entry section
critical section
exit section
remainder section
} while (TRUE);
entry section
- critical section에 진입하기 위해 진입허가를 요청하는 영역입니다. critical section에 접근하는 것을 제어(lock)합니다.
critical section
- 하나의 프로세스 만 접근할 수 있는 영역입니다.
exit section
- lock을 해제하는 등, 더 이상 critical section에 존재하지 않을 때 알리는 역할을 하는 영역입니다.
remainder section
- 입력 섹션, 중요 섹션 및 종료 섹션을 제외한 코드의 다른 부분을 나머지 섹션이라고 합니다.
둘 이상의 프로세스가 동시에 임계 구역에 접근할 수 없습니다. 따라서, 각 프로세스는 자신이 임계 구역에 들어가려면 entry section에서 들어가도 되는지 요청을 해야하고, 이미 다른 프로세스가 임계구역에서 작업을 하고 있다면 entry section에서 기다리고 있다가 exit section에서 들어가도 된다는 신호를 받으면 임계구역에 진입하는 식으로 동기화를 해야 합니다.
여러 프로세스가 동시에 임계 구역에 접근을 한다면 race condition
과 같은 문제가 발생할 수 있습니다.
경쟁 상태 (race condition)
race condition 이란 여러 프로세스가 공유 데이터를 동시에 접근할 때 실행 순서에 따라 실행 결과가 달라지는 상황입니다.
두 개의 스레드가 각각 전역 변수의 값을 1씩 증가시킨다고 가정해보겠습니다. 여기서 전역 변수는 임계 구역이 됩니다.
이상적인 작업 순서는 다음과 같습니다.
두 개의 스레드가 각각 전역 변수의 값을 1씩 증가시켜 예상대로 2라는 값이 되었습니다.
다음은 문제가 되는 상황입니다.
최종 결과는 2가 아닌 1이 되었음을 확인할 수 있습니다.
위와 같이 동시에 같은 공유 영역에 접근하여 연산을 수행하면 race condition이 발생하여 예상치 못한 결과가 일어날 수 있습니다.
이를 해결하기 위해선 상호 배제(Mutual Exclusion)
와 같은 동기화 작업이 필요합니다.