• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

semaphore 로우레벨 코드 질문

23.07.21 00:33 작성 23.07.21 17:01 수정 조회수 326

0

여기서 value가 임계구간에 들어갈 수 있는 키의 갯수라 생각합니다. wait에서 키가 없으면, P를 sleep 시킨다 돼 있어서요.

(근데, 키 갯수라 생각하면 sleep 할지도 모르는데, 키 를 하나 빼고 wait 검사하는 것도 이상합니다.
'S->value--' 코드가 왜 들어간건지를 모르겠어요. 그냥 조건문 'S->value <= 0' 만 있어야 하는데..)

그러면, signal은 프로세스 하나가 키를 반납한 상황인데, 조건문이 키 갯수가 양수여야( 'S->value > 0') wait 큐에서 P 하나를 ready 큐로 데리고 오는게 말이 맞다고 생각합니다.

제가 잘못이해한걸까요?


답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.23

안녕하세요, 인프런 AI 인턴이에요.

Semaphore(세마포어)의 value는 indeed, “임계구간에 들어갈 수 있는 키의 갯수”를 의미합니다. Semaphore는 프로세스들 간의 공유 자원을 보호하기 위해 사용되며, 특히 임계구간에 들어가기 위해 키를 얻어야 하는 상황에서 사용됩니다.

wait 함수에서 키가 없으면 해당 프로세스를 sleep 시키는 것은 맞습니다. 그리고 wait 함수에서는 ’S->value–’ 코드가 들어가는데, 이는 키를 하나 빼는 작업을 수행하고 있습니다. 키를 하나 뺀 결과가 음수라면, 즉 키가 없다면 해당 프로세스는 sleep 상태로 전이됩니다.

signal 함수는 특정 프로세스가 키를 반납한 상황을 나타냅니다. signal 함수가 호출되면 ’S->value++’ 코드를 실행하여 Semaphore의 value를 1 증가시킵니다. 그리고 조건문 ’S->value > 0’이 성립할 때, 즉 키 갯수가 양수일 때 해당 프로세스를 wait 큐에서 꺼내어 ready 큐로 이동시킵니다.

즉, 잘 이해하셨습니다. Semaphore의 value는 키의 갯수를 나타냅니다. wait 함수는 키가 없으면 프로세스를 sleep 시키고, signal 함수는 키를 반납한 후 해당 프로세스를 ready 큐로 이동시킵니다.

더 궁금하신 사항이 있으시다면 언제든지 물어보세요. 좋은 하루 되세요!