Skip to content

Latest commit

 

History

History
41 lines (31 loc) · 2.88 KB

semaphore_and_mutex.md

File metadata and controls

41 lines (31 loc) · 2.88 KB

세마포어와 뮤텍스

세마포어(Semaphore)

개념

  • 세마포어는 다익스트라가 제안한 교착상태 해법 중 하나로, 상호배제(Mutual Exclusion) 알고리즘을 기반으로 한다.
  • 멀티프로그래밍 환경에서 공유자원에 접근할 때, atomic한 함수로 제어되는 정수 변수(세마포어)로 접근을 제어한다.
  • 세마포어의 접근 제어에 따라 하나의 자원에는 제한된 수의 프로세스(스레드)만 접근할 수 있다.
  • 세마포어는 철학자들의 만찬 문제의 고전적인 해법이지만 모든 교착 상태를 해결하지는 못한다.

작동 원리

  • atomic하게 제어되는 정수 변수(세마포어)를 설정한다.
  • 세마포어 값이 0이면 프로세스들은 해당 자원에 접근할 수 없다.
  • 세마포어 값이 0보다 크면 프로세스는 자원에 접근하면서 세마포어 값을 1 감소시킨다.
  • 프로세스는 자원 사용을 종료할 때 세마포어 값을 1 증가시킨다.

임계 구역 (Critical Section)

  • 임계 구역 또는 공유변수 영역은 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
  • 임계 구역은 지정된 시간이 지난 후 종료된다.
  • 때문에 어떤 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다.
  • 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올때는 세마포어 같은 동기화 매커니즘이 사용된다.

바쁜 대기 (Busy Waiting)

  • 바쁜 대기란 아무 것도 하지 않는 빈 반복문을 계속 돌다가, 임계 구역에 접근 가능해지면 접근하는 방식을 말한다.
  • 빈 반복문을 계속 도는 동안 문맥교환이 발생하며 이로 인해 처리 효율이 떨어지는 단점이 있다.
  • 또한, 어떤 프로세스를 먼저 임계구역에 진입시킬지 순서를 정하기 어렵다.
  • 효율을 개선하기 위해 대기 Queue를 사용하는 방법 등이 있다.

뮤텍스 (MUTEX)

  • 상호배제(Mutual Exclusion)의 약자로, 세마포어와는 튜링동치이다. (세마포어로 뮤텍스를, 뮤텍스로 세마포어를 구현할 수 있다)
  • 세마포어는 임계 구역에서 할당 가능한 자원 수 만큼 카운트 값을 초기화하는데 이 값이 1인 경우가 뮤텍스에 해당한다.
  • 일반적으로 뮤텍스는 프로세스 내부에서만 공유되는 반면 세마포어는 여러 개의 프로세스에서 접근이 가능하다는 차이점이 있다.

Reference