local_bh_disable() 이 동일 CPU 에서만 적용되는 이유가 궁금합니다.
글쓴이: trymp / 작성시간: 화, 2011/02/01 - 5:29오후
커널을 공부하는 초보입니다. 커널 동기화와 관련되서 질문드리고자 합니다.
spin lock 은 특정 데이터에 관련된 락 매커니즘으로 알고 있습니다.
그래서 다른 CPU 혹은 동일 CPU 에서 그 특정 데이터를 변경하려고 할때,
접근을 배제하는 처리를 하는 것으로 알고 있습니다.
local_bh_enable()/local_bh_disable() 같이 softirq 를 배제처리 하는 것은
같은 CPU 에 의한 것만 차단하고 다른 CPU 에서는 재진입을 허용하는 것으로 압니다.
왜 이렇게 하는 거죠??
같은 CPU에 의한 것만 막고 다른 CPU 는 허용하면 동기화에 문제가 안생기나요?
고수님들의 많은 조언 부탁드립니다.
Forums:
답변
local_bh_disable은 말그대로 softirq 기능에 해당하는 function을 금지하는 function으로 local_bh_disable경우 함수 또는 자료구조가
process context , soft-interrupt context모두 동작하는 경우 사용하게 됩니다.
모든 cpu에 대한 자원보호는 일반적으로 spin_lock을 통하여 보호해야합니다. 물론 다른 메커니즘들도 있지만요.
댓글 달기