引言
嵌入式linux開發 (三十五) 內存管理3.0(1) linux內存管理之用戶空間 相當於 Linux內存管理的引言
上面這篇文章介紹了 linux OS 提供給 應用程序的 (虛擬)地址空間
應用程序的地址空間分6段(其實還可以更多),分別是 code段 ro-data段 data段 bss段 堆 棧
當然這是目前的 linux 現狀,那麼爲什麼linux會發展成這個樣子,這當然是程序員對程序的要求決定的,
爲了滿足這些要求,提出了 進程地址空間抽象(1) , 其中 硬件上增加了新的模塊MMU(2), 軟件上根據MMU的使用手冊(3)更新了系統
另外在 進程地址空間抽象 的基礎上, 軟件上更新了很多新的內存特性(4).
進程地址空間抽象 的由來
// CPU訪問的地址爲什麼是虛擬地址 ? 而 爲什麼需要MMU?
1950年代的現狀
現狀1.0:
1950年代 , 單道處理系統 , 總是加載 用戶程序到同一個地址內存管理簡單
不需要地址保護
問題1.0:
無法運行比實際物理內存大的程序
只有一個進程,造成資源浪費
進程無法遷移到其他計算機上運行
給出解決方案,升級到現狀2.0
現狀2.0:
多道處理系統
爲了處理多個進程的問題,出現了兩種技術
固定分區 動態分區
問題2.0:
進程保護和安全(惡意程序可以修改其他進程數據)
內存使用效率低 // 經常需要換出,而有很多IO
程序地址重定位問題
給出解決方案(進程地址空間抽象),升級到現狀3.0 // 需要硬件幫助解決這些問題
處理器引入的新思路
地址空間抽象:
程序代碼
棧
堆
將三者的共同體 抽象爲一個地址空間
對進程來講,不需要關心三者具體在哪裏,只管分配使用虛擬地址
處理器來對代碼請求的虛擬地址轉換爲物理地址
進程地址空間抽象,讓內存虛擬化得到了實現
三大抽象
進程地址空間抽象 // 進程是對處理器 主存 和IO設備的抽象表示
進程對CPU虛擬化 // 虛擬內存是對主存和磁盤IO設備的抽象表示
文件對存儲地址空間的抽象 // 文件時對IO設備的抽象表示
進程地址空間抽象 是 組成操作系統的最重要的三個元素之一
處理器引入的新思路(進程地址空間抽象) 對 問題2.0 的解決
隔離性和安全性
進程可以隨意訪問內存空間,且訪問的是虛擬內存
無法訪問到另一個進程的物理內存
效率:
分頁解決了
重定位:
進程換入換出訪問的地址是固定的虛擬地址(鏈接地址)
進程地址空間抽象 的發展
1.分段
進程地址空間分爲幾個邏輯段(代碼段,數據段,堆,棧),分別放在不同的物理內存區域裏面
問題:粒度比較粗糙,導致外部碎片化
2.分頁 (分段的改進)
按照固定大小的單元(1幀)來分配內存
現狀3.0 // LTS
使能分頁機制的處理器裏面,cpu能尋址的地址空間叫做虛擬地址空間,地址先發送給MMU,MMU根據分頁轉換爲物理地址
不使能分頁機制的處理器裏面,cpu直接尋址物理地址,把物理地址直接發送到內存控制器裏面
對物理內存和虛擬內存的管理都是按照頁幀(4K-1G)爲單位來管理的
程序可以任意分配虛擬內存,當要訪問或者修改該虛擬地址的時候,操作系統纔會爲他分配物理內存.
進程地址空間抽象 引入的 虛擬地址 的好處
允許管理軟件(例如,操作系統(OS))控制提供給軟件的內存視圖
它可用於將內存分配給具有潛在衝突地址映射的不同進程// 虛擬地址相同,物理地址不同
操作系統可以控制可見的內存,可見的虛擬地址以及允許對該內存進行的訪問
允許操作系統對應用程序進行沙箱處理(將一個應用程序的資源與另一應用程序隱藏在一起)並提供來自底層硬件的抽象。
操作系統可以將內存的多個碎片物理區域作爲單個連續的虛擬地址空間呈現給應用程序 // 虛擬地址連續,物理地址不連續
軟件開發人員在編寫應用程序時不會知道系統的確切內存地址。
使用虛擬地址,軟件開發人員無需擔心物理內存。
應用程序知道由OS和硬件共同協作來執行地址轉換。
每個應用程序都可以使用自己的一組虛擬地址,這些地址將映射到物理系統中的不同位置。
當操作系統在不同的應用程序之間切換時,它將對地圖進行重新編程。這意味着當前應用程序的虛擬地址將映射到內存中的正確物理位置。
計算機中的其他抽象
抽象
不同編程語言提供不同形式和等級的抽象
指令集架構提供了對實際處理器硬件的抽象
文件是對IO的抽象
虛擬存儲器是對程序存儲器的抽象
進程是對一個正在運行的程序的抽象
虛擬機提供對整個個計算機(包括操作系統,處理器和程序的)的抽象
內存管理armv6硬件相關內容
Memory and System Architectures
存儲順序模型
讀寫定義
內存屬性
內存訪問的順序要求
內存屏障
存儲一致性
系統控制協處理器
VMSA
內存訪問順序
內存訪問控制
內存訪問屬性
內存訪問異常
異常地址和狀態寄存器
table walk
CP15寄存器
CACHE 和 Write Buffers
cache 組織
cache 類型
L1 cache
CP15寄存器
TCM
fast context switch extension