[Chapter 12] 프로세스 동기화 - 2 동기화 기법

Kim Seohyun·2024년 2월 3일
0
post-thumbnail

뮤텍스 락, 세마포, 모니터
프로세스를 동기화하지 않으면겉보기에 아무런 문제 없어 보이는 코드도 예기치 못하게 작동할 수 있습니다. 이번 절에서는 동기화를 위한 대표적인 도구인 뮤텍스 락, 세마포, 모니터에 대해 알아보겠습니다.

뮤텍스 락

공중 화장실을 '임계 구역', 사용자를 '프로세스'라고 하면 잠금 장치에 해당하는 용어를 뮤텍스 락(Mutex lock; MUTual EXclusion lock)이라고 한다. 상호 배제를 위한 동기화 도구로 아래와 같은 요소들로 구현할 수 있다.
* 함수 코드는 책 본문 참고

  • 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
  • 임계 구역을 잠그는 역할: acquire 함수
    (lock이 true인지 쉴 새 없이 반복하며 확인하는 바쁜 대기 방식 포함)
  • 임계 구역의 잠금을 해제하는 역할: release 함수

세마포

세마포(semaphore)는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구이다. 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이라는 점에서 차별성을 둔다. 아래와 같은 요소들로 구현할 수 있다.

  • 임계 구역에 진입할 수 있는 프로세스의 개수: 전역 변수 S
  • 임계 구역에 들어가도 좋은지, 기다려야 할지 알려주는 역할: wait 함수
  • 임계 구역 앞에서 기다리는 프로세스에 가도좋다고 신호를 주는 함수: signal 함수

뮤텍스 락과 마찬가지로 바쁜 대기를 해야한다는 문제는 CPU 주기를 낭비한다는 점에서 손해다. 그래서 세마포는 wait 함수를 사용해 사용할 수 없는 자원이 없을 경우 해당 프로세스 상태를 대기 상태로 만들고, 그 프로세스의 PCB를 세마포를 위한 대기 큐에 집어넣는다. 그리고 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 대기 중인 프로세스를 대기 큐에서 제거하고, 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮겨준다.

모니터

세마포는 매번 임계 구역에 앞뒤로 일일이 wait와 signal 함수를 명시하기 번거롭고, 순서를 헷갈린 경우 등 문제가 발생할 수 있다. 이를 위한 동기화 도구가 모니터(monitor)다. 공유 자원과 공유 자원 접근 인터페이스를 묶어 관리하고 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하도록 한다.
모니터는 특정 조건을 바탕으로 프로세스 실행과 중단을 위해 조건 변수(condition variable)를 사용해 실행 순서 제어 동기화도 제공한다. 더 자세한 내용은 링크의 자료에서 알아보자.

3가지 키워드로 정리하는 핵심 포인트

  • 뮤텍스 락은 임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룹니다.
  • 세마포는 공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구입니다.
  • 모니터는 세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용합니다.
profile
EWHA Cyber Security 19

0개의 댓글