標準linux使用虛擬儲存器技術,這種技術用於提供比計算機系統中實際使用的物理記憶體大得多的記憶體空間。使用者將感覺到好像程式可以使用非常大的記憶體空間,從而使得程式設計人員在寫程式時不用考慮計算機中的物理記憶體的實際容量。
為了支援虛擬儲存管理器的管理,linux系統採用分頁(paging)的方式來載入程序。所謂分頁既是把實際的儲存器分割為相同大小的段,例如每個段1024個位元組,這樣1024個位元組大小的段便稱為乙個頁面(page)。
虛擬儲存器由儲存器管理機制及乙個大容量的快速硬碟儲存器支援。它的實現基於區域性性原理,當乙個程式在執行之前,沒有必要全部裝入記憶體,而是僅將那些當前要執行的那些部分頁面或段裝入記憶體執行(copy-on-write),其餘暫時留在硬碟上程式執行時如果它所要訪問的頁(段)已存在,則程式繼續執行,如果發現不存在的頁(段),作業系統將產生乙個頁錯誤(page fault),這個錯誤導致作業系統把需要執行的部分載入到記憶體中。必要時作業系統還可以把不需要的記憶體頁(段)交換到磁碟上。利用這樣的方式管理儲存器,便可把乙個程序所需要用到的儲存器以化整為零的方式,視需求分批載入,而核心程式則憑藉屬於每個頁面的頁碼來完成定址各個儲存器區段的工作。
標準linux是針對有記憶體管理單元的處理器設計的。在這種處理器上,虛擬位址被送到記憶體管理單元(mmu),把虛擬位址對映為實體地址。
通過賦予每個任務不同的虛擬–實體地址轉換對映,支援不同任務之間的保護。位址轉換函式在每乙個任務中定義,在乙個任務中的虛擬位址空間對映到物理記憶體的乙個部分,而另乙個任務的虛擬位址空間對映到物理儲存器中的另外區域。計算機的儲存管理單元(mmu)一般有一組暫存器來標識當前執行的程序的轉換表。在當前程序將cpu放棄給另乙個程序時(一次上下文切換),核心通過指向新程序位址轉換表的指標載入這些暫存器。mmu暫存器是有特權的,只能在核心態才能訪問。這就保證了乙個程序只能訪問自己使用者空間內的位址,而不會訪問和修改其它程序的空間。當可執行檔案被載入時,載入器根據預設的ld檔案,把程式載入到虛擬記憶體的乙個空間,因為這個原因實際上很多程式的虛擬位址空間是相同的,但是由於轉換函式不同,所以實際所處的記憶體區域也不同。而對於多程序管理當處理器進行程序切換並執行乙個新任務時,乙個重要部分就是為新任務切換任務轉換表。我們可以看到linux系統的記憶體管理至少實現了以下功能:
執行比記憶體還要大的程式。理想情況下應該可以執行任意大小的程式
◇可以執行只載入了部分的程式,縮短了程式啟動的時間
◇可以使多個程式同時駐留在記憶體中提高cpu的利用率
◇可以執行重定位程式。即程式可以方於記憶體中的任何一處,而且可以在執行過程中移動。
◇寫機器無關的**。程式不必事先約定機器的配置情況。
◇減輕程式設計師分配和管理記憶體資源的負擔。
◇可以進行共享–例如,如果兩個程序執行同乙個程式,它們應該可以共享程式**的同乙個副本。
◇提供記憶體保護,程序不能以非授權方式訪問或修改頁面,核心保護單個程序的資料和**以防止其它程序修改它們。否則,使用者程式可能會偶然(或惡意)的破壞核心或其它使用者程式。
虛存系統並不是沒有代價的。記憶體管理需要位址轉換表和其他一些資料結構,留給程式的記憶體減少了。位址轉換增加了每一條指令的執行時間,而對於有額外記憶體操作的指令會更嚴重。當程序訪問不在記憶體的頁面時,系統發生失效。系統處理該失效,並將頁面載入到記憶體中,這需要極耗時間的磁碟i/o操作。總之記憶體管理活動占用了相當一部分cpu時間(在較忙的系統中大約佔10%)。
虛擬儲存技術
一.實現記憶體擴充的技術 1 覆蓋技術 在程式執行中,在不同時刻把同乙個儲存區分配給不同程式段和資料段,實現儲存區共享。適用於連續儲存 單一連續區分配,分割槽 如圖bdg共享乙個儲存區 三個程序不同時發生 cefh同理 2 交換技術 對換技術 1.定義 將記憶體中某程序的的程式和資料 全部或部分 寫...
8 儲存模型2 虛擬儲存技術
8.1虛擬儲存技術 virtual memory 虛擬儲存技術 當程序執行時,先將其一部分裝入記憶體,另一部分暫留在磁碟,當要執行的指令或訪問的資料不在記憶體時,由作業系統自動完成將它們從磁碟調入記憶體的工作。虛存 把記憶體與磁碟有機地結合起來使用,從而得到乙個容量很大的記憶體,即虛存。虛存是對記憶...
頁式虛擬儲存管理 虛擬儲存技術的實現方式是什麼?
1 在伺服器端的虛擬儲存 伺服器廠商會在伺服器端實施虛擬儲存。同樣,軟體廠商也會在伺服器平台上實施虛擬儲存。這些虛擬儲存的實施都是通過伺服器端將映象對映到外圍儲存裝置上,除了分配資料外,對外圍儲存裝置沒有任何控制。伺服器端一般是通過邏輯卷管理來實現虛擬儲存技術。邏輯卷管理為從物理儲存對映到邏輯上的卷...