ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Race Condition
    Computer Science/OS 2023. 1. 17. 22:02

    Race Condition

    두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근하기 위해 경쟁하는 상태

    → 동시 접근 시 자료의 일관성을 해치는 결과가 나타남!

     

    e.g) 공유메모리를 사용하는 프로세스를 커널 내부 데이터를 접근하는 루틴들 간

    (예: 커널모드 수행 중 인터럽트로 커널모드 다른 루틴 수행 시)

    OS에서 race condition은 언제발생하는 가?

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

    2. Process 가 system call을 하며 kernel mode로 수행 중인데 context switch가 일어나는 경우
      - 문제점: 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우
      - 해결법: 프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU제어권이 다른 프로세스에게 넘어가지 않도록 함

    3. Multiprocessor 에서 shared memory 내의 kernel data에 접근 할 때
      - 문제점: 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
      - 해결법: 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock/unlock을 하는 방법

    Critical Section(임계구역)

    • n 개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
    • 각 프로세스의 code segment에는 공유 데이터를 접근하는 코드인 critical section이 존재
    • Problem
      • 하나의 프로세스가 critical sectino에 있을 때 다른 모든 프로세스는 critical section에 들어갈 수 없어야 한다

     

    프로그램적 해결법의 충족 조건

    임계 구역 문제를 해결하기 위해선 3가지 조건을 충족시켜야한다.

    1. Mutual Exclusion(상호 배제) 
      • 프로세스 P가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다
    2. Progress(진행)
      • 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 없으면 critical section에 들어가게 해주어야한다
    3. Bounded Waiting (한정된 대기)
      • 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야한다
    • 가정
      • 모든 프로세스의 수행속도는 0보다 크다
      • 프로세스들 간의 상대적인 수행 속도는 가정하지 않는다

    출처: https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Race%20Condition.md

    댓글

Designed by Tistory.