본문 바로가기

CS/OS

[OS] Synchronization Tools - part1

Background


  • Cooperating process
    • share a logical address space → thread
    • share data → share memory or msg passing
  • 프로세스가 동시에 돌아가며 데이터를 공유하려면?
    • 데이터의 일관성이 유지되야함
    • 실행 순서가 지켜져야 데이터가 유지된다
  • 데이터의 값이 모호해지는 경우
    • Concurrent execution : 프로세스가 작동 중에 다른 프로세스에게 넘기는 경우
    • Parallel execution : 분리된 CPU에서 프로세스가 동시에 돌아가는 경우
  • concurrently한 동작의 문제점(P-C모델의 비동기 상태)
    • 기계어 과정으로 생각하면, 위의 과정이 순서대로 일어나지 않는다 . context switch는 끝까지 기다리지 않는다.
    • 그렇기에 interrupt가 일어날 때, 값이 올바르게 수정되지 않는다.

둘 이상의 입력의 타이밍이나 순서 등이 결과 값에 영향을 미치는 상황 → Race condition

Race Condition을 해결하는 것 → synchronization

 

The Critical Section Problem


'한 프로세스가 critical section으로 정의된 부분에 접근을했을 때, 다른 프로세스가 접근을 못하면 race-condition이 안일어나지 않을까' 에 대한 가정을하면 일어나는 것들

  • 프로세스들이 동작 할 때 동기화 상태가 된다.
  • 공유된 데이터가 cooperatively하게 된다.

Critical-section의 분류

  • entry-section : critical-section의 입장 부분
  • critical-section : 정의된 부분
  • exit-section : 크리티컬 섹션이 반납되는 부분
  • remainder-section : 나머지 부분

Critical-section 방법의 요구사항

  • Mutual Exclusion : 한 프로세스가 크리티컬 섹션에 들어왔을 때, 접근을 못하게 해라
  • Progress: avoid deadlock
  • Bounded Waiting : avoid starvation

Single-core environment에서의 간단한 해결법

  • 변수를 공유 하고 있는 동안 인터럽트를 막는다. → multiprocessor환경에서의 비효율성이 너무 크다.

Non-Preemptive & Preemptive

  • Non-Preemptive : 경쟁 상태 문제가 잘 발생하지 않는다.
  • Preemptive : 어려운 문제를 해결하더라도 반응성이 좋기에 선택하여 쓴다.

 

Peterson's Solution


  • 피터슨 솔루션 이외에 Dekker's, Eisenberg and McGuire's, Bakery 알고리즘 등이 있다.
  • flag를 중심으로 임계부분을 티키타카 하는 방식
  • 제대로 동작한다는 보장이 없다.
  • 하지만, 개념적으로 완벽하고, mutual exclusion, progress, bounded waiting의 요구사항을 전부 만족한다.

 

Hardware Support for Synchronization


Hardware instructions that provide

  • 임계문제를 지원해준다.
  • 하드웨어가 인스트럭션에 적용되면 직접적으로 동기화한다.
  • 이 외 더 효율적인 방법이 있다.
    • memory barriers
    • hardware instruction
    • atomic variable

Atomic

  • 더 이상 나눌 수 없는(인터럽트가 불가능한) 단위의 동작, 상호배제성 해결 중심
  • Special hardware instruction을 만들기
    • 값을 체크 하고 바꿔주는 과정을 기계어 기준 3clock을 1clock으로 줄이면서 기존의 Context Switch가 중간에 안 일어나도록 방지한다. 즉, test and modify, test and swap 과정을 하나의 단위로 묶어버린다.
  • Atomic Variable
    • 상호배제성을 위해 single variable에 race condition으로 만들자(ex count++, count—)

'CS > OS' 카테고리의 다른 글

[OS] Synchronization Examples  (0) 2021.12.16
[OS] Synchronization Tools - part2  (0) 2021.12.16
[OS] Scheduling  (0) 2021.12.16
[OS] Thread & Concurrency  (0) 2021.12.16
[OS] Process  (0) 2021.12.15