非淡泊无以明志,非宁静无以致远
分类: LINUX
2011-02-28 12:06:05
关于preempt_enable 和 preempt_disable
允许抢占和禁止抢占。
例如:内核态程序 和 中断处理程序的互斥
因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。
load %r0, counter add %r0,1 //发生中断 store %r0,conter |
如果在第二条指令执行时发生中断,而中断处理程序也需要将counter加1等操作,那么counter变量的值就会变得紊乱。
因此,只要非中断处理代码要更新一个与中断处理程序共享的数据结构,那么它就首先禁止中断,执行临界段,然后再重新允许中断。在linux中,如下
preempt_disable(); load %r0, counter add %r0,1 //发生中断 store %r0,conter preempt_enable(); |
chinaunix网友2011-03-05 13:36:13
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com