[운영체제] 7. Synchronization Examples

jungizz_·2025년 4월 26일

Operating Systems

목록 보기
7/15
post-thumbnail

💡7장 목표

  • 동기화 문제의 3가지 모델
  • 여러 OS의 동기화 툴
  • POSIX와 JAVA

Synchronization schemes

  1. Bounded-Buffer problem (=producer-consumer)
  2. Readers and Writer problem
  3. Dining-Philosopher problem

강노 참고~

Kernel Synchronization

커널에서 제공하는 동기화 기능

Window

  1. Interrupt masks: 하드웨어적으로 CS를 보호하기 위해 interrupt disable하는 등의 기능 → single CPU에서 유용(multi면 disable 다 해줘야하고 확장성 부족)
  2. Spinlock: 독점권을 얻기 위해 CPU를 놓지 않고(wait상태가 되지 않고) 반복문에 들어가서 기다리기 → 기다리는 시간이 짧은 경우 유용
  3. Dispatcher objects: mutexes, semaphores, events, timers 등 기능 제공 → 자원 사용 가능한 signaled-state 또는 사용 불가능으로 기다려야하는 non-signaled-state이다.

Linux

  • 2.6버전 이전에는 short critical section에 대해 disanle interrupts기능 사용
  • 2.6버전 이후로는 모두 선점형으로 바뀜 (비선점은 race condition을 발생시키지 않지만 높은 우선순위가 오래 기다리는 문제)
  1. Semaphores
  2. atomic intergers
  3. spinlocks → single CPU에서는 enabling and disabling kernel preemption(선점)
  4. reader-writer version of both

POSIX Synchronization

POSIX는 API 표준이다. POSIX를 따르는 OS는 UNIX, Linux, macOS가 있으며 이들끼리는 호환성을 가진다.

POSIX API가 제공하는 동기화 기능은 아래와 같다. (코드 강노 참고)

  1. Mutex lock
  2. Semaphores → named와 unnamed 프로세스 둘 다 사용 가능 (named는 상관관계가 없는 프로세스)
  3. Condition Variable

Java Synchronization

코드 강노 참고

  1. Java monitors
    • synchronized로 함수 선언
    • 기존 monitor와 동일한 구조
      • object에 한 스레드만 들어갈 수 있음
      • object에 들어가기를(사용권한을) 기다리는 스레드들이 모여있는 entry set
      • object 내에서 기다리는 wait set (object 내 코드를 수행하다가 wait() condition 발생하여 기다리는 스레드들)
    • signal()대신 notify()가 wait()를 깨움
  2. Reentrant locks (mutex와 유사)
  3. Semaphores
  4. Condition variables

Alternative Approaches

미들웨어에서 제공하는 다양한 동기화 기능

코드 강노 참고

  1. Transactional Memory
    • transaction은 쪼갤 수 없는 한 덩어리를 의미 → atomic하게 처리
    • 기존 mutex나 semaphor사용하는 것보다 간단
  2. OpenMP
    • #pragma omp critical하면 안에 있는거를 critical section으로 보호해줌
    • #pragma omp pararrel하면 코어 수만큼 스레드를 만들어 자동으로 병렬처리 해줌
  3. Functional Programming Languages
    • 재귀 기반 프로그래밍
    • 공유 데이터 없음 → critical section이 자동으로 보호됨
profile
( •̀ .̫ •́ )✧

0개의 댓글