当进程陷入内核后,比如使用驱动,在驱动中定义的全局变量。在别的进程进入同样的驱动以后,这个内核全局变量对于两个进程来说是不是都是可见的。 我是想知道进程在自己的内存空间里定义一个全局变量别的进程是不可见的,但是到了内核以后呢。驱动不就是代表这个进程,当驱动定义一个全局变量,别的进程是否可见。
驱动的全局变量,任何进程陷入内核态中均可以访问(因为内核页表是一致的)。不知道“当另外一个进程同时也调用这个举动的时候”里的“也调用这个举动”是啥意思?
驱动定义的全局变量,跟进程没有啥必然的联系啊?
举个例子吧,某个模块mod_a.ko定义了一个全局变量var_a;
并且该模块提供了一个proc接口,可以修改此变量var_a;
那么无论是进程x,还是进程y,通过此proc接口,修改的都是同一个内核变量mod_a::var_a。
同样,另外一个模块mod_b.ko,也可以定义同名的全局变量var_a(此时是mod_b::var_a),
mod_b也可以定义一个新的proc接口来修改这个var_a,
但是它只能修改mod_b::var_a,而不是mod_a::var_a。
不同的模块可以有相同的全局变量,只要它们不EXPORT_SYMBOL,
在模块加载的时候,mod_a::var_a和mod_b::var_a会映射到不同的内核地址。
如果mod_a.ko把var_a EXPORT出去了,mod_b.ko就不能再次EXPORT var_a。
(除非确定mod_a和mod_b不会同时加载)