Semaphore? 계산, 예제가 포함된 바이너리 유형
⚡ 스마트 요약
Semaphore 운영 체제에서 `wait`는 스레드 간에 공유되는 음수가 아닌 정수 변수로, `wait`와 `signal`이라는 두 가지 원자적 연산을 통해 공유 리소스에 대한 접근을 조정하여 프로세스 동기화 중 경쟁 조건을 방지합니다.

Semaphore?
Semaphore 는 단순히 음수가 아닌 변수이며 스레드 간에 공유됩니다. 세마포어는 신호 메커니즘이며 세마포어를 기다리는 스레드는 다른 스레드에서 신호를 받을 수 있습니다. 두 가지 원자적 연산을 사용합니다. 1) 대기, 2) Signal 프로세스 동기화를 위해서.
세마포어는 리소스 설정 방법에 따라 리소스에 대한 액세스를 허용하거나 허용하지 않습니다.
의 특성 Semaphore
다음은 신호기의 특징입니다.
- 이는 작업 동기화를 제공하는 데 사용할 수 있는 메커니즘입니다.
- 이는 저수준 동기화 메커니즘입니다.
- Semaphore 항상 음수가 아닌 정수 값을 보유합니다.
- Semaphore 테스트 작업과 인터럽트를 통해 구현할 수 있으며, 이는 파일 기술자를 통해 실행해야 합니다.
유형 Semaphores
신호기의 일반적인 두 가지 유형은 다음과 같습니다.
- 세마포어 세기
- 이진 신호기
계산 Semaphores
이러한 유형의 Semaphore 이 기능은 작업의 획득 또는 해제 횟수를 여러 번 계산하는 데 도움이 되는 카운트를 사용합니다. 초기 카운트가 0이면 카운팅 세마포어는 사용 불가능 상태로 생성되어야 합니다.
그러나 개수가 0보다 큰 경우 세마포어는 사용 가능한 상태로 생성되고 해당 개수와 동일한 토큰 개수가 생성됩니다.
이진 Semaphores
이진 세마포어는 카운팅 세마포어와 매우 유사하지만, 값이 0과 1로 제한된다는 점이 다릅니다. 이 유형의 세마포어에서는 대기(wait) 연산은 세마포어 값이 1일 때만 수행되고, 신호(signal) 연산은 세마포어 값이 0일 때 성공합니다. 카운팅 세마포어보다 구현이 더 간단합니다.
예 Semaphore
아래 프로그램은 세마포어의 사용 및 선언을 포함하는 단계별 구현 예입니다.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
기다려 그리고 Signal Opera안으로 Semaphores
두 작업 모두 구현에 사용됩니다. 프로세스 동기화이 세마포어 연산의 목표는 상호 배제를 얻는 것입니다.
기다립니다 Opera기
이 유형의 세마포어 연산은 임계 구역으로의 작업 진입을 제어하는 데 도움이 됩니다. 그러나 wait의 값이 양수이면 wait 인수 X의 값이 감소합니다. 음수 또는 0 값의 경우 연산이 실행되지 않습니다. 이를 P(S) 연산이라고도 합니다.
세마포어 값이 감소하여 음수가 된 후에는 필요한 조건이 충족될 때까지 명령이 보류됩니다.
P(S)
{
while (S<=0);
S--;
}
Signal 조작
이러한 유형의 Semaphore 연산은 임계 섹션에서 작업 종료를 제어하는 데 사용됩니다. 인수 값을 1만큼 증가시키는 데 도움이 되며, 이는 V(S)로 표시됩니다.
P(S)
{
while (S>=0);
S++;
}
계산 Semaphore 대 바이너리 Semaphore
다음은 계산과 이진 세마포어의 몇 가지 주요 차이점입니다.
| 계산 Semaphore | 이진 Semaphore |
| 상호 배제 없음 | 상호 배제 |
| 임의의 정수 값 | 값은 0과 1만 |
| 슬롯 XNUMX개 이상 | 하나의 슬롯만 |
| 일련의 프로세스 제공 | 상호 배제 메커니즘을 가지고 있습니다. |
차이점 Semaphore 대 뮤텍스
아래 표는 비교합니다. 뮤텍스가 있는 세마포어 여러 매개변수에 걸쳐:
| 파라미터 | Semaphore | 뮤텍스 |
| 기구 | 일종의 신호 메커니즘이다. | 잠금 메커니즘입니다. |
| 데이터 형식 | Semaphore 정수 변수입니다. | 뮤텍스는 단지 객체일 뿐입니다. |
| 가감 | 대기 및 신호 작업은 세마포어를 수정할 수 있습니다. | 리소스를 요청하거나 해제할 수 있는 프로세스에 의해서만 수정됩니다. |
| 자원 관리 | 리소스가 비어 있지 않으면 프로세스는 대기 작업을 실행해야 하는 리소스가 필요합니다. 세마포어의 카운트가 0보다 클 때까지 기다려야 합니다. | 잠겨 있으면 프로세스가 기다려야 합니다. 프로세스는 대기열에 보관되어야 합니다. 뮤텍스가 잠금 해제된 경우에만 액세스해야 합니다. |
| Thread | 여러 프로그램 스레드를 가질 수 있습니다. | 뮤텍스에는 여러 프로그램 스레드가 있을 수 있지만 동시에 있을 수는 없습니다. |
| 소유권 | 값은 리소스를 해제하거나 획득하는 모든 프로세스에 의해 변경될 수 있습니다. | 객체 잠금은 해당 객체에 대한 잠금을 획득한 프로세스에 의해서만 해제됩니다. |
| 유형 | 유형 Semaphore 세마포어는 카운팅 세마포어와 이진 세마포어입니다. | Mutex에는 하위 유형이 없습니다. |
| Opera기 | Semaphore 값은 wait() 및 signal() 연산을 사용하여 수정됩니다. | 뮤텍스 개체가 잠겨 있거나 잠금 해제되었습니다. |
| 자원 점유 | 모든 리소스가 사용 중이고 리소스를 요청하는 프로세스가 wait() 작업을 수행하고 세마포어 수가 >1이 될 때까지 자신을 차단하는 경우 점유됩니다. | 객체가 이미 잠겨 있는 경우 리소스를 요청하는 프로세스는 대기하고 잠금이 해제되기 전에 시스템에 의해 대기열에 추가됩니다. |
의 장점 Semaphores
다음은 사용의 장점/이점입니다. Semaphore:
- 이를 통해 둘 이상의 스레드가 임계 영역에 접근할 수 있습니다.
- Semaphores는 기계 독립적입니다.
- Semaphores는 마이크로커널의 기계 독립적인 코드로 구현됩니다.
- 여러 프로세스가 임계 섹션에 들어가는 것을 허용하지 않습니다.
- 세마포어에는 바쁜 대기가 있기 때문에 처리 시간과 자원의 낭비가 없습니다.
- 이는 기계 독립적이며 마이크로커널의 기계 독립적 코드에서 실행되어야 합니다.
- 이를 통해 리소스를 유연하게 관리할 수 있습니다.
단점 Semaphores
다음은 신호기의 단점/불이점입니다.
- 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.
- 운영 체제는 다음을 유지해야 합니다. trac대기 및 신호 세마포어에 대한 모든 호출의 k입니다.
- 해당 사용은 강제되지 않으며 관례에 따른 것입니다.
- 세마포어에서 교착 상태를 피하기 위해 Wait 및 Signal 작업은 올바른 순서로 실행되어야 합니다.
- Semaphore 프로그래밍은 복잡하기 때문에 상호 배제를 달성하지 못할 가능성이 있습니다.
- 또한 모듈성을 상실하게 되므로 대규모 사용에는 실용적인 방법이 아닙니다.
- Semaphore 프로그래머 오류가 발생하기 쉽습니다.
- 그것은 일으킬 수 있습니다 이중 자물쇠 또는 프로그래머 오류로 인한 상호 배제 위반.


