老狗——連續分配存儲管理方式

1. 單一連續分配

內存分爲系統區和用戶區兩部分

優點:易於管理。

2. 固定分區分配

把內存分爲一些大小相等或不等的分區,每個應用進程佔用一個分區。操作系統佔用其中一個分區。(劃分爲幾個分區,便只允許幾道作業併發)

建立一記錄相關信息的分區表(或分區鏈表)記錄劃分的分區

 表項有: | 起始位置 | 大小 | 狀態 |

缺點:

  • 內碎片(一個分區內的剩餘空間)造成浪費
  • 分區總數固定,限制併發執行的程序數目

3. 動態分區分配

分區的大小不固定:在裝入程序時根據進程實際需要,動態分配內存空間,即——需要多少劃分多少。

空閒分區表項:從1項到n項:內存會從初始的一個大分區不斷被劃分、回收從而形成內存中的多個分區。

具體實現:
1)分區分配中的數據結構——空閒分區表、空閒分區鏈
2)分區分配算法
3)分區分配操作——分配內存、回收內存

優點:併發進程數沒有固定數的限制,不產生內碎片。

缺點:有外碎片(分區間無法利用的空間)

4. 分區分配算法

首次適應算法FF:以地址遞增的次序鏈接。

        檢索:分配內存時,從鏈首開始順序查找直至找到一個大小能滿足要求的空閒分區;

        優點:優先利用內存低址部分,保留了高地址部分的大空閒區;

        缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查找從低址部分開始,會逐漸增加查找開銷。

循環首次適應算法 :空閒分區排序:按地址

       檢索:從上次找到的空閒分區的下一個空閒分區開始查找,直到找到一個能滿足要求的空閒分區。

       優點:空閒分區分佈均勻,減少查找開銷

       缺點:缺乏大的空閒分區

最佳適應算法 :所有空閒分區按容量從小到大排序成空閒分區表或鏈。

      檢索:從表或鏈的頭開始,找到的第一個滿足的就分配

      缺點:每次找到最合適大小的分區割下的空閒區也總是最小,會產生許多難以利用的小空閒區(外碎片)

最差適應算法 :基本不留下小空閒分區,但會出現缺乏較大的空閒分區的情況。

快速適應算法 (夥伴算法):根據進程常用空間大小進行劃分,相同大小的串成一個鏈,需管理多個各種不同大小的分區的鏈表。進程需要時,從最接近大小需求的鏈中摘一個分區

5. 分配內存

找到滿足需要的合適分區,劃出進程需要的空間
if s<=size,將整個分區分配給請求者
if s> size,按請求的大小劃出一塊內存空間分配出去,餘下部分留在空閒鏈中,將分配區首址返回給調用者。

6. 回收內存

進程運行完畢釋放內存時,系統根據回收區首址a,在空閒分區鏈(表)中找到相應插入點,根據情況修改空閒分區信息,可能會進行空閒分區的合併:

7. 動態重定位分區分配 :

有緊湊功能的動態分區分配

地址變換過程是在程序執行過程期間(相對地址與重定位寄存器中的地址相加),隨着對每條指令的訪問自動進行,稱爲動態重定位。

動態重定位分區分配算法與動態分區分配算法基本相同,差別在於增加了緊湊的功能。

夥伴系統

分區大小有規定,且分區動態變化

  1. 無論已分配還是空閒分區,大小都爲2的k此冪。若整個可分配空間大小爲2m,則1≤k≤m.
  2. 隨着系統運行,內存被不斷劃分,形成若干不連續的空閒分區。對每一類具有相同大小的空閒分區設置一雙向鏈表,即會有k個鏈表,鏈表中的分區大小都是2m。
  3. 進程申請n個大小的空間時,計算n= 2i。則找i對應的鏈表。若i大小的鏈表沒有,則找i+1的鏈表。找到的分區對半劃分後,一半用於分配,一半鏈接到較小一級的鏈表裏去。
  4. 一次分配和回收都可能對應多次的劃分和合並。

8. 內存空間管理之對換

把內存中暫時不能運行、或暫時不用的程序和數據調到外存上,以騰出足夠的內存;把已具備運行條件的進程和進程所需要的程序和數據,調入內存。

按對換單位分類:

  • 整體對換(或進程對換):以整個進程爲單位(連續分配)

  • 頁面對換或分段對換:以頁或段爲單位(離散分配)

實現進程對換,系統必須具備的功能:

  • 對換空間的管理

  • 進程的換出、換入操作

9. 對換空間的管理

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章