공부/OS

세마포어(semaphore)란?

셩잇님 2023. 6. 3. 14:57
반응형

 

 

1. 세마포어란?

컴퓨터 과학에서 세마포어는 다중 스레드 또는 다중 프로세스 환경에서 공유 리소스에 대한 동시 액세스를 관리하는 데 사용되는 동기화 기본 요소입니다. 세마포어는 스레드 또는 프로세스가 경쟁 조건을 피하고 상호 배제를 보장하기 위해 통신하고 활동을 조정할 수 있도록 하는 신호 메커니즘입니다. 또한 멀티태스킹 운영 체제와 같은 동시 시스템에서 중요한 섹션 문제를 방지하는 데 사용되는 변수 또는 추상 데이터 유형입니다.

 

2. 세마포어의 속성

카운팅 세마포어: 카운팅 세마포어는 음수가 아닌 값을 취할 수 있는 정수 변수입니다. 사용 가능한 리소스의 수 또는 공유 리소스에 동시에 액세스할 수 있는 스레드 또는 프로세스의 최대 수를 나타냅니다. 세마포어의 초기 값은 사용 가능한 최대 리소스 수로 설정됩니다.

세마포어에 대한 연산: 세마포어는 두 가지 기본 연산을 지원합니다.

  • 대기(P) 연산: "다운" 또는 "획득"이라고도 하는 대기 연산은 세마포어의 값을 1씩 감소시킵니다. 세마포어의 값이 음수가 되면 대기 연산을 호출하는 스레드 또는 프로세스는 차단되고 세마포어 값이 다시 음수가 아닐 때까지 대기 상태가 됩니다.
  • 신호(V) 연산: "업" 또는 "릴리스"라고도 하는 신호 연산은 세마포어의 값을 1씩 증가시킵니다. 리소스를 기다리며 세마포어에서 차단된 스레드나 프로세스가 있는 경우, 신호 연산은 그 중 하나를 깨워 계속 진행할 수 있도록 합니다.

 

이러한 연산은 일반적으로 원자적 연산이므로 분할할 수 없는 단일 연산으로 실행되므로 스레드 안전이 보장됩니다.

상호 배제: 세마포어를 사용하면 상호 배제를 적용하여 한 번에 하나의 스레드 또는 프로세스만 공유 리소스에 액세스할 수 있도록 할 수 있습니다. 값 1로 초기화된 세마포어를 흔히 이진 세마포어라고 하며 뮤텍스(상호 제외 잠금)로 사용할 수 있습니다.

동기화 및 조정: 세마포어는 여러 스레드 또는 프로세스 간의 동기화 및 조정에도 사용할 수 있습니다. 예를 들어, 세마포어를 사용하여 특정 리소스에 동시에 액세스할 수 있는 스레드 수를 제한하거나 서로 다른 스레드 간의 실행 순서를 조정할 수 있습니다.

교착 상태와 기아: 세마포어를 부적절하게 사용하면 스레드 또는 프로세스가 무기한 차단되는 교착 상태 또는 특정 스레드 또는 프로세스가 공유 리소스에 지속적으로 액세스할 수 없는 스타비네이션이 발생할 수 있습니다. 이러한 문제를 방지하려면 세마포어를 신중하게 설계하고 적절하게 사용해야 합니다.

 

3. 세마포어의 장점

경쟁 조건과 교착 상태를 방지하는 데 도움이 될 수 있습니다.
한 번에 하나의 프로세스만 리소스에 액세스하도록 보장하여 동시 프로그램의 성능을 향상시킬 수 있습니다.
공유 리소스를 명확하게 표현하고 관리할 수 있는 방법을 제공함으로써 프로그램을 더 쉽게 이해하고 유지 관리할 수 있습니다.

 

4. 세마포어의 단점
세마포어의 상태를 추적하기 위해 추가적인 부기 작업이 필요하므로 프로그램에 오버헤드가 추가될 수 있습니다.
세마포어를 제대로 사용하지 않으면 교착 상태가 발생할 수 있으므로 올바르게 사용하기 어려울 수 있습니다.
여러 프로세스가 동일한 리소스에 대한 액세스를 놓고 경쟁할 수 있으므로 경합의 원인이 될 수 있습니다.

 

5. 결론
세마포어는 시 실행 프로그램의 성능과 안정성을 향상시키는 데 사용할 수 있는 강력한 도구입니다. 또한 유연한 동기화 메커니즘을 제공하며 동시 프로그래밍, 운영 체제, 병렬 컴퓨팅, 리소스 관리 등 다양한 영역에서 활용되고 있습니다. 세마포어는 공유 리소스에 대한 액세스를 제어하고, 동시 활동을 조정하며, 잘못된 프로그램 동작으로 이어질 수 있는 경쟁 조건을 방지하는 데 사용됩니다. 그러나 세마포어는 오버헤드와 복잡성을 유발할 수 있으므로 신중하게 사용해야 합니다.

 

 

 

반응형

'공부 > OS' 카테고리의 다른 글

뮤텍스(Mutex)와 세마포어(Semaphores)의 차이점  (0) 2023.06.04
뮤텍스(Mutex)란?  (0) 2023.06.04
운영 체제(OS)란?  (1) 2023.06.03
프로세스(Process)와 쓰레드(Thread)의 차이점  (0) 2023.04.09
프로세스(Process)란?  (0) 2023.04.09