win10非分頁緩衝區佔用好多內存怎麼解決?

求打求打啦啦啦啦


看了一下,底下的答覆都是錯誤的。

首先搞清楚一個問題,什麼是非分頁內存。

Intel從80386芯片開始,支持保護模式,在保護模式下,可以尋址32位內存地址,共計4GB大小。那個年代物理內存其實是沒有那麼大的,為了以示區別,把前者稱為虛擬地址。為了在兩者之間進行映射轉換,操作系統和CPU一起配合,通過VMM(虛擬內存管理器)來實現。VMM將虛擬內存地址按照一頁一頁分組、將物理內存也按照一頁一頁進行分組,來進行兩者映射。

當虛擬地址的內容尚未加載到對應物理內存中、但該虛擬地址又被訪問時,VMM就需要根據既定的算法,將某個已被佔用的物理地址所在頁面內容先存到外存(如硬盤)上(硬盤上這個臨時用來存放內容的地方叫作"頁交換文件"),騰出空間來加載被訪問的虛擬內存所在的頁面內容。這個騰出放入的過程,整個過程被稱為"分頁交換"。

分頁交換實際是通過中斷機制來完成的。所以這裡暗含了一個問題,如果當前將要被騰出的內容(比方說代碼)本身又不能被中斷(比方說執行這個騰出放入的代碼本身),那麼就會發生死鎖。

為了解決上面這個矛盾,設計出了非分頁內存的概念。簡單來說,就是強制標識某些虛擬內存對應的物理頁面是不能被交換到外存上的,這樣就可以避免上述死鎖問題。

根據上面的講解,你應該不難看出:在物理內存一定的前提下,你指示系統分配的非分頁內存越多,那麼剩下來可作分頁內存的量就越少,這樣能利用虛擬內存的優勢就越弱。如果有大量需要進行騰出放入的頁面需求,而能用來做分頁交換的物理頁面又比較少時,整個系統就會變現出反應很慢的現象——大家都排著長隊等交換嘛!

那麼怎麼可以減少非分頁內存的需求量呢?答案就在於少開一些不能被中斷的關鍵服務,掌握平衡的藝術。


分享到:


相關文章: