全部博文(175)
发布时间:2013-04-04 11:31:22
spinlock的实现 2011-12-31 14:26:33分类: LINUXLinux spin_lock的实现 Spin_lock是Linux内核的一种同步机制。内核代码可以通过获得spin_lock宣称对某一资源的占有,直到其释放该spin_lock;如果内核代码试图获得一个已经锁定的.........【阅读全文】
发布时间:2013-04-03 14:37:23
由于2.6内核可以抢占,应该在驱动程序中使用 preempt_disable() 和 preempt_enable(),从而保护代码段不被抢占(禁止 IRQ 同时也就隐式地禁止了抢占)。preempt_disable和preempt_enable调用。spin_lock_irq的功能和上面的spin_lock提供的功能差不多,只不过它还多做了一步,就是把中断也关上,主要用于当前保护的数据在.........【阅读全文】
发布时间:2013-04-02 18:00:10
当从内核态返回到用户态的时候,要检查是否进行调度,而调度要看两个条件:1.preempt_count是否为02.rescheduled是否置位 ret_from_exception: preempt_stop(CLBR_ANY)ret_from_intr: GET_THREAD_INFO(%ebp)check_userspace: movl PT_EFLAGS(%esp), %eax # mi.........【阅读全文】
发布时间:2013-04-02 17:44:53
Linux 关中断 与 开中断 如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 <asm/system.h>中: void local_irq_save(unsigned long flags); void local_irq_di.........【阅读全文】