[운영체제] Race condition

강민승·2023년 7월 30일
0

운영체제

목록 보기
10/18

📌 Race condition

레이스 컨디션(Race condition)은 두 개 이상의 프로세스가 동시에 공유 데이터에 접근하고 조작하려고 시도하고, 그 작업들의 순서가 결과에 영향을 미치는 상황을 의미한다.

이로 인해 프로세스 실행의 정확한 타이밍에 따라 일관성 없거나 예상치 못한 결과가 발생할 수 있다. 이를 "레이스" 컨디션이라고 부르는 이유는 프로세스들이 공유 데이터에 대해 자신들의 연산을 수행하기 위해 "경주"하고, 결과가 누가 "이기는지"에 따라 달라지기 때문이다.

📌 일반적인 상황

공유 파일: 두 프로세스가 적절한 동기화 없이 동시에 같은 파일에 쓰려고 하면, 서로의 데이터를 덮어 쓸 수 있어 일관성 없는 결과가 나다.

공유 메모리: 프로세스들이 메모리 공간을 공유하면, 한 프로세스가 다른 프로세스가 동시에 읽거나 쓰고 있는 데이터를 덮어 쓸 수 있다.

장치 접근: 두 프로세스가 동시에 장치(프린터나 디스크와 같은)를 제어하려고 시도하면, 장치의 일관성 없는 상태를 초래할 수 있다.

레이스 컨디션을 방지하기 위해 운영 체제는 , 세마포어, 모니터 등 여러 동기화 메커니즘을 제공한다. 이러한 도구들은 프로세스가 공유 리소스에 대한 배타적인 접근을 요청할 수 있게 해줘서, 첫 번째 프로세스가 작업을 완료할 때까지 다른 프로세스가 첫 번째 프로세스에 접근하는 것을 방지한다.

✏️ 베타적인 접근

"베타적인 접근"이란 한 번에 하나의 프로세스 또는 스레드만이 공유 자원에 접근할 수 있는 상황. 공유 자원을 여러 프로세스나 스레드가 동시에 조작하려 할 때 발생하는 레이스 컨디션을 방지하기 위한 중요한 메커니즘!.

예를 들어, 두 개의 프로세스가 동시에 동일한 메모리 위치를 변경하려고 시도하면 문제가 발생할 수 있습니다. 하나의 프로세스가 작업을 수행하는 동안 다른 프로세스가 해당 작업을 방해하지 못하게 하기 위해 "베타적인 접근"이 필요합니다. 이를 통해 한 번에 하나의 프로세스만 해당 메모리 위치를 변경할 수 있게 되어, 데이터의 일관성과 정확성을 보장할 수 있습니다.

이러한 베타적인 접근은 임계 영역, 뮤텍스, 세마포어, 모니터 등의 동기화 메커니즘을 통해 구현됩니다. 이들 메커니즘은 특정 프로세스가 공유 자원에 접근하는 동안 다른 프로세스가 해당 자원에 접근하는 것을 막아, 베타적인 접근을 보장합니다.

profile
Step by Step goes a long way. 꾸준하게 성장하는 개발자 강민승입니다.

0개의 댓글