linux kernel 에서 BH(softirq) 영역에서 재진입이 가능한지 여부가 궁금합니다.
글쓴이: trymp / 작성시간: 수, 2018/05/16 - 10:02오후
리눅스 커널 SMP(core4개) 환경에서 core 2번이 아래 코드를 수행한다고 할때
아래코드는 BH 영역입니다.
functionA() { //영역A local_bh_disable() //영역B local_bh_enable() }
위의 코드에서 core 2번에서 수행이 될때 BH 가 또 수행이 되서
영역 A 가 수행되는 도중에 또 영역 A 의 코드가 재진입될수 있는 건가요?
아직 BH 의 재진입이 되는 경우에 대한 개념이 모호해서 질문을 드립니다.
hard interrupt 가 우선적으로 수행되는 건 알겠는데,
softIRQ 수행이 되는데 또 softIRQ 가 같은 코드로 재진입 되는지 궁금합니다.
조언해 주시면 감사하겠습니다.
Forums:
__do_softirq() 함수를 보면 __local
__do_softirq() 함수를 보면 __local_bh_disable_ip() 함수를 실행한 후 핸들러를 실행합니다.
따라서 동일 CPU가 재진입하지는 않는 것을 코드 레벨에서 확인할 수 있습니다.
그러나 다른 CPU가 진입하는 것 까지는 막을 수 없으므로, spin_lock_bh 등을 이용해서 자원을 보호해야 합니다.
댓글 달기