Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 2 Windows 系統總述 Team 1 (page 17 ~ page 56)

Similar presentations


Presentation on theme: "Chapter 2 Windows 系統總述 Team 1 (page 17 ~ page 56)"— Presentation transcript:

1 Chapter 2 Windows 系統總述 Team 1 (page 17 ~ page 56)
劉書銘 蔡昀昇 楊善雯 宋貫綸 黃惠慈 賀振坤 賴佑東 陳禹任 張閎翰 陳書瑜 馬萬鐸 萬惠雯

2 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.6 Windows 啟動過程 第二章總目錄

3 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構簡介 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構簡介 Windows 核心架構 Windows 核心中的關鍵元件 Windows 子系統 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 開場白、簡介目錄、2.1節、2.2節簡介、2.5節、2.5.1節 頁數:[17,18,53,54,55,56] 報告者:賀振坤 補充:因為前面 2.1 節太簡單了 !! 所以多一個 2.5節,只要將 P.53 做成 PPT 就好了 報告者: 賀振坤

4 現代作業系統的基本架構 屬於軟體的範疇 提供一層抽象介面 Windows、Linux : 可動態載入驅動程式或專門的擴充介面

5 現代作業系統的基本架構 應用程式透過一層介面呼叫系統服務
應用程式之間則用IPC ( inter-process communication 行程間通訊)交互操作 硬體裝置透過驅動程式,與電腦核心進行通訊

6 現代作業系統的基本架構 IPC IPC 應用 應用 應用 系統服務 系統核心 硬體抽象 硬碟 網路 圖2.1 現代作業系統的基本架構
系統擴充 驅動程式 驅動程式 驅動程式 驅動程式 硬體抽象 鍵盤/滑鼠 顯示器 硬碟 網路 圖2.1 現代作業系統的基本架構

7 現代作業系統的基本架構 應用環境 應用 應用 應用 系統服務 系統核心 系統環境 硬體抽象 硬體設備 硬碟 網路
系統擴充 系統環境 驅動程式 驅動程式 驅動程式 驅動程式 硬體抽象 硬體設備 鍵盤/滑鼠 顯示器 硬碟 網路 圖2.1 現代作業系統的基本架構

8 現代作業系統的基本架構 應用環境 應用 應用 應用 系統服務 系統核心 系統環境 硬體抽象 硬體設備 硬碟 網路
系統擴充 系統環境 驅動程式 驅動程式 驅動程式 驅動程式 硬體抽象 硬體設備 鍵盤/滑鼠 顯示器 硬碟 網路 圖2.1 現代作業系統的基本架構

9 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 Windows 核心架構 Windows 核心中的關鍵元件 Windows 子系統 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.2.1節 (核心架構):系統架構講解兩張架構圖與解釋程式碼 頁數:[19,20,21,22] 報告者:馬萬鐸 報告者: 馬萬鐸

10 現代作業系統的基本架構 系統和服務行程 用戶應用程式 系統DLL Window 子系統行程 NTDLL.DLL User mode
Kernel mode 執行體(Executive) Window 子系統核心模組 核心(或微核心) 設備驅動 程式 硬體抽象層(HAL)

11 Hardware Abstraction Layer(HAL) (Micro)Kernel Layer Executive Layer
物件管理員

12 Windows核心組成架構 子系統DLL NTDLL.DLL User mode 子系統服務 系統服務 Kernel mode
視窗管理 圖形介面 執行體 API 記憶體管理員 行程和緒程管理員 即插即用管理員 安全參照監視器 快取管理員 本地程序呼叫 LPC 組態管理員 (登陸) I/O 管理員 檔案系統 網路 物件管理員 圖形驅動程式 裝置驅動程式 核心(微核心) 硬體抽象層(HAL)

13 Windows核心架構 執行體API函式會接收來自各應用程式的參數 參數有效性 指標指向可存取的記憶體 在函式開頭檢查參數

