在ubuntu10.04 linux内核中,如果我insmod是一个运行的模块
while(1);
在init_module
部分,整个系统停止。
但是,如果我在Windows7中加载sys文件在CCD_ 3部分运行CCD_,系统运行缓慢,但仍能正常工作。
有人能解释一下为什么两种系统不同吗内核内部发生了什么?。。。
我认为在第一种情况下(init_module
中的无限循环),系统没有停止的原因。因为即使我在init_module
中制作while(1);
,它也在运行在CCD_ 7用户应用程序的上下文中。因此流量无限循环必须通过硬件中断信号来调度。
这只是我的观点,如果我错了,我想知道细节。。。
根据您所观察到的,看起来NT内核并行执行模块初始化,而Linux内核则按顺序执行。这可能与它们各自的体系结构有关,NT是混合内核,Linux是单片的。
补充Frédéric的答案:在Windows上,DriverEntry
函数在IRQL PASSIVE_LEVEL
上运行(与几乎所有用户模式代码相同,如果我们排除APC的话)。这意味着它可以在任何时候被运行在更高IRQL的任何代码中断。因此,您可能在这里遇到的是,进入无限循环的线程仍在调度中(因此消耗CPU时间),但由于其(低)IRQL,它无法耗尽系统线程或运行的大部分其他代码。然而,它将能够饿死用户模式线程。这种影响可以是从经济放缓到被感知到的悬置系统。