본문 바로가기
컴퓨터과학/운영체제

[운영체제] 동기화 (Synchronization)

by 윤호 2021. 1. 19.

Synchronization

  • Shared data : 여러 프로세스들이 공유하는 데이터 (Critical data)
  • Critical section (임계구역): 공유 데이터를 접근하는 고드 영역
  • Mutual exclusion : 둘 이상의 프로세스가 동시에 임계구역에 진입하는 것을 막는것
  • 임계 구역 문제
    • 누가 먼저 공유데이터에 접근?
    • 공유 데이터에 누가 접근하고 있는지?
    • 공유 데이터를 어떤 순서로 접근할지?
  • 솔루션
    1. Mutual Exclusion - 쓰고있으면 다른 프로세스는 못 들어옴
    2. Progress - 누군가 기다린다면, 대기 시간이 무한이되면 안됨
    3. Bounded Waiting - 임계 구역 진입 횟수를 제한하여 독점하지 못하도록

Peterson's Solution

  • sw 수준
    • two process solution (다중 프로세스에서 보장 X)
    • turn : 차례가 된 프로세스, flag : 준비가 되었는지
    • turn과 flag는 서로 다른 프로세스를 가리킴
    • 다중 프로세서 보장 X, 할당 받기 전에 무한루프를 돎 (busy-waiting 비효율적)

동기화를 위한 하드웨어 지원

  • locking : 내가 진입하는 임계구역에 lock을 걸어 다른 프로세스가 못 들어오게
  • test_and_set(TAS)
  • acquire lock (잠금), release lock(해제)
  • lock이 true면 접근 못함.
  • 다중 프로세서 보장 X, 할당 받기 전에 무한루프를 돎 (busy-waiting 비효율적)
  • 누가 대기하고 있는지 알 수 없음 (bounded-waiting 미충족)
    • 해결 : cmpare_and_swap

뮤텍스락과 세마포어

  • Mutex Locks
    • OS에서 하는 lock
    • acquire(), release()
    • 멀티프로세서에서 유용함
      • Context switching을 하지않아도 됨 ( 정보를 갖고있는 채로 spinlcok 하며 기다리기 때문)
  • Semaphores
    • binary semaphore : mutex lock과 같음
    • counting semaphore : 유한한 개수를 가진 자원 에 대한 접근 제어
      • 자원을 반납(signal)하면 +1, 사용하면(wait) -1
    • wait와 signal 을 같은 S에 대해 동시에 수행하지 않는 것을 보장해야함

모니터

  • 프로그래밍 언어 수준
    • 이전의 내용들은 다른 프로세스 간 동기화, 모니터는 한프로세스에서 스레드 간 동기화임

댓글