My Boundary As Much As I Experienced

경쟁 상태(Race Condition) 본문

Computer Basics

경쟁 상태(Race Condition)

Bumang 2023. 9. 12. 07:58

여러 프로세스가 하나의 공유 자원에 접근하려 할 때 발생하는 문제이다.

데이터의 최종 상태는 마지막에 접근한 프로세스에 따라 달라진다고 한다.

이런 문제 때문에 상호 배제(Mutual Exclusion)이 필요하다.

 

 

컴퓨터 시스템에서 데이터 연산의 순서는 이렇다.

연산할 데이터를 저장 공간에서 가져온다. -> 연산한다. -> 연산한 결과를 저장 공간에 반영한다.

 

 

그런데 여러 실행 주체가 1개의 공통 데이터를 수정할 때 예상치 못한 경쟁 상태가 발생하는 것이다.

count++와 count--가 서로 참조해서 예상치 못한 값을 나오게 하는 예시.

 

 

경쟁 상태가 일어나는 경우

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

 

 

'Computer Basics' 카테고리의 다른 글

페이징 & 세그멘테이션  (0) 2023.10.05
세마포어(Semaphore) & 뮤텍스(Mutex)  (0) 2023.09.12
동기식 (Synchronous) / 비동기식 (Asynchronous) 이란?  (0) 2023.09.05
데드락(Deadlock)  (0) 2023.09.05
CPU Scheduling  (0) 2023.09.05