ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Operating System - 세마포어(Semaphore) & 뮤텍스(Mutex)
    Computer Science/Operating System 2022. 1. 25. 13:30

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

    임계 구역(Critical Section)이란?

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

     

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

     

    세마포어(Semaphore)의 동작 과정

     

    세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다. 그리고 화장실 입구에는 현재 화장실의 빈칸 개수를 보여주는 전광판이 존재한다.

     

     

    만약 당신이 화장실에 가고 싶다면 잔광판에서 빈칸의 개수를 확인한 후, 빈칸이 1개 이상이라면 빈칸의 개수를 하나 줄인 다음 화장실로 입장해야 한다.

     

     

    모든 칸에 사람이 들어갔을 경우 전광판의 숫자는 0이 되며 이때 화장실에 들어가고자 하는 사람이 있다면 전광판의 숫자가 1로 바뀔 때까지 기다려야 한다.

     

     

    사람들이 나오면 전광판의 숫자를 1씩 더한다. 그리고 기다리던 사람은 전광판 숫자에서 다시 1을 뺀 다음 화장실을 이용하게 된다.

     

    이처럼, 세마포어는 공통으로 관리하는 하나의 값(전광판)을 이용해서 공유 자원을 관리한다.

     

    뮤텍스(Mutex)의 동작 과정

     

    뮤텍스를 이용하는 레스토랑에는 단 하나의 화장실만이 존재한다. 화장실을 이용하기 위해서는 카운터에서 열쇠를 받아가야 한다. 당신이 화장실을 이용하려고 하는데 카운터에 키가 있으면 화장실에 사람이 없다는 뜻이고, 그 열쇠를 이용해서 화장실에 들어갈 수 있다.

     

     

    당신이 화장실을 이용하고 있는 와중에 다른 남자가 화장실을 이용하려고 한다. 이 남자는 아무리 용무가 급하더라도 열쇠가 없기 때문에 화장실에 들어갈 수 없다. 결국 남자는 당신이 용무를 마친 후 나올 때까지 카운터에서 기다려야 한다.

     

     

    곧이어 다른 남자도 화장실을 이용하려고 한다. 이 남자 또한 화장실에 들어가기 위해서는 카운터에서 대기해야 한다.

     

     

    이제 당신이 화장실에서 나와 카운터에 키를 돌려놓았다. 이제 기다리던 남자들 중 맨 앞에 있던 남자는 키를 받을 수 있고 화장실을 이용할 수 있다.

     

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

     

    즉, 뮤텍스는 키에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 프로세스 혹은 스레드만이 공유자원에 접근이 가능하다.


    출처

    https://worthpreading.tistory.com/90

     

    728x90

    댓글

Designed by Tistory.