[OS] 뮤텍스(Mutex) & 세마포어(Semaphore)

foresec·2023년 7월 27일
0

Computer Science

목록 보기
24/28

공유된 자원에 여러 프로세스가 동시에 접근하면 Critical Section문제가 발생할 수 있음. 이때 공유된 자원의 데이터는 한번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식이 필요함

임계 영역(Critical Section)

여러 프로세스가 데이터를 공유하며 수행할 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 블록. 프로그래밍 시, 성능 향상을 위해 임계영역을 최소화하는 설계를 해야 함

뮤텍스(Mutex)

동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘

임계 영역을 가진 스레드을의 실행시간이 서로 겹치지 않고 각각 단독으로 실행(상호배제)되도록 하는 기술

한 프로세스에 의해 소유될 수 있는 key를 기반으로 한 상호배제 기법
(key에 해당하는 어떤 객체가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유자원에 접근이 가능함)

해당 접근을 조율하기 위해 lock과 unlock을 사용함
lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
unlock : 현재 임계 구역을 모두 사용했음을 알림. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 )

접근을 조율하기 위해 동기화(Synchronization) 또는 락(Lock)을 사용
뮤텍스 객체를 두 스레드가 동시에 사용할 수 없음

대표적인 알고리즘

데커 알고리즘

flag와 turn 변수를 통해 임계 구역에 들어갈 프로세스/스레드를 결정하는 방식

피터슨 알고리즘

데커와 유사하지만, 상대방 프로세스/스레드에게 진입 기회를 양보하는 것에 차이가 있음

베이커리 알고리즘

여러 프로세스/스레드에 대한 처리가 가능한 알고리즘. 가장 작은 수의 번호표를 가지고 있는 프로세스가 임계 구역에 진입한다.

세마포어(Sepaphore)

멀티 프로그래밍 환경에서 공유된 자원에 대한 접근을 제한하는 방법

공유자원의 상태를 나타낼 수 있는 카운터로 생각할 때
사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제 달성
운영체제 또는 커널의 한 지정된 저장장치 내의 값
일반적으로 비교적 긴시간을 확보하는 리소스에 대한 이용

공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있음

각 프로세스는 세마포어의 값을 확인하고 변경할 수 있음

자원을 사용하지 않는 상태가 될 때, 대기하던 프로세스가 즉시 자원을 사용

이미 다른 프로세스에 의해 사용중이라는 사실을 알게 되면, 재시도 전에 일정시간 대기해야 함. 세마포어를 사용하는 프로세스는 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 대기하도록 해야 함

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

1. 동기화 대상의 갯수

뮤텍스는 동기화 대상이 1개일 때 사용
세마포어는 동기화 대상이 1개 이상일 때 사용

2. 세마포어는 뮤텍스가 될 수 있지만 반대는 불가

뮤텍스는 0,1로 이루어진 이진 상태를 가지므로 Binary Semaphore
Mutex는 상태가 0, 1 뿐이므로 Lock을 가질 수 있고, 소유하고 있는 스레드만이 이 Mutex를 해제할 수 있습니다. 반면 Semaphore는 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있음

3. Mutex는 자원 소유 가능 + 책임을 가지는 반면, Semaphore는 자원 소유 불가

반면, Semaphore는 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있음

4. Semaphore는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재

반면, Mutex는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 Clean up

둘다 완벽한 기법은 아니지만 상호배제를 위한 기본적인 문법


참고
https://chelseashin.tistory.com/40
https://heeonii.tistory.com/14

profile
왼쪽 태그보다 시리즈 위주로 구분

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

좋은 정보 감사합니다

답글 달기