티스토리 뷰

경쟁 상태(Race Condition)란 ?


1. 경쟁 상태(Race Condition)

공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과 값에 영향을 줄 수 있는 상태를 의미한다. 

공유 자원에 여러 프로세스가 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있다. 

 


2. 경쟁 상태(Race Condition) 가 발생하는 경우

✔ 커널 코드 실행 중에 인터럽트가 발생한 경우

커널 모드에서 데이터를 로드 하여 작업을 하던 도중 인터럽트가 발생하여 같은 데이터를 조작하는 경우에 발생할 수 있다.
커널이 가진 전역변수는 모든 프로세스의 공유물이므로 경쟁상태의 가능성이 있다. 

 

✔ 프로세스가 시스템 콜(System call)을 하여 커널 모드로 진입해서 작업을 수행하는 도중에 문맥 교환이 일어난 경우 

프로세스1이 커널 모드에서 데이터를 조작하던 도중 시간이 초과되어 CPU제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우를 말한다.

 

멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
또는 멀티 스레드 환경에서 공통 자원을 병행하여 작업하는 경우

멀티프로세스 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우에 발생할 수 있다.

 


3. 임계 영역(Critical Section)

운영체제에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유 자원에 접근하는 프로그램 코드 부분을 의미한다.  프로세스간에 공유자원을 접근하는데 있어서 문제가 발생하지 않도록 공유자원의 독점을 보장해줘야 하는 영역이다. 

 

임계 영역 문제를 해결하기 위해서는 아래의 3가지 조건을 충족해주어야 한다. 

 

✔ 상호 배제(Mutual Exclusion)

한 프로세스가 자신의 임계 영역을 수행 중인 경우 다른 모든 프로세스들은 그 임계 영역에 들어가지 못하게 한다.

 

✔ 진행(Progress)

임계 영역에 들어간 프로세스가 있지 않은 상태에서 임계 영역에 들어가려는 프로세스가 있으면 들어가게 해준다. 즉, 임계 영역에 아무도 진입하지 못하면 안되며 다음에 어떤 프로세스가 임계 영역에 진입해야 하는지는 유한한 시간에 결정되어야 한다. 

 

✔ 한정 대기(Bounded Waiting)

프로세스가 임계 영역에 진입하기 위해 무한 정으로 기다리는 현상(Starvation)이 발생해서는 안된다. 

 

 

 

댓글