本文是操做系統系列
第三篇,介紹物理內存管理。操做系統對內存的管理是很是複雜的,和程序的執行、硬件、編譯器等密切相關。本文從物理內存入手,介紹內存管理的重要概念,也爲後續的虛擬內存管理內容作鋪墊。 原文連接,更多內容見公號機器學習與系統
,歡迎與我互動~
地址是用來標誌存儲資源位置的,在計算機中用一串二進制數據表示。html
一. 地址空間算法
地址空間就是指地址的範圍,從最小值到最大值:編程
下圖展現了物理地址空間,進程A、B的邏輯地址空間。緩存
二. 地址生成微信
物理地址是已經肯定的,邏輯地址的生成依賴於編譯器。架構
邏輯地址空間
內的地址(重定位)三. 地址解析機器學習
下圖是CPU和計算機的基本架構,咱們以此圖來講明物理/邏輯地址在CPU和計算機中如何被解析處理的。ide
控制邏輯把數據、操做請求和物理地址發送到總線,分爲讀請求和寫請求函數
在上面的過程當中,MMU負責邏輯地址和物理地址之間的轉換,操做系統負責創建邏輯地址和物理地址之間的映射關係。性能
內存碎片:內存上一些沒有被分配利用的區域
當程序被加載時,根據進程的實際須要動態分配內存空間,使分配的大小恰好與做業的大小相等。動態分區分配並不預先將內存劃分紅一塊塊分區,而是在程序進入內存時,根據程序的大小動態地創建分區,所以系統中分區的大小是可變的,分區的數目也是可變的。
有如下三種分配策略:
使用第一個可用空間比N大的內存塊
。如分配400 byte的內存塊,按照從上到下的查找順序,應該分配1K byte
內存區域。若是是從下往上查找,應該分配5K byte
的區域。查找並使用不小於N的最小空閒分區
。若是要分配2800 byte,應該分配3K byte
區域。使用尺寸不小於N的最大空閒分區
。若是分配800 byte,則選擇5K byte
區域。上述三種分區算法,在釋放分區時,都要檢查是否能和周圍的分區合併。
連續內存分配會出現內/外部碎片、動態修改比較困難、內存必須連續,並且內存利用率不高。所以提出了非連續內存分配的方法,容許程序使用非連續的內存空間、容許共享代碼和數據,以提升內存利用效率和管理的靈活性。
固然,這也帶來了挑戰:非連續內存分配中,如何有效實現和管理邏輯地址和物理地址間的映射。
下面介紹三種方式:
段(segment)指一類地址空間,一個段就是一個地址連續的內存塊,若干個段組成程序的邏輯地址空間。
每一個段由0到最大的線性地址序列構成。各個段的長度能夠是0到某個容許的最大值之間的一個數。不一樣的段的長度能夠不一樣(一般狀況下也都不同),段的長度在運行期間能夠動態改變,好比push數據時,堆棧段的長度會增長,pop時會減小。段也能夠被裝滿,可是一般狀況下段的長度很大,這種狀況不多發生。
段式存儲管理下的邏輯地址組成格式爲(s, o),s爲段號
,o爲段內偏移量
,段號和對應內存中的物理起始地址由段表
記錄。尋址時,先根據段號到段表中查到物理起始地址(基址),而後加上偏移量,獲得最終的物理地址。
頁式存儲管理有兩個相當重要的概念:
頁式存儲管理的尋址方式和段式管理相似,邏輯地址格式爲(p, o),表示頁中的地址,其中p表示頁號,o表示偏移量。物理地址格式爲(f, o),表示頁幀中的地址,其中f表示頁幀號,o表示偏移量,頁偏移量和頁幀偏移量是相等的。
頁和頁幀的對應關係使用頁表(Page Table)來管理。尋址時首先根據頁號找到頁表中對應的頁幀號,而後用獲得的頁幀號與偏移量組成實際的物理地址。
頁面和頁幀的大小相比分段要小得多,假設系統是32位,頁幀大小1024字節,這樣有2^32/2^10=2^22條頁表記錄,查詢頁表的時間要多不少。下面介紹兩個提升性能的方法:
分頁和分段系統有許多類似之處。二者都採用離散分配方式,且都要經過地址映射機構來實現地址變換。但在概念上二者徹底不一樣,主要表如今下述三個方面:
段式存儲和頁式存儲都是爲了更好管理內存,段式從程序的角度入手,頁式從物理底層的角度入手,在理解上,能夠結合二者的優缺點進行選擇:
分段 | 分頁 | |
---|---|---|
優勢 | 段長可動態修改,方便編程,分段共享,分段保護,動態連接,動態增加 | 非連續分配,減小內存碎片,提升內存利用效率 |
缺點 | 內部碎片,地址計算須要更多硬件支持 | 須要兩次內存訪問,頁表可能很大 |
段頁式存儲管理充分利用了段式存儲在內存保護方面有優點,頁式存儲在內存利用和優化轉移到後備存儲方面有優點。
在段式存儲管理基礎上,給每一個段加一級頁表。邏輯地址格式爲(s, p, o),s爲段號,p爲頁號,o爲頁內偏移。尋址時,現根據段號s查找段表中的頁表地址,而後到頁表中查找p對應的起始地址,最後加上偏移o獲得最終的物理地址。
程序在執行時,CPU看到的是邏輯地址,當CPU讀寫數據時,由MMU根據邏輯地址找到對應的物理地址,而後到總線上讀寫數據。經過這種管理機制,能夠更好地管理內存,在多道程序執行中作到隔離和共享。
文章持續更新,能夠微信搜索「 機器學習與系統 」閱讀最新內容,回覆【內推】【考研】獲取我準備的頭條內推以及考研信息