第四章 存儲管理

sunhao06 2022-01-08 00:30:28 阅读数:46

第四章 第四 四章 管理

一、程序的裝
1、絕對裝入方式
編譯程序生成的“目標代碼”就是”裝入模塊” ,邏輯地址直接從某個地址R處增長,裝入模塊直接裝入內存地址R處。
2、靜態可重定比特裝入方式
地址映射在程序執行之前進行,重定比特後物理地址不再改變。
可由專門設計的重定比特裝配程序完成(軟):裝入時根據所定比特的內存地址去修改每個邏輯地址,添加相應偏移量,重定比特為物理地址。
優點:不需硬件支持,可以裝入有限的多道程序
缺點:軟件裝入一次完成,一個程序通常需要占用連續的內存空間,程序裝入內存後不能移動。也不易實現共享
3、動態運行時(重定比特)裝入方式(dynamic run-time loading)
實際運行中往往會需要程序在內存中的各比特置移動,即經常需要重定比特到不同的物理地址上。這種運行時移動程序要求地址變換要快速,實現時一般依靠硬件地址變換機構——一個重定比特寄存器。
程序裝入內存時,可多次重定比特到不同比特置。且可以不立即把裝入模塊中的相對地址轉換為絕對地址,而是把這種地址轉換推遲到程序真正要執行時才進行。
更適用於部分裝入
二、程序的鏈接
裝入是使用內存的開始,但鏈接的不同會使內存的使用有差別:
根據鏈接時間的不同,分成三種:
1、靜態鏈接:裝入運行前將多個目標模塊及所需庫函數鏈接成一個整體,以後不再拆
裝入運行前,生成可執行文件時進行的。
將多個目標模塊及所需庫函數鏈接成一個整體,以後不再拆開。
2、裝入時動態鏈接:裝入內存時,邊裝入邊鏈接的鏈接方式。
由一個目標模塊開始裝入,若又涉及外部模塊調用事件,裝入程序再找出相應的外部目標模塊,並將它裝入內存,還要修改目標模塊中的相對地址。
比靜態鏈接好在哪裏?
(1) 靜態鏈接好的程序,修改部分模塊後,需重新鏈接成可裝入程序。動態方式則便於修改和更新。
(2) 便於實現共享。靜態的N個程序都需要一個模塊時,需要進行N次拷貝。
3、運行時動態鏈接:對某些目標模塊的鏈接,在執行中需要該目標模塊時,才對它進行鏈接。
裝入時動態鏈接的問題
許多情况下,事先不知道某應用程序本次運行需要哪些模塊,只能全部裝入,裝入時全部鏈接在一起,效率低。
辦法:有的模塊不經常使用就暫時不裝入,運行時用到了再裝入。(如程序總不出錯,就不會用到錯誤處理模塊。)即運行時動態鏈接:運行時,將對某些模塊的鏈接推遲到執行時才鏈接裝入。
優點:程序運行裝入的內容少了,加快了裝入過程,而且節省大量的內存空間。
三、連續分配存儲管理方式
1、單一連續分配
內存分為系統區和用戶區兩部分:
系統區:僅提供給OS使用,通常放在內存低址部分
用戶區:除系統區以外的全部內存空間,提供給用戶使用。
最簡單的一種存儲管理方式,只能用於單用戶、單任務的操作系統中。
優點:易於管理。
缺點:對要求內存空間少的程序,造成內存浪費;程序全部裝入,很少使用的程序部分也占用內存。
2、固定分區分配
把內存分為一些大小相等或不等的分區(partition),每個應用進程占用一個分區。操作系統占用其中一個分區。
提高:支持多個程序並發執行,適用於多道程序系統和分時系統。最早的多道程序存儲管理方式。
劃分為幾個分區,便只允許幾道作業並發
程序分配內存的過程:
也可將分區錶分為兩個錶格:空閑分區錶/占用分區錶。從而减小每個錶格長度。
檢索算法:空閑分區錶可能按不同分配算法采用不同方式對錶項排序(將分區按大小排隊或按分區地址高低排序)。
過程:檢索空閑分區錶;找出一個滿足要求且尚未分配的分區,分配給請求程序;若未找到大小足够的分區,則拒絕為該用戶程序分配內存。
3、動態分區分配
分區的大小不固定:在裝入程序時根據進程實際需要,動態分配內存空間,即——需要多少劃分多少。
空閑分區錶項:從1項到n項:
內存會從初始的一個大分區不斷被劃分、回收從而形成內存中的多個分區。
1)數據結構
①空閑分區錶:
記錄每個空閑分區的情况。
空閑分區對應一個錶目,包括分區序號、分區始每個址及分區的大小等數據項。
②空閑分區鏈:
每個分區的起始部分,設置用於控制分區分配的信息,及用於鏈接各分區的前向指針;
分區尾部則設置一後向指針,在分區末尾重複設置狀態比特和分區大小錶目方便檢索。
2)分區分配算法
動態分區方式,分區多、大小差异各不相同,此時把一個新作業裝入內存,更需選擇一個合適的分配算法,從空閑分區錶/鏈中選出一合適分區
①首次適應算法FF
空閑分區排序:以地址遞增的次序鏈接。
檢索:分配內存時,從鏈首開始順序查找直至找到一個大小能滿足要求的空閑分區;
分配:從該分區中劃出一塊作業要求大小的內存空間分配給請求者,餘下的空閑分區大小改變仍留在空閑鏈中。
若從頭到尾檢索不到滿足要求的分區則分配失敗
優點:優先利用內存低址部分,保留了高地址部分的大空閑區;
缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查找從低址部分開始,會逐漸增加查找開銷。
②循環首次適應算法
空閑分區排序:按地址
檢索:從上次找到的空閑分區的下一個空閑分區開始查找,直到找到一個能滿足要求的空閑分區。為實現算法,需要:
設置一個起始查尋指針
采用循環查找方式
分配:分出需要的大小
優點:空閑分區分布均勻,减少查找開銷
缺點:缺乏大的空閑分區
③最佳適應算法
總是把能滿足要求、又是最小的空閑分區分配給作業,避免“大材小用”。
空閑分區排序:所有空閑分區按容量從小到大排序成空閑分區錶或鏈。
檢索:從錶或鏈的頭開始,找到的第一個滿足的就分配
分配:分出需要的大小
缺點:每次找到最合適大小的分區割下的空閑區也總是最小,會產生許多難以利用的小空閑區(外碎片)
④最差適應算法
基本不留下小空閑分區,但會出現缺乏較大的空閑分區的情况。
⑤快速適應算法
根據進程常用空間大小進行劃分,相同大小的串成一個鏈,需管理多個各種不同大小的分區的鏈錶。進程需要時,從最接近大小需求的鏈中摘一個分區。類似的:夥伴算法
能快速找到合適分區,但鏈錶信息會很多;實際上是空間換時間。
3)分區分配操作
分配內存
找到滿足需要的合適分區,劃出進程需要的空間
if s<=size,將整個分區分配給請求者
if s> size,按請求的大小劃出一塊內存空間分配出去,餘下部分留在空閑鏈中,將分配區首址返回給調用者。
回收內存
進程運行完畢釋放內存時,系統根據回收區首址a,在空閑分區鏈(錶)中找到相應插入點,根據情况修改空閑分區信息,可能會進行空閑分區的合並:
(1)回收區(首址a)與一個分區f1末尾(首址b+大小)鄰接:將回收區與f1合並,修改f1的錶項的分區大小
(2)回收區(首址a+大小)與一個分區f2的首址b鄰接:將回收區與f2合並,修改f2的錶項的首址、分區大小
(3) (1)(2)兩種情况都有,則將回收區與前後兩個分區F1、F2鄰接:將三個分區合並,使用F1的錶項和F1的首址,取消F2的錶項,大小為三者之和
(4) 回收區沒有鄰接的分區:為回收區單獨建立新錶項,填寫回收區的首址與大小,根據其首址插到空閑鏈中的適當比特置
四、分頁存儲管理方式
1、頁面的概念
內存劃分成多個小單元,每個單元K大小,稱(物理)塊。作業也按K單比特大小劃分成片,稱為頁面。
2、頁錶的概念
為了找到被離散分配到內存中的作業,記錄每個作業各頁映射到哪個物理塊,形成的頁面映射錶,簡稱頁錶。
每個作業有自己的頁錶
頁錶的作用:
頁號到物理塊號的地址映射
要找到作業A
關鍵是找到頁錶(PCB)
根據頁錶找物理塊
3、地址的處理
在這裏插入圖片描述
在這裏插入圖片描述
4、地址變換機構
在這裏插入圖片描述
5、引入快錶——針對訪問速度問題
問題:基本分頁機制下,一次指令需兩次內存訪問,處理機速度降低1/2,分頁空間效率的提高以如此的速度為代價,得不償失。
改進:减少第1步訪問內存的時間。增設一個具有“並行查詢”能力的高速緩沖寄存器,稱為“快錶”,也稱“聯想寄存器”(Associative memory),IBM系統稱為TLB(Translation Look aside Buffer)。
快錶放什麼?:
正在執行進程的頁錶的數據項。
在這裏插入圖片描述
6、兩級、多級頁錶,反置頁錶——針對大頁錶占用內存問題
①兩級頁錶
將頁錶分頁,並離散地將頁錶的各個頁面分別存放在不同的物理塊中
為離散分配的頁錶再建立一張頁錶,稱為“外層頁錶”,其每個錶項記錄了頁錶頁面所在的物理塊號。
②多級頁錶
64比特操作系統下,兩級仍然不足以解决頁錶過大問題時,可按同樣道理繼續分頁下去形成多級頁錶。
③反置頁錶
在這裏插入圖片描述
四、基本分段存儲管理方式
從提高內存利用率角度;
固定分區  動態分區 分頁
從滿足並方便用戶(程序員)和使用上的要求角度:
分段存儲管理:作業分成若幹段,各段可離散放入內存,段內仍連續存放。
方便編程:如匯編中通過段:偏移確定數據比特置
信息共享:同地比特的數據放在一塊方便進行共享設置
信息保護
動態增長:動態增長的數據段事先固定內存不方便
動態鏈接:往往也是以邏輯的段為單比特更方便
1、分段系統的基本原理
程序通過分段(segmentation)劃分為多個模塊,每個段定義一組邏輯信息。如代碼段(主程序段main,子程序段X)、數據段D、棧段S等。
誰决定一個程序分幾段,每段多大?
編譯程序(基於源代碼)
段的特點
每段有自己的名字(一般用段號做名),都從0編址,可分別編寫和編譯。裝入內存時,每段賦予各段一個段號。
每段占據一塊連續的內存。(即有離散的分段,又有連續的內存使用)
各段大小不等。
2、段錶與地址變換機構
段是連續存放在內存中。段錶中針對每個“段編號”記錄:“內存首地址”和“段長”
3、分頁和分段的主要區別
(1)需求:分頁是出於系統管理的需要,是一種信息的物理劃分單比特,分段是出於用戶應用的需要,是一種邏輯單比特,通常包含一組意義相對完整的信息。
一條指令或一個操作數可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。
(2)大小:頁大小是系統固定的,而段大小則通常不固定。分段沒有內碎片,但連續存放段產生外碎片,可以通過內存緊縮來消除。相對而言分頁空間利用率高。
(3)邏輯地址:
分頁是一維的,各個模塊在鏈接時必須組織成同一個地址空間;
分段是二維的,各個模塊在鏈接時可以每個段組織成一個地址空間。
(4)其他:通常段比頁大,因而段錶比頁錶短,可以縮短查找時間,提高訪問速度。分段模式下,還可針對不同類型采取不同的保護;按段為單比特來進行共享
4、信息共享
分段系統的突出優點:
易於實現共享
在分段系統中,實現共享十分容易,只需在每個進程的段錶中為共享程序設置一個段錶項。
比較課本圖。對同樣的共享內容的管理上,很明顯分段的空間管理更簡單。分頁的圖涉及太多的頁面劃分和地址記錄的管理。
易於實現保護:
代碼的保護和其邏輯意義有關,分頁的機械式劃分不容易實現。
5、段頁式存儲管理方式
① 基本原理
將用戶程序分成若幹段,並為每個段賦予一個段名。
把每個段分成若幹頁
地址結構包括段號、段內頁號和頁內地址三部分
②地址變換過程
在這裏插入圖片描述

版权声明:本文为[sunhao06]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080030283606.html