#6-1. Process Synchronization
: os에서의 race condition 3가지의 예시와 해결방법에 대해 알아보도록 하자!

 

 

[INTRO]

* 데이터의 접근

 

 

 

# Execution Box : 연산하는곳
  Storage Box   : 데이터가 저장된곳

 

#데이터를 연산을하고 수정을하고 데이터를 저장하는 방식은 누가 먼저 읽어 갔느냐에 따라 결과가 달라질수도 있고, 그렇게 했을때 생기는 문제를 Synchronization 문제라고 하고, 이것을 해결할수 있는 방법을 여기서 공부한다.

 

* Race Condition (경쟁상태)

 

 

 

# count++ 와 count--가 동시에 접근할때 count에 문제가 생긴다. 이런 경우, Race Condition의 가능성이 있다.

# 이것을 조율해줘야 하는 방법이 필요하다!!! => Synchronization

 

 

# os에서 race condition은 언제 발생 하는가?

 

 

# user모드에서는 괜찮던게 os의 kernel에서는 여러 프로세스들이 공유하는 데이터들이 있기 때문에 문제가 생긴다. 이 예시들을 자세히 알아보자

 


* os에서의 race condition (1/3)
: kernel mode 수행중에 interrupt 처리가 들어왔을때.

 

 

 

 

# count++(1 증가 시키는 문장) :
1. load : 메모리에 있는 값을 cpu 안에있는 register로 불러 들이고,
2. Inc : 그 값을 1 증가 시키고,

3. Store : 그 다음에 레지스터 값을 다시 메모리에 저장.

 

# 그러나, 저 루틴 수행 과정중 interrupt가 들어왔을 경우에 저 작업을 잠시 멈추고 interrupt 처리 루틴으로 넘어가게 된다.

(Interrupt Handler : 근데 이게 kernel 코드이다.)

 

# 이렇게 되면 감소시킨 것을 반영이 안되고 증가하는 것만 반영이 되게 된다.

 

 

???) 어떻게 해결 하는가?
: disable, enable interrupt로 해결 한다!


저런 오류가 일어 나지 않게 count++가 시작되면 disable interrput가 시작되어 interrupt를 받아들이지 않는다.

 count++연산이 끈나면 enable interrupt가 시작되어 다시 interrupt를 받을수 있는 상태로 전환 된다.

 

 

* os에서의 race condition (2/3)
: 공유 공간인 kernel mode에서 cpu할당시간이 끈났을 때

 

 

 

 

# 본인의 코드만 실행하는것이 아니라 System call을 통해서 os에 서비스를 대신해 달라고 하는 경우가 있다. 그래서 프로그램은 user mode와 kernel mode를 번갈아 가면서 실행을 하게 된다.

 

 

# A라는 프로그램은 cpu를 독점적으로 쓰느게 아니라 할당시간이 있고, 할당시간이 끈나면 cpu를 반납하게 되어 있다.

 

# 이 그림에서는 A가 cpu를 쓰다가 할당시간이 끈나서 cpu가 B한테 넘어간 것 이다. 그래서 B가 cpu를 쓰다가 본인의 할당시간이 끈나서 다시 A한테 넘어오는 그림이다.

 

# 여기서 문제점은 user mode일때 cpu가 반환되면 상관없는데, system call로 이해 kernel mode로 들어간 후에 cpu사용권을 반납했다. A, B 모두 kernel mode라는 공유공간에서 count를 건드리는 작업을 하기 때문에 문제가 발생하게 된다.

 

# 이 경우에는 논리적으로는 +2가 증가해야 되는데 B의 +1은 반영이 되지 않게 되는 문제가 발생한다.

 

???) 어떻게 해결하고 있는가?
: 프로세스가 kernel mode에 있을때는 할당시간(time quantum)이 끈나도 cpu를 뺏기지 않도록 하고 있다.


 

* os에서의 race condition (3/3)
: cpu가 여러개 있는 환경.(즉, 작업 주체가 여러개 있는 상황)

 

 

 

???) 어떻게 해결 할까?
: 데이터에 lock 과 unlock을 걸어서 이중접근을 방지 시킨다.


 

* Process Synchronization 문제

 

 


* The Critical-Section Problem
cf> Critical-Section(임계구역) : 공유 데이터를 접근하는 코드(critical section은 코드임에 주의!!!)

 

 


 
# 다음시간에 이 문제를 해결하는 알고리즘을 알아보자!

'cs > os' 카테고리의 다른 글

#6-3. Process Synchronization  (0) 2018.01.21
#6-2. Process Synchronization  (0) 2018.01.15
#5-3. CPU SCHEDULING  (0) 2018.01.09
#5-2. CPU SCHEDULING  (1) 2018.01.08
#5. CPU SCHEDULING  (0) 2018.01.04

+ Recent posts