세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

당신이 화장실에서 행복한 시간을 보내고 있는데 다른 테이블에 있는 어떤 남자가 화장실에 가고 싶어졌다. 이 남자는 아무리 용무가 급하더라도 열쇠가 없기 때문에 화장실에 들어갈 수 없다. 결국 남자는 당신이 용무를 마친 후 나올 때까지 카운터에서 기다려야 한다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

곧이어 옆 테이블에 있는 남자도 화장실에 가고 싶어졌고 이 남자 또한 화장실에 들어가기 위해서는 카운터에서 대기해야한다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

이제 당신이 화장실에서 나와 카운터에 키를 돌려놓았다. 이제 기다리던 사람들 중 맨 앞에있던 사람은 키를 받을 수 있고 이를 이용해 화장실에 갈 수 있다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

이것이 뮤텍스가 동작하는 방식이다. 화장실을 이용하는 사람은 프로세스 혹은 쓰레드이며 화장실은 공유자원, 화장실 키는 공유자원에 접근하기 위해 필요한 어떤 오브젝트이다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

즉 뮤텍스는 Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 (쓰레드,프로세스) 만이 공유자원에 접근할 수 있다.

세마포어는 손님이 화장실을 좀 더 쉽게 이용할 수 있는 레스토랑이다. 세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다. 그리고 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여주는 전광판이 있다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai

만약 당신이 화장실에 가고 싶다면 입구에서 빈 칸의 개수를 확인하고 빈 칸이 1개 이상이라면 빈칸의 개수를 하나 뺀 다음에 화장실로 입장해야 한다. 그리고 나올 때 빈 칸의 개수를 하나 더해준다.

세마포어와 뮤텍스의 기본적인 차이점은 세마포어가 시그널링 메커니즘이라는 것입니다. 즉, 프로세스는 wait () 및 signal () 작업을 수행하여 자원 획득 또는 해제 여부를 나타냅니다. 뮤텍스는 잠금 메커니즘이며, 프로세스는 잠금을 획득해야합니다. 뮤텍스 개체 (Mutex Object). 세마포어와 뮤텍스 사이에는 약간의 차이점이 있습니다. 아래에 나와있는 비교 차트의 도움으로 그것들을 논의하겠습니다.

비교 차트

비교의 근거신호기뮤텍스기본세마포는 신호 메커니즘입니다.뮤텍스는 잠금 메커니즘입니다.존재세마포어는 정수 변수입니다.뮤텍스는 객체입니다.기능세마포어 (Semaphore)는 여러 프로그램 스레드가 유한 한 자원 인스턴스에 액세스 할 수있게합니다.뮤텍스 (Mutex)는 여러 프로그램 스레드가 단일 리소스에 액세스 할 수는 있지만 동시에 수행 할 수는 없습니다.소유권세마포어 값은 자원을 얻거나 해제하는 프로세스에 의해 변경 될 수 있습니다.뮤텍스 객체 잠금은 잠금을 획득 한 프로세스에 의해서만 해제됩니다.분류세마포어는 카운팅 세마포어와 바이너리 세마포어로 분류 할 수 있습니다.뮤텍스는 더 이상 분류되지 않습니다.조작세마포어 값은 wait () 및 signal () 연산을 사용하여 수정됩니다.뮤텍스 객체는 리소스를 요청하거나 해제하는 프로세스에 의해 잠기거나 잠금 해제됩니다.자원 점유모든 리소스가 사용 중이면 리소스를 요청하는 프로세스는 wait () 작업을 수행하고 세마포어 카운트가 1보다 커질 때까지 자체를 차단합니다.뮤텍스 객체가 이미 잠겨 있으면 잠금을 해제 할 때까지 리소스를 요청하는 프로세스가 대기하고 시스템에 대기합니다.

세마포어 정의

세마포는 프로세스 동기화 도구입니다. 세마포어는 일반적으로 시스템에있는 자원의 수로 초기화되는 정수 변수 S 이며 세마포어 값은 초기화와 별도로 wait () 및 signal ()의 두 함수로만 수정할 수 있습니다.

wait () 및 signal () 작업은 세마포어의 값을 개별적으로 수정합니다. 즉, 프로세스가 세마포 값을 수정할 때 다른 프로세스가 세마포 값을 동시에 수정할 수 없음을 의미합니다. 세마포어는 세 가지 범주의 세마포 및 이진 세마포 계산 방식으로 운영 체제에서 구별됩니다.

세마포어 계산 에서, 세마포어 S 값은 시스템에있는 자원 의 수로 초기화됩니다. 프로세스가 리소스에 액세스하기를 원할 때마다 세마포어에 대한 wait () 작업을 수행하고 세마포어 값을 1 씩 감소시킵니다 . 리소스를 해제하면 세마포어에서 signal () 작업을 수행하고 세마포어 값을 1 씩 증가시킵니다 . 세마포어 카운트가 0이되면 프로세스에 의해 모든 리소스가 점유되었음을 의미합니다. 세마포어 카운트가 0 일 때 프로세스가 리소스를 사용해야 할 경우 wait ()를 실행하고 세마포 값이 0보다 커질 때까지 차단 됩니다.

