운영체제 - Race Condition

고태희·2022년 2월 23일
0

CS

목록 보기
11/20

개념

정의

두개이사의 concurrent한 스레드(프로세스)들이 공유된 자원에 접근하려고 할 때 동기화 메커니즘 없이 접근해 결과값에 영향을 줄 수 있는 상태.
(데이터의 무결성 관점에서 중요하다)

문제

프로그램 개발 시 디버깅 시에는 문제점이 보이지 않고, 사용하다가 어느순간 우연히 발견할 수 있다. -> ㅈ됨
ex ) 계좌에 1000원있는데, A,B가 동시에 그 계좌에서 1000원을 출금하려고 하면 한쪽은 안돼야하는데 둘다 돼버리면 골치아프다

Race Condition이 발생하는 경우

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

    • 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작
    • 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable시켜 CPU제어권을 가져가지 못하게 한다.
  • 프로세스가 System Call 하여 커널모드로 진입하여 작업을 수행하는 도중 문맥교환 발생

    • 문제점 : P1이 커널모드에서 데이터를 조작하는 도중, 시간 초과되어 CPU 제어권이 P2로 넘어가 같은 데이터를 조작
    • 해결법 : 프로세스가 커널모드에서 작업하는 경우, 시간이 초과되어도 CPU 제어권을 다른 프로세스에게 넘어가지 않게함
  • 멀티 프로세스 환경에서 공유 메모리 내의 커널 데이터에 접근할 때

    • 문제점 : 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
    • 해결법 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock / unlock 하는 방법 (Semaphore / Mutex)

참고

0개의 댓글

관련 채용 정보