[운영체제] Race Condition

이민우·2024년 3월 19일

CS_운영체제

목록 보기
9/14

✔︎ 경쟁 상태(Race Condition)란 ?

공유 자원에 대해 여러 프로세스가 동시에 접근할 때 결과값에 영향을 줄 수 있는 상태
동시 접근 시 자료의 일관성을 해치는 결과가 나타날 수 있다. 
경쟁 상태도 교착 상태의 종류 중에 하나이다.

✔︎ Race Condition이 발생하는 경우

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

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

2. 프로세스가 'System Call'을 하여 커널 모드로 진입하고 작업을 수행하는 도중 문맥 교환이 발생할 때 

문제점 : 프로세스1이 커널모드에서 데이터를 조작하던 도중 시간이 초과되어 CPU제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우
해결법 : 프로세스가 커널모드에서 작업을 하는 경우에는 시간이 초과되더라도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 한다.

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

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

4. 멀티 스레드 환경에서 두개 이상의 스레드가 공통의 전역변수에 접근할 경우 

3, 4번의 경우 Race Condition 관계는 3가지 문제에 직면한다.

Mutual exclusion, deadlock, starvation

① Mutual exclusion

Race condition을 막기 위해서는 두 개 이상의 프로세스가 공용 데이터에 동시에 접근을 하는 것을 막아야 한다. 
즉, 한 프로세스가 공용 데이터를 사용하고 있으면 그 자원을 사용하지 못하도록 막거나, 다른 프로세스가 그 자원을 사용하지 못하도록 막으면 이 문제를 피할 수 있다. 이것을 상호 배제(mutual exclusion)라고 부른다.

② Deadlock

그러나 위와 같은 상호 배제를 시행하면 추가적인 제어 문제가 발생한다. 하나는 교착상태 즉 여기서 말하는 Deadlock이다. 
프로세스가 각자 프로그램을 실행하기 위해 두 자원 모두에 엑세스 해야 한다고 가정할 때 프로세스는 두 자원 모두를 필요로 하므로 필요한 두 리소스를 사용하여 프로그램을 수행할 때까지 이미 소유한 리소스를 해제하지 않는다. 이러한 상황에서 두 프로세스는 교착 상태에 빠지게 되는 문제가 발생할 수 있다.

③ Starvation

이 제어 문제는 ‘기아 상태’라고도 한다. 이러한 문제는 프로세스들이 더 이상 진행을 하지 못하고 영구적으로 블록되어 있는 상태로, 시스템 자원에 대한 경쟁 도중에 발생할 수 있고 프로세스 간의 통신 과정에도 발생할 수 있는 문제이다. 
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로는 아무것도 완료되지 못하는 상태가 되게 된다.

Starvation과 Deadlock

Deadlock은 프로세스가 자원을 얻지 못해 다음 처리를 못하는 상태,
Starvation은 프로세스가 원하는 자원을 계속 할당받지 못하는 상태를 말한다.
주로 Deadlock은 여러 프로세스가 동일 자원 점유를 요청할 때 발생하고 Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스는 영원히 자원 할당이 안되는 경우를 말한다.

해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해 lock/unlock함으로써 해결할 수 있다.

참고

https://github.com/gyoogle/tech-interview-for-developer/tree/master?tab=readme-ov-file
https://nice-engineer.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B2%BD%EC%9F%81-%EC%83%81%ED%83%9CRace-Condition#%E2%9C%94%EF%B8%8E-%EA%B2%BD%EC%9F%81-%EC%83%81%ED%83%9C(Race-Condition)%EB%9E%80-?

profile
백엔드 공부중입니다!

0개의 댓글