세마포어와 뮤텍스는 동기화 도구로 여러 프로세스나 스레드가 동시에 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하기 위해 사용된다. 동시성 제어에서 자원 접근을 조절하는데 사용된다.
ㅇ 세마포어
정의
세마포어는 특정 자원에 접근할 수 있는 스레드의 수를 제어하기 위한 동기화 기법이다. 정수 값으로 표현되며 이 값은 공유 자원의 사용 가능 개수를 나타낸다.
동작 원리
세마포어는 주로 두 가지 연산인 P() (wait) 와 V() (signal)를 통해 동작한다.
- P()
세마포어 값을 감소시켜 자원을 요청한다. 세마포어 값이 0 이하면 스레드는 대기상태가 된다. - V()
세마포어 값을 증가시켜 자원을 반환하고 대기중인 스레드가 있으면 깨운다.
세마포어는 카운팅 세마포어와 이진 세마포어로 나눌 수 있다.
- 카운팅 세마포어
세마포어 값이 0 이상의 값을 가지며, 여러 스레드가 자원에 접근할 수 있도록 허용한다. - 이진 세마포어(바이너리 세마포어)
세마포어 값이 0 또는 1만 가질 수 있어 뮤텍스와 유사하게 동작한다.
ㅇ 뮤텍스
정의
뮤텍스는 상호 배제를 위한 동기화 도구로, 공유 자원에 대한 단독 접근을 보장한다. 한 번에 하나의 스레드만 뮤텍스를 획득할 수 있다.
동작 원리
뮤텍스는 잠금(lock)과 해제(Unlock) 두 가지 연산을 사용하여 동작한다.
- 잠금(Lock)
뮤텍스를 잠궈 다른 스레드가 자원에 접근하지 못하도록 한다. 뮤텍스가 이미 잠긴 상태라면 스레드는 대기 상태가된다. - 해제(Unlock)
뮤텍스를 해제하여 다른 스레드가 자원에 접근할 수 있도록 한다. - 뮤텍스는 소유권이 있으며, 잠금을 획득한 스레드만 해제를 할 수 있다. 소유권을 명확히 함으로 잘못된 사용을 방지한다.
ㅇ 차이점
세마포어 | 뮤텍스 | |
자원관리 | 여러 개의 자원을 관리할 수 있다 | 단일 자원에 대한 단독 접근을 보장 |
값 | 정수 값 0이상 | 이진 값(잠김/해제) |
소유권 | 소유권 개념 X | 소유권 존재 잠금을 획득한 스레드만 해제 가능 |
사용 목적 | 여러 스레드가 자원을 제한적으로 사용할 때 | 상호 배제를 보장하여 단일 스레드가 자원을 독점하도록 할 때 |
잠금/해제 방식 | P() V() 연산 사용 | Lock() Unlock() 연산 사용 |
동작 방식 | 카운팅 또는 이진 값을 통해 접근 제한 | 이진 값을 통해 단독 접근 보장 |
'OS' 카테고리의 다른 글
CS OS Dead Lock(교착상태) (0) | 2024.10.22 |
---|---|
CS OS IPC(Inter Process Communication) (0) | 2024.10.22 |
CS OS PCB & Context Switching (2) | 2024.10.22 |
CS OS 인터럽트 (0) | 2024.10.22 |
[OS] 프로세스 & 스레드 (0) | 2024.10.22 |