最近看了
linux的一些記憶體管理知識,發現一些既熟悉又陌生的幾個名詞,swap、虛擬記憶體、page分頁,都是與記憶體相關的一些資訊,但他們之間有什麼區別呢?要明白這個首先要知道什麼是保護模式和實模式。
以前的作業系統是實模式,例如dos。每個時候只有乙個程序在跑,這個程序使用全部的物理記憶體。
後來發展到保護模式,分時多程序。乙個cpu上跑多個程序, 但程序不知道到底有多少記憶體可以用,它能訪問記憶體最大位址。例如16位系統就能訪問2^16byte,32位就是2^32位。但是實際上沒有那麼多記憶體阿?怎麼辦?保護模式就應運而生了。
假設程序是乙個劉翔,裁判(系統)一發令他就開始跑步。但是裁判說給你1秒,可以跑100公尺。於是劉翔開始跑步(記憶體位址),一秒後劉翔只跑了10公尺,裁判吹哨說:劉翔你先歇會,我要去給王軍霞吹哨呢,現記住你跑到**了(保護),等會從這裡開始。裁判給王軍霞吹哨,乙隻跑一秒,回來再給劉翔吹哨再跑1 秒,如此往復。開始跑步的人少,劉翔還可以站在跑道上休息。後來跑步的人越來越多,跑道都擠滿了人,那麼只能把一些人移動到跑道旁的草地上休息(交換)。後來發現有些人橫七豎八的躺著,佔了不少空間,於是規定每個人只能站著(page),這樣可以容納很多的人。
swap -- 草地,就是存放page的硬碟空間。
virtual memory -- 假設劉翔跑n圈就已經是到北京的距離了,可是他們還在原地。虛擬就是不存在的。
page -- 草地上的格,每次只容納乙個人。
為了提高磁碟訪問效率, linux做了一些精心的設計, 除了對dentry進行快取(用於vfs,加速檔案路徑名到inode的轉換), 還採取了兩種主要cache方式:buffer cache和page cache.前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫.這些cache有效縮短了i/o系統呼叫(比如 read,write,getdents)的時間.
活動虛擬記憶體的總量(vm)=實際記憶體大小(size of real memory)(物理記憶體)+使用的交換空間大小(amount of swap space used)
當程式執行需要的記憶體大於物理記憶體時,linux系統採用了調頁機制,即系統copy一些記憶體中的頁面到磁碟上,騰出來空間供程序使用。
大多數系統可以忍受偶爾的調頁,但是頻繁的調頁會使系統效能急劇下降。
linux記憶體管理:linux系統通過2種方法進行記憶體管理,「調頁演算法」,「交換技術」。
調頁演算法是將記憶體中最近不常使用的頁面換到磁碟上,把常使用的頁面(活動頁面)保留在記憶體中供程序使用。
交換技術是系統將整個程序,而不是部分頁面,全部換到磁碟上。正常情況下,系統會發生一些交換過程。
當記憶體嚴重不足時,系統會頻繁使用調頁和交換,這增加了磁碟i/o的負載。進一步降低了系統對作業的執行速度,即系統i/o資源問題又會影響到記憶體資源的分配。
linux的虛擬記憶體
linux的虛擬記憶體是乙個十分複雜的子系統,它實現了程序間**與資料共享機制的透明性,並能夠分配比系統現有物理記憶體更多的記憶體,某些作業系統的虛存甚至能通過提供快取功能影響到檔案系統的效能,各種風格的linux的虛存的實現方式區別很大,但都離不開下面的4個概念。
1:實際記憶體
實際記憶體是指乙個系統中實際存在的物理記憶體,稱為ram。實際記憶體是儲存臨時資料最快最有效的方式,因此必須盡可能地分配給應用程式,現在的ram的形式有多種:simm、dimm、rambus、ddr等,很多ram都可以使用糾錯機制(ecc)。
2:交換空間
交換空間是專門用於臨時儲存記憶體的一塊磁碟空間,通常在頁面排程和交換程序資料時使用,通常推薦交換空間的大小應該是物理記憶體的二到四倍。
3:頁面排程
頁面排程是指從磁碟向記憶體傳輸資料,以及相反的過程,這個過程之所以被稱為頁面排程,是因為linux記憶體被平均劃分成大小相等的頁面;通常頁面大小為 4kb和8kb(在solaris中可以用pagesize命令檢視)。當可執行程式開始執行時,它的映象會一頁一頁地從磁碟中換入,與此類似,當某些內存在一段時間內空閒,就可以把它們換出到交換空間中,這樣就可以把空閒的ram交給其他需要它的程式使用。
4:交換
頁面排程通常容易和交換的概念混淆,頁面排程是指把乙個程序所佔記憶體的空閒部分傳輸到磁碟上,而交換是指當系統中實際的記憶體已不夠滿足新的分配需求時,把整個程序傳輸到磁碟上,交換活動通常意味著記憶體不足。
vmstat監視記憶體效能:該命令用來檢查虛擬記憶體的統計資訊,並可顯示有關程序狀態、空閒和交換空間、調頁、磁碟空間、cpu負載和交換,cache重新整理以及中斷等方面的資訊。
Linux中關於swap 虛擬記憶體和page的區別
最近看了linux 的一些記憶體管理知識,發現一些既熟悉又陌生的幾個名詞,swap 虛擬記憶體 page分頁,都是與記憶體相關的一些資訊,但他們之間有什麼區別呢?要明白這個首先要知道什麼是保護模式和實模式。以前的作業系統 是實模式,例如dos。每個時候只有乙個程序在跑,這個程序使用全部的物理記憶體。...
Linux中關於swap 虛擬記憶體和page的區別
最近看了linux的一些記憶體管理知識,發現一些既熟悉又陌生的幾個名詞,swap 虛擬記憶體 page分頁,都是與記憶體相關的一些資訊,但他們之間有什麼區別呢?要明白這個首先要知道什麼是保護模式和實模式。以前的作業系統是實模式,例如dos。每個時候只有乙個程序在跑,這個程序使用全部的物理記憶體。後來...
linux擴容swap虛擬記憶體
我linux機器的記憶體有點小,奈何上次只給swap分了2g的記憶體,今天突然感覺不夠用 那就擴容10g的swap虛擬記憶體吧 1.先關閉正在使用的2g的swap記憶體 swapoff var swap2.刪除swap虛擬記憶體檔案 rm var swap3.使用dd命令建立乙個檔案 dd if d...