[OS/운영체제] Race Condition - 정의, 발생 이유, 해결법

·2021년 7월 31일
0

OS

목록 보기
11/11

Race Condition (경쟁 상태)

1. 정의

둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

두 개 이상의 프로세스가 공유 자원에 동시에 접근할 때 결과값에 영향을 줄 수 있는 상황으로, 동시 접근 시 자료의 일관성을 해치는 결과가 나타날 수 있다.


2. Race Condition이 발생하는 경우

1) 커널 작업을 수행하는 중 인터럽트가 발생하는 경우

  • 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우 ⇒ 사용자 프로세스는 해당 프로세스에 할당 받은 메모리에만 존재할 수 있지만 커널은 서로 다른 프로세스가 공유하기 때문에 발생

  • 해결법 : 커널모드에서 작업을 수행하는 동안 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다.

2) 프로세스가 시스템 콜(System Call)을 호출하여 커널 모드로 수행하는 도중 Context Switch가 발생하는 경우

  • 문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우

  • 해결법 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 한다.

3) 멀티 프로세서 환경에서 여러 프로세스가 공유 메모리 내 커널 안 변수에 접근하는 경우

  • 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우

  • 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 한다. ⇒ 매 순간 그 데이터에 접근하는 프로세스는 1개


3. Race condition 예방법

세마포어 (Semaphore) & 뮤텍스 (Mutex)



출처

https://github.com/haewon-park/csStudy/blob/9719e20415b6c58658e432b74bc02090b21db5c4/OS/Race%20condition.md

profile
당근먹고 자라나는 개발자

0개의 댓글