바이너리 세마포어 에서 세마포 값의 범위는 0 과 1 사이입니다. 뮤텍스 잠금과 비슷하지만 뮤텍스는 잠금 메커니즘이지만 세마포는 신호 메커니즘입니다. 바이너리 세마포어에서 프로세스가 리소스에 액세스하려고하면 세마포어에서 wait () 작업을 수행하고 세마포어 값을 1에서 0으로 감소시킵니다. 리소스를 해제하면 세마포어에서 signal () 작업을 수행하고 증가합니다 세마포어의 값이 0이고 프로세스가 리소스에 액세스하려면 wait () 작업을 수행하고 리소스를 사용하는 현재 프로세스가 리소스를 해제 할 때까지 프로세스를 차단합니다.

뮤텍스의 정의

상호 배제 오브젝트 는 곧 뮤텍스 (Mutex)라고합니다. 상호 배제라는 용어에서 한 번에 하나의 프로세스 만 주어진 리소스에 액세스 할 수 있다는 것을 이해할 수 있습니다. 뮤텍스 개체를 사용하면 여러 프로그램 스레드가 동시에 하나가 아닌 동일한 리소스를 사용할 수 있습니다.

프로그램이 시작될 때 주어진 자원에 대한 뮤텍스 객체를 생성하도록 시스템에 요청합니다. 시스템은 고유 한 이름 또는 ID로 mutex 오브젝트를 작성합니다. 프로그램 스레드가 뮤텍스 개체에서 잠금을 차지하는 리소스를 사용하려고 할 때마다 리소스를 사용하고 사용 후 뮤텍스 개체에 대한 잠금을 해제합니다. 다음 프로세스는 뮤텍스 객체에 대한 잠금을 획득 할 수 있습니다.

한편, 프로세스는 다른 스레드 / 프로세스가 해당 자원에 액세스 할 수없는 뮤텍스 객체에 대한 잠금을 획득했습니다. 뮤텍스 객체가 이미 잠겨 있다면, 뮤텍스 객체에 대한 락을 획득하고자하는 프로세스는 기다려야하며, 뮤텍스 객체가 잠금 해제 될 때까지 시스템에 의해 큐잉된다.

임계 구역은 다수의 프로세스가 데이터를 공유하며 실행되는 상황에서 각 프로세스가 공유 자원에 접근하는 코드 블록을 의미합니다. 공유 자원이라는 말에서 대충 눈치 채셨겠지만, 다수의 프로세스가 동시에 공유 자원에 접근하여 사용하면 문제가 생기게 됩니다.(이상한 결과가 나온다던가..)


세마포어(Semphore)란?

세마포어는 저런 임계 구역에서 발생할 수 있는 문제를 해결하기 위해 등장한 개념입니다.

어떤 공유 자원에 대해 동시에 접근할 수 있는 프로세스/스레드의 수를 변수로 제한하여 공유 자원의 오염을 막습니다. 이 변수는 운영체제나 커널에 실제로 저장되며, 각 프로세스가 이 값을 확인하고 변경할 수 있습니다.

만약 어떤 공유 자원의 세마포어가 3이라면 해당 자원은 동시에 최대 3개의 프로세스가 접근 가능하다는 의미입니다.

세마포어 뮤텍스 차이 - semapo-eo myutegseu chai
좋은건 좀 나눠씁시다


뮤텍스(Mutex)란?

뮤텍스는 상호 배제(Mutual Exclusion)의 줄임말 입니다. 파이썬의 GIL이 이 뮤텍스에 속합니다. 뮤텍스는 이진(Binary) 세마포어이기도 하며 세마포어의 특성들을 어느 정도 가지고 있지만 확연한 차이점이 존재합니다.

· 뮤텍스는 단 하나의 프로세스/스레드만 접근 가능하다.

- 뮤텍스가 사용되는 임계 구역은 공유가 불가능한 자원입니다. 따라서 한번에 단 하나의 프로세스/스레드만 접근이 가능하며, 사용중인 프로세스/스레드가 락(Lock)을 걸어버려 다른 프로세스/스레드의 접근을 방지합니다.

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

2020-04-06

  • OS

해당 Post는 Semaphore(세마포어)와 Mutex(뮤텍스)의 차이점를 정리한 파일이다.


공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다.

이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다.

이를 위하여 고안된 것이 바로 Semaphore 세마포어 입니다.

임계 구역(Critical Section)

여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

공유 데이터를 여러 프로세스가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에,

한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.

세마포어의 동작 원리

세마포어의 동작 원리를 알려면 세마포어 변수, semWait 연산, semSignal 연산에 대해 먼저 알아야 합니다.

세마포어는 정수 값을 가지는 변수로 볼 수 있습니다.

그 정수 값은 접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 합니다.

뮤텍스의 동작 원리

뮤텍스는 세마포어와 마찬가지로 병행 처리를 위한 동기화 기법 중 하나입니다.

이진 세마포어와 같이 초기값을 1과 0으로 가집니다.

임계영역에 들어갈 때 락(lock)을 걸어 다른 프로세스(혹은 쓰레드)가 접근하지 못하도록 하고,

임계영역에서 나와 해당 락을 해제(unlock) 합니다.

결론 : 뮤텍스와 세마포어의 차이는?

세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(또는 쓰레드)가 접근할 수 있습니다.

반면에 뮤텍스는 오직 1개만의 프로세스(또는 쓰레드)만 접근할 수 있습니다.

현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다.

하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.


« BOJ 11054 Array(배열)와 Linkedlist(연결리스트)의 차이점은? »

Please enable JavaScript to view the comments powered by Disqus.