Windows系統總述

Download Report

Transcript Windows系統總述

Ch. 2
Windows 系統總述
Team 1
995202072 施政延
995202091 黃俊凱
985302024 黃郁偉
995202068 張逸文
995202076 張雅晴
995292098 朱慶翔
965302018 蔣念慈
995202093 薛宇翔
Introduction

Windows系統的基本架構

WRK(Windows Research Kernel)

Windows基本概念

Windows核心公用管理設施

Windows的啟動過程
2
Outline
2.1 現代作業系統的基本架構
2.2 Windows系統架構
2.3 關於Windows研究核心
2.4 Windows核心的基本概念
2.5 核心中的公用管理設施
2.6 啟動過程
3
Outline
2.1 現代作業系統的基本架構
2.2 Windows系統架構
2.2.1 Windows核心架構
2.2.2 Windows核心中的關鍵元件

HAL

核心
報告人:張逸文
現代作業系統的基本架構

作業系統屬於軟體的範疇
 提供一層抽象介面
 負責硬體資源的管理和分配
5
應用環境
應用
IPC
應用
IPC
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
6
應用環境
應用
應用
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
7
應用環境
應用
應用
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
8
應用環境
應用
應用
應用
系統服務
系統擴充
系統核心
系統環境
驅動程式
驅動程式
驅動程式
驅動程式
硬體抽象
硬體設備
鍵盤/
滑鼠
顯示器
硬碟
網路
圖2.1 現代作業系統的基本架構
9
Windows系統架構



擴充性
安全性
雙模式
 使用者模式
 核心模式

