시냅스

뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness 본문

운영체제

뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness

ted k 2022. 4. 28. 21:47

뮤텍스 락 Mutex Locks

출처 :https://www.keil.com/pack/doc/cmsis/RTOS/html/group__CMSIS__RTOS__MutexMgmt.html

  • 고급 언어에서 개발한 도구
  • 동기화를 위한 가장 간단한 도구
  • 2개만 가능하다.
  • acquire()을 통해 ciritical section에 진입 허가를 받는다. (원자적 연산)
  • release()를 통해 허가를 반납한다. (원자적 연산)
  • busy waiting -> 무한 루프를 돌면서 프로세스는 낭비된다.
    • spin lock (= busy waiting)
      • core가 여러개 일 때는 busy waiting(= spin lock)은 유용할 수 있다.
      • core 위에서 돌아가고 있어 context switch를 줄여준다.

세마포어 Semaphores

출처 : https://www.guru99.com/semaphore-in-operating-system.html

  • 정수 variable
  • binary semaphore -> mutex lock 과 비슷하다.
  • counting semaphore -> 제한 없는 영역
  • wait -> p(), signal -> v() (원자적 연산)
  • 리소스가 available 한 개수로 초기화 한다.
  • 세마포어는 원자적으로 제어되는 정수 변수로, 0보다 크면 접근함과 동시에 세마포어의 값을 1 감소시킨다.
  • 반대로 종료하고 나갈 때에는 세마포어의 값을 1 증가시켜 다른 프로세스가 접근할 수 있도록 한다.
  • count 가 0이면 모든 리소스가 사용 중으로 대기한다.
  • wait() -> waiting queue
  • signal() -> ready queue

모니터 monitors

출처 : https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/5_Synchronization.html

  • 고급 언어로 개발되어 에러 빈도가 줄어든다.
  • Abstract data type, ADT (mutual exclusion 을 제공하는 data type)
  • JAVA의 Synchronized 같은 거...
  • 부가적인 동기화 기법을 위해 conditional variable를 이용한다. -> 오직 wait signal만 호출될 수 있다.

라이브니스 Liveness

  • mutex lock + progress + bounded waiting 모두 가능
  • 우선순위 역전 (priority inversion) 문제를 갖고 있다.
    • 우선순위가 높은 task가 준비 상태로 바뀌었지만 더 낮은 task가 CPU를 점유하고 있어 실행되지 못하는 현상.
    • 우선순위 상속 프로토콜(priority-inheritance protocol)을 구현으로 해결한다.
Comments