세마포어란 무엇입니까? 계산, 예제가 포함된 바이너리 유형

세마포어란 무엇입니까?

세마포어 단순히 음수가 아니고 스레드 간에 공유되는 변수입니다. 세마포어는 신호 메커니즘이며, 세마포어를 기다리고 있는 스레드는 다른 스레드에 의해 신호를 받을 수 있습니다. XNUMX개를 사용합니다 atomic 작업, 1) 대기, 2) 프로세스에 대한 신호 sync정시화.

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

세마포어의 특징

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

  • 제공하는 데 사용할 수 있는 메커니즘입니다. sync작업의 동기화.
  • 낮은 수준이다 sync동기화 메커니즘.
  • 세마포어는 항상 음수가 아닌 정수 값을 보유합니다.
  • 세마포어는 파일 설명자를 사용하여 실행해야 하는 테스트 작업 및 인터럽트를 사용하여 구현할 수 있습니다.

세마포어의 유형

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

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

세마포어 계산

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

세마포어 계산
세마포어 계산

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

바이너리 세마포어

바이너리 세마포어는 세마포어 계산과 매우 유사하지만 값이 0과 1로 제한됩니다. 이러한 유형의 세마포어에서는 세마포어 = 1인 경우에만 대기 작업이 작동하고 세마포어= 0일 경우 신호 작업이 성공합니다. 세마포어를 계산하는 것보다 구현하십시오.

바이너리 세마포어

바이너리 세마포어

세마포어의 예

아래 주어진 프로그램은 세마포어의 사용 및 선언을 포함하는 단계별 구현입니다.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

세마포어의 대기 및 신호 작업

이 두 작업 모두 구현에 사용됩니다. 방법 sync정시화. 이 세마포어 연산의 목표는 상호 배제를 얻는 것입니다.

작동을 기다리세요

이러한 유형의 세마포어 작업은 작업이 임계 섹션에 진입하는 것을 제어하는 ​​데 도움이 됩니다. 그러나 wait 값이 양수이면 wait 인수 X의 값이 감소합니다. 음수 또는 XNUMX 값의 경우 아무런 작업도 수행되지 않습니다. P(S) 연산이라고도 합니다.

세마포어 값이 감소하여 음수가 된 후에는 필요한 조건이 충족될 때까지 명령이 보류됩니다.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

신호작동

이러한 유형의 세마포어 작업은 임계 섹션에서 작업 종료를 제어하는 ​​데 사용됩니다. V(S)로 표시되는 인수 값을 1만큼 늘리는 데 도움이 됩니다.

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

세마포어 대 이진 세마포어 계산

다음은 계산과 이진 세마포어의 몇 가지 주요 차이점입니다.

카운팅 세마포어 바이너리 세마포어
상호 배제 없음 상호 배제
임의의 정수 값 값은 0과 1만
슬롯 XNUMX개 이상 하나의 슬롯만
일련의 프로세스 제공 상호 배제 메커니즘을 가지고 있습니다.

세마포어와 뮤텍스의 차이점

파라미터 세마포어 뮤텍스
기구 일종의 신호 메커니즘이다. 잠금 메커니즘입니다.
데이터 형식 세마포어는 정수 변수입니다. 뮤텍스는 단지 객체일 뿐입니다.
가감 대기 및 신호 작업은 세마포어를 수정할 수 있습니다. 리소스를 요청하거나 해제할 수 있는 프로세스에 의해서만 수정됩니다.
자원 관리 사용 가능한 리소스가 없으면 프로세스에는 대기 작업을 실행해야 하는 리소스가 필요합니다. 세마포어의 개수가 0보다 커질 때까지 기다려야 합니다. 잠겨 있으면 프로세스가 기다려야 합니다. 프로세스는 대기열에 보관되어야 합니다. 뮤텍스가 잠금 해제된 경우에만 액세스해야 합니다.
Thread 여러 프로그램 스레드를 가질 수 있습니다. 뮤텍스에는 여러 프로그램 스레드가 있을 수 있지만 동시에 있을 수는 없습니다.neo우습게.
소유권 값은 리소스를 해제하거나 획득하는 모든 프로세스에 의해 변경될 수 있습니다. 객체 잠금은 해당 객체에 대한 잠금을 획득한 프로세스에 의해서만 해제됩니다.
유형 세마포어의 종류에는 카운팅 세마포어와 바이너리 세마포어가 있으며, Mutex에는 하위 유형이 없습니다.
조작 wait()와 signal() 연산을 이용해 세마포어 값을 수정한다. 뮤텍스 개체가 잠겨 있거나 잠금 해제되었습니다.
자원 점유 모든 자원이 사용되고 있고 자원을 요청하는 프로세스가 wait() 연산을 수행하고 세마포어 개수가 1보다 커질 때까지 자신을 차단하면 점유됩니다. 객체가 이미 잠겨 있는 경우 리소스를 요청하는 프로세스는 대기하고 잠금이 해제되기 전에 시스템에 의해 대기열에 추가됩니다.

세마포어의 장점

다음은 세마포어 사용의 장점/이점입니다.

  • 둘 이상의 스레드가 임계 섹션에 액세스할 수 있도록 허용합니다.
  • 세마포어는 기계 독립적입니다.
  • 세마포어는 마이크로커널의 기계 독립적인 코드로 구현됩니다.
  • 여러 프로세스가 임계 섹션에 들어가는 것을 허용하지 않습니다.
  • 세마포어에는 바쁜 대기가 있기 때문에 처리 시간과 자원의 낭비가 없습니다.
  • 이는 기계 독립적이며 마이크로커널의 기계 독립적 코드에서 실행되어야 합니다.
  • 이를 통해 리소스를 유연하게 관리할 수 있습니다.

세마포어의 단점

여기에는 세마포어의 단점/단점이 있습니다.

  • 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.
  • 운영 체제는 대기 및 신호 세마포어에 대한 모든 호출을 추적해야 합니다.
  • 해당 사용은 강제되지 않으며 관례에 따른 것입니다.
  • 드를 피하기 위해adlock세마포어에서는 대기 및 신호 작업이 올바른 순서로 실행되어야 합니다.
  • 세마포어 프로그래밍은 복잡하므로 상호 배제를 달성하지 못할 가능성이 있습니다.
  • 또한 모듈성을 상실하게 되므로 대규모 사용에는 실용적인 방법이 아닙니다.
  • 세마포어는 프로그래머 오류가 발생하기 쉽습니다.
  • 그것은 일으킬 수 있습니다 deadlock 또는 프로그래머 오류로 인한 상호 배제 위반.

요약

  • 세마포어는 음수가 아니고 스레드 간에 공유되는 변수로 정의됩니다.
  • 제공하는 데 사용할 수 있는 메커니즘입니다. sync작업의 동기화.
  • 카운팅 세마포어는 작업이 여러 번 획득되거나 해제되도록 돕는 카운트를 사용합니다.
  • 바이너리 세마포어는 세마포어 계산과 매우 유사하지만 값이 0과 1로 제한됩니다.
  • 대기 작업은 임계 섹션에 대한 작업 입력을 제어하는 ​​데 도움이 됩니다.
  • 신호 세마포어 연산은 임계 섹션에서 작업 종료를 제어하는 ​​데 사용됩니다.
  • 계산 세마포에는 상호 배제가 없지만 이진 세마포에는 상호 배제가 있습니다.
  • 세마포어는 신호 메커니즘을 의미하는 반면 뮤텍스는 잠금 메커니즘을 의미합니다.
  • 세마포어를 사용하면 둘 이상의 스레드가 임계 섹션에 액세스할 수 있습니다.
  • 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.