728x90
Semaphore/Mutex
- 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 여러 개의 프로세스가 동시에 접근하면 Cirtical section 문제가 발생 할 수 있다. 이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식을 취해야 한다. 동기화 도구에는 대표적으로 뮤텍스와 세마포어가 있다.
세마포어_Semaphore
- 공유된 자원의 데이터 혹은 임계영역(Critical section)등에 여러 프로세스 혹은 쓰레드가 접근하는 것을 막아준다. 사용하고 있는 쓰레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다. 공유 자원에 접근할 수 있는 프로세스/쓰레드의 최대 허용치만큼 동시에 사용자가 접근할 수 있으며, 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있다.
- 자원을 사용하지 않은 상태가 될 때, 대기하던 프로세스가 즉시 자원을 사용하고, 이미 다른 프로세스에 의해 사용중이라는 사실을 알게되면, 재시도 전에 일정시간 대기해야한다.
- 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 사용한다.
뮤텍스_Mutex
- 공유된 자원의 데이터 혹은 임계영역등에 하나의 프로세스 혹은 쓰레드가 접근하는 것을 막아준다. 임계구역을 가진 쓰레드들의 실행시간(Running time)이 겹치지 않고 각각 단독으로 실행(상호배제)되도록 하는 기술이다.
- 한 프로세스에 의해 소유될 수 있는 key를 기반으로 한 상호배제 기법이다. key에 해당하는 어떤 객체(Object)가 있으며, 이 객체를 소유한 쓰레드/프로세스만이 공유자원에 접근할 수 있다. 다중 프로세스들의 공유 리소스에 접근을 조율하기 위해 동기화(Synchronize) 또는 락(Lock)을 사용함으로써뮤텍스 객체를 두 쓰레드가 동시에 사용할 수 없다.
차이점
- 뮤텍스는 동기화 대상이 오직 1개일 때 사용하며, 세마포어는 동기화 대상이 1개 이상일 때 사용한다.
- 뮤텍스는 자원을 소유할 수 있고, 책임을 가지는 반면, 세마포어는 자원소유가 불가능하다
- 뮤텍스는 상태가 0,1 뿐이므로 Lock을 가질 수 있고, 소유하고 있는 쓰레드만이 이 뮤텍스를 해제 할 수 있다. 반면 세마포어는 세마포어를 소유하지 않은 쓰레드가 세마포어를 해제할 수 있다.
- 세마포어는 시스템 범위에 걸쳐있고, 파일 시스템 상의 파일로 존재한다. 반면 뮤텍스는 프로세스의 범위를 가지며 프로세스가 종료될 때 자동으로 clean up 된다.
- 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다.
- 뮤텍스는 binary semaphore이다.
728x90
'Computer > CS' 카테고리의 다른 글
캐시(Cache) (0) | 2024.03.11 |
---|---|
CPU 스케줄링 알고리즘 (0) | 2024.03.02 |
데드락(Dead Lock)/교착상태 (1) | 2024.03.02 |
문맥교환(Context Switching) (0) | 2024.03.01 |
묵시적 리스트(implicit list) (0) | 2024.02.18 |