10월 18일 - Race Condition

Yullgiii·2024년 10월 18일
0

경쟁 상태(Race Condition)

경쟁 상태는 공유 자원에 여러 프로세스가 동시에 접근할 때 발생하는 문제로, 동시성이 제대로 관리되지 않아 일관성 있는 결과를 얻지 못할 때를 말한다. 이는 시스템의 동작을 예측하기 어렵게 만들고, 의도치 않은 오류나 충돌이 발생할 수 있다.


Race Condition이 발생하는 경우

1. 커널 작업 중 인터럽트 발생

  • 문제점: 커널 모드에서 작업을 수행 중인 상태에서 인터럽트가 발생하여 동일한 데이터를 다른 곳에서 접근하고 수정하는 상황이 발생할 수 있다. 이는 데이터의 일관성을 해칠 수 있다.
  • 해결 방법: 커널 작업 중에는 인터럽트를 비활성화하여, 작업이 완료될 때까지 CPU 제어권을 다른 곳에서 가져가지 못하도록 해야 한다.

2. System Call 수행 중 문맥 교환 발생

  • 문제점: 프로세스1이 System Call로 커널 모드에 진입하여 데이터를 처리하는 도중, 문맥 교환이 발생하여 CPU 제어권이 프로세스2로 넘어가게 되면, 프로세스1이 완료되지 않은 데이터를 프로세스2가 수정할 수 있다. 이로 인해 예상치 못한 결과가 나올 수 있다.
  • 해결 방법: 커널 모드에서 작업이 진행되는 동안에는 문맥 교환이 발생하지 않도록 제어해야 하며, 한 프로세스가 작업을 완료할 때까지 CPU 제어권이 다른 프로세스로 넘어가지 않도록 한다.

3. 멀티 프로세서 환경에서의 공유 메모리 접근

  • 문제점: 멀티 프로세서 환경에서는 여러 CPU가 동시에 공유 메모리 내의 같은 데이터를 접근하여 조작하는 상황이 발생할 수 있다. 이 경우, 데이터의 무결성을 해칠 위험이 크다.
  • 해결 방법: 커널 내부에서 공유 데이터에 접근할 때는 lock/unlock과 같은 동기화 메커니즘을 사용하여, 한 번에 하나의 CPU만 해당 데이터를 수정할 수 있도록 관리해야 한다.

So...

경쟁 상태는 다중 프로세스나 멀티 스레드 환경에서 발생할 수 있는 중요한 문제로, 적절한 동기화가 이루어지지 않을 경우 데이터 무결성을 해칠 수 있다. 이러한 문제를 방지하기 위해서는 인터럽트 관리, 문맥 교환 방지, lock/unlock 메커니즘과 같은 동기화 기법이 필수적이다. 이를 통해 안정적이고 일관성 있는 시스템 동작을 유지할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글