• 시스템은 일반적으로 동시에 또는 병렬로 실행되는 여러 스레드(수백 또는 수천)로 구성됨
  • 스레드는 종종 사용자 데이터를 공유함
  • 공유 데이터에 대한 접근이 제어되지 않을 때 race condition이 존재하여 데이터 값이 손생될 수 있음
  • 프로세스 동기화에는 race condition을 피하기 위해 공유 데이터에 대한 접근을 제어하는 도구를 사용함

 

  • Mutex Lock
    • 공유자원에 접근하기 위해 lock 필요
    • critical section(프로세스가 여러 개 있을 때 그 여러 프로세스들이 공유하게 되는 자원에 해당하는 코드 부분)에 들어갈 땐 lock을 얻어야 하고, 나오면 해제해야함

  • Mutex Lock의 단점
    • 한 프로세스가 CS에 있는 동안, 다른 프로세스가 계속 조건을 확인하며 loop를 실행해야 함 

 

  • Semaphore
    • Mutex Lock의 확장된 개념
    • 여러 자원에 대한 동기화 가능 
    • 공유변수 S를 사용
    • 공유자원이 여러 개인 경우 가용 자원의 수로 초기화됨
    • 공유자원이 하나인 경우 => Mutex Lock
    • 예) 공유자원이 3개인데 count 값이 -2인 경우: 3개는 사용중이고 2개의 프로세스가 대기중이라는 뜻

 

 

  • Monitors
    • 가장 high level
    • 프로그래머가 세마포나 뮤텍스 락을 잘못 사용하면 error가 쉽게 발생함
    • 간단한 동기화 도구들을 고급 언어 구조물로 통합하면 해결할 수 있음
    • ADT(abstract data type): 특정 구현과는 무관한 데이터와 데이터에 대한 연산을 캡슐화한 것
    • Monitor type(=ADT): instance의 state를 정의한 변수와 그 변수에 동작하는 함수 본체를 선언
    • Monitor type은 프로세스가 직접 사용 금지(class 개념)
    • 모니터 내부의 함수는 내부에 정의된 변수와 파라미터에 의해서만 접근 가능
    • 모니터 내부의 local 변수는 local 함수에 의해서만 접근(read/write) 가능
    • 모니터 내에서 한 번에 한 프로세스만 active함을 보장함

 

  • 동기화 메커니즘 필요
    • 프로그래머가 type condition 변수들을 정의 가능

 

 

  • Semaphore vs. Monitor

'cs 공부 > 운영체제' 카테고리의 다른 글

ch08. Deadlocks  (0) 2023.07.05
ch05. CPU Scheduling  (0) 2023.06.12
ch03. Process, Threads  (0) 2023.06.11

+ Recent posts