Semaphore? 계산, 예제가 포함된 바이너리 유형

Semaphore?

Semaphore 는 단순히 음수가 아닌 변수이며 스레드 간에 공유됩니다. 세마포어는 신호 메커니즘이며 세마포어를 기다리는 스레드는 다른 스레드에서 신호를 받을 수 있습니다. 두 가지 원자적 연산을 사용합니다. 1) 대기, 2) Signal 프로세스 동기화를 위해서.

세마포어는 리소스 설정 방법에 따라 리소스에 대한 액세스를 허용하거나 허용하지 않습니다.

특징 Semaphore

다음은 세마포어의 특징입니다.

  • 이는 작업 동기화를 제공하는 데 사용할 수 있는 메커니즘입니다.
  • 이는 저수준 동기화 메커니즘입니다.
  • Semaphore 항상 음수가 아닌 정수 값을 보유합니다.
  • Semaphore 테스트 작업과 인터럽트를 통해 구현할 수 있으며, 이는 파일 기술자를 통해 실행해야 합니다.

유형 Semaphores

두 가지 일반적인 종류의 세마포어는 다음과 같습니다.

  • 세마포어 세기
  • 바이너리 세마포어.

계산 Semaphores

이러한 유형의 Semaphore 작업이 여러 번 획득되거나 해제되는 데 도움이 되는 카운트를 사용합니다. 초기 카운트 = 0인 경우 카운팅 세마포어는 사용할 수 없는 상태에서 생성되어야 합니다.

계산 Semaphores
계산 Semaphores

그러나 개수가 0보다 큰 경우 세마포어는 사용 가능한 상태로 생성되고 해당 개수와 동일한 토큰 개수가 생성됩니다.

이진 Semaphores

이진 세마포어는 세마포어 계산과 매우 유사하지만 값이 0과 1로 제한됩니다. 이 유형의 세마포어에서 대기 작업은 세마포어 = 1인 경우에만 작동하고 신호 작업은 세마포어 = 0인 경우 성공합니다. 세마포어 계산보다 구현하기 쉽습니다.

이진 Semaphores

이진 Semaphores

예 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 둘 이상의 스레드가 임계 섹션에 액세스할 수 있도록 허용
  • 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.