local_bh_disable() 이 동일 CPU 에서만 적용되는 이유가 궁금합니다.

trymp의 이미지


커널을 공부하는 초보입니다. 커널 동기화와 관련되서 질문드리고자 합니다.

spin lock 은 특정 데이터에 관련된 락 매커니즘으로 알고 있습니다.

그래서 다른 CPU 혹은 동일 CPU 에서 그 특정 데이터를 변경하려고 할때,

접근을 배제하는 처리를 하는 것으로 알고 있습니다.

local_bh_enable()/local_bh_disable() 같이 softirq 를 배제처리 하는 것은

같은 CPU 에 의한 것만 차단하고 다른 CPU 에서는 재진입을 허용하는 것으로 압니다.

왜 이렇게 하는 거죠??

같은 CPU에 의한 것만 막고 다른 CPU 는 허용하면 동기화에 문제가 안생기나요?

고수님들의 많은 조언 부탁드립니다.

익명 사용자의 이미지

local_bh_disable은 말그대로 softirq 기능에 해당하는 function을 금지하는 function으로 local_bh_disable경우 함수 또는 자료구조가
process context , soft-interrupt context모두 동작하는 경우 사용하게 됩니다.

모든 cpu에 대한 자원보호는 일반적으로 spin_lock을 통하여 보호해야합니다. 물론 다른 메커니즘들도 있지만요.