Post

운영체제의 동기화 기법

동기화란?

작업들 사이의 수행 시기를 맞추는 것. 사건이 동시에 일어나거나, 일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다. -네이버 국어사전-

국어사전에 따르면 ‘동기화’에 대해 위와 같이 설명하고 있다.

컴퓨터 과학에서도 비슷한 의미로 통용되는데, 작업들의 수행 시기를 맞추면서 여러 프로세스가 공유하고 있는 자원이 일관되게 유지될 수 있도록 하는 방법이다.

동기화는 여러 프로세스가 접근하는 공유자원을 사용할 때 중요한 화두로 떠오르는데, 예기치 않은 데이터의 접근과 변경으로 다른 프로세스의 작동에 영향을 끼칠 수 있기 때문이다.

이런 공유자원에 2개 이상의 프로세스가 접근해서 데이터를 조작하는 상황을 경쟁 상태(race condition)이라 하며, 프로세스의 접근 순서나 처리 속도에 따라 결과값에 영향을 줄 수 있다. 이는 다양한 동시성에 관련된 문제들을 야기한다.

그래서 공유 자원 접근 순서에 따라 결과에 영향을 끼칠 수 있는 코드 블럭을 임계 영역(critical section)이라고 하며, 해당 구역에서 발생하는 문제들을 다루기 위해 다양한 동기화 기법들이 고안되었다.

Mutex

뮤텍스는 임계구역에서의 코드 실행을 서로 겹치지 않게, 각 스레드 or 프로세스가 단독으로 실행하게 하는 동기화 기법이다. 공유 자원에 대한 접근을 Locking, Unlocking을 사용해 조율하며, 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없다.

쉬운 예시로 화장실을 많이 드는 것 같다.

음식점에서 공용 화장실을 이용할 때 우리는 가게에 있는 열쇠를 획득 후 간다. 다음 손님은 이전 손님이 공용 화장실에 대한 열쇠를 반납하기 전까지는 접근할 수 없다. 즉, Lock에 대한 소유권이 Lock을 가진 사람에게 있다는 것이다.

종류동시 실행 횟수외부 락 해제
Mutex1X

Semaphore

세마포어와 뮤텍스의 결정적인 차이점은 동시에 실행가능한 프로세스 or 스레드의 갯수와 외부에서 lock을 해제할 수 있는지의 여부이다.

세마포어는 다음과 같은 3가지의 값으로 상태를 제어한다.

  • initialize : 세마포어 초기화 (카운터 초기화)
  • decrement : 잠금 (카운터 감소)
  • increment : 해제 (카운터 증가)

세마포어는 공용 화장실의 칸이 여러 개 있고, 노크를 해서 화장실을 이용하고 있는 손님을 밖으로 불러낼 수 있다는 점이 다르다. Lock에 대한 소유권이 Lock을 가진 사람뿐만 아니라 외부에도 있고, 동시에 여러 작업이 수행될 수 있다는 점이 Mutex와의 결정적인 차이점이다.

위의 항목을 기억한다면 이진 세마포어와 뮤텍스는 차이가 있음을 발견할 수 있다. 이진 세마포어는 카운터의 값이 1이라서 동시에 실행가능한 프로세스 or 스레드가 뮤텍스와 같이 1개뿐이지만, 세부적인 작동 사항에서는 약간 다르다는 것을 알 수 있다.

종류동시 실행 횟수외부 락 해제
Mutex1X
SemaphoreNO

참고

  • Splin, Operating System : 뮤텍스(Mutex) / 세마포어(Semaphore) / 모니터(Monitor), https://dev-splin.github.io/cs(computer%20science)/operating%20system/OS-Mutex,Semaphore,Monitor/

  • chappi, OS는 할껀데 핵심만 합니다. 8편 Critical section (임계 구역), https://velog.io/@chappi/OS%EB%8A%94-%ED%95%A0%EA%BB%80%EB%8D%B0-%ED%95%B5%EC%8B%AC%EB%A7%8C-%ED%95%A9%EB%8B%88%EB%8B%A4.-8%ED%8E%B8-Critical-section-%EC%9E%84%EA%B3%84-%EA%B5%AC%EC%97%AD

This post is licensed under CC BY 4.0 by the author.

© . Some rights reserved.

Using the Jekyll theme Chirpy