支援多環境子系統
10
系統和服
務行程
用戶應用
程式
系統DLL
Windows子
系統行程
NTDLL.DLL
使用者模式
核心模式
執行體 (Executive)
核心 (或微核心)
硬體抽象層 (HAL)
設備驅動
程式
Windows子
系統核心模
組
圖2.2 Windows系統架構圖
11
子系統DLL
NTDLL.DLL
系統服務
子系統服務
Windows
子系統
視窗管理
圖形介面
圖形驅
動程式
使用者模式
核心模式
執行體API
記憶體
管理員
行程和
緒程管
理員
即插即
用管理
員
安全參
照監視
器
快取管
理員
本地程
序呼叫
(LPC)
組態管
理員
(登錄)
I/O管
理員
檔案
系統
網
路
物件管理員
核心 (或微核心)
裝置驅
動程式
硬體抽象層 (HAL)
圖2.3 Windows核心組成架構圖
12
Windows核心架構(#1)

執行體 API 函式會接收來自各應用程式的參數
 參數的有效性
 指標指向可存取的記憶體

在函式開頭檢查參數
13
Windows核心架構(#2)
PreviousMode = KeGetPreviousMode ( );
if ( PriviousMode != KernelMode ) {
try {
ProbeForWrite ( InputInformation,
InputInformaitonLength,
sizeof ( ULONG ));
if ( ARGUMENT_PRESENT ( ReturnLength ) {
ProbeForWriteUlong (ReturnLength ) ;
}
} except ( EXCEPTION_EXECUTE_HANDLER ) {
return GetExceptionCode ( ) ;
}
}
14
Windows核心架構(#3)
0xffffffff
系統位址空間
Kernel mode
4GB
不可存取 <=
0x7fffffff
64KB
0x7fff0000
行程位址空間
User mode
2GB
0x00000000
15
Windows核心中的關鍵元件(#1)

HAL (硬體抽象層)
 使Windows更容易被移植到不同硬體平台上
 獨立的動態連結程式庫
16
Windows核心中的關鍵元件(#2)

核心 (或微核心)
 ntoskrnl.exe的下層部分
 緒程排程和中斷、例外的處理
 在multi-processor中 =>
同步處理器之間的行為
 C語言、組合語言為主
 先佔式緒程排程機制


基本優先順序值
動態優先順序值
 物件導向


發送器物件
控制物件
17
Outline
2.2 Windows系統架構
2.2.2 Windows核心中的關鍵元件

執行體
2.5 核心中的公用管理設施
2.5.1 Windows 核心中的物件管理
報告人:薛宇翔
執行體 API (executive)


執行體是內核模組ntoskrnl.exe的上層部分,目的
在於提供一些可供上層應用程式或內核驅動程式
直接調用的功能和語意。
包含5種類型的函數:
1.
2.
3.
4.
5.
被導出的、可在用戶模式下調用的函數
雖已被導出並且可在用戶模式下調用,但無法通過任
何一個Windows API 來調用的函數
只能在內核模式下調用的導出函數,並且在 Windows
DDK 中有關於這些函數的文檔
供執行體元件之間相互調用,但未被文檔化的函數
屬於一個元件的內部函數
19
執行體組件








進程和線程管理器
記憶體管理器
安全引用監視器(SRM)
I/O 管理器
緩存管理器
配置管理器
即插即用管理器
電源管理器
20
4組主要的支援函數(#1)

物件管理器
 創建、管理和刪除
Windows 執行體物件,以及用於表達
操作系 統資源的抽象資料類型,比如進程、線程和各種
同步物件。

LPC 設施
 創建、管理和刪除
Windows 執行體物件,以及用於表達
操作系 統資源的抽象資料類型,比如進程、線程和各種
同步物件。
 RPC (Remote Procedure Call) 的優化版本。
21
4組主要的支援函數(#2)

一組運行時庫函數
 功能廣泛,涵蓋字串處理、算術運算、資料類型轉換以
及安全結構處理等。

執行體支援常式
 系統記憶體分配(換頁記憶體池和非換頁記憶體池)、互
鎖的記憶體訪問,以及對兩種特殊類型同步物件(資源和
互斥體)的支援。
22
Windows 核心中的公用管理設施




物件管理員
組態管理員
Windows事件追蹤 (ETW, Event Tracing for
Windows)
安全性管理
23
Windows 核心中的物件管理


執行體中的元件,主要管理執行體物件。
基本設計目的:
 為執行體的資料結構提供一種統一而又可擴充的定義
和控制機制。
 提供一致的安全存取機制。
 在無需修改已有系統程式碼的情況下 , 加入新的物件
型別。
 提供一組標準的 API 來對物件執行各種操作。
 提供一種命名機制 , 與檔案系統的命名機制整合在一
起。
24
執行體物件


由物件標頭和物件主體構成
物件標頭:包含了物件管理所需要的基本資訊,包
括物件名稱、型別、引用計數以及安全描述項等
資訊。
25
Outline
2.2 Windows系統架構
2.2.2 Windows核心中的關鍵元件

裝置驅動程式

PE檔案格式

檔案系統/儲存管理
報告人:張雅晴
裝置驅動程式

裝置驅動程式是可以動態地載入核心模式的模組
 副檔名為.sys
 標準的PE檔案格式
27
裝置驅動程式與硬體


驅動程式中的程式碼執行在核心模式下,它們不
直接操縱硬體,而是呼叫HAL中的函式與硬體打
交道。
驅動程式通常使用C(有時用C++)語言來撰寫,從
而方便地在Windows所支援的系統架構之間進行
原始碼層次上的移植。
28
裝置驅動程式的基本類型

隨插即用驅動程式 (也稱為WDM驅動程式)

核心擴充驅動程式 (也稱為非隨插即用驅動程式)

檔案系統驅動程式
29
隨插即用驅動程式


這一類驅動程式通常是為了驅動硬體裝置而由硬
體廠商提供,它們與Windows的I/O管理員、PnP
管理員和電腦管理員合作。
Windows自身附帶了大量此類驅動程式,用於支
援各種常見的儲存裝置、視訊卡、網路介面卡、
輸入裝置等。
30
核心擴充驅動程式


這一類驅動程式擴充核心的功能,或者提供了存
取核心模式程式碼和資料的一種途徑。它們並沒
有整合到PnP管理員和電腦管理員的框架中。
在引入隨插即用管理機制以前開發的驅動程式都
屬於這一類型。現在仍有大量的核心擴充驅動程
式。
31
檔案系統驅動程式

這一類驅動程式接收針對檔案的請求,再進一步
將請求轉變成真正對於儲存裝置或網路裝置的I/O
請求,從而滿足原始的檔案請求。
32
Windows Driver Model(WDM)

Windows 2000增加功能如下:
 隨插即用
(Plug-and-Play)
 電源選項 (Power Options)
 擴充Windows NT驅動程式模組
所以稱為Windows Driver Model (WDM)。

Windows 2000與後面版本能運作原有的Windows
NT 4驅動程式,不過這些驅動程式不支援隨插即
用與電源選項,系統運行這些驅動程式將減少這
兩方面的能力。
33
WDM驅動程式的類型

從WDM的觀點,驅動程式可分為三種類型:
 匯流排驅動程式
(Bus Driver)
 功能驅動程式(
Function Driver )
 篩選器驅動程式(
Filter Driver )
34
WDM驅動程式間的互動關係
Upper-level
class filter driver
5
Upper-level
device filter driver
Function Driver
4
Lower-level
class filter driver
3
Device drivers
Bus drivers
Lower-level
device filter driver
Bus Filter
Driver
2
Bus Driver
1
35
匯流排驅動程式



匯流排驅動程式為匯流排控制器(bus controller)、
轉接器(adapter)、或橋接器(bridge)提供服務。
微軟一般會提供常用的匯流排驅動程式,而常見
的匯流排有PCI、SCSI、USB與FireWire。
為了支援新的匯流排,每家軟體供應商能夠撰寫
所需的匯流排驅動程式,像是VMEbus、 Multibus
與Futurebus。
36
功能驅動程式



功能驅動程式是主要的裝置驅動程式,而且為該
裝置提供操作介面。
它是必須的驅動程式,除非該裝置是使用原始的
模式(藉由匯流排與任何篩選器驅動程式完成的
I/O,像是SCSI PassThru)。
功能驅動程式的定義是,驅動程式知道關於特定
裝置的大部分事情,而且通常只有它可以存取裝
置特定的暫存器。
37
篩選器驅動程式

篩選器驅動程式是用來



篩選器驅動程式是非必須的,且可存在任何數量,它位在



增加裝置(或現存驅動程式)的功能
or
修改從其他驅動的I/O請求或回應(且通常用來解決硬體提供關於資
源請求的錯誤訊息)。
功能驅動程式的上層或下層
and
匯流排驅動程式的上層。
通常是由


System Original Equipment Manufactures (OEMs)
or
Independent Hardware Vendors (IHVs) 來提供篩選器驅動程式。
38
PE檔案的緣由



PE(Portable Executable)是在Windows NT設計之初
,為了建立一種可移植的、能夠適應32位元作業
系統需要的可執行檔格式而設計的。
“可移植”的目的是指當初Windows NT可在多種處
理器(x86、MIPS、Alpha等 )上執行。
雖 然 至 今 Windows 僅 支 援 Intel 處 理 器 , 但 是 非
Windows NT核心的作業系統Windows 9x系列也使
用PE檔案格式,因此,PE仍然是一種可移植的可
執行檔格式。
39
PE檔案的簡介



PE格式擴充了COFF(Common Object File Format)
,這是Unix中引入的用於描述二進位目的檔的格
式規格。
在Windows平台上,可執行檔(.exe)、目的檔(.obj)
、動態連結程式庫(.dll)以及裝置驅動程式(.sys)等
多種檔案類型使用了PE檔案格式。
隨著64位元的到來,PE檔案格式也對應地有一個
擴充版本,稱為PE32+;原來32位元PE格式稱為
PE32,本書中僅涉及32位元PE格式。
40
PE檔案的基本架構
檔案偏移0
DOS標頭
PE標頭開始
“PE\0\0”
COFF標頭
PE標頭
資料目錄
區段表開始
PE可選標頭
區段表
區段資料開始
區段資料
檔案大小(FileSize)-1
41
檔案系統(1/3)


檔案系統是外部儲存裝置的標準介面,它為應用
程式使用這些裝置中的資料提供了統一的抽象,
多個應用程式和系統本身可以共享使用這些裝置
。
檔案系統的介面部分由I/O管理員定義和實作,但
實作部分位於專門的一類驅動程式中。
 檔案系統處理I/O請求的過程如下:
I/O請求
檔案系統
I/O請求
將請求轉變成更低
層的對於外部儲存
裝置的I/O請求。
外部儲存裝置
42
檔案系統(2/3)

Windows常見的檔案系統格式
 NTFS

提供了安全性、可靠性、大容量支援、長檔名支援,以及可復
原性等一系列高階特性,目前廣泛應用於Windows系統。
 FAT

(New Technology File System)
(File Allocation Table)
這是從DOS時代發展起來的檔案系統格式,格式規格相對比較
簡單,目前仍在使用中,主要用於相容老版本的作業系統,以
及用於行動裝置以便跨作業系統傳送資料。
43
檔案系統(3/3)


在Windows中,每個檔案系統實體構成了它自己
的裝置堆疊,因而透過篩選器驅動程式可以過濾
檔案I/O請求。
Windows支援兩種形式的篩選器驅動程式:
 直接插入到裝置堆疊中,從而能夠看到每一個經過裝
置堆疊的檔案I/O請求。
 基於Windows提供篩檢程式管理驅動程式(FltMgr)的I/O
過濾框架,稱為檔案系統小篩選器驅動程式,不出現
在檔案系統裝置堆疊中,而是以回呼方式來回應FltMgr
的事件。
44
儲存管理(1/3)



檔案系統的底層是儲存裝置的管理。
大 型 儲 存 裝 置 以 磁 碟 分 割 (partition) 與 磁 碟 區
(volume)來管理整個儲存空間。
磁碟分割是指儲存裝置上連續的儲存區域(連續的
磁區),而磁碟區是指磁區的邏輯集合。
45
儲存管理(2/3)


一個磁碟區內部的磁區可能來自一個磁碟分割,
也可能來自多個磁碟分割,甚至來自不同的磁碟
。檔案系統則是磁碟區內部的邏輯架構。
因此,Windows的儲存管理形成了一個儲存堆疊
,最接近於應用系統的是檔案系統,接下來是磁
碟區管理的部分,最接近於儲存裝置的是磁碟分
割管理和磁碟驅動程式。
46
儲存管理(3/3)


磁碟裝置是典型的隨插即用裝置,它的裝置堆疊
和驅動程式符合WDM模型,由PnP管理員在裝置
列舉過程中建立起每個儲存裝置的裝置堆疊。
完整的儲存堆疊
磁碟分割管理員的驅動程式
負責通知PnP管理員目前
磁碟上有那些磁碟分割
裝置堆疊
匯流排驅動程式
47
Outline
2.2 Windows 系統架構
2.2.2 Windows 核心中的關鍵元件

網路
2.2.3 Windows 子系統

視窗管理

圖形裝置介面
報告人:施政延
網路


大多數 Windows 系統的標準配置
Windows 為應用程式提供了多種網路 API,允許應用軟體
設計人員根據他們的需求適當選擇。
49
網路 API

主要的網路 API
通訊端,簡稱Winsock。
 WinInet ,這是一個高層網路 API,它支援多個協議。
 具名管道(named pipe)和郵件槽(mailslot)。
 Windows

提供了使用者模式的動態連結程式庫(DLL),當應
用程式透過這些DLL發出了網路I/O請求時,他們
必須將接收到的請求傳遞給核心模式的相關驅動
程式。
50
Winsock



Windows最重要的網路 API
它的使用者模式部分不僅包含了一個 DLL(即
ws2_32.dll),還定義了一個可擴展的框架。
支援 TCP/IP、IPX/SPX、AppleTalk 和 ATM 等協
定,它提供的傳輸服務和命名空間服務都通過核
心模式驅動程式 afd.sys 實現網路通訊。
51
傳輸驅動程式介面
(Transport Driver Interface)



在 核 心 模 式 部 分 , 網 路 API 驅 動 程 式 ( 譬 如
afd.sys)通過傳輸驅動程式介面(TDI)與協定驅
動程式進行通訊。
TDI 實際上是一組預先定義的 I/O 請求,它描述
了各種網路請求,包括名稱解析、建立連接、發
送和接收資料等。
網路 API 驅動程式是 TDI 客戶,而傳輸協定驅動
程式實現了 TDI 介面,稱為 TDI 傳輸器。
52
NDIS驅動程式


協定驅動程式通過統一的介面與介面卡驅動程式
進 行 通 信 , 此 介 面 是 NDIS ( Network Driver
Interface Specification)。符合 NDIS規格的網路介
面卡驅動程式稱為 NDIS 驅動程式。
Windows 提供了 NDIS 程式庫,即 ndis.sys,作為
協定驅動程式與 NDIS 驅動程式兩者之間的橋樑
。
53
TDI 運作架構
網路 API 驅動程式
TDI客戶
傳輸驅動程式介面
(TDI)
傳輸協定驅動程式
TDI傳輸器
NDIS程式庫
(ndis.sys)
NDIS驅動程式
網路介面卡
驅動程式
54
Windows 子系統

三個環境子系統
 OS/2
 POSIX
 Windows(或稱為

Win32)
Windows 子 系 統 是 必 須 要 運 行 的 , 沒 有 它
Windows系統無法運行,而其他兩個子系統則被
配置成按需啟動。
55
Windows 子系統-核心模式


核心是win32k.sys,它向使用者程式碼提供了大量
的系統服務。
功能上包含兩部分:
 視窗管理

負責收集和分發訊息,以及控制視窗顯示和管理螢幕輸出。
 圖形裝置介面(GDI)

包含各種形狀繪製以及文字輸出。
56
Windows 子系統-使用者模式

Windows 子系統行程(csrss.exe)
 主要負責主控台視窗的功能,以及創建或刪除行程和
緒程等。

一組動態連結程式庫(DLL)
 直接鏈結到應用程式行程中,包括
user32.dll 、 gdi32.dll 和
Windows API 函數。
kernel32.dll 、
advapi.dll 等 , 負 責 實 作
57
視窗管理


Windows 子系統的使用者介面管理有一個層次架
構,通常應用程式只是在一個預設的桌面上執行
。
每個子系統工作階段都有自己的工作階段空間,
屬於該工作階段的資源將從該工作階段空間中分
配。
58
Windows 子系統視窗管理層次結構
59
視窗類別(window class)



應用程式可以非常方便地建立這些視窗類的實體
應用程式要定義獨特的視窗類型,它可以產生一
個視窗類別,既可以是完全新的視窗類別,也可
以在系統已有視窗類別的基礎上定義新的視窗類
別。
Windows 視窗的編寫模型是訊息驅動的,每個視
窗物件根據其視窗類別指定的視窗程序來回應各
種訊息。
60
Windows圖形引擎


它提供了一套與設備無關的開發介面,即 GDI,
這使得應用程式可以適應各種底層顯示裝置的差
異。
應用程式與圖形裝置驅動程式之間的通訊效率夠
高,從而即使在頻繁輸出和刷新圖形元素的情況
下,Windows 也能夠為使用者提供良好的視覺效
果。
61
圖形系統結構(1/4)

Windows 子系統定義了一個穩定的圖形系統結構
,以便於第三方的圖形裝置硬體廠商可以方便地
將他們的視訊顯示器和列印裝置整合到 Windows
中。
通過 DDI(顯示設備驅動程式介面)與顯示
驅動程式打交道。
 顯 示 驅 動 程 式 通 過 ENG ( 圖 形 引 擎 介 面 ) 呼 叫
win32k.sys 中圖形引擎的功能。
 win32k.sys
62
圖形系統架構(2/4)
63
圖形系統結構(3/4)

顯示驅動程式可以幫助圖形引擎實作針對特定視
訊卡的圖形功能。
 顯示驅動程式執行一些對使用者可見的且性能緊急的
圖形操作,譬如,它可以直接存取介面卡的視訊存儲
區或者暫存器。

視訊微埠驅動程式是針對視訊卡的硬體特性。
 微埠驅動程式執行一些不常見的圖形操作,或者一些
不能被中斷 打斷或其他行程搶佔的關鍵圖形操作。
64
圖形系統結構(4/4)


視訊連接埠驅動程式由 Windows 作業系統提供,
它實際上是一個動態連結程式庫,用於幫助視頻
微埠驅動程式實現一些公共的、與圖形處理有關
的功能,也是為微埠驅動程式 提供一個與系統核
心和執行體打交道的環境。
視頻微埠驅動程式則負責直接的硬體資源管理和
控制。
65
Outline
2.3 Windows研究核心與記憶體管理機制
 WRK
介紹
 Windows記憶體管理機制
報告人:黃俊凱
WRK是什麼?

以 Windows XP x64 和 Windows Server 2003 SP1 為基礎的核心原始碼

由Microsoft於2006年7月所開放,它可以編譯和運行,目的是用為教
育科研機構的教學實踐和研究的平臺使用,稱為 WRK(Windows
Research Kernel,Windows 研究核心)
2011/5/4
67
WRK包含的內容(1/2)

WRK核心原始碼,涉及到行程、執行緒、記憶體管理、執行體、物
件管理員、快取管理員、本地程序呼叫(LPC)、登錄、I/O 管理員、
安全引用監視器,以及執行緒排程、APC(非同步程序呼叫) /DPC(延
遲的程序呼叫)、中斷以及異常處理等。

NT設計文件。這是一組早期的文件,儘管其內容已不完全適用於現
在的 Windows 作業系統以及 WRK 中的代碼,但是,閱讀這些文件一
方面可以清楚地理解 Windows NT 背後的原始設計思想,另一方面也
可以看出 Windows 在這十多年中是如何發展和進化的。
2011/5/4
68
WRK包含的內容(2/2)

課程資源 CRK(Curriculum Resource Kit),包括一整套 Windows 作
業系統講義,共15個單元。每個單元又包含一些專題講義、習題和上
機練習題。

相關的輔助材料和參考資料,包括 WAP(Windows Academic Program,
Windows 學院計畫)中的一些教學實踐項目、“Windows Internals”
兩位作者的共 12 小時的視頻材料。
2011/5/4
69
WRK包含的相關元件(1/2)
2011/5/4
70
WRK包含的相關元件(2/2)
2011/5/4
71
Windows記憶體管理機制(1/5)

Intel x86系統架構支援區段式(segment)記憶體管理,也支援分頁式
(paging)記憶體管理,然而,Windows沒有使用區段式記憶體管理方案,
只是簡單地將32位元虛擬記憶體空間按照0~4GB的線性位址空間來看
待。

任何一個行程都定義了它自己的完整4GB位址空間,但是,其
2GB~4GB之間的位址範圍是所有行程共用的,稱為系統位址空間;
而0~2GB部分才是它自己私有的,稱為行程位址空間。
2011/5/4
72
Windows記憶體管理機制(2/5)
0xffffffff
系統位址空間
Kernel mode
4GB
不可存取 <=
0x7fffffff
64KB
0x7fff0000
行程位址空間
User mode
2GB
0x00000000
73
Windows記憶體管理機制(3/5)

Windows使用了Intel x86的二級或
多級分頁表機制來存取虛擬記憶體。
處理器在執行記憶體存取指令時,
將虛擬位址翻譯成實體位址,翻譯
過程涉及到查詢分頁目錄和分頁表,
一旦分頁表項目指出一個頁面末在
實體記憶體中,則觸發分頁錯誤
( page fault)例外。
Two-Level Page-Table Scheme
2011/5/4
74
Windows記憶體管理機制(5/5)

虛擬憶體管理員透過分頁錯誤例外將已被換出到磁碟上的資料或程
式碼重新帶入實體記憶體,供目前活躍的程式存取。另一方面,當
實體記憶體吃緊時,它將不常用的頁面換出到磁碟上。
2011/5/4
76
系統位址空間管理(1/4)

在初始化時將系統位址空間劃分成一些固定的區域,每個區域有專門
的用途。

使用了一組全域變數來記錄每個區域的邊界。

初始化實際上是對這些全域變數的初始化,並相應地初始化每個區域。

不同的區域使用不完全相同的記憶體分頁管理演算法,較為典型的有
三種管理方法:

非分頁集區

分頁集區

系統PTE區域
2011/5/4
77
系統位址空間管理(2/4)

非分頁集區:這部分記憶體區域在初始化時刻已經被對應到實體頁面,
所以, Windows利用空閒串列,按照不同的size,將空閒頁面連結起
來。空閒頁面本身即串列中的節點,因而這些串列無需額外的記憶體
空間(除了開頭節點)。申請和釋放頁面的操作實際上是針對空閒串
列來進行的。

分頁集區:在分頁集區區域,空閒的頁面並沒有被對應實體頁面,
Windows使用點陣圖來管理頁面。分配連續的多個頁面,即從點陣圖
中找到連續的零位。
2011/5/4
78
系統位址空間管理(3/4)

系統PTE區域:這部分記憶體區域並非存放的是PTE(page table entries),
而表示這部分位址範團是以PTE的形式來管理的,即把PTE當作資源
來管理。當核心需要一段虛擬位址來對應實體頁面時,它可以使用系
統PTE區域中的位址。
2011/5/4
79
系統位址空間管理(4/4)

執行體分頁集區和執行體非分頁集區:這些記憶體集區透過空閒串列
記錄下每個已申請頁面中的空閒區塊;當釋放記憶體時,自動與相鄰
的空閒區塊合併以構成更大的空閒區塊。核心其他元件或驅動程式透
過執行體暴露的API函式(例如ExAllocatePoolWithTag和
ExFreePoolWïthTag)來使用這些記憶體集區。
2011/5/4
80
行程位址空間管理

隨著Process一起被建立,每個行程有它自己的分頁目錄表,其中有一
半分頁目錄項(PDE)是共用的,即系統位址空間部分,餘下一半初
始化為零。

隨著行程中的映像檔(包括exe檔案和各個DLL檔案)被載入進來,
以及各個模組的初始化程式碼被執行,行程位址空間逐步被建立起來。

透過一棵平衡二元搜尋樹來管理行程位址空間被使用的情況,樹中的
每個節點為一個VAD(Virtual Address Descriptor),描述了一段連續
的位址範圍;但是在整個位址空間中,被使用的或保留的位址範圍往
往是不連續的。
2011/5/4
81
PFN資料庫
(Page Frame Number Database)

每一個實體頁面對應於PFN資料庫中的一項,此PFN項描述了該頁面
的狀態。

記憶體管理員利用PFN資料庫,按照頁面的狀態來管理實體記憶體,
並且負責頁面的狀態轉移。

Windows支援八種狀態:活動、備用(standby)、已修改、已修改但
不寫出、轉移、空閒、零化和壞狀態。
2011/5/4
82
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
83
工作集管理員(1/2)

工作集(working set):一個Process目前正在使用的實體頁面的集合。

包含三種型態:


行程工作集

系統作集(即系統空間中動態對應的頁面集合)

工作階段工作集(即工作階段空間中的程式碼和資料段〉
每個process有一個工作集串列,其中每一項不僅記錄了實體頁面的編
號,還記錄了其他的屬性,工作集管理員可以根據一些策略來選擇要
修剪的行程,將其使用中的頁面換出到磁碟中,空出未使用的實體頁
面給其他process 。
2011/5/4
84
工作集管理員(2/2)

工作集管理員執行在一個稱為平衡集管理員(balance set manager)的
執行緒中,它每隔一秒鐘被觸發一次,當可用記憶體太低時也會被觸
發。

平衡集管理員除了觸發工作集管理員以外,也定期觸發行程/堆疊交換
器(process/stack swapper)。

行程/堆疊交換器是另一個單獨的執行緒,一旦被喚醒,則將滿足特定
條件的行程和堆疊換入記憶體或換出記憶體。
2011/5/4
85
Outline
建立WRK(Windows Research Kernel)工作環境
 編譯WRK
 啟動WRK
 偵錯WRK
報告人:黃郁偉
編譯WRK (1/5)

WRK 1.2的核心可以執行的系統環境
 Win2K3
SP1(X86)
 WinXP x64 Professional(AMD64)

編譯環境
 Win2K3/WinXP之後的作業系統環境皆可編譯(編譯的
作業系統不限定)
 需安裝Visual Studio環境
87
編譯WRK (2/5)

核心編譯步驟(命令列環境):
 編譯權限:編譯WRK無須管理員權限,執行使用一般
權限即可。
 執行Visual Studio附帶的命令提示字元編譯環境
 設定path變數



切換至WRK原始碼主目錄底下(WRK路徑中不能有空白,否則
nmake無法編譯-書本未註明)
path變數需包含tools\x86或tools\amd64目錄路徑
需在ntos目錄底下輸入nmake指令
88
編譯WRK (3/5)
set path=C:\WRK-v1.2\tools\x86;%path%
cd base\nots
nmake -nologo x86=
set path=C:\WRK-v1.2\tools\amd64;%path%
cd base\nots
nmake -nologo amd64=
89
編譯WRK (4/5)
 編譯完成後(約1分鐘),最終的核心模組檔名為
wrkx86.exe或wrkamd64.exe,位於WRK的
base\nots\BUILD\EXE目錄底下
90
編譯WRK (5/5)
wrkx86.exe  Kernel
wrkx86.pdb  Symbol File
91
啟動WRK (1/5)

安裝WRK核心步驟
 安裝wrkx86.exe或wrkamd64.exe

將wrkx86.exe或wrkamd64.exe複製到C:\Windows\System32\目錄
底下
92
啟動WRK (2/5)
 查詢硬體抽象層(Hardware
Abstraction Layer , HAL)模組
類型(書本未說明清楚)

在WRK路徑底下輸入
link -dump -all \WINDOWS\system32\hal.dll | findstr pdb

依據HAL查詢結果尋找對應的HAL模組
 halacpi.dll  halacpim.dll ; ACPI PIC-based PC [used by
VirtualPC]
 halaacpi.dll  halmacpi.dll ; ACPI APIC-based PC [used by
VMware]
 halapic.dll  halmps.dll
; MPS
93
啟動WRK (3/5)
 安裝硬體抽象層(Hardware


Abstraction Layer , HAL)模組
HAL 檔案在WRK目錄的WS03SP1HALS\x86目錄底下
將對應作業系統的HAL檔案(halacpi.dll | halaacpi.dll | halapic.dll
)複製到C:\Windows\System32\目錄底下
94
啟動WRK (4/5)
 修改boot.ini檔案
先進行備份原始boot.ini檔案,命名為boot.ini.bk
 修改boot.ini,並新增以下內容
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Windows WRK”
/kernel=wrkx86.exe /hal=halmacpi.dll
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Windows WRK”
/kernel=wrkx86.exe /hal=halmacpi.dll /debug /debugport=com1
/baudrate=115200

95
啟動WRK (5/5)
 重新啟動作業系統,進入WRK
96
偵錯WRK (1/5)

建置作業系統除錯開發環境(Debugging and
Development)
 安裝Virtual
PC或VM Ware
 Microsoft 官方網站下載WinDGB與Windows Symbol
Packages (需對應目標系統的版本 wrkx86.pdb | wrkamd64.pdb)
WinDBG
Named Pipe
+
Localhost
Windows Symbol Packages
For WinXP
WRK 1.2
Virtual Machine
97
偵錯WRK (2/5)
 VM

Ware設定
Settings  Configuration Editor  Add Hardware Wizard 選擇
Serial Port  選擇Output to named pipe
98
偵錯WRK (3/5)
新增一WinDGB路徑,參數如下:
"D:\Program Files\Debugging Tools for Windows\windbg.exe"
-b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect -y
C:\WRK-v1.2\ base\nots\BUILD\EXE;srv* C:\WRK-v1.2\
base\nots\BUILD\EXE*http://msdl.microsoft.com/download/sym
bols -srcpath " C:\WRK-v1.2\ base "
 為確保WinDBG在進行除錯時能夠找到Kernel的Symbol,
C:\WRK-v1.2\ base\nots\BUILD\EXE路徑需指向wrkx86.pdb或
wrkamd64.pdb所在的目錄底下

99
偵錯WRK (4/5)
 啟動WRK除錯模式

先啟動WinDGB(等待狀態)

啟動Virtual Machine,並選擇WRK 1.2 [debugger enabled]
100
偵錯WRK (5/5)

WinDGB開始進入除錯狀態(成功)
看到int 3 中斷指
令之後,可以下
go(或按F5)指令
就可以繼續進行
所有作業系統開
機運作程序
若要打斷作業系
統執行,只需在
WinDBG中按
CTRL+BREAK
相關WinDGB指
令請自行參考
101
Outline
2.4 Windows核心的基本概念
2.4.3行程與緒程(Process and Thread)

行程與緒程簡介

常見Windows系統緒程

常見Windows系統行程
報告人:朱慶翔
行程 process(1/2)

定義一個執行環境 (An Environment for program execution)
 私有的位址空間 (private virtual address space)
 控制代碼表 (PCB,Process Control Block)
 安全環境 (Access token)

存取權限、擁有者等屬性
103
行程 process(2/2)


每一行程有獨一無二的ID(process ID)
行程間有父子關係
 行程中無明確指定的屬性,均繼承自父行程
 行程本身是獨立的,僅記錄父行程的ID
 僅代表建立者與被建立者的關係
104
緒程(Thread)

一個控制流程 ( The entity within a process that can
be scheduled for execution)
 指令執行順序
 排程單元

有自己的呼叫堆疊(call stack)
 紀錄執行的歷史

每一緒程有獨一無二的ID(thread ID)
105
行程與緒程的關係



一個行程中,至少有一個緒程
每個緒程必定依附於一個行程
行程被初始建立時
 系統為該行程建立第一個緒程

當行程中最後一個緒程結束時
 該行程也隨之結束
106
行程與緒程的關係

行程中的緒程若在
 User
mode執行→只能存取該行程的位址空間
 Kernel mode執行→可以存取整個位址空間
行程位址空間
(私有)
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
更多行程
….
系統位址空間
(共用)
107
行程與緒程的核心架構

核心機制在Kernel中實作
 緒程排程
 建立緒程與行程的相依性


KeAttachProcess/KeStackAttachProcess函式
管理機制在執行體中實作
 緒程和行程的建立

PspCreateThread, PspCreateProcess函式
 各種管理屬性設定
108
緒程的建立─PspCreateThread

建立執行體緒程物件
 ETHREAD


初始化其中的欄位
維護新緒程與宿主行程之間的關係
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
更多行程
….
新緒程 T7
ETHREAD
109
行程的建立─PspCreateProcess

建立執行體行程物件
 EPROCESS

初始化該物件的狀態
 建立一個位址空間
行程 P1
行程 P2
緒程 T1
T2
T3
行程 P3
T4
T5
T6
新行程 P4
EPROCESS
更多行程
….
110
緒程排程(Thread Scheduling)

先佔式 (Preemptive)
 基本優先順序
(base priority)
 動態優先順序 (priority)

優先順序
最低優先順序,僅用於某些系統緒程執行幕後工作
 1~15: 動態優先順序
 16~31: 即時優先順序,用於一些即時處理工作
 0:
111
緒程排程優先順序對照表
Win32 process class priorities
Real time
Hig
h
Below
normal
Idle
31
15
15
15
15
15
Highest
Win32
thread Above normal
priorities
Normal
26
15
12
10
8
6
25
14
11
9
7
5
24
13
10
8
6
4
Below normal
23
12
9
7
5
3
Lowest
22
11
8
6
4
2
Idle
16
1
1
1
1
1
Time critical
Above
Normal
Normal
同時可代表緒程的基本優先順序
112
緒程排程

滿足繼續執行的條件
 正在排隊或已經在執行


按優先順序排隊執行
不滿足繼續執行的條件
 處於等候狀態
 呼叫堆疊甚至所處的行程已被換出記憶體

一旦執行條件滿足,首先要將他換回記憶體,然後才
能參與排隊分發
113
系統緒程

System行程中的緒程
 裝置驅動程式或執行體,可在此行程建立緒程
 向系統輔助緒程請求得到服務



執行體函式 ExQueueWorkItem
I/O管理員函式IoQueueWorkItem
系統輔助緒程 (System worker thread)
 代表作業系統或其他的應用行程來完成一些特殊工作
114
系統輔助緒程
(System worker thread)


實際上為一個緒程集區
產生的時機
 Windows在系統初始化時,建立一定數量的輔助緒程
 執行體動態建立


隨著輔助緒程的負載變化
滿足系統負載的變化需求
115
其他系統緒程

記憶體管理員
 需要後台系統緒程監視和管理頁面的換入/出

裝置驅動程式
 呼叫
PsCreateSystemThread 函式建立系統緒程
 完成一些並非依附於呼叫者行程空間的工作
116
系統空閒行程(Idle) (1)


ID 為 0
每個處理器(processor)或kernel對應一個thread
117
System行程(2)



ID為4
kernel mode的system thread
通過PsCreateSystemThread創建的thread
 系統輔助緒程
 執行體
 驅動程式
118
工作階段管理員(Session manager,
smss.exe)(3)


第一個建立的user mode process
在Windows啟動過程中
 建立環境變數
 啟動


子系統行程: csrss.exe
登入行程: winlogon.exe
 建立新的終端伺服器工作階段

(terminal server session)
同時載入子系統,啟動csrss.exe與winlogon.exe
119
登入行程(winlogon.exe)(4)


負責處理互動使用者的登入和登出
當使用者按下Crtrl+Alt+Del (SAS, 安全注意順序)
 winlogon接收到登入請求
 觸發安全認證過程
 啟動使用者工作階段中的初始行程

若在工作階段的任何時候,按下SAS
 winlogon會提示一個安全對話方塊

登出、啟動工作管理員、鎖定電腦…等選項
120
Windows子系統行程(csrss.exe)
(5)


負責為使用者提供一個子系統環境
包含提供
 主控台視窗
 建立或刪除process和thread
121
Windows子系統行程的建立

部分工作在子系統 DLL 中完成
 開啟指定的可執行檔
 建立一個記憶體區段物件
 呼叫PspCreateProcess
122
Windows子系統行程的影響

一般的行程和緒程物件建立後,Windows子系統
行程(csrss.exe)也會介入建立過程
 維護子系統內部的行程、緒程狀態

行程最後階段的初始工作
 由初始緒程在該行程環境中執行特定函式
 從Kernel
mode切換到User mode
 執行基本的行程初始化工作


載入必要的動態連結程式庫
執行每個程式庫的初始化函式
123
本機安全性授權子系統
(lsass.exe)(6)

負責本機系統安全性原則
 允許那些使用者登入系統
 密碼策略
 授予使用者與使用群組的權限
 系統安全稽核設定


負責認證使用者身分
將 安 全 稽 核 訊 息 發 送 至 系 統 的 事 件 日 誌 (Event
Log)中
124
Shell行程(explore.exe)(7)


Windows預設的shell
提供使用者與系統溝通的各種介面
 開始功能表
 工作列
 檔案管理員
125
服務控制管理器(services.exe)
(8)

負責管理Windows的系統服務
 指一些特殊的行程
 通常不與登入使用者有互動
 系統啟動時自動啟動

Windows中有很多功能元件是以服務方式實作
 事件日誌、工作排程器和各種網路元件等
126
Outline
2.4 Windows核心的基本概念 (內容在PDF檔案)
2.4.1 處理器模式
2.4.4 中斷和例外
2.4.5 同步
報告人:蔣念慈
Thanks ~
128