2011-05-05 83 views
2

這篇文章http://msdn.microsoft.com/en-us/library/aa366912(v=vs.85).aspx指出,win32環境(32位假設)中的虛擬內存一半專用於用戶模式進程,一半用於內核模式進程。虛擬內存:進程'一個和系統的一個

如果我記得分頁,每個進程應該有自己的地址空間從0到任何(根據文章最大0x7FFFFFFF)。但是對於內核驅動程序來說呢?每個內核驅動程序/程序是否有從0x80000000到0xFFFFFFFF的內核地址空間?

或者我剛剛錯了?

+0

- >所以ring3進程有許多不同的虛擬空間(所有地址範圍相同),並且只有一個用於ring0的共享虛擬空間,對吧? – 2011-05-05 17:10:06

+0

爲什麼使用C++標籤? – davka 2011-05-05 17:15:54

+0

@davka,我不是程序員,但我想C/C++程序員應該知道這一點。 – 2011-05-05 17:49:14

回答

3

我相信你的印象是司機是獨立的過程;與單片和混合內核(NT被認爲是混合),他們不是。將驅動程序視爲內核在環0中加載到自身的模塊。實際上,它們成爲內核的一部分。

該地址空間的部分內容可能會在進程間發生變化,但大多數內核地址空間將在所有進程之間共享。

2

據我所知,只有一個內核。 :-)

雖然地址範圍似乎確定,除非系統配置爲3GB的用戶空間。

+0

..並在最終鏈接期間製作/ LARGEADDRESSAWARE節目。 – 2011-05-05 17:10:44

2

在Windows中,內核模式驅動程序駐留在內核中並共享內核的地址空間。