虛擬記憶體與頁面快取

2022-02-24 23:13:53 字數 1034 閱讀 9912

作業系統並不直接把記憶體傳給程序,而是現在核心中將記憶體抽象化。這就是虛擬記憶體的機制。這樣可以使程序無需考慮自己使用的記憶體位於什麼位置,可以認為必然從ox000位址開始,這樣處理就能更方便。

作業系統會一次性讀出磁碟上的內容,類似的虛擬記憶體機制給程序分配記憶體的時候也不是乙個位元組乙個位元組地訪問,而是分配好適當的大小(4kb左右)並傳遞給程序。這樣的乙個記憶體塊稱為「頁面」。程序要求分配記憶體時,作業系統就分配足夠的頁面(至少乙個)並將其傳遞給程序。程序是無法直接訪問磁碟的,只能訪問(虛擬)記憶體。

程序讀完資料後,雖然讀出的資料已經全部處理完,而不再需要這塊記憶體,但並不會馬上釋放掉,而是保留下來。這樣,下次其他程序想訪問同一塊磁碟的圖時,就可以直接使用留下來的頁面,而無需再次訪問磁碟。這就是頁面快取。也就是說,核心分配過的記憶體不會釋放,而是一直保留下來,這就是頁面快取的基本原理。

除了某些特殊情況(例外情況就是負責磁碟快取的部分,vfs),頁面快取都會透明的應用在所有的i/o上。因此一直執行的作業系統更快。

虛擬記憶體:

*具有讓程序更容易地訪問記憶體等好處

*作業系統在核心中將記憶體抽象化

*作業系統以頁面為單位分配物理記憶體並管理

頁面=虛擬記憶體的最小單位。因此不**件多大,通過鍵尋找相應頁面的資料結構也是優化過的。作業系統(=核心)內部使用了名為radix tree的資料結構,它經過精心設計,不**件有多大,快取的搜尋速度也不會降低。因此,不論是快取大檔案的一部分還是小檔案的一部分,都可以用相同的速度搜尋。

linux只要有空閒記憶體,就會全部用於快取。這一點沒有任何限制,只要有空閒記憶體,linux就會不斷地將其用於磁碟內容的快取。此外,當程序請求分配記憶體時,如果快取導致記憶體沒有空閒,就先刪除舊的快取,再為程序分配記憶體。

從上面可以得出結論:增加記憶體可以降低io負載。

sar工具是檢視cpu使用情況、平均負載記憶體占用的優秀工具

*************************************

以頁面快取為基礎的運維原則:

作業系統剛啟動時,不要將伺服器投入生產環境(沒有快取的積累)    

效能測試要在快取優化後進行。

虛擬記憶體和頁面檔案

什麼叫做虛擬記憶體呢?有很多朋友會從 虛擬磁碟 虛擬光碟機 等概念簡單推廣到記憶體方面,認為用做記憶體交換和擴充套件空間的 磁碟頁面檔案 就是 虛擬記憶體 因為不是記憶體晶元,卻要做記憶體的用途,所以是 虛擬 的記憶體。其實這種觀點是錯誤的!那麼到底什麼叫做虛擬記憶體呢?簡而言之,所謂虛擬記憶體就是...

linux記憶體與虛擬記憶體

linux支援虛擬記憶體 記憶體 記憶體條 物理記憶體 實際存在 程式中的記憶體 虛擬記憶體 os對映出來的 直接對映 檔案對映 提速 檔案io操作 耗時長 記憶體操作 耗時短 mmap函式可以把檔案對映成虛擬記憶體,像操作記憶體一樣去操作檔案。mmap函式可以直接對映一塊虛擬記憶體。include...

虛擬記憶體與物理記憶體

作業系統有虛擬記憶體與物理記憶體的概念。問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是真實存在的嗎?答 不是,是虛擬記憶體 問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是物理記憶體嗎?答 不是,如果每個程序都存在4gb的話,作業系統根本處理不過來 問題 虛擬記憶體...