什麼是虛存?為什麼需要它?
我們知道程式**和資料必須駐留在記憶體中才能得以執行,然而系統記憶體數量很有限,往往不能容納乙個完整程式的所有**和資料,更何況在多工系統中,可能需要同時開啟子處理程式,畫圖程式,瀏覽器等很多任務,想讓記憶體駐留所有這些程式顯然不太可能。因此首先能想到的就是將程式分割成小份,只讓當前系統執行它所有需要的那部分留在記憶體,其它部分都留在硬碟。當系統處理完當前任務片段後,再從外存中調入下乙個待執行的任務片段。的確,老式系統就是這樣處理大任務的,而且這個工作是由程式設計師自行完成。但是隨著程式語言越來越高階,程式設計師對系統體系的依賴程度降低了,很少有程式設計師能非常清楚的駕馭系統體系,因此放手讓程式設計師負責將程式片段化和按需調入輕則降低效率,重則使得機器崩潰;再乙個原因是隨著程式越來越豐富,程式的行為幾乎無法準確**,程式設計師自己都很難判斷下一步需要載入哪段程式。因此很難再靠預見性來靜態分配固定大小的記憶體,然後再機械地輪換程式片進入記憶體執行。系統必須採取一種能按需分配而不需要程式設計師干預的新技術。
虛擬記憶體(之所以稱為虛擬記憶體,是和系統中的邏輯記憶體和物理記憶體相對而言的,邏輯記憶體是站在程序角度看到的記憶體,因此是程式設計師關心的內容。而物理記憶體是站在處理器角度看到的記憶體,由作業系統負責管理。虛擬記憶體可以說是對映到這兩種不同視角記憶體的乙個技術手段。)技術就是一種由作業系統接管的按需動態記憶體分配的方法,它允許程式不知不覺中使用大於實際物理空間大小的儲存空間(其實是將程式需要的儲存空間以頁的形式分散儲存在物理記憶體和磁碟上),所以說虛擬記憶體徹底解放了程式設計師,從此程式設計師不用過分關心程式的大小和載入,可以自由編寫程式了,繁瑣的事情都交給作業系統去做吧。
實現虛擬記憶體
虛擬記憶體是將系統硬碟空間和系統實際記憶體聯合在一起供程序使用,給程序提供了乙個比記憶體大得多的虛擬空間。在程式執行時,只要把虛擬位址空間的一小部分對映到記憶體,其餘都儲存在硬碟上(也就是說程式虛擬空間就等於實際物理記憶體加部分硬碟空間)。當被訪問的虛擬位址不在記憶體時,則說明該位址未被對映到記憶體,而是被存貯在硬碟中,因此需要的虛擬儲存位址隨即被調入到記憶體;同時當系統記憶體緊張時,也可以把當前不用的虛擬儲存空間換出到硬碟,來騰出物理記憶體空間。系統如此周而復始地運轉——換入、換出,而使用者幾乎無法查覺,這都是拜虛擬記憶體機制所賜。
linux的swap分割槽就是硬碟專門為虛擬儲存空間預留的空間。經驗大小應該是記憶體的兩倍左右。有興趣的話可以使用 swapon -s 檢視交換分割槽大小。
Linux虛擬記憶體
linux採用虛擬段頁式儲存方式來管理記憶體,程式的基本邏輯儲存單元,也可以說是程式段。linux中有四個段,段,資料段,bss段,堆疊段。虛擬位址從低到高依次是 段,資料段,bss段,堆疊段。其中 段為程式本身 二進位制指令 資料段為 中初始化了的全域性變數和靜態變數,bss段為為初始化的全域性變...
Linux虛擬記憶體
一 虛擬記憶體 1 系統會為每個程序分4g的虛擬記憶體空間。32個0 32個1 位址範圍。2 使用者只能使用虛擬位址,無法直接使用物理記憶體。3 虛擬位址與物理記憶體進行對映才能使用,否則就會產生段錯誤。4 虛擬位址與物理記憶體的對映由作業系統動態維護。5 讓使用者使用虛擬位址一方面為了安全,另一方...
linux記憶體與虛擬記憶體
linux支援虛擬記憶體 記憶體 記憶體條 物理記憶體 實際存在 程式中的記憶體 虛擬記憶體 os對映出來的 直接對映 檔案對映 提速 檔案io操作 耗時長 記憶體操作 耗時短 mmap函式可以把檔案對映成虛擬記憶體,像操作記憶體一樣去操作檔案。mmap函式可以直接對映一塊虛擬記憶體。include...