Semaphore? 계산, 예제가 포함된 바이너리 유형
Semaphore?
Semaphore 는 단순히 음수가 아닌 변수이며 스레드 간에 공유됩니다. 세마포어는 신호 메커니즘이며 세마포어를 기다리는 스레드는 다른 스레드에서 신호를 받을 수 있습니다. 두 가지 원자적 연산을 사용합니다. 1) 대기, 2) Signal 프로세스 동기화를 위해서.
세마포어는 리소스 설정 방법에 따라 리소스에 대한 액세스를 허용하거나 허용하지 않습니다.
특징 Semaphore
다음은 세마포어의 특징입니다.
- 이는 작업 동기화를 제공하는 데 사용할 수 있는 메커니즘입니다.
- 이는 저수준 동기화 메커니즘입니다.
- Semaphore 항상 음수가 아닌 정수 값을 보유합니다.
- Semaphore 테스트 작업과 인터럽트를 통해 구현할 수 있으며, 이는 파일 기술자를 통해 실행해야 합니다.
유형 Semaphores
두 가지 일반적인 종류의 세마포어는 다음과 같습니다.
- 세마포어 세기
- 바이너리 세마포어.
계산 Semaphores
이러한 유형의 Semaphore 작업이 여러 번 획득되거나 해제되는 데 도움이 되는 카운트를 사용합니다. 초기 카운트 = 0인 경우 카운팅 세마포어는 사용할 수 없는 상태에서 생성되어야 합니다.
그러나 개수가 0보다 큰 경우 세마포어는 사용 가능한 상태로 생성되고 해당 개수와 동일한 토큰 개수가 생성됩니다.
이진 Semaphores
이진 세마포어는 세마포어 계산과 매우 유사하지만 값이 0과 1로 제한됩니다. 이 유형의 세마포어에서 대기 작업은 세마포어 = 1인 경우에만 작동하고 신호 작업은 세마포어 = 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) 연산이라고도 합니다.
세마포어 값이 감소하여 음수가 된 후에는 필요한 조건이 충족될 때까지 명령이 보류됩니다.
Copy CodeP(S) { while (S<=0); S--; }
Signal 조작
이러한 유형의 Semaphore 연산은 임계 섹션에서 작업 종료를 제어하는 데 사용됩니다. 인수 값을 1만큼 증가시키는 데 도움이 되며, 이는 V(S)로 표시됩니다.
Copy CodeP(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는 마이크로커널의 기계 독립적인 코드로 구현됩니다.
- 여러 프로세스가 임계 섹션에 들어가는 것을 허용하지 않습니다.
- 세마포어에는 바쁜 대기가 있기 때문에 처리 시간과 자원의 낭비가 없습니다.
- 이는 기계 독립적이며 마이크로커널의 기계 독립적 코드에서 실행되어야 합니다.
- 이를 통해 리소스를 유연하게 관리할 수 있습니다.
세마포어의 단점
여기에는 세마포어의 단점/단점이 있습니다.
- 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.
- 운영 체제는 세마포어에 대한 대기 및 신호 호출을 모두 추적해야 합니다.
- 해당 사용은 강제되지 않으며 관례에 따른 것입니다.
- 세마포어에서 교착 상태를 피하기 위해 Wait 및 Signal 작업은 올바른 순서로 실행되어야 합니다.
- Semaphore 프로그래밍은 복잡하므로 상호 배제를 달성하지 못할 가능성이 있습니다.
- 또한 모듈성을 상실하게 되므로 대규모 사용에는 실용적인 방법이 아닙니다.
- Semaphore 프로그래머 오류가 발생하기 쉽습니다.
- 그것은 일으킬 수 있습니다 이중 자물쇠 또는 프로그래머 오류로 인한 상호 배제 위반.
요약
- Semaphore 음수가 아니고 스레드 간에 공유되는 변수로 정의됩니다.
- 이는 작업 동기화를 제공하는 데 사용할 수 있는 메커니즘입니다.
- 카운팅 세마포어는 작업이 여러 번 획득되거나 해제되도록 돕는 카운트를 사용합니다.
- 바이너리 세마포어는 세마포어 계산과 매우 유사하지만 값이 0과 1로 제한됩니다.
- 대기 작업은 작업이 중요 섹션에 진입하는 것을 제어하는 데 도움이 됩니다.
- Signal 세마포어 연산은 중요 섹션에서 작업의 종료를 제어하는 데 사용됩니다.
- 계산 Semaphore 상호 배제가 없는 반면 바이너리 Semaphore 상호배제 있음
- Semaphore 는 신호 메커니즘을 의미하고 Mutex는 잠금 메커니즘입니다.
- Semaphore 둘 이상의 스레드가 임계 섹션에 액세스할 수 있도록 허용
- 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.