2012-01-03 59 views
3

虛擬內存I:問​​題[LWN.net] http://lwn.net/Articles/75174/3G/1G虛擬分區的優勢是什麼? 32位Linux內核

特別

,硬件的地址翻譯緩衝器可以在內核和用戶空間之間共享。

我完全對此感到困惑。爲什麼他們可以在VM分裂時共享TLB?我知道在某些CPU中有頁全局位

指示TLB條目對於不同的進程是共同的,不需要刷新。

TLB和vm split 3G/1G之間的關係是什麼?請詳細評論。提前致謝。

更新:爲什麼不使用頁全局位來指示TLB條目被操作系統(內核空間)使用?如果是這樣,爲什麼仍然需要拆分VM空間?例如:TLB中的兩個條目(虛擬線程地址相同),但其中一個全局位已設置。 ?在上下文切換時,只需刷新全局位未設置的條目即可。這可能嗎?

Update2:我檢查了intel-ia-32體系結構軟件開發人員手冊,發現在TLB條目中沒有全局位(存在於PDE和PTE中)。但是當上下文切換時,CPU如何確定TLB條目是全局位還是未設置?

回答

4

TLB還包含一個超級用戶標誌,用於指示映射是否可以被常規進程使用,或者只有當進程在超級用戶標誌集合下運行時纔可用 - 即當進程在內核環境中執行時。

這個超級用戶標誌允許TLB對這兩個進程都有用(它不會自動獲得內核千兆字節數據的特權)允許內核在執行時完全訪問所有進程的內存在內核模式下。

這意味着進程可以進入和退出內核模式而不會導致TLB沖刷懲罰。

如果內存未被拆分(比如說,4:4補丁給用戶空間提供4千兆字節,內核空間使用4千兆字節),則必須在每個內核輸入/輸出上刷新TLB以映射特權空間或用戶空間所有正在拷入和拷出內核的數據必須經歷繁瑣的重新映射機制。

+0

@sarnod幾乎可以理解,但仍有一些困惑。請參閱更新。謝謝 – louxiu 2012-01-04 04:47:55

2

地址空間被拆分爲用戶空間和內核空間。內核地址空間總是相同的,並使用該文章討論的全局標誌。它非常需要它。

在另一方面,其他3GB被保留以用戶進程:這些具有不同的地址空間每個進程(注:每個進程,線程並經由clone(CLONE_VM)共享相同的地址空間)。這意味着,當進程上下文切換髮生時,MMU只需要替換與用戶地址空間有關的TLB條目,而不是內核的TLB條目。

+0

這取決於你的意思是'上',但從0開始計算,較低的3GB是虛擬用戶空間。我認爲這就是你的意思。 – gnometorule 2012-01-03 13:27:30

+0

是的,對不起,腦屁 – fge 2012-01-03 13:31:19

+0

@gnometorule幾乎可以理解但仍有一些困惑。請參閱更新。謝謝 – louxiu 2012-01-04 04:47:14