본문 바로가기
CS 지식/운영체제

[운영체제] Race Condition(경쟁 상태)

by CSEGR 2024. 8. 24.
728x90

✔️ Race Condition(경쟁 상태) 정의

Race Condition(경쟁 상태) 이란?

경쟁 상태두 개 이상의 쓰레드가 공유자원에 대해 접근하려고 서로 경쟁하는 것이다. 
다르게 말하면, 공유 자원에 대해 여러 쓰레드가 동시에 접근할 때, 접근 순서에 따라 결과값에 영향을 줄 수 있는 상태이다. 

 

✔️ Critical Section(임계 영역) 정의

Critical Section(임계 영역) 이란?

임계 영역이란 Race Condition이 일어날 수 있는 영역으로, 하나의 쓰레드가 특정 공유 자원을 사용할 때 다른 쓰레드가 접근하지 못 하는 구역이다. 
이 영역을 여러 쓰레드가 동시에 접근할 때 잘못된 결과를 만들 수 있다. 

 

✔️ Race Condition 발생하는 경우 및 해결책

1. 커널 작업을 수행하는 중 Interrupt(인터럽트) 발생

  • 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우
  • 해결책 : 커널모드에서 작업을 수행하는 동안, interrupt를 불가능하게 하여 CPU 제어권을 가져가지 못하도록 한다. 

2. 프로세스가 System Call(시스템 콜)을 하여 커널 모드로 작업을 수행 중 Context Switching(문맥 교환) 발생

  • 문제점 : 프로세스 A이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스 B로 넘어가 같은 데이터를 조작하는 경우
  • 해결책 : 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함. 

context switching 발생

3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때

  • 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
  • 해결책 : 커널 내부에 있는 각 공유 데이터에 접근할 때 마다, 그 데이터에 대해 lock/unlock 하여 데이터에 접근하지 못 하도록 함. 

 

임계 영역(Critical Section)에 대한 경쟁 상태(Race Condition)를 제거하기 위해,

공유자원에 대해 한 쓰레드에만 접근을 허락하도록 하는 상호배제(Mutual Exclusion)을 사용하여 경쟁상태를 막는다. 

 

#참고 

https://gyoogle.dev/blog/computer-science/operating-system/Race%20Condition.html

https://daily-progress.tistory.com/65#:~:text=2.,Condition)%20%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0&text=%EC%BB%A4%EB%84%90%20%EB%AA%A8%EB%93%9C%EC%97%90%EC%84%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC,%EC%83%81%ED%83%9C%EC%9D%98%20%EA%B0%80%EB%8A%A5%EC%84%B1%EC%9D%B4%20%EC%9E%88%EB%8B%A4.

https://velog.io/@kku64r/deadlock

728x90