본문 바로가기

CS/OS

[OS] Synchronization Tools - part2

Mutex Locks

Soft : Peterson

Hard : special instruction set → Atomic Variable은 어렵다.

High level에서 좀 더 쉽게 다룰 수 있는 소프트웨어 툴이 있을까?

 

Mutex Locks

  • 특징
    • 동기화를 간단하게 해주는 툴
    • 열쇠를 획득 반납 하는 과정으로 상호배제를 보장
    • acquire, release로 섹션을 나누고 available 변수로 판단한다.
    • 위 의 키워드의 atomically는 보장되야 하고, 어떻게 보장할지는 커널 개발자가 고민하자
  • 문제점
    • busy waiting : acquire이 쓸데없이 CPU자원 사용한다.
    • spin lock : CPU자원이 많다면, busy waiting덕분에 ready 상태로 기다릴수 있다.

 

Semaphore

Semaphore

  • Mutex랑 다르게 2개의 테스크가 아닌 n개를 다룰 수 있다.
  • Signal를 N만큼 늘려서 사용
  • wait()함수로 count를 줄이고 signal로 count를 늘린다.
  • P2가 P1이 실행된 후에 실행하고 싶으면, P1에서 시그널을 받아야만 P2에서 동작하게끔 구성
    • 시그널을 주기전 P2는 Busy waiting을 피하기 위해 스스로 ready가아닌 waiting 상태로 들어간 후 시그널을 받고 ready queue로 들어간다.
  • 쓰레드가 5개 열쇠5개면, 상호배제성 문제 발생, 이때 열쇠를 1개로 줄이면 문제가 해결된다.

 

Monitor

Monitor

  • 위 2개의 솔루션은 사용하기 힘들다. 에러가 자주 발생
  • Mutex Locks, Semaphore의 단점을 극복한 툴, wait, signal 등 복잡한 것을 쉽게.
  • 일종의 데이터 타입인 클래스다.
  • Conditional Variable
    • 변수에 대한 entry queue를 따로 생성한다.
  • Java Monitors
    • synchronized keywords
    • // 모니터락을 획득해야 진입가능, 모니터락을 가진 객체 인스턴스 지정 synchronized(object){ // Critical Section } // 모니터락을 가진 객체 인스턴스는 this 객체 인스턴스다. public synchronized void add(){ }
    • wait( ) & notify( ) methods
      • 모든 자바 객체가 가진 메소드이다. 자바의 모든 객체는 Object를 상속받는다.
      • 쓰레드가 어떤 객체의 wait() 메소드 호출 → 해당 객체의 모니터락을 얻기 위해 대기 상태로 진입
      • 쓰레드가 어떤 객체의 notify() 메소드 호출 → 해당 객체 모니터에 대기중인 쓰레드를 깨운다.
      • notifyAll() → 해당 객체 모니터에 대기중인 쓰레드 전부 깨움
      • 여러 쓰레드가 하나의 객체로 사용하는 것은 세미포어에서 열쇠를 하나 쓰는것이랑 같다.

Liveness

  • 위 3개는 상호배제만 해결해주지만, 데드락도 해결해준다.
  • Priority Inversion
    • 우선순위가 높은 프로세스가 ready-queue에 존재해도, 현재 running process가 key를 놓을 때 까지 기다려야하는 것.
  • Priority-inheritance(우선순위상속)
    • 우선순위 낮은 프로세스를 우선순위를 높여서 빨리 끝낸 후, 우선 순위가 높은 프로세스가 필요했던 자원을 건내받고 실행하는 것.

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

[OS] Deadlocks  (0) 2021.12.16
[OS] Synchronization Examples  (0) 2021.12.16
[OS] Synchronization Tools - part1  (0) 2021.12.16
[OS] Scheduling  (0) 2021.12.16
[OS] Thread & Concurrency  (0) 2021.12.16