Windows核心程式設計-筆記
1.每個程序都有自己專有的地址空間,當程序中的各執行緒執行時,他們只能訪問屬於該程序的記憶體,執行緒看不到且無法訪問其他程序的記憶體。地址空間只是一個記憶體地址區間,需要把物理儲存器分配或對映到相應的地址空間,才能夠正常讀寫資料。
2.程序地址空間的劃分及使用
空指標賦值區 00000000-0000FFFF 禁止訪問,幫助程式設計師捕獲空指標的賦值。
使用者模式分割槽 00010000-7FFEFFFF 程序大部分資料儲存之處,所有exe和dll都載入這一區域,每個程序都可能將dll載入到 分割槽的不同地址,系統同時會把該程序可以訪問的所有記憶體對映檔案對映到這一分割槽。
64KB禁入分割槽 7FFF0000-7FFFFFFF
核心模式分割槽 80000000-FFFFFFFF 作業系統程式碼的駐地。如執行緒排程,網路支援,裝置驅動等待。禁止讀寫。所有程序共 有。
3.地址空間的區域
分配區域的操作成為預訂。分配區域起始地址為分配粒度通常為64k的整數倍。分配大小為系統頁面大小的整數倍通常為4KB的整數倍。
4.給區域調撥committing物理儲存器
物理儲存器始終都以頁面為單位來調撥。不必給整個區域調撥,可以個任意的頁面調撥。即請求頁式交換演算法
5.虛擬記憶體:每個程序都擁有的獨佔的地址空間4G。
頁面交換檔案:系統執行頁面排程演算法時,將記憶體的資料塊備份到頁面交換檔案,在對這塊記憶體進行修改利用。
交換區:實體記憶體大小+頁面交換檔案大小.
6.記憶體對映檔案
硬碟檔案---分配地址空間---調撥實體記憶體
7.DLL注入:將DLL注入到程序的地址空間中。