有一个内核编译后的竞争问题想不通
在内核(2。4)中只有中断能抢进来,可是内核大部分是用c语言写的,少不了对全局变量的判断或赋值,而且一条c语言一般被翻译为多条汇编语言,如果中断在一条c语言翻译成的汇编中抢进来,对全局变量进行改变怎么办?难道中断程序不访问全局变量,显然不是,源代码中不少这样的例子吧。又不能用锁,难道只要内核访问全局变量就要关中断?也没有这么做啊,到底怎么搞的。
我看<<linux设备驱动程序>>上只看到了c语言一级的竞态,可是一条c语言翻译成的汇编的原子性怎么保证呢?? :shock: linux kernel development中文版p92:
如果一段内核代码操作某资源的时候系统产生了一个中断,而且该中断的处理程序还要访问这一资源,这就是一个Bug。。。省略N字跟你的问题有关 学习
页:
[1]