#2
madfrogme2012-10-09 22:50
|
内核如何跟踪它是否能够被抢占?
回想一下,可知系统中的每个进程都有一个特定于体系结构的 struct thread_info 实例。
该结构也包含了一个抢占计数器(preemption counter )
<asm-arch/thread_info.h>
struct thread_info {
...
int preempt_count; /* 0 => 可抢占, <0 => Bug */
...
}
preempt_count 为零,则内核可以被中断, 否则不行。
该值只能通过 dec_preempt_count , inc_preempt_count 两个函数对计数器减1 或 加 1。
每次内核进入重要区域,需要禁止抢占时,都会调用inc_preempt_count。
退出该区域时,调用dec_preempt_count 将抢占计数器减1
[ 本帖最后由 madfrogme 于 2012-10-11 18:27 编辑 ]