Race Condition
- 공유 자원에 대해서 여러 프로세스 / 스레드가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태(동시 접근 시 자료의 일관성을 해치는 결과가 나타남)
Race Condition 발생 상황
멀티 프로세스 / 스레드 환경
- 멀티 프로세스 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터를 접근하여 조작하는 경우 혹은 멀티 스레드 환경에서 공통 자원을 병행하여 작업할 때 발생
문제점
-
이때 해당 환경에서 Race Condition 상태가 된다면 이 때 상호 배제(Mutal Exclusion)으로 다른 프로세스가 그 자원을 사용하지 못하도록 막게 됨
-
하지만 이렇게 상호 배제(Mutal Exclusion)가 되면 추가적으로 제어 문제가 발생해서 교착상태(DeadLock)의 문제가 생길 수 있음
-
그리고 이러한 문제로 인해서 프로세스들이 더 이상 진행되지 못하는 Starvation(기아상태)가 발생하는 문제를 야기할 수 있음
-
즉 위와 같이 멀티 프로세스 환경에선 Race Condition에서 다양한 문제가 발생할 수 있음
해결법
- 이를 해결하기 위해선 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법으로 해결할 수 있는데 이때 Semaphore, Mutex를 통해서 해결할 수 있음(자세한 내용은 해당 글에서 다룰 것)
커널 작업
- 커널 작업을 수행하는 도중에 인터럽트가 발생할 수 있음
문제점
- 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우 발생 가능
해결법
- 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록
커널모드?
커널모드
이 커널모드는 시스템 콜에 의해서 전환된 모드인데, 여기선 모든 종류의 명령이 다 실행됨
커널에서의 메모리, 프로세스, 장치 드라이버 등등 하드웨어 관련 작업등 여러가지 처리가 발생함
그렇기 때문에 이 커널모드에서도 역시 Race Condition 상태가 발생할 수 있고, 커널모드에서 다양한 작업이 처리되기 때문에 인터럽트가 발생할 수 있는 것임
프로세스의 System Call
- 프로세스가 System Call 하여 커널 모드로 진입하여 작업 도중, Syntax 변경이 이루어질 때
문제점
- 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우(프로세스2가 작업에 반영되지 않음)
해결법
- 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함