2012-07-23 255 views
1

在ubuntu10.04 Linux內核如果我用insmod它運行無限循環

while(1); 

init_module部分的模塊,整個系統停止。

但是,如果我在Windows 7 這DriverEntry部分運行while(1);加載sys文件, 系統變得緩慢,但仍然有效。

有人可以解釋我爲什麼是兩個不同的系統和 裏面是什麼內核發生了什麼?......

我想在第一種情況下(在init_module無限循環), 沒有理由的系統停止。因爲 即使我在init_module中製作while(1);,它在insmod用戶應用程序的上下文中運行 。 所以流程無限循環必須由硬件中斷信號來調度。

這只是我的意見,我想知道的細節,如果我錯了......

回答

1

添加到弗雷德裏克的回答是:在Windows上DriverEntry功能在IRQLPASSIVE_LEVEL運行(與幾乎所有的用戶模式代碼,所有的,如果我們排除的APC)。這意味着它可以被任何代碼打斷,任何代碼都可以在任何時候以更高的IRQL運行。所以你在這裏可能遇到的情況是進入無限循環的線程仍在調度中(從而耗費CPU時間),但由於其(低)IRQL,它不能使系統線程或其他許多線程正在運行的代碼。但是,它將能夠扼殺用戶模式線程。效果可以是任何事情,從放緩到感知掛起系統。

+0

謝謝,這是有幫助的! – daehee 2012-07-24 11:19:56

2

init_module()是一個系統調用,它運行在內核空間,而不是在用戶空間。

從你觀察到的情況看,NT內核看起來像並行執行模塊初始化,而Linux內核依次執行模塊初始化。它可能與它們各自的體系結構有關,NT是hybrid kernel而Linux是monolithic

+0

我認爲特別是你的第一句話的事實需要突出顯示,因爲OP似乎在這裏持有的誤解。 – 0xC0000022L 2012-07-23 12:59:37