14 Takes an argument pointer and return FALSE if the pointer is NULL
Windows核心架構 PreviousMode = KeGetPreviousMode(); If(PreviousMode != KernelMode){ try{ ProbeForWrite(InputInformation, InputInformationLength, sizeof(ULONG)); if(ARGUMENT_PRESENT(ReturnLength)){ ProbeForWriteUlong(ReturnLength); } except(EXCEPTION_EXECUTE_HANDLER){ return GetExceptionCode(); 判斷輸入資料是否可寫 Takes an argument pointer and return FALSE if the pointer is NULL 看參數是否可寫

15 Windows核心架構 系統位址空間 Kernel mode 4GB 特殊區間 64KB 行程位址空間 User mode 2GB
0xffffffff 特殊區間 64KB 0x7fffffff 不可存取 0x7fff0000 行程位址空間 User mode 2GB 0x

16 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 Windows 核心架構 Windows 核心中的關鍵元件 ( HAL、核心、執行體 ) Windows 子系統 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.2.2節 (HAL、核心、執行體) 頁數:[22,23,24,25] 報告者:張閎翰 報告者: 張閎翰

17 Windows 核心中的關鍵元件 圖2.3 Windows核心組成架構圖 子系統DLL NTDLL.DLL 使用者模式 核心模式 系統服務
子系統服務 C. 執行體API 即插即用管理員 安全參照監視器 本地程序呼叫(LPC) I/O管理員 記憶體管理員 行程和緒程管理員 快取管理員 組態管理員(登錄) 檔案系統 網路 Windows子系統 視窗管理 圖形介面 圖形驅動程式 物件管理員 B. 核心 (或微核心) A. 硬體抽象層 (HAL) 裝置驅動程式 圖2.3 Windows核心組成架構圖

18 Windows 核心中的關鍵元件 硬體抽象層 (HAL) 將硬體的差別隱藏起來,提供一個抽象且一致的硬體 資源模型。 不同平台的移植。
獨立的動態連結程式庫 透過HAL來存取硬體 表 2.1 Windows Server 的 HAL 列表 (Intel x86 處理器) HAL 檔案 所支援的硬體系統 Hal.dll 標準PC Halacpi.dll ACPI Halapic.dll APIC Halaacpi.dll APIC ACPI PC Halmps.dll 多處理器 PC Halmacpi.dll 多處理器 ACPI PC HAL

19 Windows 核心中的關鍵元件 B. 核心 (或微核心) 最接近於HAL層 負責緒程排程和中斷、例外處理
C語言為主 (包含一部分組合語言) 先佔式緒程 基本優先 動態優先 物件導向 發送器物件 (dispatcher object) event, mutant, semaphore, process, thread, queue, gate 及 timer 控制物件 (Control object) APC, DPC 及中斷物件

20 Windows 核心中的關鍵元件 C. 執行體 (Executive) API 位於核心模組(ntoskrnl.exe)的上層
目的為提供可供上層應用程式或內核驅動程式條用的功能 五種不同類型的函式 (執行體內部的元件) 被匯出且可在使用者模式下呼叫的函式。 滿足 1)但無法呼叫任何一個 Windows API。 只能在核心模式下被呼叫的匯出函式,並且在Windows DDK 中有相關的文件。 可供執行體元件相互呼叫,但未被文件化的函式。 屬於一個元件的內建函式。 HAL

21 Windows 核心中的關鍵元件 C. 執行體 (Executive) API (續) 執行體包含以下元件 行程和緒程管理員
建立或中止行程和緒程 記憶體管理員 為每一個行程提供一個私有空間 安全引用監視器 (SRM) 強制在電腦上實施安全性原則 I/O 管理員 實作與裝置無關的輸入(輸出) 功能 快取管理員 駐留磁碟資料於主記憶體中

22 Windows 核心中的關鍵元件 C. 執行體 (Executive) API (續) 物件管理員 (續) 組態管理員
物件管理員 (續) 組態管理員 系統登入的實作與管理。 隨插即用管理員 列舉裝置為每個列舉道的裝置確定哪些裝置是必須的載入並初始化這些驅動裝置。 電源管理員 協調電源事件,向裝置驅動程式發送電源 I/O的通知。 HAL

23 Windows 核心中的關鍵元件 C. 執行體 (Executive) API (續) 除此之外,執行體還包含 4 組主要支援函式:
物件管理員 比如行程、續程和各種同步物件 LPC設施 負責在同一台機器上的客戶行程和伺服器行程之間傳遞訊息。 一組執行階段程式庫函式 字串處理、算術運算、資料型別轉換以及安全架構等。 執行體支援常式 如: 系統記憶體分配、互鎖的記憶體存取。 HAL

24 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 Windows 核心架構 Windows 核心中的關鍵元件 ( 裝置驅動程式、PE 檔案格式、WDM ) Windows 子系統 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.2.2節 (裝置驅動程式、PE檔案格式、WDM) 頁數:[25,26,27,28,29] 報告者:賴佑東 報告者: 賴佑東

25 裝置驅動程式 為何要用裝置驅動程式? 軟體架構角度: windows核心的擴充機制
核心中除了核心模組ntoskrnl.exe、HAL外,其它模 組幾乎以裝置驅動程式的型式存在 軟體架構角度: windows核心的擴充機制

26 裝置驅動程式 特性: 副檔名: 不一定與實體裝置對應 可動態載入到系統模組,格式是PE檔案格式
移植性高(用C語言來撰寫,方便在Windows支援的系 統間進行原始碼層次上的移植) 不直接操縱硬體,而是呼叫HAL中的函式與硬體打交道 副檔名: .sys

27 裝置驅動程式三大類型 隨插即用驅動程式(WDM ) 核心擴充驅動程式(非隨插即用驅動程式) 檔案系統驅動程式
用來驅動硬體裝置。與Windows的I/O管理員、PnP管理員和電腦管理員合作 核心擴充驅動程式(非隨插即用驅動程式) 擴充核心功能,或提供存取核心模式程式碼和資料的途徑。並沒有整合到PnP管理員和電腦管理員中 檔案系統驅動程式 接收檔案請求,再將請求轉成對裝置的I/O請求

28 裝置驅動程式三大類型-WDM 全名 隨插即用(PnP)管理員的工作 Windows Driver Model 自動檢測裝置插入與移除
動態分配硬體資源 指示I/O管理員替裝置載入驅動程式 對核心或程式提供裝置插入、移除的通知機制

29 裝置驅動程式三大類型-WDM 分成三大類型 匯流排驅動程式 功能驅動程式 篩選器驅動程式 管理匯流排上的裝置
替匯流排上的裝置提供存取匯流排資源的方法 功能驅動程式 管理裝置 替作業系統提供該裝置功能 篩選器驅動程式 監聽裝置的I/O請求、處理過程 增加或改變裝置、驅動程式的行為

30 PE檔案格式 設計PE(Portable Executable)緣由 可移植目的
在windows NT設計之初,為了建立可移植、能適應32位元作業系統需要的可執行檔格式 可移植目的 windows NT可以在多種處理器上執行 ex: x86 、MIPS 、Alpha 至今Windows僅支援Intel處理器,但是Windows 9x系列(非Windows NT核心)也使用PE檔案格式,因此,PE仍是一種可移植的可執行檔格式。

31 PE檔案格式 PE格式的優勢 COFF定義 COFF優、缺點 擴充COFF(Common Object File Format)
由Unix引入,用來描述二進位目的檔的格式規格 COFF優、缺點 優點-提供了好的框架 缺點-區段數量有最大限制、 區段名稱有長度限制、 無法提供像C所需的符號化偵錯資訊

32 PE檔案格式 Windows中誰用了PE檔案格式? 可執行檔 .exe 目的檔 .obj 動態連結程式庫 .dll 裝置驅動程式 .sys

33 PE檔案格式 進一步對PE檔案格式作探討 PE檔案基本架構 重定位概念

34 PE檔案基本架構 可執行映像檔 為了相容MS-DOS環境 區段表中每一項指示區段名稱、區段虛擬位址位置及大小、該區段資訊
指示可執行檔的匯入、匯出、資源、重定位表 包含目前檔案的全域資訊 對每個區段,若檔案資料數量<區段大小,則區段後面資料補“0”

35 重定位概念 為何要重定位? 如何重定位? 當可執行映像中指定的基底位址被占據,則可執行映像要載入其他位置
將目前映像中的程式碼或資料,按照新的記憶體起始位址引用,而不是原來指定的基底位址來引用

36 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 Windows 核心架構 Windows 核心中的關鍵元件 ( 檔案系統 / 儲存管理、網路 ) Windows 子系統 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.2.2節 (檔案系統/儲存管理、網路) 頁數:[30,31,32] 報告者:蔡昀昇 報告者: 蔡昀昇

37 檔案系統(1/3) 檔案系統是外部儲存裝置的標準介面,多個應用程式和系統本身可以共享使用這些裝置。
當檔案系統接收到I/O請求時,它根據檔案系統格式規格,將這些請求轉變成更低層的對於外部儲存裝置的I/O請求,透過它們的驅動程式來完成原本的請求。

38 檔案系統(2/3) Windows常見的檔案系統格式 NTFS (New Technology File System)
NTFS是專門為windows設計的檔案格式,它 提供了安全性、可靠性、大容量支援、長檔 名支援,以及可復原性等高階特性,目前廣 泛應用於Windows系統。 FAT (File Allocation Table) FAT是從DOS時代發展起來的檔案系統格式, 格式規格相對比較簡單,目前仍在使用中, 主要用於相容老版本的作業系統,以及用於 行動裝置以便跨作業系統傳送資料。

39 檔案系統(3/3) 在Windows中,每個檔案系統實體構成了它自己的裝置堆疊,因而透過篩選器驅動程式可以過濾檔案I/O請求。
基於Windows提供篩檢程式管理驅動程式(FltMgr)的I/O過濾框架,稱為檔案系統小篩選器驅動程式,不出現在檔案系統裝置堆疊中,而是以回呼方式來回應FltMgr的事件。

40 儲存管理 檔案系統的底層是儲存裝置的管理。 大型儲存裝置以磁碟分割(partition)與磁碟區(volume)來管理整個儲存空間。
磁碟分割是指儲存裝置上連續的儲存區域(連續的磁區),而磁碟區是指磁區的邏輯集合。 磁碟區是指由一或多個實體磁碟的一或多個部分所構成的虛擬磁碟﹐表示可定址的磁碟區塊範圍。給檔案系統或應用程式等使用。

41 網路 網路雖然並非 Windows 作業系統中必不可少的組成 部分,但實際上,它已經成為絕大多數 Windows 系統的標準配置。
Windows 為應用程式提供了多種網路 API,允許應用軟體設計人員根據他們的需求適當選擇。

42 Windows主要API Winsock,windows通訊端,他實做並擴充了BSD通訊端標準。為Windows最重要的網路 API。
WinInet ,為一個高層網路 API,它支援多個協定,包括HTTP、FTP等。 具名管道(named pipe)和郵件槽(mailslot),用於不同行程之間進行通訊。 NetBIOS是一個早期的網路API,為了相容舊的應用程式。 RPC,這是網路程式編寫的一個標準,往往是分散式系統設施的一個重要單元。

43 Winsock WinSock的全名是 Windows Socket,是定義介於Windows TCP/IP application Client 與 TCP/IP 的protocol stack之間的一項標準介面。程式設計者於Windows上所 寫的網路軟體(如opher,Telnet,FTP..), 只要支援WinSock的規格,他就不需要顧慮使用的網路卡是那家廠牌,因為Winsock所提供的程式庫Winsock.DLL會負起與網路底層溝通的工作。使得設計者能設計出更多功能或更user friendly的網路軟體。

44 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 Windows 核心架構 Windows 核心中的關鍵元件 Windows 子系統 ( 視窗管理、圖形裝置介面 ) 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.2.3節 (視窗管理、圖形裝置介面) 頁數:[32,33,34,35] 報告者:陳書瑜 報告者: 陳書瑜

45 Windows 子系統 三個環境子系統(Windows NT) OS/2 POSIX Windows(Win32) 依照需要啟動
Windows子系統(Windows XP以後) 依照需要啟動 ——必須執行 按照 Windows NT 最初的設計,它支持三個環境子系統:OS/2、POSIX 和 Windows (或稱為 Win32)。然而,Windows 子系統是一定要運行的,沒有它 Windows 系統就無法 運行,而其他兩個子系統則被配置成需要的時候再啟動。而且,到了 Windows XP 以後,只有 Windows 子系統隨 Windows 系統一起發行。

46 Windows 子系統 Windows子系統行程 (csrss.exe) 一組動態連接程式庫 (DLL) 視窗管理 圖形裝置界面(GDI)
直接連接到應用程式行程 Kernel32.dll User32.dll Gdi32.dll Advapi.dll 負責實做已文件化的Windows API函式 負責主控台視窗的功能; 創建或刪除行程和緒程 Windows子系統行程 (csrss.exe) 一組動態連接程式庫 (DLL) 使用者模式 核心模式 形式是驅動程式,不處理 I/O 請求; 向使用者程式碼提供了大量的系統服務 Windows 子系統中既有使用者模式部分,也有核心模式部分。 核心模式部分的核心是 win32k.sys,雖然它的形式是一個驅動程式,但實際上它並不處理 I/O 請求,它反而是向使用者程式碼提供了大量的系統服務。 從功能上講,它包含兩部分:視窗管理和圖形裝置介面(GDI)。 其中視窗管理部分負責收集和分發消息,以及控制視窗顯示和管理螢幕輸出;圖形裝置介面部分包含各種形狀繪製以及文字輸出功能。 用戶模式部分包括 Windows 子系統行程(csrss.exe)以及一組動態連結程式庫(DLL)。 Csrss.exe 行程主要負責主控台視窗的功能,以及創建或刪除行程和緒程等。子系統 DLL 則被直接鏈結到應用程式進程中,包括 kernel32.dll、user32.dll、gdi32.dll 和 advapi.dll 等, 負責實做 Windows API 函式。 一個應用程式,會開啟一個Process 一個Process,可以被程式設計師開出多個Thread 同一個process內的Threads可以共享Code、Data Section及OS Resources 一個Thread 就是一個小型的 Process ,若我們把 Process 分為兩個部份-----Threads 和 Resources, Threads 就是這個 Process 的動態執行者(Dynamic Object) win32k.sys 收集/分發消息 控制視窗顯示 管理螢幕輸出 形狀繪製功能 文字輸出功能 視窗管理 圖形裝置界面(GDI)

47 視窗管理 Windows 子系統的使用者介面管理有一個層次架構,通常應用程式只是在一個預設的桌面上執行
User 登錄 Windows 遠端 Windows 子系統的使用者介面管理有一個層次架構,通常應用程式只是在一個預設的桌面上執行 每個子系統工作階段都有自己的工作階段空間,屬於該工作階段的資源就從該工作階段空間中分配 子視窗 子系統 工作階段 互動式視窗工作站 非互動式視窗工作站 預設桌面 (圖形界面應用程式) 登入桌面 熒幕保護 桌面 登入桌面 最上層視窗清單 系統功能表 最大化按鈕 最小化按鈕 捲軸 獨立剪貼簿 鍵盤 滑鼠 顯示器 再來就是介紹windows子系統中 核心 模式的兩大主要功能:先說視窗管理 Windows 子系統的使用者介面管理有一個層次架構,通常應用程式只是在一個預設的桌面上執行。那每個子系統工作階段都有自己的工作階段空間,屬於該工作階段的資源就從該工作階段空間中分配。當使用者登錄到 Windows 中時,作業系統會為該使用者 建立一個工作階段;即使使用者是通過遠端桌面或者終端服務連接到一個系統中,系統也會為該使用者建立一個單獨的工作階段。 通常有三個桌面:登錄桌面、預設桌面和螢幕保護桌面。通常我們運行的圖形介面應用程式運行在預設桌面上。互動式視窗工作站有獨立的剪貼不、鍵盤、滑鼠、顯示器等,在它的三 個桌面中,任一時刻只有一個是啟動的,輸入輸出設備就是屬於啟動的桌面。 在每個桌面中,都有一個最上層視窗清單,這些視窗往往可以相互重疊,有系統功能表、 最大化/最小化按鈕和捲軸等。通常各個圖形介面應用程式的主視窗屬於目前桌面的最上層視窗。那在 Windows 中,我們知道視窗可以有子視窗,而子視窗佔據父視窗的用戶端區域。因此,桌面上的視窗形成了一個層次結構。 不可見桌面 圖2.5 Windows 子系統視窗管理層次結構

48 視窗類別(window class) 應用程式可以非常方便地建立這些視窗類的實體 應用程式要定義獨特的視窗類型
完全新的視窗類別 在系統已有視窗類別的基礎上定義新的視窗類別 Windows 視窗的編寫模型是訊息驅動的,每個視窗物件根據其視窗類別指定的視窗程序來回應各種訊息。

49 圖形裝置界面 Win32k.sys 視訊連接埠 圖形引擎(GDI) 驅動程式 GDI,與裝置無關,使應用程式適應各種底層顯示裝置;
Microsoft DirectX,遊戲直接操縱顯示器硬體,更快顯示速度 圖形裝置界面 Win32k.sys 圖形引擎(GDI) 使用者模式 核心模式 動態鏈接程式庫 —幫助微埠實現與圖形處理有關功能 —為微埠提供與系統核心和執行體打交道的環境 視訊連接埠 驅動程式 I/O請求 DDI GDI,與裝置無關,使應用程式適應各種底層顯示裝置; 應用程式與圖形裝置驅動程式之間的通訊效率夠高, 即使圖形元素頻繁輸出/刷新,保持良好視覺效果 ENG 在技術上,Windows 子系統定義了一個穩定的圖形系統結構,以便於第三方的圖形裝置硬體廠商可以方便地將他們的視訊顯示器和列印裝置整合到 Windows 中。就是說子系統核心win32k.sys 通過 DDI(顯示設備驅動程式介面)與顯示驅動程式打交道。而顯示驅動程式通過ENG(圖形引擎介面)呼叫 win32k.sys 中圖形引擎的功能。 顯示驅動程式可以幫助圖形引擎實作針對特定視訊卡的圖形功能,視訊微埠驅動程式是針對視訊卡的硬體特性。兩者的分工原則是:顯示驅動程式執行一些對使用者可見的且性能緊急的圖形操作,譬如,它可以直接存取介面卡的視訊存儲 區或者暫存器。;而微埠驅動程式執行一些不常見的圖形操作,或者一些不能被打斷或其他行程搶先的關鍵圖形操作。 視訊連接埠驅動程式由 Windows 作業系統提供,它實際上是一個動態連結程式庫,用於幫助視頻微埠驅動程式實現一些公共的、與圖形處理有關的功能,也是為微埠驅動程式 提供一個與系統核心和執行體打交道的環境。 視頻微埠驅動程式則負責直接的硬體資源管理和控制。 顯示驅動程式 視訊微埠 驅動程式 使用者可見、性能緊急的圖形操作 幫助圖形引擎實做針對特定視訊卡的圖形功能 不常見圖形操作, 不能被打斷的關鍵圖形操作 針對視訊卡硬體特性 圖2.6 Windows 子系統的圖形模組架構

50 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 WRK 包含了甚麼 WRK 原始碼說明 WRK 原始碼的引用 ( WRK 編譯 / 啟動 / 偵測 ) 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.3節 (WRK介紹、與說明) 頁數:[38,39,40,41,42] 報告者:萬惠雯 報告者: 萬惠雯

51 Windows 研究核心 WRK (Windows Research Kernel, Windows 研究核心) 。
以Windows Server 2003 SP1為基礎的核心原始碼。 可編譯和執行。 目的:輔助教學,用於教育科學研究機構的教學實踐和研究平台。 並非對所有人開放 以教學和科研為開放目標 在2006年7月向大學的教職員開放 輔助教學-讓電腦專業的學生能夠透過WINDOWS核心原始碼來了解現在作業系統的基本概念含各種機制 Microsoft的資助下,有些大學利用WRK從事作業系統的科學研究工作 使用前要先閱讀WRK授權條例

52 WRK 內容 WRK核心原始碼 行程、記憶體管理、執行體,中斷和例外處理…等。 了解核心基本概念。 NT設計元件 檔案系統設計大綱和核心測錯架構。 Windows NT原始設計思維。 軟體Virtual PC 2007 和Windows Server 2003 SP1虛擬機器映像 方便偵錯追蹤WRK的程式碼。 WRK核心原始碼----無須額外編譯工具 共六部分

53 WRK 內容 (Cont.) 課程資源 CRK (Curriculum Resource Kit) ProjectOZ 原始碼
Windows Internals 電子書和工具。 ProjectOZ 原始碼 利用Windows核心的NTAPI建立的CPU、MMU和陷阱機制作業系統實驗環境。 學習了解OS演算法和資料結構。 相關輔助教材和參考資料

54

55 WRK 原始碼說明 Windows 核心模組檔案─ntosktl.exe 在x86的預設檔名為wrkx86.exe。
未公開的部分─隨插即用裝置管理、電源管理、裝置驅動程式檢驗器和虛擬DOS機實作。 缺少部分二進位目的碼形式包在WRK中。

56 WRK目錄架構和相關元件 WINDOW程式碼易讀,有一致性,望文生義 在重要的函式標頭都有註解說明 重要程式片段也有註解 組織清楚
核心模組內部的每個元件都提供了一些介面函式供其他元件呼叫 也有一些函式供該元件內部使用

57 各元件介面函式的字首 常見的標識性字首-----字首第一個字母後面接I (內部的)或接P(私有的)

58 WRK原始碼引用 WRK原始碼 相關註解 C語言和Intel x86組譯指令。 相關資料結構或函式原型。 容易理解相關邏輯
在解釋一些核心中的重要元件時,會引用程式碼來講解 為了讓程式碼清晰 可讀 加入註解

59 WRK原始碼引用 (Cont.) 本書目的 ─ 釐清Windows各種底層機制 解釋關鍵邏輯。 函式內部和函式之間的控制流程圖。
關鍵機制實作過程。 建立WRK偵錯環境,有助於了解控制流程。 避免過多程式碼 讓讀者看不懂

60 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 WRK 包含了甚麼 WRK 原始碼說明 WRK 原始碼的引用 ( WRK 編譯 / 啟動 / 偵錯 ) 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 2.3節 (額外 WRK 編譯/啟動/偵錯) 頁數:[請參考網路資料與去年PPT資料] 報告者:陳禹任 報告者: 陳禹任

61 WRK編譯 環境 Windows Server 2003 SP2 WRK v1.2

62 WRK編譯 取得 WRK

63 WRK編譯 取得 WRK

64 WRK編譯 取得 WRK

65 WRK編譯 取得 WRK

66 WRK編譯 set PATH=%PATH%;C:\WRK\tools\x86

67 WRK編譯 cd base\ntos nmake –nologo x86=

68 WRK編譯

69 WRK編譯 cd base\ntos nmake –nologo x86=

70 WRK編譯 cd build\exe

71 WRK啟動 安裝 HAL 模組 在命令列輸入下列指令:
link –dump –all \WINDOWS\system32\hal.dll | findstr pdb halacpi.dll -> halaacpim.dll halaacpi.dll -> halmacpi.dll halapic.ll -> halmps.dll

72 WRK啟動 安裝 WRK 核心

73 WRK啟動 安裝 WRK 核心

74 WRK啟動 安裝 WRK 核心

75 WRK啟動 安裝 WRK 核心 設定 將 serial port pipe 到本機端上,後續會用到 \\.\pipe\com1

76 WRK啟動 啟動 WRK 核心 選擇 WRK 開機

77 WRK偵錯 使用 Windows Debug Tools 下載 Windows SDK 下載 Windows Symbol Package
下載 Windows SDK 下載 Windows Symbol Package

78 WRK偵錯 下載 Windows SDK

79 WRK偵錯 下載 Windows SDK id=8279 (Web 下載版) (ISO 檔)

80 WRK偵錯 安裝 Windows SDK 只需要 Debugging Tools for Windows

81 WRK偵錯

82 WRK偵錯

83 WRK偵錯

84 WRK偵錯

85 WRK偵錯

86 WRK偵錯

87 WRK偵錯

88 WRK偵錯 常見問題 若系統中有安裝 Visual C++ 2010 Redistributable,則務必先移除
因為 Windows SDK 強制安裝的版本 ( ) 比較舊,當偵測到較新版本時會安裝失敗

89 WRK偵錯

90 WRK偵錯 下載 Windows Symbol Packages

91 WRK偵錯 安裝 Windows Symbol Packages

92 WRK偵錯 安裝 Windows Symbol Packages

93 WRK偵錯 啟動 WinDbg

94 WRK偵錯 啟動 WinDbg (設定 symbol 目錄) Symbol 用途
編譯器在產生執行檔時額外提供的符號資料,包含函數位址和參數、各種變數的位址和類型等資訊 可為使用者提供更為有好的輸入和輸出。Ex. 使用者可以以函式名稱的形式來設定中斷點,而不是指定程式碼位址;使用者可以方便地查看一個資料結構的成員,而無需自己解析資料區每一個位元組的含意

95 WRK偵錯 啟動 WinDbg (設定 symbol 目錄) 情況一:WinDbg 在遠端機器上
set _NT_SYMBOL_PATH= 或是手動輸入特定目錄

96 WRK偵錯 啟動 WinDbg 設定 symbol 路徑

97 WRK偵錯 啟動 WinDbg

98 WRK偵錯 啟動 WinDbg (設定 symbol 目錄) 情況二:WinDbg 在同一機器上
WinDbg 會自動從 wrkx86.exe 中找到 wrkx86.pdb 檔案,從而 WinDbg 能夠解析 WRK 核心符號

99 WRK偵錯 啟動 WinDbg 開始 Kernel Debug

100 WRK偵錯 啟動 WinDbg

101 WRK偵錯 啟動 WinDbg

102 WRK偵錯 啟動 WinDbg

103 WRK偵錯 啟動 WinDbg

104 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 處理器模式 記憶體管理 行程和緒程管理 中斷和例外 同步 2.5 Windows 核心中的功用管理設備 2.4節簡介、2.4.1節、2.4.2節 (記憶體管理) 頁數:[43,44,45,46] 報告者:宋貫綸 報告者: 宋貫綸

105 2.4.1 處理器模式 在 Intel x86 處理器,有一個2位元長度的特權等 級 Windows 只使用0和3 兩種特權等級
處理器模式 在 Intel x86 處理器,有一個2位元長度的特權等 0:表示最高特權等級 3:表示最低特權等級 Windows 只使用0和3 兩種特權等級 0:表示CPU處於核心模式 ( kernel mode ) 3:表示CPU處於使用者模式( user mode )

106 2.4.1 處理器模式 指令: 記憶體存取: 核心模式:可使用I/O指令,操縱內部暫存器指令 使用者模式:不可 核心模式:不受限
處理器模式 指令: 核心模式:可使用I/O指令,操縱內部暫存器指令 使用者模式:不可 記憶體存取: 核心模式:不受限 使用者模式:受限制的

107 處理器模式 處於使用者模式下,是一種相對隔離的狀態,能夠執行的指令及能存取的記憶體是受限制的,一旦越過了這些限制,就會引發處理器例外,使作業系統可以截取到這些例外,並決定是否繼續執行。 使用者模式下作業系統可以有足夠的能力來保護自己免受使用者模式程式碼的影響 核心模式下這一層保護不復存在,任何一個未被截獲和處理的指令錯誤都會引起系統當機

108 2.4.1 處理器模式 模式切換: 使用者模式程式碼觸發了例外,則控制流進入到核心 模式,作例外處理
處理器模式 模式切換: 使用者模式程式碼觸發了例外,則控制流進入到核心 模式,作例外處理 使用者模式程式碼在執行時,被一個中斷打斷(software / hardware interrupt),則控制流進入核心模式,中斷 處理結束後,呼叫 iret/iretd 指令,則控制流恢復到 使用者模式。 執行特殊的模式切換指令, 如 intel x86的 sysenter 指令, 從使用者模式切換到核心模式,而要從核心模式切 換回使用者模式,用sysexit、iret/iretd 。

109 2.4.1 處理器模式 由於系統空間是所有行程共用的,所以,任一個行程在執行核心模式的程式碼時,實際上是在使用作業系統的服務。
處理器模式 由於系統空間是所有行程共用的,所以,任一個行程在執行核心模式的程式碼時,實際上是在使用作業系統的服務。 在windows 架構上,核心模式向上有一個執行體API,對於應用程式而言,這便是系統服務。

110 圖2.3 Windows核心組成架構圖 子系統DLL NTDLL.DLL 使用者模式 核心模式 系統服務 子系統服務 執行體API
即插即用管理員 安全參照監視器 本地程序呼叫(LPC) I/O管理員 記憶體管理員 行程和緒程管理員 快取管理員 組態管理員(登錄) 檔案系統 網路 Windows子系統 視窗管理 圖形介面 圖形驅動程式 物件管理員 核心 (或微核心) 硬體抽象層 (HAL) 裝置驅動程式 圖2.3 Windows核心組成架構圖

111 記憶體管理 Intel x86系統架構支援區段式(segment)記憶體管理,也支援分頁式(paging)記憶體管理,然而Windows沒有使用區段式記憶體管理方案,只是簡單地將32位元虛擬記憶體空間按照0~4GB的線性位址空間來看待。 任何一個行程都定義了它自己的完整4GB位址空間,但是,其2GB~4GB之間的位址範圍是所有行程共用的,稱為系統位址空間;而0~2GB部分才是它自己私有的,稱為行程位址空間。

112 記憶體管理機制 系統位址空間管理 行程位址空間管理

113 Windows記憶體管理機制(1/3) Windows使用了Intel x86的二級或多級分頁表機制來存取虛擬記憶體。處理器在執行記憶體存取指令時,將虛擬位址翻譯成實體位址,翻譯過程涉及到查詢分頁目錄和分頁表 虛擬位址格式: page number page offset pi p2 d 10 12

114 Windows記憶體管理機制(2/3)

115 Windows記憶體管理機制(3/3) 一旦分頁表項目指出一個頁面末在實體記憶體中,則觸發分頁錯誤( page fault)例外。
虛擬憶體管理員透過分頁錯誤例外將已被換出到磁碟上的資料或程式碼重新帶入實體記憶體,供目前活躍的程式存取。另一方面,當實體記憶體吃緊時,它將不常用的頁面換出到磁碟上。

116 記憶體管理機制 系統位址空間管理 行程位址空間管理

117 系統位址空間管理(1/4) 在初始化時將系統位址空間劃分成一些固定的區域,每個區域有專門的用途。 使用了一組全域變數來記錄每個區域的邊界。
初始化實際上是對這些全域變數的初始化,並相應地初始化每個區域。 不同的區域使用不完全相同的記憶體分頁管理演算法,較為典型的有三種管理方法: 非分頁集區 分頁集區 系統PTE區域

118 系統位址空間管理(2/4) 非分頁集區:這部分記憶體區域在初始化時刻已經被對應到實體頁面,所以, Windows利用空閒串列,按照不同的size,將空閒頁面連結起來。空閒頁面本身即串列中的節點,因而這些串列無需額外的記憶體空間(除了開頭節點)。申請和釋放頁面的操作實際上是針對空閒串列來進行的。 分頁集區:在分頁集區區域,空閒的頁面並沒有被對應實體頁面,Windows使用點陣圖來管理頁面。分配連續的多個頁面,即從點陣圖中找到連續的零位。

119 系統位址空間管理(3/4) 系統PTE區域:這部分記憶體區域並非存放的是PTE(page table entries),而表示這部分位址範團是以PTE的形式來管理的,即把PTE當作資源來管理。當核心需要一段虛擬位址來對應實體頁面時,它可以使用系統PTE區域中的位址。

120 系統位址空間管理(4/4) 執行體分頁集區和執行體非分頁集區:這些記憶體集區透過空閒串列記錄下每個已申請頁面中的空閒區塊;當釋放記憶體時,自動與相鄰的空閒區塊合併以構成更大的空閒區塊。核心其他元件或驅動程式透過執行體暴露的API函式(例如ExAllocatePoolWithTag和ExFreePoolWïthTag)來使用這些記憶體集區。

121 記憶體管理機制 系統位址空間管理 行程位址空間管理

122 行程位址空間管理 隨著Process一起被建立,每個行程有它自己的分頁目錄表,其中有一半分頁目錄項(PDE)是共用的,即系統位址空間部分,餘下一半初始化為零。 隨著行程中的映像檔(包括exe檔案和各個DLL檔案)被載入進來,以及各個模組的初始化程式碼被執行,行程位址空間逐步被建立起來。 透過一棵平衡二元搜尋樹來管理行程位址空間被使用的情況,樹中的每個節點為一個VAD(Virtual Address Descriptor),描述了一段連續的位址範圍;但是在整個位址空間中,被使用的或保留的位址範圍往往是不連續的。

123 PFN資料庫 (Page Frame Number Database)
每一個實體頁面對應於PFN資料庫中的一項,此PFN項描述了該頁面的狀態。 記憶體管理員利用PFN資料庫,按照頁面的狀態來管理實體記憶體,並且負責頁面的狀態轉移。 Windows支援八種狀態:活動、備用(standby)、已修改、已修改但不寫出、轉移、空閒、零化和壞狀態。

124 Page Frame Database – states of pages in physical memory
Status Description Active/valid Page is part of working set (sys/proc), valid PTE points to it Transition Page not owned by a working set, not on any paging list I/O is in progress on this page Standby Page belonged to a working set but was removed; not modified Modified Removed from working set, modified, not yet written to disk Modified no write Modified page, will not be touched by modified page write, used by NTFS for pages containing log entries (explicit flushing) Free Page is free but has dirty data in it – cannot be given to user process – C2 security requirement Zeroed Page is free and has been initialized by zero page thread Bad Page has generated parity or other hardware errors

125 工作集管理員(1/2) 工作集(working set):一個Process目前正在使用的實體頁面的集合。 包含三種型態:
行程工作集 系統工作集(即系統空間中動態對應的頁面集合) 工作階段工作集(即工作階段空間中的程式碼和資料段〉 每個process有一個工作集串列,其中每一項不僅記錄了實體頁面的編號,還記錄了其他的屬性,工作集管理員可以根據一些策略來選擇要修剪的行程,將其使用中的頁面換出到磁碟中,空出未使用的實體頁面給其他process 。

126 工作集管理員(2/2) 工作集管理員執行在一個稱為平衡集管理員(balance set manager)的執行緒中,它每隔一秒鐘被觸發一次,當可用記憶體太低時也會被觸發。 平衡集管理員除了觸發工作集管理員以外,也定期觸發行程/堆疊交換器(process/stack swapper)。 行程/堆疊交換器是另一個單獨的執行緒,一旦被喚醒,則將滿足特定條件的行程和堆疊換入記憶體或換出記憶體。

127 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 處理器模式 記憶體管理 行程和緒程管理 系統行程和系統緒程 中斷和例外 同步 2.5 Windows 核心中的功用管理設備 2.4.3節、2.2.4節 (行程和緒程) 頁數:[36,37,46,47,48] 報告者:劉書銘 報告者: 劉書銘

128 行程 (process) 定義一個執行環境 (An Environment for program execution)
私有的位址空間 (private virtual address space) 行程控制表 (PCB,Process Control Block) 安全環境 (Access token) 存取權限、擁有者等屬性

129 PCB (Process Control Block)
行程狀態:new、ready、running、waiting或halted等。 程式計數器:接著要執行的指令位址。 CPU 暫存器:如累加器、索引暫存器(Index register)、堆疊指標以及一般用途暫存器、狀況代碼等,主要用途在於中斷時暫時儲存資料,以便稍後繼續利用;其數量及類別因電腦架構有所差異。 CPU 排班法:優先順序、排班佇列等指標以及其他參數。 記憶體管理:如分頁表等。 會計資訊:如 CPU 與實際時間之使用數量、時限、帳號、工作或行程號碼。 輸入輸出狀態:配置行程使用 I/O 裝置,如磁帶機。 By wikipedia

130 行程 (process) 每一行程有獨一無二的 ID (Process ID, PID) 行程間有父子關係
行程中無明確指定的屬性,均繼承自父行程 行程本身是獨立的,僅記錄父行程的ID 僅代表建立者與被建立者的關係

131 緒程 (Thread) 一種控制流程 ( The entity within a process that can be scheduled for execution) 指令執行順序 排程單元 有自己的呼叫堆疊(call stack) 紀錄執行的歷史 每一緒程有獨一無二的 ID (Thread ID, TID)

132 行程與緒程的關係 一個行程中,至少有一個緒程 每個緒程必定依附於一個行程 行程被初始建立時 當行程中最後一個緒程結束時 行程與緒程
系統為該行程建立第一個緒程 當行程中最後一個緒程結束時 該行程也隨之結束 行程與緒程 一對多

133 行程與緒程的關係 行程中的緒程若在 User mode 執行→只能存取該行程的位址空間 Kernel mode 執行→可以存取整個位址空間
行程位址空間 (私有) 行程 P1 緒程 T1 行程 P2 T2 T3 行程 P3 T4 T6 T5 更多行程 …. 系統位址空間 (共用)

134 行程與緒程的核心架構 核心機制在 Kernel 中實作 管理機制在執行體中實作 緒程排程 建立緒程與行程的相依性 各種管理屬性設定
KeAttachProcess / KeStackAttachProcess 函式 管理機制在執行體中實作 緒程和行程的建立 PspCreateThread , PspCreateProcess 函式 各種管理屬性設定

135 行程的建立 ─ PspCreateProcess
建立執行體行程物件 EPROCESS 初始化該物件的狀態 建立一個位址空間 更多行程 …. 行程 P1 行程 P2 行程 P3 緒程 T1 T2 T3 T4 T6 T5 新行程 P4 EPROCESS

136 緒程的建立 ─ PspCreateThread
建立執行體緒程物件 ETHREAD 初始化其中的欄位 維護新緒程與宿主行程之間的關係 更多行程 …. 行程 P1 行程 P2 行程 P3 緒程 T1 T2 T3 T4 T6 T5 新緒程 T7 ETHREAD

137 緒程排程 (Thread Scheduling)
先佔式 (Preemptive) 基本優先順序 (base priority) 動態優先順序 (priority) 優先順序 0: 最低優先順序,僅用於某些系統緒程執行幕後工作 1~15: 動態優先順序 16~31: 即時優先順序,用於一些即時處理工作

138 緒程排程 (Thread Scheduling)
滿足繼續執行的條件 正在排隊或已經在執行 按優先順序排隊執行 不滿足繼續執行的條件 處於等候狀態 呼叫堆疊甚至所處的行程已被換出記憶體 一旦執行條件滿足,首先要將他換回記憶體,然後才能參與排隊分發

139 系統緒程 與 系統行程

140 系統緒程 System 行程中的緒程 系統輔助緒程 (System worker thread) 裝置驅動程式或執行體,可在此行程建立緒程
向系統輔助緒程請求得到服務 執行體函式 ExQueueWorkItem I/O 管理員函式 IoQueueWorkItem 系統輔助緒程 (System worker thread) 代表作業系統或其他應用行程來完成一些特殊工作

141 系統輔助緒程 (System worker thread)
實際上為一個緒程集區 產生的時機 Windows在系統初始化時,建立一定數量的輔助緒程 執行體動態建立 隨著輔助緒程的負載變化 滿足系統負載的變化需求

142 Windows 重要系統行程 系統空閒行程 (Idle) System 行程 工作階段管理員 (smss.exe)
登入行程 (winlogon.exe) Windows子系統行程(csrss.exe) 本機安全性授權子系統 (lsass.exe) Shell行程 (explore.exe) 服務控制管理器 (services.exe)

143 以 Win7 為例,按 ctrl + alt + del 跳出工作管理員

144 [1] 系統空閒行程 (Idle) 行程的編號 (Process ID, PID) = 0
每個處理器 (processor) 或核心 (kernel) 對應一個緒程 (thread)

145 [2] System 行程 行程的編號 (Process ID, PID) = 4 Kernel mode 的 System thread
以下三種,透過 PsCreateSystemThread 創建 thread 系統輔助緒程 (system worker threads) 執行體 驅動程式

146 [3] 工作階段管理員 (smss.exe) 全名為 (Session manager, smss.exe)
第一個建立的 user mode process 在 Windows 啟動過程中 建立環境變數 啟動 子系統行程:csrss.exe 登入行程:winlogon.exe 建立新的終端伺服器工作階段 (terminal server session) 載入子系統,啟動 csrss.exe 和 winlogon.exe

147 [4] 登入行程 (winlogon.exe) 負責處理互動使用者的登入和登出 使用者按下 Ctrl + Alt + Del 組合鍵,
稱為安全注意順序 (Secure Attention Sequence, SAS) winlogon 接到登入請求 觸發安全認證過程 啟動使用者工作階段中的初始行程 若在工作階段的任何時刻,按下 SAS 組合鍵 winlogon 會提示一個安全對話方塊 登出、啟動工作管理員、鎖定電腦 ... 等選項

148 [5] Windows子系統行程(csrss.exe)
負責為使用者提供一個子系統環境 包含提供 主控台視窗 建立或刪除 process 和 thread

149 [6] 本機安全性授權子系統 (lsass.exe)
負責本機系統安全性原則 允許那些使用者登入系統 密碼策略 授予使用者與使用群組的權限 系統安全稽核設定 負責認證使用者身分 將安全稽核訊息發送至系統的事件日誌 (Event Log) 中

150 [7] Shell行程 (explore.exe)
Windows 預設的 shell 提供使用者與系統溝通的各種介面 開始功能表 工作列 檔案管理員視窗 ... 等,幾乎所有Windows 使用者熟悉的介面

151 [8] 服務控制管理器 (services.exe)
負責管理 Windows 的系統服務 指一些特殊的行程 通常不與登入使用者有互動 被設定成系統啟動時自動啟動 Windows中有很多功能元件是以服務方式實作 事件日誌、 工作排程器、 各種網路元件等

152 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 處理器模式 記憶體管理 行程和緒程管理 中斷和例外 同步 2.5 Windows 核心中的功用管理設備 2.4.4節 (中斷與例外) 頁數:[49,50] 報告者:楊善雯 報告者: 楊善雯

153 中斷和例外 中斷(Interrupt) 1.處理器與外部裝置打交道的重要途徑 2.中斷的發生與目前指令流並無實質聯繫
3.非同步的 例外(Exception) 1.處理器正常指令流在執行過程中產生的一些特殊 事件 2.例外的發生是目前指令流執行的直接結果 3.同步的

154 Interrupt Descriptor Table (IDT)
將每個中斷或例外與一個處理該中斷或例外的服務常式聯繫起來。 The IDT must be properly initialized before the kernel enables interrupts. Each entry corresponds to an interrupt or an exception vector and consists of an 8-bits descriptor. (A maximum of 2048 bytes are required to store the IDT. )

155 Interrupt Service Routine(ISR)
Windows 在IDT基礎上, 提供另一種更靈活的軟體機制, 允許裝置驅動程式為特定的中斷向量添加ISR。 每個中斷向量連接多個中斷物件。 *中斷物件: 1.封裝了ISR的核心物件。 2.透過中斷物件機制, 裝置驅動程式可以在不操作 IDT的情況下加入他們的ISR。 3.多個硬體裝置也可以共用同樣的硬體中斷向量。

156 Interrupt Request Level (IRQL)
IRQL=0, PASSIVE_LEVEL 優先順序最低。 IRQL=1, APC_LEVEL 非同步程序呼叫 (Asynchronous Procedure Calls) IRQL=2, DISPATCH/DPC_LEVEL 延遲程序呼叫 (Deferred Procedure Calls) IRQL=3~26, 裝置IRQL IRQL=26~31, 特殊硬體中斷 例:時鐘中斷、電源中斷、處理器間中斷。

157 APC 緒程相關的常式。 在特定的位址空間被執行。 優先權高於緒程本身的指令流。 適合實作於各種非同步通知事件。 例: I/O的完成通知。

158 DPC 優先權高於任何一個與緒程相關的函式過程, 也高於緒程排程。 不會遮罩任何的硬體中斷。
用來執行相對於目前高優先順序的工作來說不那麼緊急的事情。 縮短處理器停留在高IRQL層級的時間。 典型用法:計時器(timer)

159 中斷和例外 中斷(Interrupt) 1.處理器與外部裝置打交道的重要途徑 2.中斷的發生與目前指令流並無實質聯繫
3.非同步的 例外(Exception) 1.處理器正常指令流在執行過程中產生的一些特殊 事件 2.例外的發生是目前指令流執行的直接結果 3.同步的

160 例外 (Exception) 程式指令流執行過程中的同步處理過程。 可由處理器硬體產生, 也可由指令流軟體產生。
例外處理常式 (Exception handler) 1.儲存 Kernel Mode stack 中暫存器的內容。 2.Handle the exception by means of a high-level C function. 3.Exit from the handler by means of the ret_from_exception() function.

161 Kernel Mode Exception Exception dispatch procedure 當機 例外第二次未處理 例外
核心偵錯器 例外處理完成 沒有核心偵錯器 例外第一次未處理 Frame-based exception handler 沒有此例外處理常式

162 Kernel Mode Exception Frame-based exception handler
將 exception handler 與 stack frame 關聯起來,當例外發生時,例外發送器可以根據目前 stack 中的 stack frame 來搜尋與之相關的例外處理常式。

163 User Mode Exception Exception dispatch procedure Kernel mode User mode
核心偵錯器 Process偵錯埠 第一次偵錯埠無效 等待偵錯埠應答 例外處理完成 例外處理完成 例外未處理 Frame-based exception handler 例外發送器 第二次偵錯埠無效 例外無法處理 process例外埠 終止process

164 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 處理器模式 記憶體管理 行程和緒程管理 中斷和例外 同步 2.5 Windows 核心中的功用管理設備 2.4.5節 (同步) 頁數:[51,52,53] 報告者:黃惠慈 報告者: 黃惠慈

165 同步 現代作業系統多核、多處理器或中斷等各種並行性(concurrency)因素的存在,使得
程式碼並行執行 資料並行存取 對於可能被並行存取的資料,需進行同步(synchronization)保護。

166 同步保護機制分類 根據執行環境中IRQL值是否為PASSIVE_LEVEL,可將同步機制分為兩大類 不依賴於緒程排程的同步機制
基於緒程排程的同步機制

167 Windows程式碼中的IRQL定義

168 IRQL 大於 0 時的典型同步機制 提升IRQL 當處理器在某個IRQL層級上執行時,只能被更高的IRQL層級中斷
多處理器,須結合其他同步機制

169 IRQL 大於 0 時的典型同步機制 互鎖操作(interlocked)
利用Intel x86處理器提供的lock指令前置,可以實作基本的整數操作保護,確保一個操作以不可分割方式進行 只能在小細微性的資料上進行同步 指令級保護

170 Windows 核心支援的整數原子操作

171 IRQL 大於 0 時的典型同步機制 無鎖的單串列 Windows利用64位元互鎖指令來實作無鎖的單串列資料結構 支援多核、多處理器環境

172 IRQL 大於 0 時的典型同步機制 自旋鎖(spin lock) 忙等待(busy wait)
為了獲得自旋鎖,處理器不停地檢測鎖的狀態,而不做其他的事情,直至鎖的狀態變成可用為止 通常用於IRQL大於等於DISPATCH_LEVEL 自旋鎖的擴充 執行體自旋鎖(支援共用和獨佔的語意) 佇列自旋鎖(queued spin lock) 堆疊內佇列自旋鎖(in-stack queued spin lock)。

173 IRQL 大於 0 時的典型同步機制 當一段核心程式瑪在使用以上這些同步機制來保護資料時
通常盡可能在短時間內解除保護,以便不妨礙其他的處理器 讓正在等待執行的緒程盡快有機會得到處理器資源。

174 PASSIVE_LEVEL上緒程之間的同步
當一緒程執行條件不滿足進入等候狀態 將控制權交給滿足執行條件但沒有得到處理器的緒程 當該緒程滿足執行條件才有機會繼續執行 執行條件: Windows提供的緒程同步機制中的語意 Windows定義統一機制來支援各種緒程同步語意: 發送器物件(dispatcher object) 其資料結構標頭為DISPATCH_HEADER

175 DISPATCH_HEADER定義

176 等待區塊(wait block) 用來描述一個緒程正在等待一個發送器物件變成有信號狀態 對於每個處於等候狀態的緒程,有一個等待區塊串列
節點代表該緒程正在等待的一個發送器物件 對於每個發送器物件,也有一個等待區塊串列 節點代表了正在等待該物件的一個緒程 當發送器物件變成有信號狀態,系統循著此物件的等待區塊串列,就知道該解除哪個或哪些緒程

177 KWAIT_BLOCK結構定義

178 等待區塊(wait block) 決定等待條件該如何滿足
緒程進入等待的條件 發送器物件的狀態 若等待多個物件,需指名等待任何其中之一[Wait Any]或等待所有物件[WaitAll] 發送器物件 解除一個或多個緒程

179 緒程物件、發送器物件和等待區塊物件的關係

180 Windows Server 2003發送器物件 事件(event) 事件通知物件 事件同步物件
區別在於,當事件物件變成有信號狀態時,解除所有正在等待該物件的緒程,還是只喚醒第一個以WaitAny方式等待該物件的緒程。

181 Windows Server 2003發送器物件 突變體(mutant) 是互斥器(mutex)的實作
如果突變體物件為無信號狀態,則一定被某個緒程”佔有”。 紀錄”所有者”緒程資訊 可用於實作”鎖”。

182 Windows Server 2003發送器物件 旗號(semaphore) 佇列物件(queue) 計數器控制最多有多少個緒程共用一個資源
當計數器達到最大值時,旗號變成無信號狀態 佇列物件(queue) 用於支援緒程集區的機制 其資料結構為KQUEUE 控制一項工作的並行程度 典型用途是I/O完成埠

183 Windows Server 2003發送器物件 行程物件 緒程物件 是一個發送器物件 當行程物件被初始建立時,其狀態為無信號
當行程結束時,其狀態變成有信號 緒程物件 也是一個發送器物件 當緒程物件被初始建立時,其狀態為無信號 當緒程結束時,其狀態變成有信號。

184 Windows Server 2003發送器物件 計時器物件 閘道物件(gate object) 一個像DPC的常式 一個可等待的發送器物件
當設置的時間到期時,計時器變成有信號狀態。 閘道物件(gate object) 閘道物件和閘道等待是緒程排程器的特殊支援,它繞過了以上發送器物件同步程序中的許多步驟。 喚醒一個閘道等待的緒程,是以最快捷的方式進行 緒程排程器直接將緒程插入到某個處理器的就緒序列中。

185 其他同步機制 快速互斥器(fast mutex) 守護互斥器(quarded mutex)
執行體資源(executive resource) 推銷(push lock)

186 參考文獻 Chapter 03 系統機制

187 目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心
目 錄 2.1 現代作業系統的基本架構 2.2 Windows 系統架構 2.3 關於 Windows 研究核心 2.4 Windows 核心的基本概念 2.5 Windows 核心中的功用管理設備 Windows 核心中的物件管理 開場白、簡介目錄、2.1節、2.2節簡介、2.5節、2.5.1節 頁數:[17,18,53,54,55,56] 報告者:賀振坤

188 Windows核心中的物件管理 物件導向的思維 物件管理員:執行體中的元件 執行體API 視窗 …… 圖形介面 檔案系統 網路 物件管理員
(微)核心 硬體抽象層 (HAL)

189 物件 各種資源以物件(Object)的形式來組織 物件包含兩部份組成:物件標頭與物件實體 所有物件標頭具有統一的格式

190 物件:標頭

191 物件:型別

192 物件:型別

193 物件:型別 建立物件型別

194 物件:型別 __in: input parameter __out output parameter __in_opt: optional input parameter

195 物件:型別

196 物件:型別

197 物件:建立物件型別

198 物件:建立物件型別 ex:Process

199 物件:建立物件型別 ex:Thread

200 物件:建立物件

201 物件:建立物件 ex1:Process

202 物件:建立物件 ex1:Thread


Download ppt "Chapter 2 Windows 系統總述 Team 1 (page 17 ~ page 56)"

Similar presentations


Ads by Google