본문 바로가기
CS 지식/운영체제

[운영체제] 운영체제 동기화 방법: 세마포어와 뮤텍스

by ghan2 2024. 9. 21.

 

1. 동기화의 필요성

병행 수행 중인 비동기적 프로세스들이 공유자원에 동시에 접근하게 된다면 문제가 발생할 수 있다. 이를 위해 동기화 과정은 꼭 필요하다. 

  • 경쟁 상태(Race Condition) 방지: 여러 스레드 또는 프로세스가 같은 자원(예: 메모리, 파일)에 동시에 접근하려고 할 때, 그들이 동시에 자원을 수정할 경우 예기치 않은 결과가 발생할 수 있다. 이를 경쟁 상태라고 하며, 이러한 상황을 방지하기 위해 동기화가 필요하다.
  • 교착 상태(Deadlock) 방지: 여러 자원에 대한 동시 접근을 제어하지 않으면, 여러 스레드가 서로의 자원을 기다리는 교착 상태에 빠질 수 있다. 동기화는 이러한 교착 상태가 발생하지 않도록 적절한 자원 접근 순서와 규칙을 정의하는 데 도움을 준다. 

운영체제에서 이러한 동기화를 구현하는 두 가지 대표적인 기법이 세마포어(Semaphore)와 뮤텍스(Mutex)이다. 이 두 기법은 공유 자원에 대한 동시 접근을 제어하고, 자원의 무결성을 유지하기 위해 사용된다. 두 개념은 유사하지만 사용 방식과 특징에서 차이가 있다. 

 

2. 세마포어(Semaphore)

세마포어는 공유 자원에 대한 접근을 제한하기 위한 동기화 도구로, 정수 값을 사용해 자원에 접근할 수 있는 스레드나 프로세스의 수를 관리한다. 

  • 값을 가진다 ! 세마포어는 내부적으로 정수 값을 가지고 있다. 이 값은 공유 자원에 동시에 접근할 수 있는 허용 가능한 개수를 의미한다. (예를 들어, 세마포어의 값이 양수이면 자원에 접근 가능한 스레드나 프로세스가 남아있음을 의미하고 0이하라면 더 이상 자원에 접근할 수 없음을 나타낸다. 이 경우에는 스레드는 대기 상태가 된다. ) 
  • P 연산(Wait): 세마포어 값을 1 감소시킨다. 만약 세마포어 값이 0 이하이면, 자원에 접근하려는 스레드는 대기한다.
  • V 연산(Signal): 세마포어 값을 1 증가시킨다. 값이 증가하면서 대기 중이던 스레드가 자원에 접근할 수 있게 된다. 

종류

  • 이진 세마포어(Binary Semaphore): 값이 0 또는 1만 가질 수 있는 세마포어로, 뮤텍스와 유사하게 자원의 배타적 제어를 담당한다.
  • 계수형 세마포어(Counting Semaphore): 값이 0 이상의 정수를 가질 수 있으며, 여러 개의 스레드가 동시에 자원에 접근할 수 있도록 한다. 예를 들어 5개의 자원을 동시에 사용할 수 있다면 세마포어 값은 5가 된다. 

사용 사례

세마포어는 여러 개의 스레드가 자원에 동시에 접근해야 할 때 주로 사용된다. 예를 들어, 서버에서 여러 클라이언트가 동시에 네트워크 자원을 이용할 수 있을 때 세마포어로 자원의 개수를 제한할 수 있다. 

 

3. 뮤텍스(Mutex)

뮤텍스는 Mutual Exclusion의 약자로, 한 번에 하나의 스레드 또는 프로세스만 공유 자원에 접근할 수 있도록 제어하는 동기화 도구다. 뮤텍스는 세마포어와 달리 자원의 소유권 개념을 가진다. 

  • 이진 상태: 뮤텍스는 두 가지 상태만 가질 수 있다. 잠금(Lock)과 해제(Unlock).
  • 소유권: 뮤텍스는 자원을 사용하는 스레드가 자원의 소유권을 가진다. 따라서 자원을 사용한 스레드만이 뮤텍스를 해제할 수 있다. 
  • 동기화 대상: 뮤텍스는 주로 단일 자원에 대한 배타적 접근을 보장하는데 사용된다. 이는 자원을 한 번에 하나의 스레드만 사용할 수 있도록 보장한다. 

사용 사례

뮤텍스는 주로 단일 자원에 대해 여러 스레드가 동시에 접근하는 것을 막는 경우에 사용된다. 예를 들어, 파일에 기록하는 과정에서 하나의 스레드만 파일을 수정할 수 있도록 보장하고자 할 때 뮤텍스를 사용한다. 

 

4. 세마포어와 뮤텍스의 차이점

 

세마포어(semaphore) vs 뮤텍스(mutex)

자원 접근 여러 스레드가 자원에 동시에 접근 가능 (계수형 세마포어) 한 번에 하나의 스레드만 자원 접근 가능
정수 값을 가짐 (0 이상) 이진 상태 (잠금/해제)
소유권 소유권 없음 (해제 주체 자유로움) 자원을 사용하는 스레드가 소유권 가짐
사용 목적 동시 접근 가능한 자원 수를 제한 배타적 자원 접근을 보장
교착 상태 잘못된 사용 시 발생 가능 잘못된 사용 시 발생 가능

'CS 지식 > 운영체제' 카테고리의 다른 글

[운영체제] 캐시  (0) 2024.11.10
[운영체제] 프로세스와 스레드  (0) 2024.08.02
[운영체제] 메모리 계층 구조  (0) 2024.06.21
[운영체제] PCB(Process Control Block)란?  (0) 2024.05.17