目錄
概述
爲了能將用戶程序裝入內存,必須爲它分配一定大小的內存空間。連續分配方式是最早出現的一種存儲器分配方式,曾被廣泛應用於上世紀60~80年代的OS中,該分配方式爲一個用戶程序分配一個連續的內存空間,即程序中代碼或數據的邏輯地址相鄰,體現在內存空間分配時物理地址的相鄰。連續分配方式可分爲四類:單一連續分配、 固定分區分配、動態分區分配以及動態可重定位分區分配算法四種方式。
補充:
- 內零頭:分配給進程,而進程未用到的內存部分;
- 外零頭:未分配給進程,但因爲太小而無進程能用;
一、單一連續分配
1. 應用背景
單用戶系統。
在一段時間內,只有一個進程在內存。
2.基本思想
內存分爲兩個區域:一個供操作系統使用,一個供用戶使用
3,實現
設置基址寄存器、限界寄存器,要求:邏輯地址映射爲物理地址後,物理地址必須在兩者之間。
4,特點
簡單;適用於單任務OS
二、固定分區分配
1.應用背景
多道程序設計系統。
2.基本思想
單一連續分配中,將整塊內存交給一個程序使用,顯然會造成很大浪費,自然的可以想到將一整塊內存區域分爲若干個小塊區域,來供多個程序同時使用。劃分區域有兩種方法:分區大小相等、分區大小不等。前者更加簡單直接,後者使得存儲器分配更加靈活。
(1)OS初始化階段,將用戶區劃分爲若於固定大小的內存區域(分區) ;
(2)每個分區可放一個程序運行;
(3)一個分區內的程序執行結束,可調入另一個程序 執行;
(4)劃分爲幾個分區,則允許幾個程序同時在內存運行;
(5)分區大小和位置可不同;
3,實現
分區說明表
4,特點
- 最早的支持多道程序設計的存儲管理方案;
- 簡單,現在仍在嵌入式系統中使用;
- “內零頭”嚴重;
三、動態分區分配
1.應用背景
多道程序設計系統。
2.基本思想
(1) OS初始化階段,將用戶區劃分爲一個大的空白分區;
(2)每個程序運行時,劃分出一個大小合適的分區;
(3)程序執行結束,其所在的分區撤消;
不難看出,由於程序交錯運行,用戶區中可能產生許多較小的空閒區,他們常常不能滿足程序的空間需求,因而被浪費,即“外零頭”(碎片)
3,實現
數據結構
空閒分區表
空閒分區鏈
分配算法
1)首次適應算法
- 按地址遞增順序排列空閒分區鏈;
- 分配內存時,總是從低地址端開始掃描空閒區;
- 找到的第一個大小合適的分區,就分割分配;
- 否則失敗。
特點:
- 高址端有大空閒區概率大;
- 低址端迅速被劃分,碎片出現速度快;
2)循環首次適應算法
- 按地址遞增順序排列空閒分區鏈;
- 設置當前指針;
- 分配內存時,從指針所指位置開始掃描空閒區;
- 找到的第一個大小合適的分區,就分割分配;
- 否則失敗。
本質:CLOCK算法;
特點:
- 碎片分佈均勻;
- 高址端有大空閒區概率小;
3)最佳適應算法
- 按大小遞增順序排列空閒分區鏈;
- 分配內存時,從鏈首開始掃描空閒區;
- 找到的第一個大小合適的分區,就分割分配;
- 否則失敗。
特點:
- 碎片迅速出現;
- “最佳”匹配;
4)最壞適應算法
- 按大小遞減順序排列空閒分區鏈;
- 分配內存時,總是分配鏈首空閒區;
- 否則失敗。
特點:
- 碎片出現最慢(分割後剩下的分區是最大的) ;
- 最壞”匹配;
4,特點
“碎片”問題
經過一段時間的分配回收後,內存中存在很多很小的空閒塊。它們每一個都很小,不足以滿足分配要求;但其總和滿足分配要求。這些空閒塊被稱爲碎片造成存儲資源的浪費
四、動態可重定位分區分配
1.應用背景
多道程序設計系統。
2.基本思想
(1)採用動態分區分配方式;
(2)引入“緊湊”機制,合併小的碎片空閒區;
(3)使用動態地址重定位;
3,實現
與動態分區分配類似,區別在於這裏使用了緊湊機制
緊湊機制會使得程序的位置發生改變,因此就需要引入重定位技術,由於程序的位置不固定,只有運行時才能確定,因此只能採用動態重定位(程序不變,運行時重定位,真正訪問的內存地址是相對地址與重定位寄存器中的地址相加而形成的)