Synchronization

이유석·2022년 3월 7일
0

CS - Operating System

목록 보기
9/20

Race Condition (경합 상태)

정의

  • 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태

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

방생하는 경우

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

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

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

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

Critical Section (임계 영역)

정의

  • 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역
  • 프로세스간에 공유자원을 접근하는데 있어서 문제가 발생하지 않도록 하기 위해서

경우

  • Preemptive

    • 선점 방식
    • 커널 모드에서 문맥전환이 가능 → race condition 가능 → critical section 문제를 다뤄야 함
  • Non-Preemptive

    • 비선점 방식
    • 다른 프로세스들로부터 interrupt 될 수 없음
    • 문맥전환 불가능 → race condition으로부터 자유로움

해결하기 위해서 아래의 3가지 조건을 충족해야 한다.

  • Mutual Exclusion (상호 배제)

    • 하나의 프로세스가 임계 영역에 들어가 있다면, 다른 프로세스는 들어갈 수 없어야 한다.
  • Progress (진행)

    • 임계 영역에 들어와 있는 프로세스가 없는 상태에서,
    • 들어가려 하는 프로세스가 여러개라면 어느 것이 들어갈지 결정해주어야 한다.
    • 임계 영역에 들어가는 순서는 무한정 연기 될 수 없다.
  • Bounded Waiting (한정 대기)

    • 한 프로세스가 임계 영역에 진입하고자 요청을 한 후부터 이 요청이 허용될 때까지,
    • 다른 프로세스가 그들의 임계 영역에 진입할 수 있는 횟수가 제한되어야 한다.

Petersons's Solution

  • Flag를 이용
  • 이론적으로 좋은 해결책 이지만, 현대 구조에 적합하지 않다.
  • 성능 향상을 위해 프로세서 and/or 컴파일러에 의해서 Operation 들이 재정렬 된다.
    • Single thread : 재정렬 전・후 결과가 같음
    • Multi thread : 재정렬 전・후 결과가 다름 / 예상치 못한 결과

임계 영역의 동시 접근을 해결하기 위한 방법

  • lock(락), semaphore(세마포어), monitor(모니터) 등이 있다.
profile
https://github.com/yuseogi0218

0개의 댓글