[OS] 세마포어와 뮤텍스

GonnabeAlright·2022년 4월 19일
0
post-thumbnail
post-custom-banner

임계 구역(Critical Section)이란 ?

임계 구역(Critical Section)은 여러 프로세스 혹은 스레드가 작업을 수행하면서 공유된 자원을 건드리게 될 수 있는데 이때 동기화 처리를 제대로 해주지 않으면 문제가 발생할 수 있습니다. 이렇듯 공유되는 부분이 굉장히 중요한데 프로그램 코드 상에서 공유 자원에 접근하는 부분을 임계 구역(Critical Section)이라고 합니다.

이렇게 임계 구역에 여러 프로세스 및 스레드가 함부로 접근할 수 없도록 관리를 잘 해줘야 하는데, 이를 위해 사용하는 방식에 대표적으로 세마포어(Semaphore)뮤텍스(Mutex)가 있습니다.

세마포어(Semaphore)란 ?

세마포어(Semaphore)는 공유 자원에 여러 프로세스가 접근하는 것을 막는 것을 말합니다. 세마포어는 이를 위해서 현재 공유 자원의 상태를 나타내는 카운터 변수를 사용하게 됩니다. 이러한 변수는 실제로 운영체제 혹은 커널에 값으로 저장되며, 각 프로세스는 이를 확인할 수 있고 값을 변경할 수도 있게 됩니다. 각각의 프로세스들은 이런 상태값을 확인하여 자원을 즉시 사용할 수 있는 상태라면 즉시 사용할 수 있고 만약에 누군가가 자원을 사용중이라는 것을 인지하게 되면 반드시 일정 시간을 기다렸다가 사용하게 됩니다. 이런 방식을 통해 여러 프로세스가 공유 자원에 한꺼번에 접근하는 것을 막을 수 있습니다. 큰 특징으로는 세마포어는 뒤에 나올 뮤텍스와 다르게 0 혹은 1과 같은 이진수 외에 더 큰 숫자를 가지게 할 수도 있어 꼭 1개의 프로세스만이 자원을 점유하지는 않습니다. 카운터 변수의 값이 해당 공유 자원에 접근할 수 있는 임계치가 되며 이를 조정하여 접근할 수 있는 프로세스의 개수를 통제할 수 있습니다.

뮤텍스(Mutex)란 ?

뮤텍스(Mutex)는 상호 배제(Mutual Exclusion)를 뜻하는 말로, Critical Section을 가지는 쓰레드들의 Running time이 서로 겹치지 않도록 해주는 기법입니다. 세마 포어와 가장 큰 차이점으로는 공유 자원에 접근할 수 있는 대상의 개수 차이입니다. 뮤텍스는 1개의 스레드만이 공유 자원에 접근할 수 있도록 합니다. 뮤텍스에서는 Lock과 Unlock개념을 사용합니다. 즉, 이진 세마포어(Binary Semaphore)와 같은 개념입니다. 자원을 점유하고 있는 대상이 Lock을 할 수 있는 권한을 가지고 있어서 자원을 점유하기 시작할 때 들어가서 Lock을 걸어버립니다. 이렇게 되면 다른 대상들은 Unlock 상태가 될때까지 기다렸다가 나중에 해당 공유 자원에 접근할 수 있게 됩니다.

뮤텍스(Mutex)는 이진 세마포어(Binary Semaphore)로 세마포어의 일종입니다. 가장 큰 차이점으로는 뮤텍스는 오직 1개의 프로세스 혹은 스레드만이 공유 자원에 접근할 수 있고, 세마포어는 지정된 변수의 값만큼 접근할 수 있습니다. 또한 세마포어는 운영체제 혹은 커널 단위에서 해당 리소스 변수가 관리되어 해당 공유 자원을 사용 중인 대상 뿐만 아니라 다른 프로세스 및 스레드도 잠금 상태를 해제할 수 있지만 뮤텍스는 프로세스 단에서 관리되고 해당 변수(Lock)을 가지고 있기 때문에 Lock을 가지고 있는 변수만이 Unlock을 할 수 있습니다.

post-custom-banner

0개의 댓글