作業系統 記憶體管理

2021-10-22 14:39:24 字數 2420 閱讀 1800

一、虛擬記憶體使用原因:

當程式需求的記憶體大小超過物理記憶體大小的時候,作業系統沒法完整的講程式載入進來。

許多年以前,當人們還在使用dos或是更古老的作業系統的時候,計算機的記憶體還非常小,一般都是以k為單位進行計算,相應的,當時的程式規模也不大,所以記憶體容量雖然小,但還是可以容納當時的程式。但隨著圖形介面的興起還有使用者需求的不斷增大,應用程式的規模也隨之膨脹起來,終於乙個難題出現在程式設計師的面前,那就是應用程式太大以至於記憶體容納不下該程式,通常解決的辦法是把程式分割成許多稱為覆蓋塊(overlay)的片段。覆蓋塊0首先執行,結束時他將呼叫另乙個覆蓋塊。雖然覆蓋塊的交換是由os完成的,但是必須先由程式設計師把程式先進行分割,這是乙個費時費力的工作,而且相當枯燥。人們必須找到更好的辦法從根本上解決這個問題。不久人們找到了乙個辦法,這就是虛擬儲存器(virtual memory).虛擬儲存器的基本思想是程式,資料,堆疊的總的大小可以超過物理儲存器的大小,作業系統把當前使用的部分保留在記憶體中,而把其他未被使用的部分儲存在磁碟上。比如對乙個16mb的程式和乙個記憶體只有4mb的機器,作業系統通過選擇,可以決定各個時刻將哪4m的內容保留在記憶體中,並在需要時在記憶體和磁碟間交換程式片段,這樣就可以把這個16m的程式執行在乙個只具有4m記憶體機器上了。而這個16m的程式在執行前不必由程式設計師進行分割。

二、實體地址、虛擬位址、邏輯位址實體地址:cpu位址匯流排傳來的位址。實體地址中很大一部分是留給記憶體條中的記憶體的,但也常被對映到其他儲存器上(如視訊記憶體、bios等)。在沒有使用虛擬儲存器的機器上,虛擬位址被直接送到記憶體匯流排上,使具有相同位址的物理儲存器被讀寫;而在使用了虛擬儲存器的情況下,虛擬位址不是被直接送到記憶體位址匯流排上,而是送到儲存器管理單元mmu,把虛擬位址對映為實體地址。

線性位址(虛擬位址):是邏輯位址到物理位址變換之間的中間層。在分段部件中邏輯位址是段中的偏移位址,然後加上基位址就是線性位址。(也就是說,邏輯位址是段內偏移量,虛擬位址是頁內偏移量。)是乙個32位無符號整數,可以用來表示高達4gb的位址,也就是,高達4294967296個記憶體單元。線性位址通常用十六進製制數字表示,值得範圍從0x00000000到0xfffffff)程式**會產生邏輯位址,通過邏輯位址變換就可以生成乙個線性位址。如果啟用了分頁機制,那麼線性位址可以再經過變換以產生乙個實體地址。如果沒有啟用分頁機制,那麼線性位址直接就是實體地址。

邏輯位址:是在有位址變換功能的計算機中,訪內指令給出的位址 (運算元) 叫邏輯位址,也叫相對位址,也就是是機器語言指令中,用來指定乙個運算元或是一條指令的位址。要經過定址方式的計算或變換才得到記憶體儲器中的實際有效位址即實體地址。乙個邏輯位址由兩部份組成,段識別符號: 段內偏移量。段識別符號是由乙個16位長的字段組成,稱為段選擇符。其中前13位是個索引號,後面3位包含一些硬體細節 。

三、分頁、分段、段頁機制

參考:1、

2、3、

3、記憶體使用率低下:記憶體碎片問題

分段解決前兩個問題,分頁解決最後乙個問題,而且可以使程序的物理空間可以不是連續的。

具體操作:

1、作業系統能夠定址的空間大小即為虛擬記憶體大小,物理儲存介質的儲存空間即為物理記憶體大小。物理記憶體一般是虛擬記憶體大小的子集。

2、虛擬記憶體分的塊叫頁、物理記憶體分的塊叫頁幀,他們的塊大小相同,因此就可以將頁與頁幀對映,這張對映表也叫頁表存在主存中,也就是物理記憶體中。

3、因為頁一般都比較小,windows為4k,所以得到的表項就非常多,所以使用了乙個叫做快表的快取記憶體器,存放著少量最近訪問的頁表專案。

4、因此整個定址過程為用其段式記憶體管理單元,先將為個邏輯位址轉換成乙個執行緒位址,再利用其頁式記憶體管理單元,轉換為最終實體地址

5、每個程序都有自己的位址空間,因此也都有自己的頁表。分配和管理記憶體的工作是作業系統中mmu(記憶體管理單元做的)。

頁表(page table)儲存著頁(程式位址空間)和頁框(物理記憶體空間)的對映表。

乙個虛擬位址分成兩個部分,一部分儲存頁面號,一部分儲存偏移量。

下圖的頁表存放著 16 個頁,這 16 個頁需要用 4 個位元位來進行索引定位。例如對於虛擬位址(0010 000000000100),前 4 位是儲存頁面號 2,讀取表項內容為(110 1),頁表項最後一位表示是否存在於記憶體中,1 表示存在。後 12 位儲存偏移量。這個頁對應的頁框的位址為 (110 000000000100)。

(根據前四位得到頁表的索引,取出對應的值,其中一位標誌是否加載入記憶體,其他幾位即頁幀,然後將頁幀與偏移量組合起來就是實體地址了)

作業系統記憶體管理

作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...

作業系統記憶體管理

作業系統記憶體管理一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於 32位程序來說,這個位址空間為 4g,因此程序中的位址可以為 0x00000000 至0xffffffff 之間的任何乙個值。其中 4g空間中的低區的 2g空間留給程序使用,而高區的 2g空間則留給系統使用。在win...

作業系統記憶體管理

記憶體,毫無疑問是最重要的資源,顯然,作業系統對記憶體的管理我必須清楚。這裡主要介紹了分頁管理和分段管理。1.頁式管理 a.頁式管理的基本思想 打破儲存分配的連續性 將邏輯上連續的使用者程式對映到離散的記憶體塊 使用者程式與記憶體空間被劃分為若干等長的區域 邏輯頁 與 物理頁 使用者程式的劃分由系統...