이진 세마포어 | 운영 체제 - M03 P06

이것은 여러 부분으로 구성된 블로그 기사 시리즈이며 이 시리즈에서는 운영 체제의 개념을 설명할 것입니다. 이 기사 시리즈는 여러 모듈로 나뉘며 10개의 기사로 구성된 세 번째 모듈입니다.

이 기사에서는 동기화를 달성하고 경쟁 조건을 제거하기 위해 바이너리 세마포어가 무엇이며 어떻게 작동하는지 살펴보겠습니다.

바이너리 세마포어


  • 계수 세마포어의 범위는 – infinity to + infinity이지만 이진 세마포어에는 01 두 값만 있습니다.
  • 이진 세마포어는 세마포어 계산보다 시스템에서 더 많이 사용됩니다.


  • 엔트리 섹션 의사 코드

    Down(Semaphore S) {
        if (Svalue = 1) {
            Svalue = 0;
        }
        else {
            Block this process and place in suspend list, Sleep();
        }
    }
    


    종료 섹션 의사 코드

    Up(Semaphore S) {
        if(Suspend list is empty) {
            Svalue = 1;   
        }
        else {
            Select a process from suspend list and wake up();
        }
    }
    


  • S의 값이 1이고 Down 동작을 수행한 후 0가 되면 동작이 성공한 것으로 본다.
  • S의 값이 0이고 프로세스가 다운 작업을 실행하면 프로세스가 차단/수면 상태가 되고 일시 중지 목록으로 보내지며 실패한 작업으로 간주됩니다.
  • Up 작업은 먼저 일시 중단된 목록이 비어 있는지 여부를 확인하고, 비어 있으면 S 값을 1로 변경합니다. S 값이 무엇인지는 중요하지 않습니다. S의 값은 이전에 0였으면 1가 되고 1이면 1로 남게 됩니다.
  • 일시 중단된 목록이 비어 있지 않으면 다른 부분이 실행되고 차단/수면 상태의 프로세스가 깨어난 다음 다운 작업을 실행하여 중요한 섹션으로 이동할 기회를 얻습니다.

  • 그래서 이것은 바이너리 세마포어에 관한 것입니다. 당신이 그것을 좋아하고 그것으로부터 새로운 것을 배웠기를 바랍니다.

    이 주제와 관련하여 의심, 질문, 질문이 있거나 저와 공유하고 싶은 것이 있으면 언제든지 저에게 연락하십시오.

    📱 저에게 연락



    Telegram

    📧 메일 쓰기



    [email protected]

    🚀 기타 링크



    GitHub
    HackerRank

    좋은 웹페이지 즐겨찾기