local_bh_disable
은 하단 반쪽 (softirqs)의 처리를 비활성화합니다. Softirq는 인터럽트 리턴 경로 또는 ksoftirqd (CPU 당) 스레드에서 처리됩니다. 시스템은 과중한 softirq로드로 인해 시스템이 깨어날 때 깨어납니다. >preemt_enable
범위가 스케줄러에 의해 안락사되지 -local_bh_disable, preempt_disable, local_irq_disable
preempt_disable
스레드가 preempt_disable
< 내부의 실행 중에 있음을 의미 선점 비활성화. 즉, 현재 스레드가 해당 범위 내에있는 동안 시스템 타이머 인터럽트가 발생하면 스케줄러의 테이블을 업데이트 할 수 있지만 컨텍스트를 다른 스레드로 전환하지는 않습니다. 여기에는 softirqd가 포함됩니다.
local_irq_disable
또는 local_irq_save
로컬 CPU에 대한 인터럽트를 비활성화합니다. 즉, 로컬 CPU가 irq에 반응하지 않으므로 인터럽트 리턴 경로를 실행하지 않으므로 softirq를 실행할 수 없습니다.
내 위의 진술이 사실이라면 (확실하지는 않지만) preempt_disable
및 local_irq_save
(프로세스 컨텍스트에있는 동안)을 호출 한 후에는 local_bh_disable
을 호출하는 것이 바람직하지 않습니까?