2013-12-18 54 views
1

我瞭解到,在虛擬內存上,頁面錯誤造成的代價是很昂貴的。我們如何減少這個頁面錯誤?我看到一個說法,即較小的頁面尺寸可以減少頁面錯誤。爲什麼這是真的?我們如何減少頁面錯誤

回答

2

要考慮爲什麼較小的頁面大小可能會降低故障率,請考慮另一方面的極端示例。假設您擁有2GB的物理內存和1GB大小的頁面。只要你分配了2GB以上的虛擬內存,你將至少有3頁,其中只有2頁可以放入內存。三分之一以上的內存訪問會導致頁面錯誤。

擁有更小的頁面大小意味着您擁有更多的粒度,允許OS執行更有針對性的交換。

當然(不是總是那樣),有折衷。首先,較小的頁面大小意味着更多的頁面,這意味着更多的管理頁面的開銷。

減少頁面錯誤的一種方法是使用內存分配器,該內存分配器在分配可能在相同頁面上同時使用的內存方面很聰明。

例如,在應用程序級別,存儲桶分配程序(example)允許應用程序請求應用程序將從中分配的一塊內存。應用程序可以在程序執行的特定階段使用存儲桶,然後將存儲桶作爲一個單元釋放。這有助於最大限度地減少可能導致程序的活動部分和非活動部分接收來自同一物理頁面的內存分配的內存碎片。

+0

謝謝你的回答..我明白你的意思了!但除了較小的頁面大小,還有其他方式可以減少頁面錯誤嗎? – eChung00

+0

增加了一些想法。 –

+0

使用*更大的*頁面的* *簡單* OS(至少在較低內存壓力下不預取頁面,至少在較低的內存壓力下)可以通過有效地預取頁面大小的一半時相鄰頁面的大小來減少頁面錯誤的數量。頁面大小也影響TLB性能 - 較大的頁面爲給定數量的條目提供更多的TLB覆蓋範圍 - 因此,優化頁面大小並不明顯。 ISA也可能不支持頁面大小的多樣性,簡化了選擇,但防止了一些優化。 (通過分層頁面表,巨大的頁面可以跳過關卡,節省一個小頁面。) –