2013-03-04 8 views
0

저는 Linux 필드를 처음 사용합니다.Spinlocks - (단일 프로세서 대 다중 프로세서) - (선점 형 커널과 비 선점 형 커널)

다양한 시나리오에서 (커널 모드에서) 스핀 록 사용에 약간의 혼란이 있습니다. 명확히하십시오.

스핀 록은 통화 중 대기 메커니즘으로 사용됩니다.

1) 스핀 락 (단일 프로세서 + 비 선점 형 커널) -> (존재하지 않기 때문에 당신이 스핀 록에가) 교착 상태가 발생할 것이다 동안 잠을 경우

2) 스핀 락 (단일 프로세서 + 선제 커널) - > 리소스를 낭비 할 때 사용하지 않아야합니다 (스레드가 잠금을 유지하면서 잠자기 상태가되면 어떻게됩니까? 다른 프로세스도 정상적으로 실행할 수 있습니까?) 012) 조심스럽게 (잠금을 유지하면서 스레드가 잠자기 상태가되면 어떻게됩니까?) 다른 프로세스도 정상적으로 실행할 수 있습니까?

위의 시나리오에 대한 이해가 적절하다면 알려주십시오. 스핀 록 사용을 명확히하는 데 도움이되는 추가 정보를 제공해주십시오.

+0

는 여기에 이전을 만든 하나 http://stackoverflow.com/questions/6555358/linux-kernel-preemption-during-spinlock-and-mutex-lock/6556013#6556013 – Dipstick

+0

안녕하세요, 스핀 록 사용에 대한 많은 고려 사항이 있습니다. 스핀 록을 사용하기에 가장 좋은 곳은 잠들 수없는 "인터럽트 컨텍스트"에 있습니다. 전역 구조 또는 전역 변수를 업데이트하는 작은 코드 경로에서 스핀 록을 사용할 수 있습니다. "irq_save"API가있는 스핀 록은 사용하는 것이 가장 좋습니다. –

답변

1

IIRC의 경우, 스핀 록은 대부분 무시됩니다 (선매 기능을 사용하지 않도록 설정하고 일부 스핀 록 기능 변형 및 IRQ를 제외하고).

다중 프로세서의 경우 선점이 다시 비활성화되고 IRQ도 될 수 있습니다.

일반적으로 스핀 록을 보유한 작업은 잠자지 않아야합니다. (이중 그래서 만약 그들이 단지 장애인 인터럽트)

: (면책 조항 :이 늦기로 게시물의 내용이, 격렬하게 부정확/mildy 수 있고, 나는 세부 사항을 확인할 수 ATM)

관련 문제