본문 바로가기
소프트웨어 공학 용어 정리

[SW 용어] Mutex, Semaphore 정리

by minhyeok.lee 2024. 5. 28.
반응형

Mutex(뮤텍스)와 Semaphore(세마포어)

1. 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근할 때 필요한 임계 영역 문제가 발생할 수 있다.

2. 이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식을 취해야 한다.

3. 동기화 도구에는 대표적으로 뮤텍스(Mutex)와 세마포어(Semaphore)가 있다.

4. 이들은 모두 공유된 자원의 데이터를 여러 스레드/프로세스가 접근하는 것을 막는 역할을 한다.

2024.05.21 - [소프트웨어 공학 용어 정리] - [SW 용어] 동기화(Synchronization) 정리

 

[SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)

동기화(Synchronization)1. 동기화는 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 의미한다.2. 병행성과 관련해서 공유되는 자원에 대한 이해와 공유자원 사용과 관련해서 생길

kfdd6630.tistory.com

 


Mutex

뮤텍스의 역할

1. 공유된 자원의 데이터 혹은 임계 영역에 하나의 프로세스, 스레드가 접근하는 것을 막아준다.

2. 동기화 대상은 하나이며 임계 영역을 가진 스레드들의 실행시간이 서로 겹치지 않게한다.

3. 각각의 스레드가 단독으로 실행하게 한다. (상호배제-Mutual Exclusion)

4. 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제 기법이다.

5. Key에 해당하는 어떤 객체(Object)가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유자원에 접근할 수 있다.

6. 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 동기화(Synchronization) 또는 락(Lock)을 사용함으로써 7. 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없다.


뮤텍스 화장실 예제

1. 뮤텍스는 화장실이 하나인데 문은 꼭 하나뿐인 키를 이용하여 열어야 한다.

2. 화장실에 들어갈 땐 키를 들고 들어가야하며 나온다면 키 보관함에 두어야 한다.

3  화장실을 가기 위해서는 키보관함에 있는 열쇠를 가져가야 한다.

  3-1. 키가 있으면 화장실에 사람이 없으니 키를 들고 화장실에 들어가면 된다.

  3-2. 키가 없다면 화장실에 사람이 있으니 화장실을 사용할 수 없다.

4. 화장실을 기다리는 사람이 있다면 뒤에 서서 기다려야 한다.

5. 앞사람이 화장실에서 나와 키를 놓는다면 기다리던 사람들 중 맨 앞에 있던 사람이 키를 받아 화장실에 갈 수 있다.


위 예제가 이것이 뮤텍스가 동작하는 방식이고 각각이 나타내는 것은 아래와 같다.

1. 화장실을 이용하는 사람 = 프로세스 혹은 쓰레드

2. 화장실 = 공유자원

3. 화장실 키 = 공유자원에 접근하기 위해 필요한 key이다.

4. 키가 존재하지 않고 화장실에 사람이 들어가 있는 상태 = Lock()

5. 키가 존재하여 화장실에 들어갈 수 있는 상태 = Unlock()


정리

1. 뮤텍스는 화장실 키에 해당하는 key가 존재한다.

2. 이 key 소유한 프로세스, 스레드만이 화장실 문을 열 듯 공유자원을 에 접근할 수 있다.

3. 어떤 프로세스, 스레드가 공유자원에 접근한 상태는 화장실 문이 잠긴 것처럼 Lock() 상태이고 접근하지 않은 상태는 화장실 문이 열려있는 상태 즉 Unlock() 상태이다. 


Semaphore


세마포어의 역할

1. 공유된 자원의 데이터나 임계 영역에 여러 프로세스, 스레드의 접근하는 것을 막아준다.

2. 동기화 대상이 하나 이상이다.

3. 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.

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

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

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

7. 이미 다른 프로세스에 의해 사용중이라는 사실을 알게 되면, 재시도 전에 일정시간 대기해야 한다.

8. 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 사용하게 된다.


세마포어 화장실 예제

1. 세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다.

2. 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여주는 보드가 있다.

3. 화장실에 들어갈 때 입구에서 빈 칸이 1개 이상이라면 빈칸의 개수를 하나 뺀 다음에 화장실로 입장한다.

4. 화장실에서 나올때 입구에서 빈 칸의 개수를 하나 더해준다.

5. 모든 칸에 사람이 들어갔을 경우 빈 칸의 개수는 0이 된다.

6. 빈칸이 0일 때 화장실에 들어가려 한다면 빈 칸의 개수가 1이상의 양수로 바뀔 때까지 기다려야 한다.

 

ps. 주차장의 비어있는 자리를 생각하면 편하다.


세마포어는 공통으로 관리하는 하나의 값(ex. 화장실의 빈 칸을 보여주는 보드)을 이용해 상호배제를 달성한다.

세마포어도 뮤텍스와 똑같이 화장실이 공유자원이며 사람들이 스레드, 프로세스이다.

화장실 빈칸의 개수는 현재 공유자원에 접근할 수 있는 스레드,프로세스의 개수를 나타낸다.


Mutex(뮤텍스)와 Semaphore(세마포어) 차이점

 

1. 동기화 대상의 개수 즉, 위에서 예시든 화장실의 갯수이다.

2. 뮤텍스는 동기화 대상이 오직 1개일 때 사용, 세마포어는 동기화 대상이 1개 이상일 때 사용한다.

3. 뮤텍스는 자원을 소유할 수 있고, 책임을 가지는 반면 세마포어는 자원 소유가 불가하다.

4. 뮤텍스는 Lock()상태를 가질 수 있고, key를 소유하고 있는 스레드만이 이 뮤텍스를 해제할 수 있다.

5. 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.

6. 운영체제에서 세마포어는 시스템 범위에 걸쳐 있고, 파일로 존재한다.

7. 운영체제에서 뮤텍스는 프로세스의 범위를 가지며 프로세스가 종료될 때 자동으로 Clean up된다.

 

Mutex(뮤텍스)와 Semaphore(세마포어) 공통점

1. 상호배제를 위한 기본적인 문법이다.

2. 데이터 무결성을 보장할 수는 없다.

3. 모든 교착상태를 해결할 수 없다.

4. 좀 더 로직적으로 추가하여 개선된 성능을 가지게 만드는 것은 개발자의 역량이다.

반응형

댓글