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

gang_shik·2022년 3월 30일
0

Operating System

목록 보기
10/14
post-thumbnail

Semaphore

  • 멀티 프로그래밍 환경에서 공유된 자원에 대한 접근을 제한하는 방법

  • 공유자원의 상태를 나타낼 수 있는 카운터로 생각할 때 사용하고 있는 스레드,프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성함

    • 운영체제 또는 커널의 한 지정된 저장장치 내의 값

    • 일반적으로 비교적 긴 시간을 확보하는 리소스에 대한 이용

    • 이는 결국 운영체제의 리소스를 경쟁적으로 사용하는 다중 프로세스에서 행동을 조정하거나 또는 동기화하는 기술임

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

  • 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있음, 자원을 사용하지 않는 상태가 될 때 대기하던 프로세스가 즉시 자원을 사용함

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

  • 세마포어를 사용하는 프로세스는 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 대기하도록 해야함

  • 세마포어는 이진수를 사용하거나 추가적인 값을 가질 수 있음


Mutex

  • 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘

  • 임계구역(Critical Section)을 가진 스레드들이 실행시간이 서로 겹치지 않고 각각 단독으로 실행(상호배제)되도록하는 기술

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

    • Key에 해당하는 어떤 객체가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유자원에 접근할 수 있음
  • 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 동기화 또는 락을 사용

  • 즉, 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없음

임계영역?

임계영역

임계영역은 여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 블록을 의미함

여기서 여러 프로세스가 동일 자원을 동시에 참조하여 값(공유하는 변수명, 파일 등)이 오염될 위험 가능성이 있는 영역임

스레드가 이 임계구역을 가지고 있는 것이고 이때 동시에 참조하여 값이 오염될 가능성이 있기 때문에 이런 부분을 방지하기 위해서 뮤텍스를 사용하는 것


정리

profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다

0개의 댓글