본문 바로가기
CS(Computer Science)/운영체제

[운영체제] 프로세스 동기화 & Race Condition

by whdgus928 2023. 1. 31.

프로세스 간에 동기화에 대해 알아보자

 

E-box S-box
CPU Memory
컴퓨터내부 디스크
프로세스 그 프로세스의 주소 공간

 

데이터가 저장되어 있는 storage box와 연산을 하는 execution box가 있다. 데이터를 s-box에서 읽어와서 연산을 하고 s-box에 다시 반영을 한다.

 

여기서 E-box가 여러 개인 경우가 생긴다.

저장공간을 혼자 사용하면 문제가 없는데 다른 실행박스와 공유한다고 하면 데이터 동기화 문제가 발생한다. 저장소에서 하나의 값에 대해서 한 실행박스는 1을 증가시키고 하나는 1을 감소시키려할 때 우리는 값은 변하지 않겠다라고 결과를 생각하게 된다. 하지만 실제 결과는 덧셈은 반영이 안돼고 1을 뺀 결과만 반영이 된다. 여러주체가 하나의 데이터에 동시에 접근하는 경우를 Race Condition이라고 한다. 사실 프로세스는 자기 주소 공간에만 접근하기 때문에 발생할 일이 없지만 커널에서는 발생할 수 있다.

 

OS에서 Race Condition 발생하는 경우

1.커널 수행 중 인터럽트 발생 시

커널이 cpu에서 실행중일때 인터럽트 들어오면 반영이 안된다. 문제를 해결하기 위해서 작업이 끝날때까지는 인터럽트를 처리하지 않는 방법이 있다.

 

2. 시스템 콜을 하여 커널 모드가 수행중인데 문맥 교환이 일어나는 경우

프로세스 B에서 값이 증가되기 전 카운트값을 읽었기 때문에 A의 연산은 반영이 안된다. 해결방법은 커널모드에서 수행 중일 때는 timer가 끝나도 cpu를 뺏지 않고 사용자 모드로 들어갈때 빼앗는 방식이다. 

 

3. CPU가 여러개인 경우

1,2의 방법으로는 해결이 안된다. 

방법 1: 한 번에 하나의 CPU만이 커널에 들어갈 수 있게 한다. 비효율적이다

방법 2: CPU가 데이터에 접근할 때 lock을 걸어서 다른 CPU의 접근을 막는다. 작업이 끝나면 unlock으로 접근할 수 있게 한다.

 

프로세스 Synchronization 문제

1. 공유 데이터의 동시 접근은 데이터의 불일치 문제를 발생시킬 수 있다.

2. 일관성 유지를 위해서는 협력 프로세스간의 실행 순서를 정해주는 메커니즘이 필요하다

3. Race Condition을 막기 위해서는 concurrent process는 동기화되어야 한다.

 

여러 개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우 Critical section 개념이 등장한다.

하나의 프로세스가 Critical section에 있을 때 다른 모든 프로세스는 Critical section에 들어갈 수 없어야 한다.

※ Critical section: 공유 데이터를 접근하는 코드

 

 

 

자료 출처

ABRAHAM SILBERSCHATZ ET AL., OPERATING SYSTEM CONCEPTS, NINTH EDITION, WILEY, 2013

반효경, 운영체제와 정보기술의 원리, 이화여자대학교 출판부, 2008

반응형

댓글