標籤:strong div sp 代碼 on c 工作 時間 ad
系統機制:
windows2000為執行體、核心、裝置驅動程式等核心態部分提供了一些基礎機制。先讓我們看看都有哪些:
(1)陷阱調度:包括中斷、延遲程序呼叫(DPC)、非同步程序呼叫(APC)、異常處理、系統服務調度。
(2)執行體對象管理
(3)同步機制:自旋鎖、核心調度對象以及等待是如何?的
(4)系統線程
(5)多種系統機制如windows2000全域標誌
(6)本地程序呼叫
下面我們就來逐個分析:
陷阱調度:
中斷和異常的實質是使CPU不按照正常的步驟來工作,硬體和軟體都能夠察覺到它們。陷阱是當異常或者中斷髮生時能夠儲存當前線程狀態並轉向相應處理的一種系統機制。在windows2000中,處理器將控制交給設陷處理常式--一些專門來處理中斷、異常的程式。給出了一些啟用設陷處理常式的樣本:
核心通過以下方式來分辨中斷和異常:中斷是一個非同步事件(可以在任何時間產生),不管處理器在執行什麼程式。中斷典型地由I/O裝置、時鐘、定時器產生,必要時我們可以屏蔽中斷。而異常是一個同步事件,它是由正在執行的特定代碼產生的,重新執行相同的代碼會重複產生特定的異常。比如訪問非法記憶體、除數為0等。系統把系統服務也作為異常來處理。
無論是硬體或者是軟體都能產生中斷和異常,比如說,一個匯流排異常是由硬體引起的,而除數為0顯然是軟體中的BUG導致的;同樣,I/O裝置可以產生中斷,核心本身也能產生非強制中斷(APC,DPC)。
當一個硬體中斷或者異常發生時,處理器收集足夠的狀態資訊以保證當異常或中斷處理完畢後可以正確返回到當前執行點。處理器通過在當前線程的核心棧區建立一個陷阱架構(用來儲存現場)來實現。陷阱架構通常時線程整個上下文環境的一部分。而把非強制中斷當成硬中斷的一部分來處理,或者是調用核心中相應的處理常式。
在大多數情況下,當有陷阱發生時核心負責尋找相應的處理常式並且在處理常式返回時負責恢複中斷線程的繼續執行。
中斷調度:
硬體中斷是由I/O裝置產生以求獲得CPU服務的,這種中斷機制使得CPU的利用率提高很多。軟體也能夠產生中斷,比如說,核心可以發起一個中斷來進行線程調度。核心在必要的時候可以關中斷,這樣CPU就可以屏蔽掉任何中斷-----這在有些時候是必要的,比如線程對於臨界區的訪問,異常處理等。
硬體中斷處理:
在X86家族裡,外部中斷在中斷控制器裡進行排隊,控制器依次中斷CPU的運行。當CPU被中斷時,它要求中斷控制器提交插斷要求,中斷控制器將插斷要求翻譯為插斷要求號,並且把這個號碼當成索引來查詢中斷調度表(IDT),並且將控制權交給相應的中斷處理常式。中斷調度表(IDT)在系統啟動的時候就已經初始化了,裡麵包括中斷號和相應處理常式的對應。
插斷要求登等級IRQL:
中斷是有等級的,這對於軟、硬中斷都是適用。核心將中斷為0---31共32個等級,等級高的許可權高。核心負責將非強制中斷對應到相應的等級上,HAL負責將硬體中斷對應到相應的等級上。如所示:
中斷處理是按等級來啟動並執行,並且是搶佔式的,高等級的可以阻塞低等級的運行。當運行中斷處理常式時,CPU把自己的IRQL設定為要執行的中斷的IRQL,然後運行.
那麼系統是如何把硬體中斷映射到相應的IRQL的呢?答案是HAL,在WINDOWS2000中,匯流排驅動能夠得知所有串連到匯流排上的裝置,以及每個裝置能發出何種中斷,緊接著匯流排驅動把所得到的情況彙報給PNP(隨插即用管理器),它做出抉擇。最後調用HAL函數HalpGetSystemInterruptVector來實現映射。
windows核心初窺(二)-----系統機制