https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554836
運行 Windows 的計算機中的處理器有兩個不同模式:“用戶模式”和“內核模式”。根據處理器上運行的代碼的類型,處理器在兩個模式之間切換。應用程序在用戶模式下運行,核心操作系統組件在內核模式下運行。多個驅動程序在內核模式下運行,但某些驅動程序在用戶模式下運行。
當啟動用戶模式的應用程序時,Windows 會為該應用程序創建“進程”。進程為應用程序提供專用的“虛擬地址空間”和專用的“句柄表格”。由於應用程序的虛擬地址空間為專用空間,一個應用程序無法更改屬於其他應用程序的數據。每個應用程序都孤立運行,如果一個應用程序損壞,則損壞會限制到該應用程序。其他應用程序和操作系統不會受該損壞的影響。
用戶模式應用程序的虛擬地址空間除了為專用空間以外,還會受到限制。在用戶模式下運行的處理器無法訪問為該操作系統保留的虛擬地址。限制用戶模式應用程序的虛擬地址空間可防止應用程序更改並且可能損壞關鍵的操作系統數據。
在內核模式下運行的所有代碼都共享單個虛擬地址空間。這表示內核模式驅動程序未從其他驅動程序和操作系統自身獨立開來。如果內核模式驅動程序意外寫入錯誤的虛擬地址,則屬於操作系統或其他驅動程序的數據可能會受到損壞。如果內核模式驅動程序損壞,則整個操作系統會損壞。
此圖說明了用戶模式組件與內核模式組件之間的通信。
其實讀到這里,我們會想,那么虛擬地址空間又是怎么分配的呢?請看下節。