CS/Operating System

[Operating System] Race Condition(경쟁 상태)

hanseongbugi 2024. 4. 8. 17:47

Race Condition?

  • 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과 값에 영향을 줄 수 있는 상태
  • 자원 동시 접근 시 자료의 일관성을 해치는 결과가 나타남
  • 공유 메모리를 사용하는 프로세스간에는 경쟁 상태가 발생할 수 있으며 이에 대한 해결책은 동기화다

Race Condition 발생하는 경우

  • 커널 작업 수행 중 인터럽트 발생
    • 커널 모드에서 데이터를 로드하여 작업을 수행하다 인터럽트가 발생하여 같은 데이터를 조작하는 경우
    • 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다.
  • 프로세스가 시스템 콜을 통해 커널모드로 진입하여 작업을 수행하는 중 문맥 교환이 발생하였을 때
    • 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우
    • 프로세스2가 진행한 작업이 데이터에 반영되지 않는 경우
    • 해결법 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함
  • 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때
    • 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
    • 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법

Race Condition 예시

  • Producer-Consumer가 있을 때 Producer는 공유 메모리에 데이터를 쓰는 스레드이고, Consumer는 공유 메모리에서 데이터를 가져오는 스레드인 경우
int counter = 0; // 전역 변수
item nextProduced;
item nextConsumed;

// Producer thread
while(true){
	while(conter == BUFFER_SIZE){
    	buffer[in] = nextProduced;
        in = (in + 1) % BUFFER_SIZE;
        counter++;
    }
}

// Consumer thread
while(true){
	while(counter == 0){
    	nextConsumed = buffer[out];
        out = (out + 1) % BUFFER_SIZE;
        counter--;
    }
}
  • 위 코드에서 counter 변수에서 race condition이 발생할 수 있다.
    • counter 변수가 의도한 값과 다를 수 있다.
  • 메모리 공유에 의해 문제가 발생

Race Condition 해결 방법 (동기화)

  • 경쟁 상태는 메모리 공유에 의해 발생하므로 동기화를 통해 해결 할 수 있음
  • 동기화란 스레드의 순차적인 실행을 보장하는 것
  • 공유 변수가 존재하는 공간을 임계 구역(Critical Section)이라고 하며, 임계 구역에 하나의 스레드만 접근할 수 있는 것을 상호 배제라고 한다.

임계 구역(Critical Section)

  • 임계 구역은 특별한 공간이 아닌 코드의 일부분을 의미
  • 경쟁 상태가 발생할 수 있는 코드의 조각을 임계 구역이라고 부른다.
    • 스레드 또는 프로세스간 공유하고 있는 변수가 있는 코드 조각
  • 임계 구역에서 경쟁 상태가 발생하는 것을 임계 구역 문제(Critical Section Problem)이라고 함
  • 임계 구역은 3가지 조건을 만족해야 함
    1. 상호 배제(Mutual Exclusion) : 하나의 자원에는 하나의 프로세스만 접근할 수 있다.
    2. 진행(Progress) : 임계 구역이 비어있는 경우 자원을 사용할 수 있어야 한다.
    3. 한계 대기(Bounded Waiting) : 기다리면 언젠가 임계 구역에 진입할 수 있어야한다.

 

 

 

출처

https://charles098.tistory.com/88

 

[ 운영체제 ] 경쟁상태(Race Condition)와 동기화(Synchronization)의 필요성, 임계 구역(Critical Section)

Race Condition이란, 여러 개의 프로세스가 공유 자원에 동시 접근할 때 실행 순서에 따라 결과값이 달라질 수 있는 현상이다. 이 한 문장이 race condition에 대한 모든 것이다. Race condition을 번역하면 '

charles098.tistory.com

https://github.com/gyoogle/tech-interview-for-developer

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com