Operation System - 9. 경쟁 상태(Race Condition) 편

Perdy·2023년 7월 30일
0

CS

목록 보기
9/20

경쟁 상태(Race Condition)

공유 자원에 대해 여러 프로세스나 스레드가 동시에 접근하기 위해 경쟁하는 상태를 말합니다. 타이밍이나 순서 등이 결과 값에 영향을 줄 수 있으며, 공유 자원에 여러 프로세스가 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있습니다.

발생하는 경우
1. 커널 코드 실행 중에 인터럽트가 발생할 경우
2. 프로세스가 시스템 콜을 하여 커널모드로 진입하여 작업을 수행하는 도중 컨텍스트 스위칭이 발생하는 경우
3. 멀티 프로세스에서 공유 메모리 내의 커널 데이터에 접근할 경우

임계 영역

둘 이상의 프로세스나 스레드가 공유 자원에 접근할 때, 순서 등의 이유로 결과가 달라지는 코드 영역을 말합니다. 따라서, 문제가 발생하지 않도록 공유 자원의 독점을 보장해줄 필요가 있습니다.

해결하기 위한 방법으로 뮤텍스, 세마포어, 모니터가 있습니다.
이 방법들은 모두 상호 배제, 한정 대기, 융통성이라는 조건을 만족하며, 토대가 되는 메커니즘은 lock입니다.

상호 배제
Mutual Exclusion
한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없도록 막아주는 것입니다.

한정 대기
Bounded Wating
특정 프로세스가 영원히 임계 영역에 들어가지 못하는 상태(기아 상태)를 방지하기 위하여, 한 번 들어갔다 나온 프로세스는 다음에 들어갈 때 제한을 줍니다.

융통성
진행의 융통성
임계 영역에 들어간 프로세스가 없다면, 어떤 프로세스가 들어갈 것인지 적절히 선택해주어야 합니다. 임계 영역에 들어간 프로세스 외에는 다른 프로세스가 임계 영역에 진입하는 것을 방해해서는 안됩니다.

profile
영원한 뉴비. 꾸준히 한다면 언젠가는 높은 곳에 도달할지도?

0개의 댓글

Powered by GraphCDN, the GraphQL CDN