본문 바로가기

C.E/OS

Process Synchronization - Process Synchronization

Process Synchronization, 프로세스 동기화

     

Cooperation Process, 협력적 프로세스는 시스템내에서 실행중인 다른 프로세스의 실행에 영향을 주거나 영향을 받는 프로세스를 말한다.

     

간단하게 서로 다른 Process들이 서로 영향을 준다는 얘기다.

     

이러한 Cooperation Process(이하 ,CP)를 위한 방법으로는 크게 두 가지가  있다.

     

1. 논리적 데이터 주소를 공유

     

2. 같은 데이터 파일을 공유

     

첫 번째 방법이 우리가 흔히 알고 있는 Thread를 말한다.

     

사실상 두 가지라고 써있지만 실질적으로는 같은 데이터를 사용하는 것을 CP라고 하는 것이다.

     

하지만 공유된 데이터를 동시에 접근하면 데이터의 불일치가 발생한다.

     

이러한 데이터 불일치를 설명하기 좋은 경우가 Bounded-Buffer(한정 버퍼)상의 Producer&Consumer Problem이다.

     

사실 소비자와 생산자에 관한 코드도 있지만 설명의 편의성을 위해서 제외하고 가도록 하겠다.

     

생산자와 소비자는 공통된 변수 Count를 가지고 있다. 생산자는 물건을 생산(Counter++)하고 소비자는 물건을 소비(Counter--)한다.

     

만약의 생산자와 소비자의 코드가 아무런 대비없이 동시에 돌아가고 있다면 어떻게 될까?

     

Counter++와 Counter--는 보기에는 한번에 작동되어 보이지만 실질적인 기계어로 살펴보면 여러 단계를 걸치게 된다.

     

(반면 어떠한 Interruption없이 돌아가는 것을 Atomic Operation이라고 한다)

     

 

     

초기에 Counter가 5로 초기화 되어있고 생산자와 소비자 코드가 각각 한번씩 동시에 돌아간다고 가정해보자.

     

이때 서로의 코드가 동시에 작동하기 때문에 아래와 같은 순서로 작동할 가능성이 존재한다.

     

 

     

이와 같이 동작 했을 경우 마지막 Counter의 값은 4가 된다. 우리가 생각했을때는 생산자 코드 한번, 그리고 소비자

     

코드가 한번 실행되어서 Counter의 값은 그대로 5가 되어야 한다. 하지만 막상 결과를 확인해 보니 위와 같은 결과가 나왔다.

     

게다가 만약 가장 마지막 두 줄의 순서가 바뀌다면 결과값은 다시 6이 될것이다.

     

이와 같이 동시에 여러 개의 스레드가 동일한 자료를 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서에

     

의존하는 상황을 Race Condition이라고 한다.

     

이러한 Race Condition을 제거하기 위한 메커니즘이 Process Synchronization, 프로세스 동기화 이다.