[운영체제] 동기화 관련 정리

최별 Choi Byeol·2022년 9월 9일
0

CS

목록 보기
1/1

동기화?

  • 한정적인 시스템 자원에 여러 스레드가 동시에 접근해서 사용하면 문제 발생 가능
  • 이 문제를 방지하기 위해 여러 스레드에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정하는 기법

 

동기화를 하지 않으면?

Synchronization problem(Critical section problem)이 발생한다.
-> 두 개 이상의 concurrent한 스레드가 동기화 없이 공유 자원을 접근하는 문제 발생, 공유 자원들의 일관성이 깨질 수 있다.

  • race condition
    두 개 이상의 스레드 또는 프로세스가 공유 자원에 접근하는 상태. 결과가 non-deterministic(어쩔 때는 정상, 어쩔 때는 비정상)
  • critical section
    공유 자원을 접근하는 코드의 구간. race condition을 유발하는 코드의 구간. 이 구간에는 하나의 스레드만 들어갈 수 있도록 해야 한다.

 

임계구역 문제(Critical section problem) 해결책

  1. 상호 배제(Mutual Exclusion): 특정한 프로세스가 임계구역에서 실행되는 동안, 다른 프로세스는 접근할 수 없다.
  2. 진행(Progress): 임계구역을 사용하고 있지 않다면, 다른 프로세스가 접근할 수 있도록 한다.
  3. 한정된 대기(Bounded waiting): 임계구역 진입 횟수에 한계를 두어 같은 프로세스가 계속 독점해서 사용하지 못하게 한다. 다른 프로세스들이 기아 상태에 빠지지 않도록 한다.
    위의 세 가지 조건이 만족되어야 한다.

 

동기화 매커니즘

  1. Low-level: 운영체제가 짧은 임계구역을 보호하기 위해 사용
  • 소프트웨어: 복잡도가 높아 사용 X
    많은 반복문을 구현하는 과정에서 속도 저하가 발생하게 되고, 구현이 복잡하다. 또한 interrupt를 억제함으로써 해결할 수는 있지만 그만큼 overhead가 발생한다. 가장 큰 문제점으로는 원하는 자원을 얻기 위한 권한을 얻을 때까지 반복해서 확인해야만 하는 Busy waiting 현상이 발생하게 됨.
  • 하드웨어:
    single CPU: interrupt disable, enable 사용
    multiple CPU: hardware atomic instruction(test and set), lock
    HW solution도 마찬가지로 Busy waiting 현상이 존재한다.
  1. High-level: 애플리케이션 프로세스나 스레드가 사용하는 방법
  • Semaphore: 공유 자원의 개수를 표현하는 integer 변수, wait, signal(들어갈 때, 나갈 때)
  • Critical Region: 프로그래밍 언어 차원에서 보장. 보장해주는 역할 compiler
  • Monitor: 공유 데이터를 접근하기 위해서는 모니터의 내부 Procedure를 통해서만 가능
  • Mutex + Condition variables
profile
FE 👩🏻‍💻

0개의 댓글