存儲器管理了 存儲器管理的主要模式 邏輯地址:又稱相對地址,即用戶編程所使用的地址空間,邏輯地址從0開始編號,有兩種形式:一維邏輯地址(地址),二維邏輯地址(段號:段內地址) 段式程式設計:把一個程式設計成多個段,代碼段、數據段、堆棧段、等等,用戶可以自己應用段覆蓋技術擴充記憶體空間使用量這一技術是程 ...
存儲器管理了
存儲器管理的主要模式
邏輯地址:又稱相對地址,即用戶編程所使用的地址空間,邏輯地址從0開始編號,有兩種形式:一維邏輯地址(地址),二維邏輯地址(段號:段內地址)
段式程式設計:把一個程式設計成多個段,代碼段、數據段、堆棧段、等等,用戶可以自己應用段覆蓋技術擴充記憶體空間使用量這一技術是程式設計技術,不是OS存儲管理的功能
物理地址:又稱絕對地址,即程式執行所使用的地址空間,處理器執行指令時按照物理地址進行
主存儲器的復用
多道程式設計需要復用主存
按照分區復用:
- 主存劃分為多個固定/可變尺寸的分區
- 一個程式/程式段占用一個分區
按照頁架復用
- 主存劃分成多個固定大小的頁架
- 一個程式/程式段占用多個頁架
存儲管理的基本模式
- 單連續存儲管理:一維邏輯地址空間的程式占用一個主存固定分區或可變分區
- 段式存儲管理:段式二維邏輯地址空間的程式占用多個主存可變分區
- 頁式存儲管理:一維邏輯地址空間的程式占用多個主存頁架區
- 段頁式存儲管理:段式二維邏輯地址空間的程式占用多個主存頁架區
存儲管理的功能
地址轉換
地址轉換:又稱重定位,即把邏輯地址轉換成絕對地址
靜態重定位:在程式裝入記憶體時進行地址轉換,由裝入程式執行,早期小型OS使用
動態重地位:在CPU執行程式時進行地址轉換•從效率出發,依賴硬體地址轉換機構
主存儲器空間的分配與去配
分配:進程裝入主存時,存儲管理軟體進行具體的主存分配操作,並設置一個表格記錄主存空間的分配情況
去配:當某個進程撤離或主動歸還主存資源時,存儲管理軟體要收回它所占用的全部或者部分存儲空間,調整主存分配表信息
主存儲器空間的共用
多個進程共用主存儲器資源:多道程式設計技術使若幹個程式同時進入主存儲器,各自占用一定數量的存儲空間,共同使用一個主存儲器
多個進程共用主存儲器的某些區域:若幹個協作進程有共同的主存程式塊或者主存數據塊
存儲保護
為避免主存中的多個進程相互干擾,必須對主存中的程式和數據進行保護,私有主存區中的信息:可讀可寫,公共區中的共用信息:根據授權,非本進程信息:不可讀寫,這一功能需要軟硬體協同完成,CPU檢查是否允許訪問,不允許則產生地址保護異常,由OS進行相應處理
主存儲器空間的擴充
存儲擴充:把磁碟作為主存擴充,只把部分進程或進程的部分內容裝入記憶體,1.對換技術:把部分不運行的進程調出,2.虛擬技術:只調入進程的部分內容
這一工作需要軟硬體協作完成,1.對換進程決定對換,硬體機構調入,2.CPU處理到不在主存的地址,發出虛擬地址異常,OS將其調入,重執指令
虛擬存儲器
虛擬存儲器思想的提出
主存容量限制帶來諸多不便,用戶編寫程式必須考慮主存容量限制,多道程式設計的道數受到限制
用戶編程行為分析:
- 全面考慮各種情況,執行時有互斥性
- 順序性和迴圈性等空間局部性行為
- 某一階段執行的時間局部性行為
因此可以考慮部分調入進程內容
虛擬存儲器的基本思想
存儲管理把進程全部信息放在輔存中,執行時先將其中一部分裝入主存,以後根據執行行為隨用隨調入,如主存中沒有足夠的空閑空間,存儲管理需要根據執行行為把主存中暫時不用的信息調出到輔存上去
虛擬存儲器的實現思路
需要建立與自動管理兩個地址空間:(輔存)虛擬地址空間:容納進程裝入,(主存)實際地址空間:承載進程執行;對於用戶,電腦系統具有一個容量大得多的主存空間,即虛擬存儲器,虛擬存儲器是一種地址空間擴展技術,通常意義上對用戶編程是透明的,除非用戶需要進行高性能的程式設計
存儲管理的硬體支撐
存儲器的組織層次
存儲管理涉及的存儲對象
存儲管理是OS管理主存儲器的軟體部分,為獲得更好的處理性能,部分主存程式與數據(特別是關鍵性能數據)被調入Cache,存儲管理需要對其進行管理,甚至包括對聯想存儲器的管理,為獲得更大的虛擬地址空間,存儲管理需要對存放在硬碟、固態硬碟、甚至網路硬碟上的虛擬存儲器文件進行管理
高速緩存存儲器(Cache)
Cache是介於CPU和主存儲器間的高速小容量存儲器,由靜態存儲晶元SRAM組成,容量較小但比主存DRAM技術更加昂貴而快速,接近於CPU的速度,CPU往往需要重覆讀取同樣的數據塊,Cache的引入與緩存容量的增大,可以大幅提升CPU內部讀取數據的命中率,從而提高系統性能
高速緩存存儲器的構成
高速緩衝存儲器通常由高速存儲器、聯想存儲器、地址轉換部件、替換邏輯等組成
- 聯想存儲器:根據內容進行定址的存儲器
- 地址轉換部件:通過聯想存儲器建立目錄表以實現快速地址轉換。命中時直接訪問Cache;未命中時從記憶體讀取放入Cache
- 替換部件:在緩存已滿時按一定策略進行數據塊替換,並修改地址轉換部件
高速緩存存儲器的分級
- L1Cache:分為數據緩存和指令緩存;內置;其成本最高,對CPU的性能影響最大;通常在32KB-256KB之間
- L2Cache:分內置和外置兩種,後者性能低一些;通常在512KB-8MB之間
- L3Cache:多為外置,在游戲和伺服器領域有效;但對很多應用來說,匯流排改善比設置L3更加有利於提升系統性能
地址轉換/存儲保護的硬體支撐
存儲管理與硬體支撐
- 鑒於程式執行與數據訪問的局部性原理,存儲管理軟體使用cache可以大幅提高程式執行效率
- 動態重定位,存儲保護等,若無硬體的支撐在效率上是為無意義的,即無實現價值
- 無虛擬地址中斷,虛擬存儲器無法實現
- 無頁面替換的硬體支撐機制,虛擬存儲其在效率上無意義
單連續分區
- 每個進程占用一個物理上完全連續的存儲空間(區域)
- 單用戶連續存儲管理
- 固定分區存儲管理
- 可變分區存儲管理
單用戶連續分區存儲管理
主存區域劃分為系統區與用戶區,設置一個柵欄寄存器界分兩個區域,硬體用它在執行時進行存儲保護,一般採用靜態重定位進行地址轉換,硬體實現代價低,適用於單用戶單任務操作系統,如DOS
靜態重定位:在裝入一個作業時,把該作業中程式的指令地址和數據地址全部轉換成絕對地址
固定分區存儲管理的基本思想
- 支持多個分區
- 分區數量固定
- 分區大小固定
- 可用靜態重定位
- 硬體實現代價低
- 早期OS採用
可變分區存儲管理概述
固定分區存儲管理不夠靈活,既不適應大尺寸程式,又存在記憶體內零頭,有浪費,能否按照進程實際記憶體需求動態劃分分區,並允許分區個數可變,這就是可變分區存儲管理
可變分區存儲管理
按進程的記憶體需求來動態劃分分區,創建一個進程時,根據進程所需主存量查看主存中是否有足夠的空閑空間,若有,則按需要量分割一個分區,若無,則令該進程等待主存資源,由於分區大小按照進程實際需要量來確定,因此分區個數是隨機變化的
可變分區方式的記憶體分配
- 最先適應分配演算法
- 鄰近適應分配演算法
- 最優適應分配演算法
- 最壞適應分配演算法
可變分區方式的記憶體零頭
固定分區方式會產生記憶體內零頭,可變分區方式也會隨著進程的記憶體分配產生一些小的不可用的記憶體分區,稱為記憶體外零頭,最優適配演算法最容易產生外零頭,任何適配演算法都不能避免產生外零頭
移動技術(程式浮動技術)
移動分區以解決記憶體外零頭,需要動態重定位支撐