windows在ISR中不能睡眠的原因

2021-07-03 23:54:01 字數 699 閱讀 6682

對於這個問題,本人也做了一些思考,也看了很多網上的討論,目前也沒有確定的結果。現把思路總結一下,以後有新的理解時隨時更新。

1.  睡眠導致藍屏?

閱讀wrk**可以知道,藍屏其實是系統在判斷irql後主動進入的結果,這是一種系統設計,是規則而不是原因。

2. 中斷沒有上下文?

其實中斷是有上下文的,就是被中斷執行緒的上下文,中斷其實是借用了該執行緒的核心堆疊。我們可以理解為執行緒呼叫了isr,雖然這不是執行緒主動的結果。

3. 堆疊溢位?

理由不成立,就算沒有睡眠,中斷巢狀也是存在的。

4. 中斷因為睡眠切換出去不知道怎麼切換回來。

5. 把isr切換出去會帶來很多問題,引入設計的複雜性,影響系統的實時性和穩定性。

系統設計完全可以把系統設計成isr允許睡眠(時鐘中斷除外),但這會帶來以下問題:

(1)被中斷執行緒和低優先順序中斷的公平性問題。執行緒和低優先順序中斷被打斷可以認為是為了更緊急事件而把cpu讓出來,現在這個更緊急事件的處理卻睡眠,更緊急事件和睡眠本身就是一種矛盾。睡眠導致被打斷執行緒因為和自己不相干的原因而等待,這對排程演算法來說是一種破壞。另外,中斷因為睡眠導致所有低優先順序的中斷得不到響應,這不是好的設計。無論什麼原因,中斷被執行緒搶占也是不合理的,破壞了系統的優先順序設定。

(2)睡眠的根本原因在於等待某種條件的成立,這種條件往往是低優先順序執行路徑來滿足,而低優先順序執行路徑有可能會被睡眠而阻塞,這就導致了死鎖問題。

在Windows2003中FSO元件不能使用的問題

更新了windows2003最新的系統補丁,結果發現上傳的時候就停在那裡,經查發現是原來的fso不好用。1 首先在系統盤中查詢scrrun.dll,如果存在這個檔案,請跳到第三步,如果沒有,請執行第二步。2 在安裝檔案目錄i386中找到scrrun.dl 用winrar解壓縮,得scrrun.dll...

在Windows2003中FSO元件不能使用的問題

更新了windows2003最新的系統補丁,結果發現上傳的時候就停在那裡,經查發現是原來的fso不好用。1 首先在系統盤中查詢scrrun.dll,如果存在這個檔案,請跳到第三步,如果沒有,請執行第二步。2 在安裝檔案目錄i386中找到scrrun.dl 用winrar解壓縮,得scrrun.dll...

virtualbox 中centOS在不能ssh

這個重要跟虛擬機器的網路設定有關係。廢話不多說。針對乙個網絡卡的形式。可以如下進行配置 1 網路 連線方式還選擇 網路位址轉換 nat 其他不變,展開高階,設定埠 主機ip設為本機ip,埠隨意如 2222,子系統ip 設定為虛擬機器ip,進去虛擬機器能看到,子系統埠設定為22 ok確認 然後在xsh...