경쟁 상태(Race Condition)에 대해 설명해 주세요
Last updated
Last updated
여러 개의 프로세스나 스레드에 의해 공유 자원에 대한 접근이 이루어질 때, 그 결과 값이 접근 순서에 따라 달라지는 상황을 말합니다.
커널 모드에서 실행되는 프로세스나 스레드가 인터럽트를 걸어서 커널 모드로 전환되어 실행되는 동안, 다른 프로세스가 스레드에 의해 같은 데이터를 조작하는 경우에 발생할 수 있습니다. 커널이 가진 전역변수는 모든 프로세스의 공유물이기 때문입니다.
프로세스가 시스템 콜을 통해 커널 모드로 진입해서 작업을 수행하다 Context Swtiching이 발생한 경우에도 경쟁 상태가 발생할 수 있습니다. 타이머 인터럽트를 통해 커널 모드로 진입한 프로세스가 같은 데이터를 조작하는 경우에 경쟁 상태가 발생합니다.
멀티 프로세스 환경에서 여러 대의 CPU가 커널 내부의 공유 데이터에 접근하는 경우에도 발생할 수 있습니다.
경쟁 상태를 해결하기 위해서는 공유 자원에 대한 접근을 동기화하는 방법을 사용합니다.
임계 구역은 운영체제에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유 자원에 접근하는 프로그램 코드 부분을 의미합니다.
이는 공유자원을 접근하는데 있어서 문제가 발생하지 않도록 공유자원의 독점을 보장해줘야 하는 영역입니다.
임계 영역을 사용하기 위해서는 아래의 3가지 조건을 충족해 주어야 합니다.
상호 배제(Mutual Exclusion)
임계 영역에 들어간 프로세스가 다른 프로세스에게 임계 영역 진입을 허용하지 않습니다.
진행(Progress)
임계 영역에 들어간 프로세스가 없고, 임계 영역에 들어가려는 프로세스가 있으면 유한한 시간 안에 진입을 허용해야 합니다.
한정된 대기(Bounded Waiting)
프로세스가 임계 영역에 진입하기 위해 무한정으로 대기하는 기아 현상이 발생하면 안됩니다.