semaphore

agnusdei·2024년 11월 9일
0

Hardware & Software

목록 보기
115/136

세마포어(Semaphore)는 다중 프로세스 환경에서 동기화(Synchronization)를 위해 사용하는 기법으로, 특히 임계구역(Critical Section) 문제를 해결하기 위해 개발되었습니다. 세마포어는 프로세스 간 상호 배제(mutual exclusion)와 자원 관리를 돕는 역할을 합니다.

세마포어의 작동 방식과 종류, 장단점을 순서대로 설명하겠습니다.

  1. 세마포어의 작동 원리

세마포어는 정수형 변수인 카운터(counter)를 사용하여 프로세스가 자원에 접근할 수 있는지를 관리합니다. 이 카운터 값은 특정 자원의 사용 가능 여부를 나타내며, 세마포어 연산을 통해 접근을 제어합니다.
• P 연산 (wait): 자원 접근 전 수행되는 연산으로, 카운터 값을 1 감소시킵니다. 카운터가 0이면 자원이 모두 점유된 상태로, 자원이 해제될 때까지 대기합니다.
• V 연산 (signal): 자원 접근 후 수행되는 연산으로, 카운터 값을 1 증가시킵니다. 자원이 해제되어 다른 프로세스가 사용할 수 있음을 알립니다.

이 두 연산을 통해 여러 프로세스가 자원을 안전하게 공유할 수 있습니다.

  1. 세마포어의 종류

세마포어는 용도와 사용 방식에 따라 이진 세마포어(Binary Semaphore)계수 세마포어(Counting Semaphore)로 나눌 수 있습니다.
1. 이진 세마포어 (Binary Semaphore)
• 이진 세마포어는 카운터 값이 0과 1로 제한되어 있어, 한 번에 하나의 프로세스만 자원을 사용할 수 있도록 상호 배제를 보장합니다.
• 카운터가 1이면 자원이 사용 가능하며, 프로세스가 자원을 점유하면 카운터가 0으로 변합니다.
• 임계구역 문제 해결에 주로 사용됩니다.
2. 계수 세마포어 (Counting Semaphore)
• 계수 세마포어는 카운터 값에 상한이 없으며, 자원의 개수를 나타냅니다.
• 여러 프로세스가 동시에 접근할 수 있는 자원을 관리할 때 사용됩니다.
• 예를 들어, 5개의 동일한 자원을 관리할 때, 카운터를 5로 설정하고, 프로세스가 자원을 사용할 때마다 카운터가 1씩 줄어들고, 자원을 해제할 때마다 1씩 늘어납니다.

  1. 세마포어의 장점과 단점

장점

•	상호 배제 보장: 임계구역에서 여러 프로세스가 동시에 실행되지 않도록 하여 데이터의 무결성을 보장합니다.
•	유연성: 이진 세마포어와 계수 세마포어를 통해 다양한 자원 관리가 가능합니다.
•	대기 관리: 자원 해제 시 대기 중인 프로세스가 자원을 사용할 수 있도록 하여 자원을 효율적으로 관리할 수 있습니다.

단점

•	데드락(Deadlock): P, V 연산의 잘못된 사용으로 인해 프로세스가 서로의 자원을 무한정 기다리는 상황이 발생할 수 있습니다.
•	바쁜 대기(Busy Waiting): 대기 중인 프로세스가 CPU를 점유하면서 계속 확인하는 경우가 발생할 수 있습니다. 이는 CPU 자원을 낭비하게 만듭니다.
•	복잡성: 세마포어가 많아지면 관리가 어려워지고, 프로그래머가 실수로 잘못된 연산을 사용하면 프로그램 오류를 일으킬 수 있습니다.

요약

세마포어는 다중 프로세스 환경에서 자원에 대한 동기화를 보장하는 기법으로, 상호 배제와 자원 관리를 위해 사용됩니다. 이진 세마포어와 계수 세마포어가 있으며, 상호 배제를 보장하고 자원의 효율적 사용을 가능하게 하지만 데드락과 바쁜 대기 등의 문제를 초래할 수 있습니다.

0개의 댓글