동기화

운영체제

동기화란

프로세스들이 실행 순서자원의 일관성을 보장 받는 것

실행 순서 제어: 프로세스를 올바른 순서대로 실행 상호 배제: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

임계구역은 공유자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드영역을 의미한다. 임계 구역에 접근한 프로세스가 있다면 다른 프로세스는 임계구역 밖에서 대기 해야한다.

동기화 기법

뮤텍스락, 세마포, 모니터

뮤텍스 락

일종의 자물쇠 기능을 코드로 구현한 것 → 잠겼는지 확인하기 위해 지속적으로 두드려봐야함 (Busy Lock)

세마포

뮤텍스락과 비슷하지만 공유 자원이 여러개 있는 상황에서도 적용이 가능한 동기화 도구이다.

세마포는 Busy Lock 방식이 아니다. 보통 wait() 함수로 전역변수 S의 동기화 가능 횟수를 줄일수 있는지 확인하고 가능하다 하면 임계구역으로 진입하지만 가능하지 않은 경우 sleep()으로 세마포를 위한 대기큐에서 대기하게 된다. 그리고 다른 프로세스가 임계구역에서 할 일을 마치고 signal()함수 호출시 대기큐에 있는 프로세스를 깨워 준비큐로 옮긴다.

모니터

세마포와 가장 다른 차이점은 세마포는 사용자가 동기화를 관리 (wait, signal) 하는데에 반해 모니터는 동기화가 구조에 내장되어 있게 바뀜.

모니터를 통해 공유자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유자원을 이용하도록 한다. 이때 모니터는 특정 조건을 바탕으로 프로세스를 실행하고 일시중단하는 것과 같은 실행 흐름을 제어 하기 위해 조건변수를 사용한다. (예시, 생산자, 소비자에서 소비자가 먼저 공유자원에 상호배제를 얻었는데, 버퍼에 아무것도 없을때 조건변수에 대한 큐에서 대기하다가 생산자가 버퍼에 값을 넣고 signal을 보내면 그때 공유자원으로 접근)

  • 공유 데이터는 모니터 내부에 감춤
  • 접근 메서드도 모니터 내부에 둠
  • 한 번에 하나만 실행되게 함
  • 조건이 안 맞으면 조건변수에서 기다리게 함