總結 作業系統記憶體管理

2021-10-07 19:54:28 字數 2146 閱讀 5170

本文件為面試精華版,如果是初學者,建議從專欄學習:作業系統專欄

4. 分頁機制和分段機制有哪些共同點和區別呢?

5. 解釋一下邏輯(虛擬)位址和實體地址

6. cpu定址了解嗎?為什麼需要虛擬位址空間?

作業系統的記憶體管理主要負責記憶體的分配與**(malloc 函式:申請記憶體, free 函式:釋放記憶體),另外位址轉換也就是將邏輯位址轉換成相應的實體地址等功能也是作業系統記憶體管理做的事情。

**簡單分為連續分配管理⽅式和⾮連續分配管理⽅式這兩種。**連續分配管理⽅式是指為⼀個⽤戶程式分配⼀個連續的記憶體空間,常⻅的如塊式管理 。同樣地,⾮連續分配管理⽅式允許⼀個程式使⽤的記憶體分布在離散或者說不相鄰的記憶體中,常⻅的如⻚式管理 和 段式管理:

塊式管理: 遠古時代的計算機操系統的記憶體管理⽅式。將記憶體分為⼏個固定⼤⼩的塊,每個塊中只包含⼀個程序。如果程式運⾏需要記憶體的話,作業系統就分配給它⼀塊,如果程式運⾏只需要很⼩的空間話,分配的這塊記憶體很⼤⼀部分⼏乎被浪費了。這些在每個塊中未被利⽤的空間,我們稱之為碎⽚。

頁式管理:把主存分為⼤⼩相等且固定的⼀⻚⼀⻚的形式,⻚較⼩,相對相⽐於塊式管理的劃分⼒度更⼤,提⾼了記憶體利⽤率,減少了碎⽚。⻚式管理通過⻚表對應邏輯位址和實體地址。

段式管理: ⻚式管理雖然提⾼了記憶體利⽤率,但是⻚式管理其中的⻚實際並⽆任何實際意義。段式管理把主存分為⼀段段的,每⼀段的空間⼜要⽐⼀⻚的空間⼩很多 。但是,最重要的是段是有實際意義的,每個段定義了⼀組邏輯資訊,例如,有主程式段 main、⼦程式段 x、資料段 d及棧段 s 等。 段式管理通過段表對應邏輯位址和實體地址。

最後還有乙個很重要的段頁式管理:段⻚式管理機制結合了段式管理和⻚式管理的優點。簡單來說段⻚式管理機制就是把主存先分成若⼲段,每個段⼜分成若⼲⻚,也就是說 段⻚式管理機制 中段與段之間以及段的內部的都是離散的。

**為了解決虛擬位址到實體地址的轉換速度,作業系統在頁表方案基礎之上引入了快表來加速虛擬位址到實體地址的轉換。**我們可以把快表理解為一種特殊的高速緩衝儲存器(cache) ,其中的內容是頁表的一部分或者全部內容。作為頁表的cache, 它的作用與頁表相似,但是提高了訪問速率。由於採用頁表做位址轉換,讀寫記憶體資料時cpu要訪問兩次主存。有了快表,有時只要訪問一次高速緩衝儲存器,一次主存,這樣可加速查詢並提高指令執行速度。

使用快表之後的位址轉換流程是這樣的:

根據虛擬位址中的頁號查快表;

如果該頁在快表中,直接從快表中讀取相應的實體地址;

如果該頁不在快表中,就訪問記憶體中的頁表,再從頁表中得到實體地址,同時將頁表中的該對映表項新增到快表中;

當快表填滿後, 又要登記新頁時,就按照一-定的淘汰策略淘汰掉快表中的乙個頁。

看完了之後你會發現快表和我們平時經常在我們開發的系統使用的快取(比如redis) 很像,的確是這樣的,作業系統中的很多思想、很多經典的演算法,你都可以在我們日常開發使用的各種工具或者框架中找到它們的影子。

引入多級頁表的主要目的是為了避免把全部頁表一直放在記憶體中占用過多空間,特別是那些根本就不需

要的頁表就不需要保留在記憶體中,多級頁表屬於時間換空間的典型場景。

為了提高記憶體的空間效能,提出了多級頁表的概念;但是提到空間效能是以浪費時間效能為基礎的,因

此為了補充損失的時間效能,提出了快表(即tlb) 的概念。不論是快表還是多級頁表實際上都利用到了程式的區域性性原理。

共同點:

區別:

我們程式設計一般只有 可能和邏輯位址打交道, 比如在c語言中, 指標裡面儲存的數值就可以理解成為記憶體裡的乙個位址,這個位址也就是我們說的邏輯位址,邏輯位址由作業系統決定。實體地址指的是真實物理記憶體中位址,更具體一點來說就是記憶體位址暫存器中的位址。實體地址是記憶體單元真正的位址。

現代處理器使用的是- -種稱為虛擬定址(virtual addressing) 的定址方式。使用虛擬定址,cpu 需要

將虛擬位址翻譯成實體地址,這樣才能訪問到真實的物理記憶體。實際 上完成虛擬位址轉換為實體地址

轉換的硬體是cpu中含有乙個被稱為記憶體管理單元(memory management unit, mmu) 的硬體。

為什麼要有虛擬位址空間呢?

作業系統記憶體管理總結

頁面淘汰策略 1 最佳演算法 opt演算法 淘汰以後不再需要或最遠的將來才會用到的頁面 實踐中該演算法無法實現 2 先進先出淘汰演算法 fifo 淘汰在記憶體中停留時間最長的頁面。3 最久未使用淘汰演算法 lru 淘汰最長時間未被使用的頁面。4 最不經常使用演算法 lfu 選擇到當前時間為止被訪問次...

作業系統總結(八)記憶體管理

為了使程式可以在記憶體正確執行需要對其出現的位址進行修改 重定位 重定位有三次機會,包括編譯連線時進行 只能放到固定的位置 在載入記憶體中進行 一旦載入記憶體 無法移動 以及在程式執行過程中進行。其中最後一種是最合適的重定位機會。這樣對後續的記憶體管理有極大的好處。引入交換 swap 的概念,能夠讓...

作業系統記憶體管理

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