Team 6 Modern Operating System Kernels Final Report

  • Slides: 144
Download presentation
Team 6 Modern Operating System Kernels Final Report 975002025 975002018 975002503 975002050 975002525 975002024

Team 6 Modern Operating System Kernels Final Report 975002025 975002018 975002503 975002050 975002525 975002024 975002040 100522007 100522086 100522022 100522061 林彥宇 李韋成 游惇雅 林俊伸 莊欣瑜 沈宗弦 謝宛儀 楊睿豪 陸俊廷 張哲嘉 徐千惠 1

初始化 � . Mi. Initialize. Non. Paged. Pool 系統非分頁集區初始化 PFN資料庫初始化 Initialize. Pool(Non. Paged. Pool,

初始化 � . Mi. Initialize. Non. Paged. Pool 系統非分頁集區初始化 PFN資料庫初始化 Initialize. Pool(Non. Paged. Pool, 0) 執行體非分頁集區初始化 Mi. Build. Paged. Pool 系統分頁集區初始化 Initialize. Pool(Paged. Pool, 0 L) 執行體分頁集區初始化 7

頁面內部結構 0 PI BS PT Tag PS PI 使用者資料 BS PT Tag 使用者資料 PS:

頁面內部結構 0 PI BS PT Tag PS PI 使用者資料 BS PT Tag 使用者資料 PS: Previous. Size PI: Pool. Index BS: Block. Size PT: Pool. Type 10

Ex. Allocate. Pool. With. Tag (1/2) �. � . 11

Ex. Allocate. Pool. With. Tag (1/2) �. � . 11

Ex. Allocate. Pool. With. Tag (2/2) �Step 1 ◦ 若Number. Of. Bytes > POOL_BUDDY_MAX則呼叫

Ex. Allocate. Pool. With. Tag (2/2) �Step 1 ◦ 若Number. Of. Bytes > POOL_BUDDY_MAX則呼叫 Mi. Allocate. Pool. Pages(),否則就直接使用 lookaside來分配。 �Step 2 ◦ 確 定 POOL_DESCRIPTOR物 件 Pool. Desc和 索 引 List. Number後,使用do迴圈搜尋滿足條件的空閒 區塊。 �Step 3 ◦ 執行完Step 2仍未找到有效區塊的話,則呼叫 Mi. Allocate. Pool. Pages函式來向系統記憶體集區申 請一個新的頁面。 12

Ex. Free. Pool. With. Tag (1/6) � . �Step 1 ◦ Ex. Allocate. Pool.

Ex. Free. Pool. With. Tag (1/6) � . �Step 1 ◦ Ex. Allocate. Pool. With. Tag 透過 POOL_BUDDY_MAX呼叫Mi. Allocate. Pool. With. Tag 函式進行配置,相對地,再釋出空間亦呼叫 Mi. Free. Pool. With. Tag. 13

Ex. Free. Pool. With. Tag (2/6) � Step 2 ◦ 根據參數P,找到相關的POOL_HEADER,置於區 域變數Entry中,並檢查期中的成員資訊,進一步找 到它後面的區塊的POOL_HEADER,檢查後面區 塊的Previous.

Ex. Free. Pool. With. Tag (2/6) � Step 2 ◦ 根據參數P,找到相關的POOL_HEADER,置於區 域變數Entry中,並檢查期中的成員資訊,進一步找 到它後面的區塊的POOL_HEADER,檢查後面區 塊的Previous. Size和目前區塊的Block. Size是否相同。 � Step 3(小區塊釋放) ◦ 在Ex. Allocate. Pool. With. Tag 中,配置小區塊即從 Lookaside List中提取適當區塊。相對地,在 Ex. Free. Pool. With. Tag中,若Lookaside List未達到預 定深度,則將釋出的區塊放入Lookaside List中 ※分頁及非分頁集區lookaside list:PPPaged. Lookaside. List & PPNPaged. Lookaside. List 14

Ex. Free. Pool. With. Tag (3/6) � Step 4 -1 (merge) 15

Ex. Free. Pool. With. Tag (3/6) � Step 4 -1 (merge) 15

Ex. Free. Pool. With. Tag (4/6) � Step 4 -2 (merge) 16

Ex. Free. Pool. With. Tag (4/6) � Step 4 -2 (merge) 16

Ex. Free. Pool. With. Tag (5/6) �Step 4 -3 (merge) 17

Ex. Free. Pool. With. Tag (5/6) �Step 4 -3 (merge) 17

Ex. Free. Pool. With. Tag (6/6) �Step 4 -4 (merge) 18

Ex. Free. Pool. With. Tag (6/6) �Step 4 -4 (merge) 18

PTE串列 & PTE cluster(2 PTE) Next. Entry … 0 0 2 … 0 0

PTE串列 & PTE cluster(2 PTE) Next. Entry … 0 0 2 … 0 0 xx … x x PTE cluster(1 PTE) Next. Entry … 1 0 PTE cluster(3 PTE) Next. Entry … 0 0 3 … 0 0 0 … 0 0 22

主要程式碼中之函式 l Mi. Initialize. System. Ptes l Mi. Reserve. System. Ptes l Mi. Release.

主要程式碼中之函式 l Mi. Initialize. System. Ptes l Mi. Reserve. System. Ptes l Mi. Release. System. Ptes 24

Mi. Initialize. System. Ptes (2/2) i = MM_SYS_PTE_TABLES_MAX; do{ I -= 1; do{ Lists[i]

Mi. Initialize. System. Ptes (2/2) i = MM_SYS_PTE_TABLES_MAX; do{ I -= 1; do{ Lists[i] -=1; Mi. Release. System. Ptes(Pointer. Pte, Mm. Sys. Pte. Index[i], System. Pte. Space); Pointer. Pte +=Mm. Sys. Pte. Index[i]; }while(Lists[i] !=0); }while(i!=0); 26

4. 3. 1位址空間的建立和初始化 �Psp. Create. Process建立行程時,若指定的 Parent行程不為NULL Mm. Create. Process. Address. Space Psp. Create.

4. 3. 1位址空間的建立和初始化 �Psp. Create. Process建立行程時,若指定的 Parent行程不為NULL Mm. Create. Process. Address. Space Psp. Create. Process 建立一個新的位址空間 Mm. Initialize. Process. Address. Space 初始化行程位址空間 31

建立行程位址空間 �呼叫Mm. Create. Process. Address. Space函式 建立位址空間 (base/ntos/mm/procx 86. c 28 -362) BOOLEAN Mm.

建立行程位址空間 �呼叫Mm. Create. Process. Address. Space函式 建立位址空間 (base/ntos/mm/procx 86. c 28 -362) BOOLEAN Mm. Create. Process. Address. Space ( IN ULONG Minimum. Working. Set. Size, //建立行程的最小 作集的大小 IN PEPROCESS New. Process, //建立行程的行程物件 OUT PULONG_PTR Directory. Table. Base ) //指向行程位址空間的分頁目錄位址 32

4. 3. 1位址空間的建立和初始化 Mm. Create. Process. Address. Space Psp. Create. Process 建立一個新的位址空間 Mm. Initialize.

4. 3. 1位址空間的建立和初始化 Mm. Create. Process. Address. Space Psp. Create. Process 建立一個新的位址空間 Mm. Initialize. Process. Address. Spac 初始化行程位址空間 42

初始化行程位址空間 � 接著呼叫Mm. Initialize. Process. Address. Space 初始化使用者空間部分(0 x 0 -0 x 7 fffffff)

初始化行程位址空間 � 接著呼叫Mm. Initialize. Process. Address. Space 初始化使用者空間部分(0 x 0 -0 x 7 fffffff) NTSTSTUS Mm. Initialize. Process. Address. Space ( IN PEPROCESS Process. To. Initialize , //要初始化的目標行程 IN PEPROCESS Process. To. Clone OPTIONAL , //新行程的位址空間可從該行程複製獲得 IN PVOID Section. To. Map OPTIONAL , //提供一記憶體區段物件,鰾是在新行程位址空間中對應此物件 IN OUT PULONG Create. Flags , //各種與行程建立相關的旗標 OUT POBJECT_NAME_INFORMATION *Audit. Name OPTIONAL , //物件名稱資訊指標 ); 44

初始化行程位址空間 - 函式流程 1. 2. 3. 判斷是否更新新行程空間中的系統PDE (分頁後半 部分),若需要則呼叫Mi. Update. System. Pdes. 呼叫Ke. Attach.

初始化行程位址空間 - 函式流程 1. 2. 3. 判斷是否更新新行程空間中的系統PDE (分頁後半 部分),若需要則呼叫Mi. Update. System. Pdes. 呼叫Ke. Attach. Process, 把目前緒程”暫時”附加 至待初始化的行程物件上。 標明目前正在使用位址空間 2. Process. To. Initialize->Flags = PS_PROCESS_FLAGS_ADDRESS_SPACE 4. 初始化位址建立鎖及 作集互斥器 Process. To. Initialize->Address. Creation. Lock Process. To. Initialize->Vm. Working. Set. Mutex 45

系統位址空間的記憶體配置結構 0 x 80000000 Mm. Pfn. Database Mm. Non. Paged. Pool. Start Mi. System.

系統位址空間的記憶體配置結構 0 x 80000000 Mm. Pfn. Database Mm. Non. Paged. Pool. Start Mi. System. Cache. Start. Extra Mi. System. Cache. Size. Extra(個頁面) Mi. System. View. Start Mm. Session. Base 作階段管理員、 Windows子系統 0 xc 0000000 0 xc 0400000 Mm. System. Cache. Working. Set. List(0 xc 0 c 00000) Mm. Paged. Cache. Start(0 xc 1000000) 可能在不同行程的分頁目錄中 有不同的檢視 Mm. Paged. Pool. Start Mm. Non. Paged. Pool. Expansion. Start 0 xffbe 0000 0 xffff 53

4. 3. 3 行程位址空間的記憶體管理 Virtual. Alloc 空閒 Virtual. Alloc. Ex 保留 Virtual. Free. Ex

4. 3. 3 行程位址空間的記憶體管理 Virtual. Alloc 空閒 Virtual. Alloc. Ex 保留 Virtual. Free. Ex Virtuallock 提交 Virtual. Free Virtual. Unlock 58

4. 3. 3 行程位址空間的記憶體管理 上 層 Virtual. Free Ex Virtual. Alloc. Ex 實 作

4. 3. 3 行程位址空間的記憶體管理 上 層 Virtual. Free Ex Virtual. Alloc. Ex 實 作 Nt. Allocate. Virtual. Memory Nt. Free. Virtual. Memory 下 層 59

4. 3. 3 行程位址空間的記憶體管理 �Window的行程位址透過VAD管理 �VAD初始化 Mm. Initialize. Process. Ad dress. Space EPROCESS物件 Vad.

4. 3. 3 行程位址空間的記憶體管理 �Window的行程位址透過VAD管理 �VAD初始化 Mm. Initialize. Process. Ad dress. Space EPROCESS物件 Vad. Root欄位 VADRoot類型 MM_AVL_TABLE typedef struct _MM_AVL_TABLE { MMADDRESS_NODE Balanced. Root; ULONG_PTR Depth. Of. Tree: 5; ULONG_PRT Unused: 3; ULONG_PRT Number. Generic. Table. Elements: 24; VAD PVOID Node. Hint; 樹根 PVOID Node. Free. Hint; } MM_AVL_TABLE, *PMM_AVL_TABLE; 60

VAD樹中節點型別 (1/2) typedef struct _MM_MMADDRESS_NODE { 維護AVL union { 樹本身 LONG_PTR Balance : 2;

VAD樹中節點型別 (1/2) typedef struct _MM_MMADDRESS_NODE { 維護AVL union { 樹本身 LONG_PTR Balance : 2; struct _MMVAD * parent; } struct _MMVAD * Left. Child; struct _MMVAD * Right. Child; ULONG_PTR Starting. Vpn; ULONG_PTR Ending. Vpn; } MMADDRESS_NODE, *PMMADDRESS_NODE; 61

VAD樹中節點型別 (2/2) typedefstruct _MMVAD { typedef union { _MM_MMADDRESS_NODE { LONG_PTR Balance : 2;

VAD樹中節點型別 (2/2) typedefstruct _MMVAD { typedef union { _MM_MMADDRESS_NODE { LONG_PTR Balance : 2; union { struct _MMVAD * parent; LONG_PTR Balance : 2; } struct _MMVAD * parent; struct _MMVAD * Left. Child; } struct _MMVAD * Right. Child; Left. Child; ULONG_PTR Starting. Vpn; struct _MMVAD * Right. Child; ULONG_PTR Ending. Vpn; Starting. Vpn; } MMADDRESS_NODE, ULONG_PTR Ending. Vpn; *PMMADDRESS_NODE; } MMADDRESS_NODE, … *PMMADDRESS_NODE; 範圍 樹真正結點類型為 MMVAD 62

Vad. Root. Balanced. Root. Right. Child VAD樹 [10, 10] 左子點 [20, 20] [130, 134

Vad. Root. Balanced. Root. Right. Child VAD樹 [10, 10] 左子點 [20, 20] [130, 134 ] [270, 2 a 3] [300, 305 ] Root 右子點 [67000, 6700 e] [77 e 40, 77 f 41] [7 ffb 0, 7 ffd 3] [240, 24 f] [2 b 0, 2 f 0] [320, 322] [410, 50 f] [77 c 50, 77 cee] [7 c 800, 7 c 8 bf] [7 ffdd, 7 ffde] 一個實際行程的VAD樹 提交or保留 [30, 13 f] [140, 23 f] [250, 265] [310, 31 f] [330, 33 f] [510, 56 f] [77 f 50, 77 feb] [7 f 6 f 0, 7 f 7 ef] [7 ffdb, 7 ffdb] [7 ffdc, 7 ffdc] [7 ffde, 7 ffde] 63

TABLE SEARCH_RESULT Mi. Find. Node. Orparent ) IN PMM_AVL_TABLE Table, IN ULONG_PTR Starting. Vpn,

TABLE SEARCH_RESULT Mi. Find. Node. Orparent ) IN PMM_AVL_TABLE Table, IN ULONG_PTR Starting. Vpn, OUT PMMADDRESS_NODe *Node. Or. Parent ); AVL 實作: Basentosmmaddrsup. c �Mi. Find. Node. Or. Parent �Mi. Insert. Node() �Mi. Remove. Node() () VOID FASTCALL Mi. Insert. Node ( IN PMMADDRESS_NODE Node. To. Insert, IN PMM_AVL_TABLE Table ); VOID FASTCALL Mi. Insert. Node ( IN PMMADDRESS_NODE Node. Delete, IN PMM_AVL_TABLE Table ); 64

Mi. Find. Node. Or. Parent () TABLE SEARCH_RESULT Mi. Find. Node. Orparent ) 尋找這點父節

Mi. Find. Node. Or. Parent () TABLE SEARCH_RESULT Mi. Find. Node. Orparent ) 尋找這點父節 點or. AVL節點 IN PMM_AVL_TABLE Table, IN ULONG_PTR Starting. Vpn, OUT PMMADDRESS_NODe *Node. Or. Parent ); 65

Mi. Insert. Node() & Mi. Remove. Node() VOID FASTCALL Mi. Insert. Node ( IN

Mi. Insert. Node() & Mi. Remove. Node() VOID FASTCALL Mi. Insert. Node ( IN PMMADDRESS_NODE Node. To. Insert, IN PMM_AVL_TABLE Table ); VOID FASTCALL Mi. Insert. Node ( IN PMMADDRESS_NODE Node. Delete, IN PMM_AVL_TABLE Table ); 66

VAD點陣圖相關函式 Mi. Insert. Vad. Charges() �Mi. Insert. Vad. Charges()Start. Bit = (ULONG) (((ULONG)MI_64 K_ALIGN

VAD點陣圖相關函式 Mi. Insert. Vad. Charges() �Mi. Insert. Vad. Charges()Start. Bit = (ULONG) (((ULONG)MI_64 K_ALIGN (MI_VPN_TO_VA(Vad>Starting. Vpn)))/X 64 K); End. Bit = (ULONG) (((ULONG)MI_64 K_ALIGN (MI_VPN_TO_VA(Vad>Ending. Vpn)))/X 64 K); �Mi. Return. Page. Table. Pate. Commitment() �Mi. Find. Empty. Address. Range() Vad. Bit. Map. Size. Of. Bit. Map = Mi. Last. Mad. Bit + 1; Bad. Bit. Map. Buffer = VAD_BITMAP_SPACE; Rtl. Set. Bits (&Vad. Bit. Map, Start. Bit, End. Bit – Start. Bit + 1); 68

記憶體區段的建立 (1/8) l (basentosmmcreasect. c) 73

記憶體區段的建立 (1/8) l (basentosmmcreasect. c) 73

記憶體區段的建立 (5/8) l (basentosmmcreasect. c) 指定記憶體區段物件中 : 記憶體區段的分配方式 SEC_BASED SEC_RESERVE SEC_COMMIT SEC_IMAGE SEC_FILE SEC_LARGE_PAGES

記憶體區段的建立 (5/8) l (basentosmmcreasect. c) 指定記憶體區段物件中 : 記憶體區段的分配方式 SEC_BASED SEC_RESERVE SEC_COMMIT SEC_IMAGE SEC_FILE SEC_LARGE_PAGES 指定記憶體區中 每個頁面的保護旗標 77

記憶體區段的建立 (8/8) l (basentosmmcreasect. c) 指定存取方式: EXECUTE、READ、 WRITE 80

記憶體區段的建立 (8/8) l (basentosmmcreasect. c) 指定存取方式: EXECUTE、READ、 WRITE 80

MmCreate. Section函式的程式碼邏輯 (1/3) ① ② ③ 填充 區段 SEGMENT Control. Are a Mm. Create.

MmCreate. Section函式的程式碼邏輯 (1/3) ① ② ③ 填充 區段 SEGMENT Control. Are a Mm. Create. Section 分頁檔支撐的記憶體集區 檔案物件 控制區 Mi. Create. Paging. File. Map CONTROL_AREA FILE_OBJECT Section. Object. Poin Segment 映像檔記憶體集區 ter File. Pointer Mi. Create. Image. File. Map SUBSECTION 有對應的 子記憶體區段 檔案物件 SUBSECTION 資料檔案記憶體集區 子記憶體區段 有任一個為非空 Mi. Create. Data. File. Map …… 81

MmCreate. Section函式的程式碼邏輯 (2/3) ① ② Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map

MmCreate. Section函式的程式碼邏輯 (2/3) ① ② Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區 Mi. Create. Image. File. Map 資料檔案記憶體集區 空 Mi. Create. Data. File. Map 有對應的 檔案物件 82

MmCreate. Section函式的程式碼邏輯 (3/3) � (basentosmmcreasect. c) 83

MmCreate. Section函式的程式碼邏輯 (3/3) � (basentosmmcreasect. c) 83

記憶體區段物件與其他物件的關聯結構 (1/3) 記憶體區段 物件 Segment 區段 SEGMENT Control. Area 記憶體區段物件指標 SECTION_OBJECT_POITERS Data. Section. Object

記憶體區段物件與其他物件的關聯結構 (1/3) 記憶體區段 物件 Segment 區段 SEGMENT Control. Area 記憶體區段物件指標 SECTION_OBJECT_POITERS Data. Section. Object Image. Section. Object 控制區 CONTROL_AREA Segment File. Pointer SUBSECTION 子記憶體區段 虛擬位址描述項 MMVAD Control. Area …… 檔案物件 FILE_OBJECT Section. Object. Poin ter 84

記憶體區段物件與其他物件的關聯結構 (3/3) l 檔案物件是Windows I/O和儲存系統中的一 個核心物件,也是記憶體管理子系統與I/O子 系統打交道的重要途徑。 控制區 CONTROL_AREA Segment File. Pointer SUBSECTION 子記憶體區段

記憶體區段物件與其他物件的關聯結構 (3/3) l 檔案物件是Windows I/O和儲存系統中的一 個核心物件,也是記憶體管理子系統與I/O子 系統打交道的重要途徑。 控制區 CONTROL_AREA Segment File. Pointer SUBSECTION 子記憶體區段 …… 檔案物件 FILE_OBJECT Section. Object. Pointer 記憶體區段物件指標 SECTION_OBJECT_POINTERS Data. Section. Object Image. Section. Object 86

建立區段(SEGMENT)物件 (1/2) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map

建立區段(SEGMENT)物件 (1/2) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區 Mi. Create. Image. File. Map 資料檔案記憶體集區 Mi. Create. Data. File. Map 有對應的 檔案物件 88

建立記憶體區段物件 Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區

建立記憶體區段物件 Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區 Mi. Create. Image. File. Map 資料檔案記憶體集區 Mi. Create. Data. File. Map 90

分頁檔支撐的記憶體區段物件 (2/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi.

分頁檔支撐的記憶體區段物件 (2/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section 映像檔記憶體集區 Mi. Map. View. Of. Image. Section 資料檔案記憶體集區 Mi. Map. View. Of. Data. Section 實體記憶體區 Mi. Map. View. Of. Physical. Section 92

分頁檔支撐的記憶體區段物件 (3/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi.

分頁檔支撐的記憶體區段物件 (3/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section 映像檔記憶體集區 Mi. Map. View. Of. Image. Section 資料檔案記憶體集區 Mi. Map. View. Of. Data. Section 實體記憶體區 Mi. Map. View. Of. Physical. Section 93

可執行映像檔的記憶體區段物件 (1/5) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map

可執行映像檔的記憶體區段物件 (1/5) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區 Mi. Create. Image. File. Map 資料檔案記憶體集區 Mi. Create. Data. File. Map 95

可執行映像檔的記憶體區段物件 (3/5) � Mi. Insert. Image. Section. Object 記憶體區段 物件 Segment 區段 SEGMENT Control.

可執行映像檔的記憶體區段物件 (3/5) � Mi. Insert. Image. Section. Object 記憶體區段 物件 Segment 區段 SEGMENT Control. Area 記憶體區段物件指標 SECTION_OBJECT_POITERS Data. Section. Object Image. Section. Object 控制區 CONTROL_AREA Segment File. Pointer SUBSECTION 子記憶體區段 虛擬位址描述項 MMVAD Control. Area …… 檔案物件 FILE_OBJECT Section. Object. Poin ter 97

可執行映像檔的記憶體區段物件 (4/5) Nt. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section

可執行映像檔的記憶體區段物件 (4/5) Nt. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section 映像檔記憶體集區 Mi. Map. View. Of. Image. Section Mm. Map. View. Of. Section 資料檔案記憶體集區 Mi. Map. View. Of. Data. Section 實體記憶體區 Mi. Map. View. Of. Physical. Section 98

可執行映像檔的記憶體區段物件 (5/5) �Mi. Map. View. Of. Image. Section 確定目標虛 擬位址 建立VAD節 點物件 把VAD物件 插入到行程

可執行映像檔的記憶體區段物件 (5/5) �Mi. Map. View. Of. Image. Section 確定目標虛 擬位址 建立VAD節 點物件 把VAD物件 插入到行程 的VAD樹中 由參數Captured. Base指定 由記憶體區段物件的 Based. Address成員決定 呼叫Mi. Find. Empty. Address. Range. Down 或Mi. Fine. Empty. Address. Range 99

資料檔案的記憶體區段物件 (1/4) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map

資料檔案的記憶體區段物件 (1/4) Nt. Create. Section Mm. Create. Section 分頁檔支撐的記憶體集區 Mi. Create. Paging. File. Map 映像檔記憶體集區 Mi. Create. Image. File. Map 資料檔案記憶體集區 Mi. Create. Data. File. Map 100

資料檔案的記憶體區段物件 (3/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi.

資料檔案的記憶體區段物件 (3/4) Nt. Map. View. Of. Section Mm. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section 映像檔記憶體集區 Mi. Map. View. Of. Image. Section 資料檔案記憶體集區 Mi. Map. View. Of. Data. Section 實體記憶體區 Mi. Map. View. Of. Physical. Section 102

資料檔案的記憶體區段物件 (4/4) �Mi. Map. View. Of. Data. Section 確定目標虛 擬位址 建立VAD節 點物件 把VAD物件 插入到行程

資料檔案的記憶體區段物件 (4/4) �Mi. Map. View. Of. Data. Section 確定目標虛 擬位址 建立VAD節 點物件 把VAD物件 插入到行程 的VAD樹中 由參數Captured. Base指定 由記憶體區段物件的 Based. Address成員決定 呼叫Mi. Find. Empty. Address. Range. Down或 Mi. Fine. Empty. Address. Range 103

特殊記憶體區段物件 (2/4) l \Device\Physical. Memory Nt. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View.

特殊記憶體區段物件 (2/4) l \Device\Physical. Memory Nt. Map. View. Of. Section 分頁檔支撐的記憶體集區 Mi. Map. View. Of. Data. Section 映像檔記憶體集區 Mi. Map. View. Of. Image. Section Mm. Map. View. Of. Section 資料檔案記憶體集區 Mi. Map. View. Of. Data. Section 實體記憶體區 Mi. Map. View. Of. Physical. Section 105

4. 4 記憶體分頁 100522007 楊睿豪 100522086 陸俊廷 108

4. 4 記憶體分頁 100522007 楊睿豪 100522086 陸俊廷 108

硬體 PTE 定義 � Basentosmmi 386mi 386. h 113

硬體 PTE 定義 � Basentosmmi 386mi 386. h 113

無效PTE Invalid PTE �在Windows中,無效的PTE共有四種情況 1. 2. 3. 4. In Page File (位於分頁檔中) Demand Zero

無效PTE Invalid PTE �在Windows中,無效的PTE共有四種情況 1. 2. 3. 4. In Page File (位於分頁檔中) Demand Zero Page (要求零頁面) Page Transition (頁面正在轉移) Unknown (未知) 118

無效PTE Case 1: In Page File (位於分頁檔) 31 12 11 10 9 Page File

無效PTE Case 1: In Page File (位於分頁檔) 31 12 11 10 9 Page File Offset 0 Transition Bit Page File 0 5 4 Protection Prototype Bit 1 0 Page File Number 0 Valid Bit 所要求的Page位於Page File當中。 這會引發載入Page File的動作 119

無效PTE Case 2: Demand Zero Page File Offset 31 12 11 10 9 0

無效PTE Case 2: Demand Zero Page File Offset 31 12 11 10 9 0 0 Transition Bit 零頁面 0 5 4 Protection Prototype Bit 1 0 0 0 Valid Bit 頁面尚未分配,待下次存取時請 求一個zero page. 120

無效PTE Case 3: Page Transition 31 12 11 10 9 Page Frame Number 1

無效PTE Case 3: Page Transition 31 12 11 10 9 Page Frame Number 1 0 Transition Bit page (轉移 中) 5 4 3 2 Protection Cd Wt Prototype Bit 1 0 U/S W 0 Valid Bit 頁面還在記憶體中,但在換出的過程中, 位於系統的某個實體頁面串列中。 121

無效PTE Case 4: Unknown 為一個全零的PTE 31 12 11 10 9 0 0 Transition Bit

無效PTE Case 4: Unknown 為一個全零的PTE 31 12 11 10 9 0 0 Transition Bit 0 5 4 0 Prototype Bit 必須檢� VAD 1 0 0 0 Valid Bit PTE是 0或是Page Table還不存在。這兩 種情況都代表需要去檢� VADs來判斷虛 擬位址是否已經committed。如果是的話, 就建立Page Table來代表所committed的 位址空間。 122

原型PTE �如果Page可以在兩個Processes之間共享 的話,Memory Manager會使用名為 Prototype Page Table Entries (PTEs)的 結構來映射這些可能被共享的Pages。 125

原型PTE �如果Page可以在兩個Processes之間共享 的話,Memory Manager會使用名為 Prototype Page Table Entries (PTEs)的 結構來映射這些可能被共享的Pages。 125

原型PTE: Shared Page memory manager會 使 用 Prototype PTE 的結構來映射這些可 能會被共享的pages 若Page可共享 Shared Pages

原型PTE: Shared Page memory manager會 使 用 Prototype PTE 的結構來映射這些可 能會被共享的pages 若Page可共享 Shared Pages process first process page table PTE 原型PTE process page (映射到 section object view) memory manager 當process首次取用一個映射到 section object view的page時 , memory manager會使用原型 PTE的資訊填寫真正用來轉譯位 址的PTE 原型PTE Info memory manager 127

原型PTE: Shared Page失效 page (共享) 生效 失效 process page table PTE 實體page (有資料) 特殊PTE

原型PTE: Shared Page失效 page (共享) 生效 失效 process page table PTE 實體page (有資料) 特殊PTE 原型PTE 128

原型PTE 當Shared Pages失效時,硬體PTE直接 指向原型PTE。 31 11 10 Prototype PTE Address (7 -27 Bits) 9

原型PTE 當Shared Pages失效時,硬體PTE直接 指向原型PTE。 31 11 10 Prototype PTE Address (7 -27 Bits) 9 8 7 1 0 Prototype PTE (0 -6 Bits) Prototype Bit 0 Valid Bit 指向原型 PTE的無效PTE 130

原型PTE CASE 2 : Page File 31 12 11 10 9 Page File Offset

原型PTE CASE 2 : Page File 31 12 11 10 9 Page File Offset 0 Transition Bit 0 5 4 Protection 1 0 Page File Number Prototype Bit 0 Valid Bit Page位於Page File內 133

原型PTE CASE 3: Mapped File 31 12 11 10 9 Mapping File Offset 0

原型PTE CASE 3: Mapped File 31 12 11 10 9 Mapping File Offset 0 Transition Bit 0 5 4 Protection 1 0 Page File Number Prototype Bit 0 Valid Bit 第 13~21位元為Mapping file中的偏移量 Page位於映射檔內 134

原型PTE CASE 4: Demand Zero 31 12 11 10 9 0 0 Transition Bit

原型PTE CASE 4: Demand Zero 31 12 11 10 9 0 0 Transition Bit 0 5 4 Protection Prototype Bit 1 0 0 0 Valid Bit 頁面尚未分配, 待下次存取時請求一個zero page 135

原型PTE CASE 5: Transition 31 12 11 10 9 Page Frame Number 1 Transition

原型PTE CASE 5: Transition 31 12 11 10 9 Page Frame Number 1 Transition Bit 5 4 0 Protection Prototype Bit 3 2 Cd Wt 1 0 U/S W 0 Valid Bit 頁面在memory中, 已被轉移到某實體頁面串列中,可透過 查詢PFN獲知確切狀況。 136

原型PTE CASE 6: Modified No-Write 31 12 11 10 9 Page Frame Number 1

原型PTE CASE 6: Modified No-Write 31 12 11 10 9 Page Frame Number 1 Transition Bit 0 5 4 Protection Prototype Bit 3 2 Cd Wt 1 0 U/S W 0 Valid Bit 頁面在實體記憶體中,已被修改過,但修改頁面寫出器不會 將其寫回磁碟中。 137

原型PTE C union - MMPTE 定義 138

原型PTE C union - MMPTE 定義 138

Reference 什麼是超空間 http: //support. microsoft. com/kb/294418/zh-tw 1) 2) Virtual. Free http: //msdn. microsoft. com/enus/library/windows/desktop/aa

Reference 什麼是超空間 http: //support. microsoft. com/kb/294418/zh-tw 1) 2) Virtual. Free http: //msdn. microsoft. com/enus/library/windows/desktop/aa 366892(v=vs. 85). aspx 3) Virtual. Free. Ex http: //msdn. microsoft. com/enus/library/windows/desktop/aa 366894(v=vs. 85). aspx 4) Virtual. Alloc function http: //msdn. microsoft. com/enus/library/windows/desktop/aa 366887(v=vs. 85). aspx 5) 作者:Mark E. Russinovich and David A. Solomon with Alex lonescu 譯者:鄧瑋敦, “深入Windows核心:Windows Internals(第五版)” 出版社:博碩 140

Q&A 141

Q&A 141

Q: WINDOWS在PROCESS ADDRESS SPACE MANAGEMENT當中,是用 VAD來管理的。那我們要如何在VAD 樹當中尋找連續的ADDRESS SPACE? 142

Q: WINDOWS在PROCESS ADDRESS SPACE MANAGEMENT當中,是用 VAD來管理的。那我們要如何在VAD 樹當中尋找連續的ADDRESS SPACE? 142

The End Thank you for your listening! 144

The End Thank you for your listening! 144