作業系統(五)儲存模型
1.地址重定位(非常重要)也叫地址轉換、對映、翻譯
之前知道:程式裝載到記憶體才可以執行,通常,程式可執行檔案格式儲存在磁碟上;多道程式設計模型,允許多個程式同時激怒記憶體;每個程序有自己的地址空間,程序不能執行不合適的操作
要解決問題:
程序地址空間載入到實體記憶體,多個程序地址空間都要載入到實體記憶體
複習程序地址空間:核心地址空間+使用者地址空間(棧,堆,資料段,程式碼段,其他內容:共享庫,記憶體對映檔案)
討論:程序中的地址不是最終的實體地址,在程序執行前無法計算出實體地址(因為不確定程序被載入到記憶體什麼地方)需要地址重定位的支援
邏輯地址(相對地址,虛擬地址):
使用者程式經過編譯、彙編後形成目的碼,目的碼通常採用相對地址,首地址為0,其餘地址都相對於首地址而編
實體地址(絕對地址,實地址):
記憶體中儲存單元的地址,可直接定址
為了保證CPU執行指令時可正確訪問記憶體單元,需要將使用者程式中的邏輯地址轉換為執行時可由機器直接定址的實體地址,這一過程為地址重定位
2.
(1)靜態重定位:
當用戶程式載入到記憶體時,一次性實現邏輯地址到實體地址的轉換
一般由軟體完成
(2)動態重定位(常用)
在程序執行過程中進行地址變換,即逐條指令執行時完成地址轉換
需要硬體部件支援
3.空閒記憶體管理
資料結構:點陣圖;空閒區表、已分配區表;空閒塊連結串列
記憶體分配演算法:
(1)首次適配:在空閒區找到一個滿足程序要求的
(2)下次適配:從上次找到的空閒區接著查詢
(3)最佳適配:查詢整個空閒區表,找到能夠滿足程序要求的最小空閒區
(4)最差適配:總是分配滿足程序要求的最大空閒區
將該空間分為兩部分,一部分供程序使用,另一部分形成新的空閒區
4.回收問題:
記憶體的回收演算法:當一塊歸還後,前後空閒空間合併,修改記憶體空閒區表
5.夥伴系統(linux底層記憶體管理採用的一種特殊的“分離適配”演算法)
主要思想:將記憶體按著2的冪進行劃分,組成若干空閒塊連結串列;查詢該連結串列找到滿足程序需求的最佳匹配塊
演算法:首先將整個可用空間看做一塊 2u,假設程序申請的空間為s,如果2u-1<s<2u,則分配整個塊,否則繼續劃分一分為2
6.基本記憶體管理方案:
載入的單位:程序
單一連續區,固定分割槽,可變分割槽,頁式,段式,段頁式(嗯……又是我背過但不知所云的)
7.單一連續區:
特點:一段時間內只有一個程序在記憶體中。簡單,記憶體利用率低
8.固定分割槽
把記憶體空間分割成若干區域,成為分割槽
每個分割槽的大小可以相同也可以不同
分割槽大小固定不變
每個分割槽裝一個且只能裝一個程序
9.可變分割槽(早期手機儲存)
根據程序的需要,把記憶體空閒空間分割出一個分割槽,分配給該程序
剩餘部分成為新的空分割槽
缺點:剩的外碎片導致記憶體利用率下降
碎片問題的解決:
很小、不易利用的空閒區,導致記憶體利用率下降
方案:緊縮技術:
在記憶體移動程式,將所有小的空閒區合併為較大的空閒區
緊縮技術需要考慮:
系統開銷&移動時機
10.交換技術:
解決問題:記憶體不足如何管理:大的程序地址空間無法載入入小的記憶體中
方案:記憶體“擴充”技術
記憶體緊縮技術(例如 可變分割槽)
覆蓋技術
交換技術
虛擬儲存技術
11.覆蓋技術(主要用於早期作業系統)
解決問題:程式大小超過實體記憶體總和
程式執行過程中,程式的不同部分在記憶體中相互替代
按照其自身的邏輯結構,將那些不會同時執行的程式段共享同一塊區域:要求程式各模組之間有明確的呼叫結構
程式設計師宣告覆蓋結構,作業系統完成自動覆蓋
缺點:對使用者不透明 要求程式結構
12.交換技術:
記憶體空間緊張時,系統將記憶體中某些程序暫時移動到外存,把外存中某些程序換進記憶體,佔據前者所佔用的區域
執行時建立或者修改的內容:堆疊
交換區:一般系統會指定一塊特殊的磁碟區域作為交換空間,包含連續的磁軌,作業系統可以使用底層的磁碟讀寫操作對其高效訪問(windows叫做頁檔案)
何時交換:只要不用就換出(很少使用);記憶體空間不夠或不夠危險時換出 與排程器結合使用
考慮程序的各種屬性:不應該換出處於等待I/O狀態的程序
13.虛擬儲存技術:
當程序執行時,先將其一部分裝入記憶體,另一部分暫留在磁碟,當要執行的指令或者訪問的資料不在記憶體時,由作業系統自動完成將它們從磁碟調入記憶體的工作
虛擬地址空間:即為分配程序的虛擬記憶體
虛擬地址:在虛擬記憶體中指令或者資料的位置,該位置可以被訪問,彷彿他是記憶體的一部分
14.儲存器的層次結構:
暫存器;快取記憶體Cache L1;快取記憶體 CacheL2;快取記憶體 CacheL3;記憶體;磁碟
15.虛存與儲存體系:
程序的地址空間(虛存)->暫存器 Cache 記憶體 磁碟
把記憶體與磁碟有機結合起來使用,從而得到一個容量很大的“記憶體”,即虛存
虛存是對記憶體的抽象,構建在儲存體系之上,由作業系統協調各儲存器的使用
虛存提供了一個比實體記憶體空間大得多的地址空間
16.地址保護
請確保每個程序有獨立的地址空間
確保程序訪問合法的地址範圍(防止地址越界)
確保程序的操作是合法的(防止訪問越權)
17.虛擬頁式(PAGING)
虛擬儲存技術+頁式儲存管理方案->虛擬頁式儲存管理系統
基本思想:
程序開始執行之前,不是裝入全部頁面,而是裝入一個或零個頁面
之後,根據程序執行的需要,動態裝入其他頁面
當記憶體空間已滿,而又需要裝入新的頁面時,則根據某種演算法置換記憶體中的某個介面,以便裝入新的頁面
具體兩種方式:1.請求調頁 2.預先調頁
以CPU時間和磁碟空間換區昂貴的記憶體空間,這就是作業系統中的資源轉換技術
18.頁表表項設計:
頁表由頁表項組成
頁框號(記憶體塊號。物理頁面號、頁幀號)、有效位(駐留位、中斷位):表示該頁是在記憶體還是在磁碟、訪問位:引用位、修改位:此頁在記憶體中是否被修改過、保護位:讀/可讀寫
通常,頁表項是硬體設計的
19.頁表:
頁表頁在記憶體中若不連續存放,則需要引用頁表頁的地址索引表->頁目錄(多級頁表)
二級頁表最多4G虛擬記憶體
20.反轉(倒排)頁表
地址轉換:從虛擬地址空間出發:虛擬地址->查頁表->得到頁框號->形成實體地址
每個程序一張頁表
解決思路:
從實體地址空間出發,系統建立一張頁表
頁表項紀錄程序i的某個虛擬地址(虛頁號)與頁框對應
將虛擬地址的頁號部分對映到一個雜湊值
雜湊值指向一個反轉頁表
反轉頁表大小與實際記憶體成固定比例,與程序個數無關
21.記憶體管理單元MMU
將虛擬地址轉換成實體地址
22.快表(TLB)的引入:
問題:頁表兩次貨兩次以上的記憶體訪問,CPU的指令處理與記憶體指令的訪問速度差異大,CPU的速度得不到充分利用
如何加快地址對映速度,以改善系統性能
程式訪問的區域性性原理->引入快表(TLB)translation look-aside buffers
在CPU中引入的告訴快取,可以匹配CPU的處理速率和記憶體的訪問速度
一種隨機存取型儲存器,除連線定址機制外,還有接線邏輯,能按特定的匹配標誌在一個匹配標誌在一個儲存週期內對所有的字同時比較
相聯儲存器(associative memory)特點:按內容並行查詢
儲存正在雲星錦城的頁表的子集
快表的大小、位置(64項、128項 也可以分級;在CPU上)容量有限
23.頁錯誤:
又稱頁面錯誤、頁故障、頁面失效
地址轉換過程中硬體產生的異常
具體原因:
(1)所訪問的虛擬頁面沒有調入實體記憶體(缺頁記憶體)
(2)頁面訪問違反許可權(讀寫,使用者核心)
(3)錯誤的訪問地址 虛擬地址指向了沒有內容的地址
24.缺頁異常處理:
是一種頁錯誤
在地址對映過程中