記憶體管理的需求:重定位、記憶體保護、記憶體共享
程式裝入和連結
編譯→連結→裝入
-
連結方式
- 靜态連結:在程式運作前将各目标子產品和它們所需庫函數連結成一個完整的可執行程式。
- 裝入時動态連結:把編譯得到的目标子產品在裝入記憶體時,邊裝入邊連結。
- 運作時動态連結:執行該目标子產品時才對它進行連結。
-
裝入方式
- 絕對裝入:編譯程式産生絕對位址的目标代碼。(單道程式環境)
- 可重定位裝入:多個目标子產品的起始位址通常都是從0開始,此時采用可重定位裝入方式。裝入時對目标程式中指令和資料的修改過程稱為重定位。靜态重定位:位址變換在裝入時一次完成,必須配置設定其要求的全部記憶體空間。
- 動态運作時裝入:執行時才進行位址轉換。
記憶體保護
- 上下限寄存器
- 重定位寄存器(基址寄存器:存放最小實體位址)、界位址寄存器(存放邏輯位址最大值)
記憶體擴充
- 覆寫:一個程序不需要全部裝入記憶體。
- 交換:不同程序在記憶體換入換出。
記憶體配置設定
-
連續配置設定管理方式
- 單一連續配置設定:記憶體分為系統區和使用者區,記憶體中永遠隻有一道程式,可采用覆寫技術。
- 固定分區配置設定:将記憶體分成若幹個固定大小分區,每個分區隻裝入一道作業。
- 動态分區配置設定:(可變分區配置設定)根據程序大小動态建立分區。
1)首次适應算法
2)最佳适應算法
3)最壞适應算法
4)鄰近适應算法
-
非連續配置設定管理方式
由于需要額外存儲索引,非連續配置設定方式的存儲密度低于連續配置設定方式。
- 基本分頁式存儲管理:頁表(頁号,該頁表對應的記憶體塊号),頁表寄存器(頁表首址和頁表長度)
- 基本分段式存儲管理:段表(每個段首址,該段段長),段表寄存器(段表首址,段表長度)
- 段頁式存儲管理:每個程序一張段表,每個分段一張頁表。段表寄存器,段表,頁表。
虛拟記憶體管理
虛拟記憶體(虛拟存儲器):系統提供部分調入,請求調入,置換功能,給使用者以更大存儲空間的感覺,虛拟存儲器的大小由計算機的位址結構決定。
- 局部性原理
- 時間局部性:程式中某條指令一旦執行,不久後可能再次執行。
- 空間局部性:程式通路某個存儲單元,不久後其附近單元也将被通路。
虛拟記憶體技術實作
建立在離散配置設定的記憶體管理方式上。
實作方式:
- 請求分頁存儲管理:頁表(頁号,實體塊号,狀态位P,通路字段A,修改位M,外存位址)
- 請求分段存儲管理
- 請求段頁式存儲管理
需要的硬體支援:
- 一定容量的記憶體和外存
- 頁表/段表機制
- 中斷機構
- 位址變換機構
- 頁面置換算法
- 最佳置換算法:淘汰最長時間不再被通路,無法實作的算法。
- 先進先出頁面置換算法:優先淘汰最早進入記憶體的頁面。(Balady異常:實體塊數增多而頁故障數反增。)
- 最近最久未使用置換算法:需要寄存器和棧的硬體支援。
- 時鐘置換算法:設定使用位,修改位
- 頁面配置設定政策
- 固定配置設定局部置換:為每個程序配置設定一定數目的實體塊,在整個運作期間都不改變,置換隻在自己的記憶體頁中選擇。
- 可變配置設定全局置換:為每個程序配置設定一定數目的實體塊,作業系統保持一個空閑實體塊隊列,某程序缺頁時,從中取一個配置設定給程序。
- 可變配置設定局部置換:同1,但當某程序頻繁缺頁或缺頁率極低調整為其配置設定的實體塊數。
- 調頁時機
- 預調頁政策:批量調頁,成功率50%
- 請求調頁政策
- 抖動(颠簸):頻繁的頁面排程