세마포어(semaphore)
세마포(semaphore) : 동기화 도구 (피터슨은 이론적인 방법이라고 볼수 있으며 보통 사용하는 것은 세마포이다.) P와 V 연산 이용 // 공유자원에 대해 하나의 S (세마포)를 줌
세마포어(Semaphore)는 병행 프로그래밍(concurrent programming)에서 병행성 제어를 위해 사용되는 동기화 기법입니다.
세마포어는 두 가지 연산을 지원합니다.
P 연산: 세마포어 값을 1 감소시키고, 값이 0이 되면 대기 큐에 프로세스를 추가합니다.
V 연산: 세마포어 값을 1 증가시키고, 대기 큐에서 하나의 프로세스를 꺼내 실행 대기 상태로 전환합니다.
세마포어는 일종의 정수 변수로, 0 이상의 값을 가질 수 있습니다. 세마포어 값이 0이면, 다른 프로세스가 세마포어 값을 증가시켜야만 대기 중인 프로세스가 실행될 수 있습니다. 따라서 세마포어를 사용하여 임계영역 문제나 병행성 제어
세마포를 이용한 동기화
세마포를 이용한 생산자/소비자 문제 (버퍼의문제)
쓰는동안 읽으면X 읽는동안 쓰면 X (노트 그림)
세마포를 이용한 읽기/쓰기 문제
여러개의 읽기 프로세스가 동시에 공유자료 접근 가능(읽기는 많아도 동시허용됨)
읽기프로세스와 쓰기프로세스가 동시에 접근은 안됨 (세마포사용)
여러개의 쓰기 프로세스도 동시에 공유자료 접근 안됨
메시지 실행시 고려사항
네이밍문제
직접네이밍 : A는 B에게 보내겠다 / B는 A에게 받겠다 (송,수신측간 상대방 설정)
간접네이밍 : 우편함을 하나 두고(버퍼링 비슷한것처럼) 이 우편함을 통해 프로세스들은 메 시지를 교환함
문제를 해결할 수 있습니다.
세마포어는 다음과 같은 특징을 갖습니다.
상호배제(mutual exclusion): 세마포어를 사용하여 임계영역에 진입하는 프로세스들은 상호배제됩니다. 즉, 동시에 하나의 프로세스만이 임계영역에 진입할 수 있습니다.
병행성 제어(concurrency control): 세마포어를 사용하여 병행프로세스들 간의 실행 순서와 우선순위를 제어할 수 있습니다.
대기(waits): 세마포어 값을 감소시키는 P 연산에서 세마포어 값이 0이 되면, 대기 큐에 프로세스를 추가합니다. 이로 인해 세마포어를 사용하면 상황에 따라 프로세스를 대기시킬 수 있습니다.
세마포어는 다양한 운영체제에서 지원되며, 병행 프로그래밍에서 자주 사용됩니다. 예를 들어, 임계영역 문제나 프로듀서-컨슈머 문제를 해결할 때 세마포어를 사용할 수 있습니다.
복사문제 : 메시지의 포인터를 전달.
버퍼링문제: 수신 준비가 안되있을 경우 메시지를 버퍼에 저장 (비동기적 통신을 위해 버퍼링필요)
길이문제 : 메시지길이를 고정으로할지(구현 용이/빠른 처리속도/낭비), 가변으로할지(구현 복잡/높은 적용력) 결정,
정해진 길이가 있으면->처리속도는 빠르지만 낭비가 있음
경우에 ㄸㆍ라 길이지정하면-프로그램이 복잡 (우리입장에선 가변길이가 좋음)