동기화 방법 (세마포어, 뮤텍스)

전윤지·2021년 6월 16일
0

OS (운영체제)

목록 보기
4/6

1. 동기화 (Synchronization)

  • 프로세스, 스레드들이 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하도록 하는 것

[ 용어 정리 ]

  • 임계영역 (Critical Section)
    : 하나의 프로세스만 사용 할 수 있는 구역
    • 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해 줌
    • 임계영역에선 한 순간에 반드시 하나의 프로세스나 스레드만 진입이 가능하다
  • 상호 배제
    : 한 프로세스가 공유 자원을 사용 할 때, 다른 프로세스가 접근 하는 것을 막는 것

2. 동기화 방법

1) 뮤텍스

  • 공유된 자원의 데이터를 여러 스레드가 접근하는 것을 막음
  • 한 스레드가 임계 영역에 들어 갈 때 lock을 하고, 나올 때 unlock
  • 다른 프로세스 간 동기화 할 때 사용 (모니터와의 차이점)
  • 운영체제, 커널, 프레임워크, 라이브러리에 의해 제공되므로 무겁고 느림

2) 세마포어

  • 임계 영역에 들어 갈 수 있는 스레드가 1개 이상 (뮤텍스와의 차이점)
  • wait, signal 함수 사용 (wait() -> 임계영역 -> signal())
    • wait() : 임계 영역에 들어 갈 수 있는지 확인
    • signal() : 임계 영역에서 빠져나왔음을 알림

3) 모니터

  • 하나의 프로세스 내에서 다른 스레드 간 동기화에 사용 됨 (뮤텍스와의 차이점)
  • 세마포어는 임계구역 앞에 wait, signal을 설정해야 함.
    But 모니터는 함수 앞에 synchronized를 붙여주기만 하면 알아서 상호배제 하여 함수의 작업을 수행 함
  • 프레임워크, 라이브러리 그 자체에서 제공되므로 가볍고 빠름
  • JAVA에서 사용가능. C에선 사용 불가능

4) 스핀락

  • 임계 영역에 진입이 불가능 할 때, 진입이 가능 할 때까지 루프를 돌면서 재시도하는 방식
  • 루프를 계속 돌기 때문에 busy waiting 발생 => CPU 낭비 할 수 있음
    • busy waiting?
      : 자원을 얻기 위해 기다리는 것이 아닌, 권한을 얻을 때까지 계속 확인 하는 것

0개의 댓글