windows internals(深入解析windows作業系統)筆記
1.R0執行核心態R3執行使用者態,R1.R2閒置
2.侵入式除錯和非侵入式除錯
侵入式:可以檢查和改變程序的記憶體,設定斷點,執行其他的除錯資訊
非侵入式:並不作為一個偵錯程式負載到目標程序。可以檢查和改變程序中的記憶體,不能設定斷點。
1.Windows是一個對稱多處理器作業系統(SMP)。沒有主處理器,作業系統和執行緒可以被排程到任何處理器上執行,所有處理器共享一個記憶體處理空間。
Windows支援三種現代的多核處理器系統:多核,超執行緒和NUMA
超執行緒(Hyper-Threading):在每個物理核上提供多個邏輯處理器,每個邏輯處理器有自己的CPU狀態,但是執行引擎和偏上快取共享。
排程演算法已經改進過,例如:原來是將執行緒排程到另一個物理空閒的處理器,現在改進為“選擇一個邏輯上空閒的處理器(該處理器的其他邏輯處理器可能正忙碌)”
NUMA:處理器被組織成更小的單元,節點。所有處理器可以訪問所有記憶體,不過節點本地記憶體訪問起來比其他節點更快。
整整的多核系統-這些系統有多個真正的物理核(不過在同一個晶片上而已)。Windows原來的SMP程式碼將這些核看作單獨的處理器。
2.windows作業系統客戶機和伺服器系統共享同一組核心系統檔案,通許登錄檔ProductOptions下的鍵值判斷載入什麼系統,同時將指定許可策略檔案載入到登錄檔中。
使用者想檢視當前windows
作業系統根據不同版本(客戶機或伺服器)對系統進行不同方向的優化和側重。
3.使用者程式並不直接呼叫windows系統服務,而是通過一個或多個子系統dll來進行。如kernel32.dll.advapi32.dll
user32.dll gdi32.dll實現了系統API呼叫,子系統DLL將已文件化的WindowsAPI轉譯成Ntoskrnl.exe和Winformation2k.sys中恰當的絕大多數未文件化的核心模式系統服務呼叫。
4.windows子系統(由會話管理器啟動Smss.exe)的角色是,將基本的windows執行體系統服務的某個子集暴露給應用程式。每個子系統都提供了對
每個可執行映像(.exe)都被繫結到一個(且唯一一個)子系統上。
5.Windows執行體是Ntoskrnl.exe中的上層(核心是其下層)。
6.Ntdll.dll是一個特殊的系統支援庫,主要用於子系統dll。
Ntdll支援的一些函式的命名規則:映像載入器(Ldr開頭),Windows子系統程序通訊函式(Csr開頭)
Ntdll支援的一般性執行庫例程(以Rtl開頭)使用者模式除錯和windows事件跟蹤支援的函式(分別以DbgUi和Etw函式)
clr模組(.Net Framework 4.0的執行時模組)
7.核心使用一個稱為處理器控制區(KPRC)的資料結構來存放處理器有關的資料,KPCR也包含一個稱為處理器控制塊的內嵌資料結構(KPRCB)。Windbg利用!pcr和pcrb可以檢視相應內容。
8.硬體抽象層(HAL)是一個可載入的核心模式塊(Hall.dll)。Window內部元件和驅動程式通過訪問HAL例程來訪問硬體,從而保持了可移植性(可移植到不同硬體)。HAL和Ntoskrnl相互依賴。
9.裝置驅動程式是可載入的核心模式模組(通常以.sys結尾)
10.常用的字首
11回話管理器是系統中建立的第一個使用者模式程序,這一程序由負責完成知興替和核心初始化工作最後階段的核心模式系統執行緒建立。
陷阱分發
1.中斷和異常是導致處理器轉向正常控制流之外程式碼的兩種作業系統體制。在windows系統中,中斷和異常會觸發陷阱(trap),然後將處理器控制權轉到作業系統某有一固定地址,交給陷阱處理器(trap handler)處理。中斷處理器指某個特點的中斷或異常相關的函式。
2.中斷是非同步事件,可能與處理器中正在處理的任務毫無關係.異常是同步條件,往往是一個特殊指令的執行結果。
3.普通執行緒執行在IRQL0級,硬體中斷的IRQL大於軟體中斷的IRQL
4.執行緒排程優先順序與IRQL優先級別不同,執行緒排程優先順序是執行緒的內部熟悉,IRQL是中斷源的熟悉(如鍵盤滑鼠)
每個處理器都有自己的IRQL設定,決定了該處理器可以接受哪些中斷
5.被遮蔽的的中斷由另外的處理器處理或者保留等待IRQL降低下來。系統的所有元件都儘可能都保持在被動IRQL上,以免裝置驅動不能及時的響應硬體中斷。
6.HAL決定為一箇中斷分配哪個IRQL,不同HAL的分配演算法不同。
7.KiInterruptDispatch和KiChainedDispatch都是中斷分發例程,試用情景不同。
8.核心模式程式碼通常不允許浮點操作,因為這些浮點暫存器在環境切換時不被儲存。
常用名詞:
Interrupts are frequently called “Interrupt ReQuests” and the priority of a specific IRQis its Level. These letters, all run together, are IRQL
IRQL :中斷請求等級
ISR(interruptservice rountine)中斷服務例程
IRQ(interruptrequest)中斷請求
IDT(interrupt dispatch table)
GDT 全域性描述符表
LDT 區域性描述符表
(DPCs)deferred procedure calls
IPI處理器間的中斷,一個處理器請求另一個處理器處理
I/O request packet, used in Microsoft Windows for interprocess communication
(ISR)中斷服務例程
(PIC)中斷控制器