0

최근에 나는 슬립 리눅스 커널에서 시스템 호출은 현재 호출 스레드를 일시 중지/차단 상태 인 상태로 일시 중단합니다. 즉, 언급 된 시간이 경과 할 때까지 CPU를 사용하지 않을 것임을 의미합니다. - 은 완벽하게 이해합니다..LINUX 시스템에서 뮤텍스와 세마포어가 "Busy wait"합니까?

acquire() { 
while (!available) 
; // busy wait --> my doubt 
available = false;; 
} 

release() { 
available = true; 
} 

세마포어 잠금 :

wait(S) { 
while (S <= 0) 
; // busy wait --> my doubt 
S--; 
} 
signal(S) { 
S++; 
} 

PS :

이제 뮤텍스와 세마포어,

뮤텍스 잠금 오는이 코드 조각은 "운영 체제 개념에서 가져옵니다 -9th 에디션 "에 의해 ABRAHAM SILBERSCHATZ

내 질문 : 나는 바쁜 대기 동기화 문제를 접근 할 수있는 효율적인 방법이 아니다, 그러나 나는 위에서 언급 한 코드 조각에서 뮤텍스와 세마포어를 사용하는 것은 바쁜 대기에 끝날 것이라는 의심을 가지고 있음을 알고

?? () 대부분의 sysnc 문제를 해결하기 위해 널리 사용되는 뮤텍스 및 세마포어).

어떤 inturn은 CPU 사이클을 소비하는 것입니다 나를는 뮤텍스 & 세마포어를 사용하여 동기화 문제를 해결하기위한 효율적인 방법이 아니다는 것을 느끼게

(오히려 while 루프에서 회전 일시 중단 된 상태로 이어질하지 않기 때문에).

짧게 :대기 스레드 스레드를 일시 중단 상태로두기보다는 뮤텍스 및 세마포어 사용 중 대기가 발생합니까 ??

미리 감사드립니다 !! !! 내 이해에 잘못되면 친절하게 나를 정정하십시오 !!

+1

짧은 대답은 예와 아니오이지만 책이 설명하는 것보다 복잡합니다. [세마포어] (https://www.xls.gitbooks.io/linux-insides/content/SyncPrim/sync-3.html)와 [mutexes] (https : ///0xax.gitbooks.io/linux-insides)에서 약탈하십시오. /content/SyncPrim/sync-4.html). 긴 형식은 뮤텍스 나 세마포어가 획득되면 프리미티브가 해제 될 때까지 호출 스레드를 파킹합니다. 방금 방아쇠를 당기는 것이 훨씬 낫습니다. 방금 방아쇠를 당긴다면 매우 비효율적입니다. 다행히도 그렇지 않습니다. :-) – jszakmeister

+0

@jszakmeister 비효율적 일뿐만 아니라 고장 났을 것입니다! – curiousguy

+0

@curiousguy 매우 사실! – jszakmeister

답변

4

뮤텍스와 세마포어 비지 대기

없음 내부적 그 기능 (pthread_mutex_lock 등 예컨대 P 스레드 뮤텍스 함수) futex(7) 결합 (어셈블러 코딩) atomic 기계 명령어를 사용합니까.

POSIX 세마포어 (sem_overview(7) 참조)의 커널 scheduler은 다른 작업을 예약합니다. 그래서 기다리는 것이 바쁘지 않습니다.

실행 가능한 작업이 없으면 커널은과 같은 내용을 기다리는 (CPU주기 굽기없이) idle loop에 대기합니다. 따라서 랩탑이 과열되지 않고 너무 많은 배터리를 사용하게됩니다!

도 읽으십시오. Operating Systems: Three Easy Pieces (자유롭게 다운로드 할 수 있음). 일부 장난감 커널을 개발하려면 OSDEV도보십시오. free software이기 때문에 kernel의 소스 코드를 연구 한 다음 kernelnewbies에 문의하십시오.표준 C 라이브러리와 그 pthread 계층도 자유 소프트웨어입니다 (따라서 GNU glibc 또는 소스 코드를 연구하십시오).

+0

답변 해 주셔서 감사합니다. 나는 "// busy busy"라는 줄을 말하는 책의 코드 스 니펫 (snippet)에서 오도 된 것 같아요. –

+1

누군가 C 코드 스 니펫으로 책을 쓸 때 그는 평원 C로 표현할 수 없습니다. 대신에 몇 가지 의견을 쓸 것입니다. 그러나 "바쁜"단어는 당신의 책에서 혼란 스럽습니다. –