2.2.1 Windows 核心架構
Download
Report
Transcript 2.2.1 Windows 核心架構
Chapter 2
Windows 系統總述
Team 1 (page 17 ~ page 56)
100522084
100522045
100522017
100522608
劉書銘
宋貫綸
賴佑東
陳書瑜
100522030
100522037
100582012
100522033
蔡昀昇
黃惠慈
陳禹任
馬萬鐸
100522011
100522006
100582013
100522072
楊善雯
賀振坤
張閎翰
萬惠雯
目
2.1
2.2
2.3
2.4
2.5
2.6
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
Windows 核心中的功用管理設備
Windows 啟動過程
2
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構簡介
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
2.2.3 Windows 子系統
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522006 賀振坤
3
現代作業系統的基本架構
屬於軟體的範疇
提供一層抽象介面
Windows、Linux : 可動態載入驅動程式或專門的擴充
介面
4
現代作業系統的基本架構
應用程式透過一層介面呼叫系統服務
應用程式之間則用IPC ( inter-process
communication 行程間通訊)交互操作
硬體裝置透過驅動程式,與電腦核心進行通訊
5
現代作業系統的基本架構
應用
IPC
應用
IPC
應用
系統服務
系統擴充
系統核心
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
6
現代作業系統的基本架構
應用環境
應用
應用
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
7
現代作業系統的基本架構
應用環境
應用
應用
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
8
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
2.2.3 Windows 子系統
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522033 馬萬鐸
9
現代作業系統的基本架構
系統和服務
行程
用戶應用程式
系統DLL
Window
子系統行程
NTDLL.DLL
User mode
Kernel mode
執行體(Executive)
核心(或微核心)
硬體抽象層(HAL)
設備驅動
程式
Window
子系統核心
模組
10
Hardware Abstraction Layer(HAL)
(Micro)Kernel Layer
Executive Layer
物件管理員
11
Windows核心組成架構
子系統DLL
NTDLL.DLL
User mode
Windows
子系統
視窗管理
圖形介面
Kernel mode
系統服務
子系統服務
執行體 API
記憶
體管
理員
行程
和緒
程管
理員
即插
即用
管理
員
安全
參照
監視
器
快取
管理
員
本地
程序
呼叫
LPC
組態
管理
員
(登陸)
I/O
管理
員
檔
案
系
統
網
路
物件管理員
圖形驅
動程式
核心(微核心)
裝置
驅動
程式
硬體抽象層(HAL)
12
Windows核心架構
執行體API函式會接收來自各應用程式的參
數
參數有效性
指標指向可存取的記憶體
在函式開頭檢查參數
13
Windows核心架構
PreviousMode = KeGetPreviousMode();
If(PreviousMode != KernelMode){
try{
判斷輸入資料
是否可寫
Takes an argument
pointer and return
FALSE if the
pointer is NULL
ProbeForWrite(InputInformation,
InputInformationLength,
sizeof(ULONG));
if(ARGUMENT_PRESENT(ReturnLength)){
ProbeForWriteUlong(ReturnLength);
}
}
except(EXCEPTION_EXECUTE_HANDLER){
return GetExceptionCode();
}
看參數是否
可寫
}
14
Windows核心架構
系統位址空間
Kernel mode
4GB
0xffffffff
特殊區間
64KB
0x7fffffff
不可存取
0x7fff0000
行程位址空間
User mode
2GB
0x00000000
15
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
( HAL、核心、執行體 )
2.2.3 Windows 子系統
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100582013 張閎翰
16
Windows 核心中的關鍵元件
子系統DLL
NTDLL.DLL
系統服務
子系統服務
Windows
子系統
視窗管理
圖形介面
圖形驅
動程式
使用者模式
核心模式
C. 執行體API
記憶體
管理員
行程和
緒程管
理員
即插即
用管理
員
安全參
照監視
器
快取管
理員
本地程
序呼叫
(LPC)
組態管
理員
(登錄)
I/O管
理員
檔案
系統
網
路
物件管理員
B. 核心 (或微核心)
A. 硬體抽象層 (HAL)
圖2.3 Windows核心組成架構圖
裝置驅
動程式
Windows 核心中的關鍵元件
A. 硬體抽象層 (HAL)
將硬體的差別隱藏起來,提供一個抽象且一致的硬體
資源模型。
不同平台的移植。
獨立的動態連結程式庫
透過HAL來存取硬體
表 2.1 Windows Server 2003 的 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
Windows 核心中的關鍵元件
B. 核心 (或微核心)
最接近於HAL層
負責緒程排程和中斷、例外處理
C語言為主 (包含一部分組合語言)
先佔式緒程
• 基本優先
• 動態優先
物件導向
• 發送器物件 (dispatcher object)
event, mutant, semaphore, process, thread,
queue, gate 及 timer
• 控制物件 (Control object)
APC, DPC 及中斷物件
Windows 核心中的關鍵元件
C. 執行體 (Executive) API
位於核心模組(ntoskrnl.exe)的上層
目的為提供可供上層應用程式或內核驅動程式條用的
功能
五種不同類型的函式 (執行體內部的元件)
1) 被匯出且可在使用者模式下呼叫的函式。
2) 滿足 1)但無法呼叫任何一個 Windows API。
3) 只 能 在 核 心 模 式 下 被 呼 叫 的 匯 出 函 式 , 並 且 在
Windows DDK 中有相關的文件。
4) 可供執行體元件相互呼叫,但未被文件化的函式。
5) 屬於一個元件的內建函式。
Windows 核心中的關鍵元件
C. 執行體 (Executive) API (續)
執行體包含以下元件
1) 行程和緒程管理員
• 建立或中止行程和緒程
2) 記憶體管理員
•
為每一個行程提供一個私有空間
3) 安全引用監視器 (SRM)
•
強制在電腦上實施安全性原則
4) I/O 管理員
•
實作與裝置無關的輸入(輸出) 功能
5) 快取管理員
•
駐留磁碟資料於主記憶體中
Windows 核心中的關鍵元件
C. 執行體 (Executive) API (續)
物件管理員 (續)
6) 組態管理員
• 系統登入的實作與管理。
7) 隨插即用管理員
• 列舉裝置為每個列舉道的裝置確定哪些裝置
是必須的載入並初始化這些驅動裝置。
8) 電源管理員
•
協調電源事件,向裝置驅動程式發送電源
I/O的通知。
Windows 核心中的關鍵元件
C. 執行體 (Executive) API (續)
除此之外,執行體還包含 4 組主要支援函式:
物件管理員
• 比如行程、續程和各種同步物件
LPC設施
• 負責在同一台機器上的客戶行程和伺服器行程
之間傳遞訊息。
一組執行階段程式庫函式
• 字串處理、算術運算、資料型別轉換以及安全
架構等。
執行體支援常式
• 如: 系統記憶體分配、互鎖的記憶體存取。
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
( 裝置驅動程式、PE 檔案格式、WDM )
2.2.3 Windows 子系統
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522017 賴佑東
24
裝置驅動程式
•為何要用裝置驅動程式?
核心中除了核心模組ntoskrnl.exe、HAL外,其它模
組幾乎以裝置驅動程式的型式存在
•軟體架構角度: windows核心的擴充機制
25
裝置驅動程式
•特性:
•不一定與實體裝置對應
•可動態載入到系統模組,格式是PE檔案格式
•移植性高(用C語言來撰寫,方便在Windows支援的系
統間進行原始碼層次上的移植)
•不直接操縱硬體,而是呼叫HAL中的函式與硬體打交道
•副檔名:
•.sys
26
裝置驅動程式三大類型
•
隨插即用驅動程式(WDM )
用來驅動硬體裝置。與Windows的I/O管理員、PnP管
理員和電腦管理員合作
•
核心擴充驅動程式(非隨插即用驅動程式)
擴充核心功能,或提供存取核心模式程式碼和資料
的途徑。並沒有整合到PnP管理員和電腦管理員中
•
檔案系統驅動程式
接收檔案請求,再將請求轉成對裝置的I/O請求
27
裝置驅動程式三大類型-WDM
•
全名
Windows Driver Model
•
隨插即用(PnP)管理員的工作
自動檢測裝置插入與移除
動態分配硬體資源
指示I/O管理員替裝置載入驅動程式
對核心或程式提供裝置插入、移除的通知機制
28
裝置驅動程式三大類型-WDM
•
分成三大類型
匯流排驅動程式
管理匯流排上的裝置
替匯流排上的裝置提供存取匯流排資源的方法
功能驅動程式
管理裝置
替作業系統提供該裝置功能
篩選器驅動程式
監聽裝置的I/O請求、處理過程
增加或改變裝置、驅動程式的行為
29
PE檔案格式
•
設計PE(Portable Executable)緣由
在windows NT設計之初,為了建立可移植、能適
應32位元作業系統需要的可執行檔格式
•
可移植目的
windows NT可以在多種處理器上執行
ex: x86 、MIPS 、Alpha
•
至今Windows僅支援Intel處理器,但是Windows
9x系列(非Windows NT核心)也使用PE檔案格式,
因此,PE仍是一種可移植的可執行檔格式。
30
PE檔案格式
•
PE格式的優勢
擴充COFF(Common Object File Format)
•
COFF定義
由Unix引入,用來描述二進位目的檔的格式規格
•
COFF優、缺點
• 優點-提供了好的框架
• 缺點-區段數量有最大限制、
區段名稱有長度限制、
無法提供像C所需的符號化偵錯資訊
31
PE檔案格式
•
Windows中誰用了PE檔案格式?
可執行檔 .exe
目的檔 .obj
動態連結程式庫 .dll
裝置驅動程式 .sys
32
PE檔案格式
•
進一步對PE檔案格式作探討
PE檔案基本架構
重定位概念
33
PE檔案基本架構
指示可執行檔
的匯入、匯出、
資源、重定位
表
可執行映 為了相容
區段表中
MS-DOS
像檔
每一項指
環境
示區段名
包含目前
稱、區段
檔案的全
虛擬位址
域資訊
位置及大
對每個區
小、該區
段,若檔
段資訊
案資料數
量<區段大
小,則區
段後面資
料補“0”
34
重定位概念
•
為何要重定位?
當可執行映像中指定的基底位址被占據,則可執行
映像要載入其他位置
•
如何重定位?
將目前映像中的程式碼或資料,按照新的記憶體起
始位址引用,而不是原來指定的基底位址來引用
35
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
( 檔案系統 / 儲存管理、網路 )
2.2.3 Windows 子系統
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522030 蔡昀昇
36
檔案系統(1/3)
檔案系統是外部儲存裝置的標準介面,多個應
用程式和系統本身可以共享使用這些裝置。
當檔案系統接收到I/O請求時,它根據檔案系統
格式規格,將這些請求轉變成更低層的對於外
部儲存裝置的I/O請求,透過它們的驅動程式來
完成原本的請求。
檔案系統(2/3)
Windows常見的檔案系統格式
NTFS (New Technology File System)
NTFS是專門為windows設計的檔案格式,它
提供了安全性、可靠性、大容量支援、長檔
名支援,以及可復原性等高階特性,目前廣
泛應用於Windows系統。
FAT (File Allocation Table)
FAT是從DOS時代發展起來的檔案系統格式,
格式規格相對比較簡單,目前仍在使用中,
主要用於相容老版本的作業系統,以及用於
行動裝置以便跨作業系統傳送資料。
檔案系統(3/3)
在Windows中,每個檔案系統實體構成了它自己
的裝置堆疊,因而透過篩選器驅動程式可以過
濾檔案I/O請求。
Windows支援兩種形式的篩選器驅動程式:
直接插入到裝置堆疊中,從而能夠看到每一
個經過裝置堆疊的檔案I/O請求。
基於Windows提供篩檢程式管理驅動程式
(FltMgr)的I/O過濾框架,稱為檔案系統小篩
選器驅動程式,不出現在檔案系統裝置堆疊
中,而是以回呼方式來回應FltMgr的事件。
儲存管理
檔案系統的底層是儲存裝置的管理。
大型儲存裝置以磁碟分割(partition)與磁碟區
(volume)來管理整個儲存空間。
磁碟分割是指儲存裝置上連續的儲存區域(連續
的磁區),而磁碟區是指磁區的邏輯集合。
磁碟區是指由一或多個實體磁碟的一或多個部
分所構成的虛擬磁碟﹐表示可定址的磁碟區塊
範圍。給檔案系統或應用程式等使用。
網路
網路雖然並非
Windows 作業系統中必不可少的組成
部分,但實際上,它已經成為絕大多數 Windows 系統
的標準配置。
Windows
為應用程式提供了多種網路 API,允許應用
軟體設計人員根據他們的需求適當選擇。
41
Windows主要API
Winsock,windows通訊端,他實做並擴充了BSD通訊端標準。
為Windows最重要的網路 API。
WinInet ,為一個高層網路 API,它支援多個協定,包括
HTTP、FTP等。
具名管道(named pipe)和郵件槽(mailslot),用於不
同行程之間進行通訊。
NetBIOS是一個早期的網路API,為了相容舊的應用程式。
RPC,這是網路程式編寫的一個標準,往往是分散式系統設
施的一個重要單元。
Winsock
WinSock的全名是 Windows Socket,是定義介於
Windows TCP/IP application Client 與
TCP/IP 的protocol stack之間的一項標準介面。
程式設計者於Windows上所 寫的網路軟體(如
opher,Telnet,FTP..), 只要支援WinSock的規
格,他就不需要顧慮使用的網路卡是那家廠牌,
因為Winsock所提供的程式庫Winsock.DLL會負
起與網路底層溝通的工作。使得設計者能設計
出更多功能或更user friendly的網路軟體。
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.2.1 Windows 核心架構
2.2.2 Windows 核心中的關鍵元件
2.2.3 Windows 子系統
( 視窗管理、圖形裝置介面 )
2.3 關於 Windows 研究核心
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522608 陳書瑜
44
Windows 子系統
三個環境子系統(Windows NT)
OS/2
依照需要啟動
POSIX
Windows(Win32) ——必須執行
Windows子系統(Windows XP以後)
45
Windows 子系統
負責主控台
視窗的功能;
創建或刪除
行程和緒程
Windows子
系統行程
(csrss.exe)
一組動態連接
程式庫
(DLL)
直接連接到應用
程式行程
Kernel32.dll
User32.dll
Gdi32.dll
Advapi.dll
負責實做已文件
化的Windows
API函式
使用者模式
核心模式
win32k.sys
收集/分發消息
控制視窗顯示
管理螢幕輸出
視窗管理
形式是驅動程式,不處理 I/O 請求;
向使用者程式碼提供了大量的系統服務
圖形裝置界面
(GDI)
形狀繪製功能
文字輸出功能
46
視窗管理
User
登錄Windows 子系統的使用者介面管理有一個層次架構,
遠端
Windows通常應用程式只是在一個預設的桌面上執行
每個子系統工作階段都有自己的工作階段空間,屬於
子系統
互動式視窗
登入桌面
最上層視窗清單
工作階段
工作站
該工作階段的資源就從該工作階段空間中分配
獨立剪貼簿
鍵盤
滑鼠
顯示器
(圖形界面應
用程式)
非互動式視
窗工作站
不可見桌面
預設桌面
熒幕保護
桌面
子
視
窗
系統功能表
最大化按鈕
最小化按鈕
捲軸
圖2.5 Windows 子系統視窗管理層次結構
47
視窗類別(window class)
應用程式可以非常方便地建立這些視窗類的實體
應用程式要定義獨特的視窗類型
完全新的視窗類別
在系統已有視窗類別的基礎上定義新的視窗類別
Windows 視窗的編寫模型是訊息驅動的,每個視
窗物件根據其視窗類別指定的視窗程序來回應各
種訊息。
48
Microsoft
DirectX,遊戲
直接操縱顯示
器硬體,更快
顯示速度
圖形裝置界面
使用者模式
核心模式
動態鏈接程式庫
Win32k.sys
I/O請求
—幫助微埠實現與
視訊連接埠
圖形引擎
圖形處理有關功能
驅動程式
—為微埠提供與系
(GDI)
統核心和執行體打
GDI,與裝置無關,使應用程式適應各種底層顯示裝置;
交道的環境
應用程式與圖形裝置驅動程式之間的通訊效率夠高,
DDI
ENG
即使圖形元素頻繁輸出/刷新,保持良好視覺效果
顯示驅動程式
幫助圖形引擎實做針對特定視
使用者可見、性能緊急的圖形操作
訊卡的圖形功能
視訊微埠
驅動程式
不常見圖形操作,
針對視訊卡硬體特性
不能被打斷的關鍵圖形操作
圖2.6 Windows 子系統的圖形模組架構
49
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.3 關於 Windows 研究核心
2.3.1 WRK 包含了甚麼
2.3.2 WRK 原始碼說明
2.3.3 WRK 原始碼的引用
( WRK 編譯 / 啟動 / 偵測 )
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100522072 萬惠雯
50
Windows 研究核心
WRK (Windows Research Kernel, Windows
研究核心) 。
以Windows Server 2003 SP1為基礎的核心原始碼。
可編譯和執行。
目的:輔助教學,用於教育科學研究機構的教學實踐
和研究平台。
51
WRK 內容
WRK核心原始碼
行程、記憶體管理、執行體,中斷和例外處理…等。
了解核心基本概念。
NT設計元件
檔案系統設計大綱和核心測錯架構。
Windows NT原始設計思維。
軟體Virtual PC 2007 和Windows Server 2003
SP1虛擬機器映像
方便偵錯追蹤WRK的程式碼。
52
WRK 內容 (Cont.)
課程資源 CRK (Curriculum Resource Kit)
Windows Internals 電子書和工具。
ProjectOZ 原始碼
利用Windows核心的NTAPI建立的CPU、MMU和陷阱
機制作業系統實驗環境。
學習了解OS演算法和資料結構。
相關輔助教材和參考資料
53
54
WRK 原始碼說明
Windows 核心模組檔案─ntosktl.exe
在x86的預設檔名為wrkx86.exe。
未公開的部分─隨插即用裝置管理、電源管理、裝置
驅動程式檢驗器和虛擬DOS機實作。
缺少部分二進位目的碼形式包在WRK中。
55
WRK目錄架構和相關元件
56
各元件介面函式的字首
57
WRK原始碼引用
WRK原始碼
C語言和Intel x86組譯指令。
相關資料結構或函式原型。
相關註解
容易理解相關邏輯
58
WRK原始碼引用 (Cont.)
本書目的 ─ 釐清Windows各種底層機制
解釋關鍵邏輯。
函式內部和函式之間的控制流程圖。
關鍵機制實作過程。
建立WRK偵錯環境,有助於了解控制流程。
59
目
錄
2.1 現代作業系統的基本架構
2.2 Windows 系統架構
2.3 關於 Windows 研究核心
2.3.1 WRK 包含了甚麼
2.3.2 WRK 原始碼說明
2.3.3 WRK 原始碼的引用
( WRK 編譯 / 啟動 / 偵錯 )
2.4 Windows 核心的基本概念
2.5 Windows 核心中的功用管理設備
報告者:100582012 陳禹任
60
WRK編譯
環境
Windows Server 2003 SP2
WRK v1.2
61
WRK編譯
取得 WRK
https://www.facultyresourcecenter.com/curriculu
m/pfv.aspx?ID=7366&c1=en-us&c2=0
62
WRK編譯
取得 WRK
63
WRK編譯
取得 WRK
64
WRK編譯
取得 WRK
65
WRK編譯
set PATH=%PATH%;C:\WRK\tools\x86
66
WRK編譯
cd base\ntos
nmake –nologo x86=
67
WRK編譯
68
WRK編譯
cd base\ntos
nmake –nologo x86=
69
WRK編譯
cd build\exe
70
WRK啟動
安裝 HAL 模組
在命令列輸入下列指令:
link –dump –all \WINDOWS\system32\hal.dll | findstr pdb
halacpi.dll -> halaacpim.dll
halaacpi.dll -> halmacpi.dll
halapic.ll -> halmps.dll
71
WRK啟動
安裝 WRK 核心
72
WRK啟動
安裝 WRK 核心
73
WRK啟動
安裝 WRK 核心
74
WRK啟動
安裝 WRK 核心
設定 將 serial port pipe 到本機端上,後續會用到
\\.\pipe\com1
75
WRK啟動
啟動 WRK 核心
選擇 WRK 開機
76
WRK偵錯
使用 Windows Debug Tools
http://msdn.microsoft.com/en-
us/windows/hardware/gg463009
下載 Windows SDK
http://www.microsoft.com/en-
us/download/details.aspx?id=8279
下載 Windows Symbol Package
http://msdn.microsoft.com/en-
us/windows/hardware/gg463028
77
WRK偵錯
下載 Windows SDK
78
WRK偵錯
下載 Windows SDK
http://www.microsoft.com/en-
us/download/details.aspx? id=8279
(Web 下載版)
http://www.microsoft.com/enus/download/details.aspx?id=8442
(ISO 檔)
79
WRK偵錯
安裝 Windows SDK
只需要 Debugging Tools for Windows
80
WRK偵錯
81
WRK偵錯
82
WRK偵錯
83
WRK偵錯
84
WRK偵錯
85
WRK偵錯
86
WRK偵錯
87
WRK偵錯
常見問題
若系統中有安裝 Visual C++ 2010
Redistributable,則務必先移除
因為 Windows SDK 強制安裝的版本
(10.0.30319) 比較舊,當偵測到較新版本時
會安裝失敗
88
WRK偵錯
89
WRK偵錯
下載 Windows Symbol Packages
90
WRK偵錯
安裝 Windows Symbol Packages
91
WRK偵錯
安裝 Windows Symbol Packages
92
WRK偵錯
啟動 WinDbg
93
WRK偵錯
啟動 WinDbg (設定 symbol 目錄)
Symbol 用途
編譯器在產生執行檔時額外提供的符號資料,包
含函數位址和參數、各種變數的位址和類型等資
訊
可為使用者提供更為有好的輸入和輸出。Ex. 使
用者可以以函式名稱的形式來設定中斷點,而不
是指定程式碼位址;使用者可以方便地查看一個
資料結構的成員,而無需自己解析資料區每一個
位元組的含意
94
WRK偵錯
啟動 WinDbg (設定 symbol 目錄)
情況一:WinDbg 在遠端機器上
set _NT_SYMBOL_PATH=
http://msdl.microsoft.com/download/symbols
或是手動輸入特定目錄
95
WRK偵錯
啟動 WinDbg
設定 symbol 路徑
96
WRK偵錯
啟動 WinDbg
97
WRK偵錯
啟動 WinDbg (設定 symbol 目錄)
情況二:WinDbg 在同一機器上
WinDbg 會自動從 wrkx86.exe 中找到 wrkx86.pdb
檔案,從而 WinDbg 能夠解析 WRK 核心符號
98
WRK偵錯
啟動 WinDbg
開始 Kernel Debug
99
WRK偵錯
啟動 WinDbg
100
WRK偵錯
啟動 WinDbg
101
WRK偵錯
啟動 WinDbg
102
WRK偵錯
啟動 WinDbg
103
目
2.1
2.2
2.3
2.4
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
處理器模式
記憶體管理
行程和緒程管理
中斷和例外
同步
2.5 Windows 核心中的功用管理設備
報告者:100522045 宋貫綸
104
2.4.1 處理器模式
在
Intel x86 處理器,有一個2位元長度的特權等
級
0:表示最高特權等級
3:表示最低特權等級
Windows 只使用0和3 兩種特權等級
0:表示CPU處於核心模式 ( kernel mode )
3:表示CPU處於使用者模式( user mode )
105
2.4.1 處理器模式
指令:
核心模式:可使用I/O指令,操縱內部暫存器指令
使用者模式:不可
記憶體存取:
核心模式:不受限
使用者模式:受限制的
106
2.4.1 處理器模式
處於使用者模式下,是一種相對隔離的狀態,能
夠執行的指令及能存取的記憶體是受限制的,一
旦越過了這些限制,就會引發處理器例外,使作
業系統可以截取到這些例外,並決定是否繼續執
行。
使用者模式下作業系統可以有足夠的能力來保護
自己免受使用者模式程式碼的影響
核心模式下這一層保護不復存在,任何一個未被
截獲和處理的指令錯誤都會引起系統當機
107
2.4.1 處理器模式
模式切換:
使用者模式程式碼觸發了例外,則控制流進入到核心
模式,作例外處理
使用者模式程式碼在執行時,被一個中斷打斷(software
/ hardware interrupt),則控制流進入核心模式,中斷
處理結束後,呼叫 iret/iretd 指令,則控制流恢復到
使用者模式。
執行特殊的模式切換指令, 如 intel x86的 sysenter 指
令,從使用者模式切換到核心模式,而要從核心模式切
換回使用者模式,用sysexit、iret/iretd 。
108
2.4.1 處理器模式
由於系統空間是所有行程共用的,所以,任一個
行程在執行核心模式的程式碼時,實際上是在使
用作業系統的服務。
在windows 架構上,核心模式向上有一個執行體
API,對於應用程式而言,這便是系統服務。
109
子系統DLL
NTDLL.DLL
系統服務
子系統服務
Windows
子系統
視窗管理
圖形介面
圖形驅
動程式
使用者模式
核心模式
執行體API
記憶體
管理員
行程和
緒程管
理員
即插即
用管理
員
安全參
照監視
器
快取管
理員
本地程
序呼叫
(LPC)
組態管
理員
(登錄)
I/O管
理員
檔案
系統
網
路
物件管理員
核心 (或微核心)
裝置驅
動程式
硬體抽象層 (HAL)
圖2.3 Windows核心組成架構圖
110
2.4.2 記憶體管理
Intel
x86系統架構支援區段式(segment)記憶體管
理,也支援分頁式(paging)記憶體管理,然而
Windows沒有使用區段式記憶體管理方案,只是簡
單地將32位元虛擬記憶體空間按照0~4GB的線性位
址空間來看待。
任何一個行程都定義了它自己的完整4GB位址空
間,但是,其2GB~4GB之間的位址範圍是所有行
程共用的,稱為系統位址空間;而0~2GB部分才是
它自己私有的,稱為行程位址空間。
111
記憶體管理機制
系統位址空間管理
行程位址空間管理
112
Windows記憶體管理機制(1/3)
Windows使用了Intel x86的二級或多級分頁表機
制來存取虛擬記憶體。處理器在執行記憶體存取
指令時,將虛擬位址翻譯成實體位址,翻譯過程
涉及到查詢分頁目錄和分頁表
虛擬位址格式:
page number
pi
10
page offset
p2
d
10
12
113
Windows記憶體管理機制(2/3)
114
Windows記憶體管理機制(3/3)
一旦分頁表項目指出一個頁面末在實體記憶體中,
則觸發分頁錯誤( page fault)例外。
虛擬憶體管理員透過分頁錯誤例外將已被換出到
磁碟上的資料或程式碼重新帶入實體記憶體,供
目前活躍的程式存取。另一方面,當實體記憶體
吃緊時,它將不常用的頁面換出到磁碟上。
115
記憶體管理機制
系統位址空間管理
行程位址空間管理
116
系統位址空間管理(1/4)
在初始化時將系統位址空間劃分成一些固定的區
域,每個區域有專門的用途。
使用了一組全域變數來記錄每個區域的邊界。
初始化實際上是對這些全域變數的初始化,並相
應地初始化每個區域。
不同的區域使用不完全相同的記憶體分頁管理演
算法,較為典型的有三種管理方法:
非分頁集區
分頁集區
系統PTE區域
117
系統位址空間管理(2/4)
非分頁集區:這部分記憶體區域在初始化時刻已
經被對應到實體頁面,所以, Windows利用空閒
串列,按照不同的size,將空閒頁面連結起來。空
閒頁面本身即串列中的節點,因而這些串列無需
額外的記憶體空間(除了開頭節點)。申請和釋
放頁面的操作實際上是針對空閒串列來進行的。
分頁集區:在分頁集區區域,空閒的頁面並沒有
被對應實體頁面,Windows使用點陣圖來管理頁面。
分配連續的多個頁面,即從點陣圖中找到連續的
零位。
118
系統位址空間管理(3/4)
系統PTE區域:這部分記憶體區域並非存放的是
PTE(page table entries),而表示這部分位址範團是
以PTE的形式來管理的,即把PTE當作資源來管理。
當核心需要一段虛擬位址來對應實體頁面時,它
可以使用系統PTE區域中的位址。
119
系統位址空間管理(4/4)
執行體分頁集區和執行體非分頁集區:這些記憶
體集區透過空閒串列記錄下每個已申請頁面中的
空閒區塊;當釋放記憶體時,自動與相鄰的空閒
區塊合併以構成更大的空閒區塊。核心其他元件
或驅動程式透過執行體暴露的API函式(例如
ExAllocatePoolWithTag和ExFreePoolWïthTag)來
使用這些記憶體集區。
120
記憶體管理機制
系統位址空間管理
行程位址空間管理
121
行程位址空間管理
隨著Process一起被建立,每個行程有它自己的分頁
目錄表,其中有一半分頁目錄項(PDE)是共用的,
即系統位址空間部分,餘下一半初始化為零。
隨著行程中的映像檔(包括exe檔案和各個DLL檔案)
被載入進來,以及各個模組的初始化程式碼被執行,
行程位址空間逐步被建立起來。
透過一棵平衡二元搜尋樹來管理行程位址空間被使
用的情況,樹中的每個節點為一個VAD(Virtual
Address Descriptor),描述了一段連續的位址範圍;但
是在整個位址空間中,被使用的或保留的位址範圍往
往是不連續的。
122
PFN資料庫
(Page Frame Number Database)
每一個實體頁面對應於PFN資料庫中的一項,此
PFN項描述了該頁面的狀態。
記憶體管理員利用PFN資料庫,按照頁面的狀態
來管理實體記憶體,並且負責頁面的狀態轉移。
Windows支援八種狀態:活動、備用(standby)、
已修改、已修改但不寫出、轉移、空閒、零化和
壞狀態。
123
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
124
工作集管理員(1/2)
工作集(working set):一個Process目前正在使用
的實體頁面的集合。
包含三種型態:
行程工作集
系統工作集(即系統空間中動態對應的頁面集合)
工作階段工作集(即工作階段空間中的程式碼和資料段〉
每個process有一個工作集串列,其中每一項不僅
記錄了實體頁面的編號,還記錄了其他的屬性,
工作集管理員可以根據一些策略來選擇要修剪的
行程,將其使用中的頁面換出到磁碟中,空出未
使用的實體頁面給其他process 。
125
工作集管理員(2/2)
工作集管理員執行在一個稱為平衡集管理員
(balance set manager)的執行緒中,它每隔一秒
鐘被觸發一次,當可用記憶體太低時也會被觸發。
平衡集管理員除了觸發工作集管理員以外,也定
期觸發行程/堆疊交換器(process/stack swapper)。
行程/堆疊交換器是另一個單獨的執行緒,一旦
被喚醒,則將滿足特定條件的行程和堆疊換入記
憶體或換出記憶體。
126
目
2.1
2.2
2.3
2.4
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
2.4.1
2.4.2
2.4.3
2.2.4
2.4.4
2.4.5
處理器模式
記憶體管理
行程和緒程管理
系統行程和系統緒程
中斷和例外
同步
2.5 Windows 核心中的功用管理設備
報告者:100522084 劉書銘
127
行程 (process)
定義一個執行環境 (An Environment for
program execution)
私有的位址空間 (private virtual address space)
行程控制表 (PCB,Process Control Block)
安全環境 (Access token)
• 存取權限、擁有者等屬性
128
PCB (Process Control Block)
行程狀態:new、ready、running、waiting或halted等。
程式計數器:接著要執行的指令位址。
CPU 暫存器:如累加器、索引暫存器(Index
register)、堆疊指標以及一般用途暫存器、狀況代
碼等,主要用途在於中斷時暫時儲存資料,以便稍
後繼續利用;其數量及類別因電腦架構有所差異。
CPU 排班法:優先順序、排班佇列等指標以及其他
參數。
記憶體管理:如分頁表等。
會計資訊:如 CPU 與實際時間之使用數量、時限、
帳號、工作或行程號碼。
輸入輸出狀態:配置行程使用 I/O 裝置,如磁帶機。
By wikipedia
129
行程 (process)
每一行程有獨一無二的 ID (Process ID, PID)
行程間有父子關係
行程中無明確指定的屬性,均繼承自父行程
行程本身是獨立的,僅記錄父行程的ID
僅代表建立者與被建立者的關係
130
緒程 (Thread)
一種控制流程 ( The entity within a process
that can be scheduled for execution)
指令執行順序
排程單元
有自己的呼叫堆疊(call stack)
紀錄執行的歷史
每一緒程有獨一無二的 ID (Thread ID, TID)
131
行程與緒程的關係
一個行程中,至少有一個緒程
每個緒程必定依附於一個行程
行程被初始建立時
行程與緒程
一對多
系統為該行程建立第一個緒程
當行程中最後一個緒程結束時
該行程也隨之結束
132
行程與緒程的關係
行程中的緒程若在
User mode 執行→只能存取該行程的位址空間
Kernel mode 執行→可以存取整個位址空間
行程位址空間
(私有)
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
更多行程
….
系統位址空間
(共用)
133
行程與緒程的核心架構
核心機制在 Kernel 中實作
緒程排程
建立緒程與行程的相依性
• KeAttachProcess / KeStackAttachProcess 函式
管理機制在執行體中實作
緒程和行程的建立
•
PspCreateThread , PspCreateProcess 函式
各種管理屬性設定
134
行程的建立 ─ PspCreateProcess
建立執行體行程物件
EPROCESS
初始化該物件的狀態
建立一個位址空間
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
新行程 P4
EPROCESS
更多行程
….
135
緒程的建立 ─ PspCreateThread
建立執行體緒程物件
ETHREAD
初始化其中的欄位
維護新緒程與宿主行程之間的關係
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
更多行程
….
新緒程 T7
ETHREAD
136
緒程排程 (Thread Scheduling)
先佔式 (Preemptive)
基本優先順序 (base priority)
動態優先順序 (priority)
優先順序
0: 最低優先順序,僅用於某些系統緒程執行
幕後工作
1~15: 動態優先順序
16~31: 即時優先順序,用於一些即時處理工
作
137
緒程排程 (Thread Scheduling)
滿足繼續執行的條件
正在排隊或已經在執行
• 按優先順序排隊執行
不滿足繼續執行的條件
處於等候狀態
呼叫堆疊甚至所處的行程已被換出記憶體
• 一旦執行條件滿足,首先要將他換回記憶體,
然後才能參與排隊分發
138
系統緒程
與
系統行程
139
系統緒程
System 行程中的緒程
裝置驅動程式或執行體,可在此行程建立緒程
向系統輔助緒程請求得到服務
• 執行體函式 ExQueueWorkItem
• I/O 管理員函式 IoQueueWorkItem
系統輔助緒程 (System worker thread)
代表作業系統或其他應用行程來完成一些特殊工作
140
系統輔助緒程
(System worker thread)
實際上為一個緒程集區
產生的時機
Windows在系統初始化時,建立一定數量的
輔助緒程
執行體動態建立
• 隨著輔助緒程的負載變化
• 滿足系統負載的變化需求
141
Windows 重要系統行程
系統空閒行程 (Idle)
System 行程
工作階段管理員 (smss.exe)
登入行程 (winlogon.exe)
Windows子系統行程(csrss.exe)
本機安全性授權子系統 (lsass.exe)
Shell行程 (explore.exe)
服務控制管理器 (services.exe)
142
以 Win7 為例,按 ctrl + alt + del 跳出工作管理員
143
[1] 系統空閒行程 (Idle)
行程的編號 (Process ID, PID) = 0
每個處理器 (processor) 或核心 (kernel) 對應
一個緒程 (thread)
144
[2] System 行程
行程的編號 (Process ID, PID) = 4
Kernel mode 的 System thread
以下三種,透過 PsCreateSystemThread 創建 thread
系統輔助緒程 (system worker threads)
執行體
驅動程式
145
[3] 工作階段管理員 (smss.exe)
全名為 (Session manager, smss.exe)
第一個建立的 user mode process
在 Windows 啟動過程中
建立環境變數
啟動
• 子系統行程:csrss.exe
• 登入行程:winlogon.exe
建立新的終端伺服器工作階段 (terminal server
session)
• 載入子系統,啟動 csrss.exe 和 winlogon.exe
146
[4] 登入行程 (winlogon.exe)
負責處理互動使用者的登入和登出
使用者按下 Ctrl + Alt + Del 組合鍵,
稱為安全注意順序 (Secure Attention Sequence, SAS)
winlogon 接到登入請求
觸發安全認證過程
啟動使用者工作階段中的初始行程
若在工作階段的任何時刻,按下 SAS 組合鍵
winlogon 會提示一個安全對話方塊
• 登出、啟動工作管理員、鎖定電腦 ... 等選項
147
[5] Windows子系統行程(csrss.exe)
負責為使用者提供一個子系統環境
包含提供
主控台視窗
建立或刪除 process 和 thread
148
[6] 本機安全性授權子系統 (lsass.exe)
負責本機系統安全性原則
允許那些使用者登入系統
密碼策略
授予使用者與使用群組的權限
系統安全稽核設定
負責認證使用者身分
將安全稽核訊息發送至系統的事件日誌
(Event Log) 中
149
[7] Shell行程 (explore.exe)
Windows 預設的 shell
提供使用者與系統溝通的各種介面
開始功能表
工作列
檔案管理員視窗
... 等,幾乎所有Windows 使用者熟悉的介面
150
[8] 服務控制管理器 (services.exe)
負責管理 Windows 的系統服務
指一些特殊的行程
通常不與登入使用者有互動
被設定成系統啟動時自動啟動
Windows中有很多功能元件是以服務方式實作
事件日誌、
工作排程器、
各種網路元件等
151
目
2.1
2.2
2.3
2.4
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
處理器模式
記憶體管理
行程和緒程管理
中斷和例外
同步
2.5 Windows 核心中的功用管理設備
報告者:100522011 楊善雯
152
中斷和例外
中斷(Interrupt)
1.處理器與外部裝置打交道的重要途徑
2.中斷的發生與目前指令流並無實質聯繫
3.非同步的
例外(Exception)
1.處理器正常指令流在執行過程中產生的一些特殊
事件
2.例外的發生是目前指令流執行的直接結果
3.同步的
153
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. )
154
Interrupt Service Routine(ISR)
Windows 在IDT基礎上, 提供另一種更靈活
的軟體機制, 允許裝置驅動程式為特定的中
斷向量添加ISR。
每個中斷向量連接多個中斷物件。
*中斷物件:
1.封裝了ISR的核心物件。
2.透過中斷物件機制, 裝置驅動程式可以在不操作
IDT的情況下加入他們的ISR。
3.多個硬體裝置也可以共用同樣的硬體中斷向量。
155
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, 特殊硬體中斷
例:時鐘中斷、電源中斷、處理器間中斷。
156
APC
緒程相關的常式。
在特定的位址空間被執行。
優先權高於緒程本身的指令流。
適合實作於各種非同步通知事件。
例: I/O的完成通知。
157
DPC
優先權高於任何一個與緒程相關的函式過程,
也高於緒程排程。
不會遮罩任何的硬體中斷。
用來執行相對於目前高優先順序的工作來說
不那麼緊急的事情。
縮短處理器停留在高IRQL層級的時間。
典型用法:計時器(timer)
158
中斷和例外
中斷(Interrupt)
1.處理器與外部裝置打交道的重要途徑
2.中斷的發生與目前指令流並無實質聯繫
3.非同步的
例外(Exception)
1.處理器正常指令流在執行過程中產生的一些特殊
事件
2.例外的發生是目前指令流執行的直接結果
3.同步的
159
例外 (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.
160
Kernel Mode Exception
Exception dispatch procedure
例外第二次未處理
例外
沒有核心偵錯器
核心偵錯器
當機
例外處理完成
例外第一次未處理
Frame-based
exception handler
沒有此例外處理常式
161
Kernel Mode Exception
Frame-based exception handler
將 exception handler 與 stack frame 關聯起來,當例
外發生時,例外發送器可以根據目前 stack 中的 stack
frame 來搜尋與之相關的例外處理常式。
162
User Mode Exception
Exception dispatch procedure
Kernel mode
Process偵錯埠
第一次偵
錯埠無效
第二次偵
錯埠無效
User mode
例外處理完成
等待偵錯埠應答
例外未處理
核心偵錯器
例外發送器
例外處理完成
Frame-based
exception handler
例外無法處理
process例外埠
終止process
163
目
2.1
2.2
2.3
2.4
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
處理器模式
記憶體管理
行程和緒程管理
中斷和例外
同步
2.5 Windows 核心中的功用管理設備
報告者:100522037 黃惠慈
164
同步
現代作業系統多核、多處理器或中斷等各種
並行性(concurrency)因素的存在,使得
程式碼並行執行
資料並行存取
對於可能被並行存取的資料,需進行同步
(synchronization)保護。
165
同步保護機制分類
根據執行環境中IRQL值是否為
PASSIVE_LEVEL,可將同步機制分為兩大類
不依賴於緒程排程的同步機制
基於緒程排程的同步機制
166
Windows程式碼中的IRQL定義
167
IRQL 大於 0 時的典型同步機制
提升IRQL
當處理器在某個IRQL層級上執行時,只能被
更高的IRQL層級中斷
多處理器,須結合其他同步機制
168
IRQL 大於 0 時的典型同步機制
互鎖操作(interlocked)
利用Intel x86處理器提供的lock指令前置,可
以實作基本的整數操作保護,確保一個操作
以不可分割方式進行
只能在小細微性的資料上進行同步
指令級保護
169
Windows 核心支援的整數原子操作
170
IRQL 大於 0 時的典型同步機制
無鎖的單串列
Windows利用64位元互鎖指令來實作無鎖的單
串列資料結構
支援多核、多處理器環境
171
IRQL 大於 0 時的典型同步機制
自旋鎖(spin lock)
忙等待(busy wait)
○ 為了獲得自旋鎖,處理器不停地檢測鎖的狀態,
而不做其他的事情,直至鎖的狀態變成可用為
止
通常用於IRQL大於等於DISPATCH_LEVEL
自旋鎖的擴充
○ 執行體自旋鎖(支援共用和獨佔的語意)
○ 佇列自旋鎖(queued spin lock)
○ 堆疊內佇列自旋鎖(in-stack queued spin lock)。
172
IRQL 大於 0 時的典型同步機制
當一段核心程式瑪在使用以上這些同步機制
來保護資料時
通常盡可能在短時間內解除保護,以便不妨
礙其他的處理器
讓正在等待執行的緒程盡快有機會得到處理
器資源。
173
PASSIVE_LEVEL上緒程之間的
同步
當一緒程執行條件不滿足進入等候狀態
將控制權交給滿足執行條件但沒有得到處理器的
緒程
當該緒程滿足執行條件才有機會繼續執行
執行條件: Windows提供的緒程同步機制中的語意
Windows定義統一機制來支援各種緒程同步語意:
發送器物件(dispatcher object)
其資料結構標頭為DISPATCH_HEADER
174
DISPATCH_HEADER定義
175
等待區塊(wait block)
用來描述一個緒程正在等待一個發送器物件變
成有信號狀態
對於每個處於等候狀態的緒程,有一個等待區
塊串列
節點代表該緒程正在等待的一個發送器物件
對於每個發送器物件,也有一個等待區塊串列
節點代表了正在等待該物件的一個緒程
當發送器物件變成有信號狀態,系統循著此物
件的等待區塊串列,就知道該解除哪個或哪些
緒程
176
KWAIT_BLOCK結構定義
177
等待區塊(wait block)
決定等待條件該如何滿足
緒程進入等待的條件
發送器物件的狀態
緒程進入等待的條件
若等待多個物件,需指名等待任何其中之一
[Wait Any]或等待所有物件[WaitAll]
發送器物件
解除一個或多個緒程
178
緒程物件、發送器物件和等待區
塊物件的關係
179
Windows Server 2003發送器物件
事件(event)
事件通知物件
事件同步物件
區別在於,當事件物件變成有信號狀態時,
解除所有正在等待該物件的緒程,還是只喚
醒第一個以WaitAny方式等待該物件的緒程。
180
Windows Server 2003發送器物件
突變體(mutant)
是互斥器(mutex)的實作
如果突變體物件為無信號狀態,則一定被某
個緒程”佔有”。
紀錄”所有者”緒程資訊
可用於實作”鎖”。
181
Windows Server 2003發送器物件
旗號(semaphore)
計數器控制最多有多少個緒程共用一個資源
當計數器達到最大值時,旗號變成無信號狀態
佇列物件(queue)
用於支援緒程集區的機制
其資料結構為KQUEUE
控制一項工作的並行程度
典型用途是I/O完成埠
182
Windows Server 2003發送器物件
行程物件
是一個發送器物件
當行程物件被初始建立時,其狀態為無信號
當行程結束時,其狀態變成有信號
緒程物件
也是一個發送器物件
當緒程物件被初始建立時,其狀態為無信號
當緒程結束時,其狀態變成有信號。
183
Windows Server 2003發送器物件
計時器物件
一個像DPC的常式
一個可等待的發送器物件
當設置的時間到期時,計時器變成有信號狀態。
閘道物件(gate object)
閘道物件和閘道等待是緒程排程器的特殊支援,它
繞過了以上發送器物件同步程序中的許多步驟。
喚醒一個閘道等待的緒程,是以最快捷的方式進行
緒程排程器直接將緒程插入到某個處理器的就緒序
列中。
184
其他同步機制
快速互斥器(fast mutex)
守護互斥器(quarded mutex)
執行體資源(executive resource)
推銷(push lock)
185
參考文獻
Chapter 03 系統機制
186
目
2.1
2.2
2.3
2.4
2.5
錄
現代作業系統的基本架構
Windows 系統架構
關於 Windows 研究核心
Windows 核心的基本概念
Windows 核心中的功用管理設備
2.5.1 Windows 核心中的物件管理
187
Windows核心中的物件管理
物件導向的思維
物件管理員:執行體中的元件
執行體API
視窗
圖形介面
……
物件管理員
(微)核心
檔
案
系
統
網
路
硬體抽象層 (HAL)
188
物件
各種資源以物件(Object)的形式來組織
物件包含兩部份組成:物件標頭與物件實體
所有物件標頭具有統一的格式
物件:標頭
物件:型別
物件:型別
物件:型別
建立物件型別
物件:型別
__in: input parameter
__out output parameter
__in_opt: optional input parameter
物件:型別
物件:型別
物件:建立物件型別
物件:建立物件型別
ex:Process
物件:建立物件型別
ex:Thread
物件:建立物件
物件:建立物件
ex1:Process
物件:建立物件
ex1:Thread