Race Condition

gang_shik·2022년 3월 30일
0

Operating System

목록 보기
9/14
post-custom-banner

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 제어권이 다른 프로세스에게 넘어가지 않도록 함
profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다
post-custom-banner

0개의 댓글