連續分配方式 -- 動態分割槽分配
連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。
------- 動態分割槽分配:又稱為可變分割槽分配,是根據程序的實際需要動態地為之分配記憶體空間,使分割槽的大小剛好與作業的大小相等。
動態分割槽分配並不預先將記憶體劃分成一塊塊的分割槽,而是在作業進入記憶體時,根據作業的大小動態地建立分割槽,並使分割槽的大小正好適應作業
的需要,因此係統中分割槽的大小是可變的,分割槽的數目也是可變的。
在實現可變分割槽分配時,將涉及到分割槽分配中所用的資料結構、分割槽分配演算法和分割槽的分配和回收操作三個問題。
1、分割槽分配中的資料結構
---- 與固定分割槽分配類似,動態分割槽分配也使用分割槽說明表
相應的資料結構,用來描述空閒分割槽和已分配分割槽的情況,為分配提供依據。
常用的資料結構有以下兩種形式:
---- 空閒分割槽表
在系統中設定一張空閒分割槽表,用於記錄每個空閒分割槽的情況。
每個空閒分割槽佔一個表目,表目中包括分割槽序號、分割槽始址及分割槽的大小等資料項。
---- 空閒分割槽鏈
為了實現對空閒分割槽的分配和連結,在每個分割槽的起始部分,設定一些用於控制分割槽分配的資訊,以及用於連結各分割槽的前向指標;
在分割槽尾部則設定一後向指標,通過前、後向連結指標,可將所有的空閒分割槽連結成一個雙向鏈。
為了檢索方便,在分割槽尾部重複設定
2、分割槽分配演算法
---- 為把一個新作業裝入記憶體,需按照一定的分配演算法,從空閒分割槽表或空閒分割槽鏈中選出一分割槽分配給該作業。下面是5種分配演算法。
---- 首次適應演算法(first fit)
以空閒分割槽鏈為例,FF演算法要求空閒分割槽鏈以地址遞增的次序連結。在分配記憶體時,從鏈首開始順序查詢,直至找到一個大小能滿足要求的空閒
分割槽為止;(空閒分割槽大小>作業大小)然後再根據作業的大小,從該分割槽中劃出一塊記憶體空間分配給請求者,餘下的空閒分割槽仍留在空閒鏈中。
若從鏈首至鏈尾都不能找到一個能滿足要求的分割槽,則此次記憶體分配失敗,返回。
-- 優點:優先利用記憶體中低址部分的空閒分割槽,保留了高址部分的大空閒區,無內部碎片。為以後到達的大作業分配大的記憶體空間創造了條件。
-- 缺點:低址部分不斷被劃分,會留下許多難以利用的、很小的空閒分割槽,存在外部碎片。
每次查詢都是從低址部分開始,這會增加查詢可用空閒分割槽的開銷。
-- 要求:空閒分割槽表(空閒分割槽鏈)按地址從低到高排列。
---- 迴圈首次適應演算法(next fit)
由FF演算法演變而成的。在為程序分配記憶體空間時,不再是每次都從鏈首開始查詢,而是從上次找到的空閒分割槽的下一個空閒分割槽開始查詢,直至找
到一個能滿足要求的空閒分割槽,從中劃出一塊與請求大小相等的記憶體空間分配給作業。
為實現該演算法,應設定一起始查詢指標,用於指示下一次起始查詢的空閒分割槽,並採用迴圈查詢方式,即如果最後一個(鏈尾)空閒分割槽的大小仍
不能滿足要求,則應返回到第一個空閒分割槽,繼續比較。找到後,應調整起始查詢指標。
-- 優點:使記憶體中的空閒分割槽分佈的更均勻,從而減少了查詢空閒分割槽的開銷,無內部碎片。
-- 缺點:會缺乏大的空閒分割槽,有外部碎片。
-- 要求:空閒分割槽表(空閒分割槽鏈)按地址從低到高排列。
---- 最佳適應演算法(best fit)
所謂“最佳”是指每次為作業分配記憶體時,總是把能滿足要求、又是最小的空閒分割槽分配給作業,避免“大材小用”。
為了加速查詢,該演算法要求將所有的空閒分割槽按其容量以從小到大的順序形成一空閒分割槽鏈。
這樣,第一次找到的能滿足要求的空閒區,必然是最佳的。(似乎是最佳的,巨集觀上卻不一定)
因為每次分配後所切割下來的剩餘部分總是最小的,在儲存器中會留下許多難以利用的小空閒區。
-- 優點:保留了大空閒區,無內部碎片。
-- 缺點:產生許多難以利用的小空閒區,仍有外部碎片。
-- 要求:按容量從小到大排列。
---- 最壞適應演算法(worst fit)
該演算法要掃描整個空閒分割槽表或連結串列,總是挑選一個最大的空閒區分割給作業使用,其優點是可使剩下的空閒區不至於太小,產生碎片的
機率最小,對中、小作業有利,同時最壞適應分配演算法查詢效率很高。
-- 要求:將所有的空閒分割槽按其容量以從大到小的順序形成一空閒分割槽鏈,查詢時只要看第一個分割槽能否滿足作業要求。
-- 優點:剩下的空閒區不會太小,便於下次使用,無內部碎片。
-- 缺點:使儲存器中缺乏大的空閒分割槽,有外部碎片。
-- 最壞適應演算法和首次適應演算法、迴圈首次適應演算法、最佳適應演算法一起,稱為“順序搜尋法”。
---- 快速適應演算法(quick fit)
該演算法又稱為分類搜尋法,是將空閒分割槽根據其容量大小進行分類,對於每一類具有相同容量的所有空閒分割槽,單獨設立一個空閒分割槽連結串列。
因此,系統中存在多個空閒分割槽連結串列,同時在記憶體中設立一張管理索引表,該表的每一個表項對應了一種空閒分割槽型別,並記錄了該型別
空閒分割槽連結串列表頭的指標。空閒分割槽的分類是根據程序常用的空間大小進行劃分,如2KB、4KB、8KB等,對於其他大小的分割槽,如7KB這樣的
空閒分割槽,即可以放在8KB的連結串列中,也可以放在一個特殊的空閒區連結串列中。
-- 優點:查詢效率高,僅需要根據程序的長度,尋找到能容納它的最小空閒區連結串列,並取下第一塊進行分配即可。
該演算法在進行空閒分割槽分配時,不會對任何分割槽產生分割,能保留大的分割槽,不會產生記憶體碎片。
-- 缺點:分割槽歸還主存時演算法複雜,系統開銷較大。此外,該演算法在分配空閒分割槽時是以程序為單位,一個分割槽只屬於一個程序,因此在為程序
所分配的一個分割槽中,存在一定的浪費。空閒分區劃分越細,浪費越嚴重,典型的以空間換時間的做法。
3、分割槽分配操作
-- 在動態分割槽儲存管理方式中,主要的操作是分配記憶體和回收記憶體。
---- 分配記憶體
系統應利用某種分配演算法,從空閒分割槽鏈(表)中找到所需大小的分割槽。設請求的分割槽大小為u.size,表中每個空閒分割槽的大小可表示為m.size。
若m.size-u.size<=size(size是事先規定的不可再切割的剩餘分割槽的大小,m.size>u.size),說明多餘部分太小,可不再切割,將整個分割槽分配給請求者;
否則(多餘部分大於size),從該分割槽中按請求的大小劃分出一塊記憶體空間分配出去,餘下的部分仍留在空閒分割槽鏈(表)中,然後,將分配區的
首址返回給呼叫者。
---- 回收記憶體
當程序執行完畢釋放記憶體時,系統根據回收區的地址,從空閒區鏈(表)中找到相應的插入點,此時可能出現以下4種情況之一:
1)回收區與插入點的前一個空閒分割槽F1相鄰接。此時應將回收區與插入點的前一分割槽合併,不必為回收分割槽分配新表項。
只需修改其前一分割槽F1的大小。F1的大小=F1的大小+回收區的大小(F1的首址是新空閒區的首址)
2)回收分割槽與插入點的後一空閒分割槽F2相鄰接。此時也可將兩分割槽合併,形成新的空閒分割槽,但用回收區的首址作為新空閒區的
首址,大小為兩者之和。
3)回收區同時與插入點的前、後兩個空閒分割槽相鄰接。此時將三個分割槽合併,使用F1的表項和F1的首址,取消F2的表項,大小為三者之和。
F1的空間大小=F1+回收區+F2 (F1的首址)
4)回收區既不與F1鄰接,也不與F2鄰接。這時應為回收區單獨建立一新表項,填寫回收區的首址和大小,並根據其首址插入到空閒鏈中的適當
位置。
相關推薦
連續分配方式 -- 動態分割槽分配
連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。 ------- 動態分割槽分配:又稱為可變分割槽分配,是根據程序的實際需要動態地為之分配記憶體空間,使分割槽的大小剛好與作業的大小相等。 動態分割槽分配並不預先將記憶體劃分成一塊塊的分割槽,而是在作業進入記憶體
動態分割槽分配方式的模擬-python實現
1實驗目的 (1)瞭解動態分割槽分配方式中使用的資料結構和分配演算法 (2)加深對動態分割槽儲存管理方式及其實現過程的理解。 2實驗內容 (1)分別實現採用首次適應演算法和最佳適應演算法的動態分割槽分配過程alloc()和回收過程free()。其中,空閒分割槽通過空閒分割槽鏈來管理:在進行記憶體
動態分割槽分配演算法
基於順序搜尋的動態分割槽分配演算法 1.首次適應演算法(FF): 所謂的首次的意思以地址遞增連結。因此在分配記憶體的時候,從鏈首開始查詢,直到找到一個大小能滿足要求的空閒分割槽為之。 2.迴圈首次適應演算法(NF): 和首次適應演算法的區別就是,在為程序分配記憶體空間的時候,不再是都
4】動態分割槽分配演算法
// 作業系統_實驗四(動態分割槽分配演算法).cpp : 定義控制檯應用程式的入口點。 // #include <iostream> #include <fstream> #include <iomanip> using namespace std; #define
純c語言寫動態分割槽分配演算法的FirstFit和BestFit
主要參考連結: 動態分割槽分配: https://blog.csdn.net/houchaoqun_xmu/article/details/55541299 https://blog.csdn.net/cm_cyj_1116/article/details/53518790 &nbs
作業系統之動態分割槽分配演算法
class Link{ class Block{ private int number; private char course; private int size; private int begin; boolean flag; Block next; public Bloc
【作業系統】C語言模擬作業系統實現動態分割槽分配演算法
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #defi
【作業系統總結】動態分割槽分配演算法
基於順序搜尋的動態分割槽分配演算法 首次適應演算法(FF) 空閒分割槽排成一個鏈,從鏈首開始查詢,知道找到一個大小能滿足的要求的分割槽為止。 迴圈首次適應NF 不是每次都是從鏈首查詢,而是從上次找到的空閒分割槽開始查詢,找到下一個能滿足要求的空閒
作業系統-動態分割槽分配模擬實驗
/* 動態分割槽分配方式模擬 FF演算法*/ #include <iostream> using namespace std; //記憶體空間起始和末尾地址 int minAdress=0; int maxAdress=640; //一個程序佔用的一
動態分割槽分配-迴圈首次適應演算法+最佳適應演算法
(文章待更新) (1)採用空閒區表,並增加已分配區表{未分配區說明表、已分配區說明表(分割槽號、起始地址、長度、狀態)}。分配演算法採用最佳適應演算法(記憶體空閒區按照尺寸大小從小到大的排列)和迴圈首次適應演算法,實現記憶體的分配與回收。 #include<iostr
實驗四 動態分割槽分配演算法
一、 需求分析 說明程式設計的任務和目的,明確規定下述內容: 加深對動態分割槽分配演算法的理解,進一步掌握首次適應演算法、迴圈首次適應 演算法、最佳適應演算法和最壞適應演算法的實現方法。 (1) 輸入的形式和輸入值的範圍; 已在程式中預置好記憶體和程序等資訊 (2
Java靜態多分配,動態單分配
http://blog.csdn.net/cclive1601/article/details/8050330 http://my.oschina.net/tdd/blog/341258 class Human{ } class Man extends Human{
連續分配方式 --(單一連續/固定分割槽)
1、連續分配方式 連續分配方式:為一個使用者程式分配一個連續的記憶體空間。 連續分配方式進一步分為:單一連續分配、固定分割槽分配、動態分割槽分配以及動態重定位分割槽分配。 2、單一連續分配 最簡單的一種儲存管理方式,但只能用於單使用者、單任務的作業系統中。 採用這種儲存管理
連續分配方式之(單一連續/固定分割槽分配)
1、連續分配方式 連續分配方式:為一個使用者程式分配一個連續的記憶體空間。 連續分配方式進一步分為:單一連續分配、固定分割槽分配、動態分割槽分配以及動態重定位分割槽分配。 2、單一連續分配 最簡單的一種儲存管理方式,但只能用於單使用者、單任務的作業系統中。 採用這種儲存管理
作業系統 第四章 2 儲存器管理 連續分配方式
1)單一連續分配: 記憶體分為系統區和使用者區兩部分 2)固定分割槽分配: 把記憶體分為一些大小相等或不等的分割槽,每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。(劃分為幾個分割槽,便只允許幾道作業併發) 建立一記錄相關資訊的分割槽表(或分割槽連結
記憶體連續分配方式採用的幾種演算法及各自優劣。
連續分配方式,是指為一個使用者程式分配一個連續的記憶體空間。它主要包括單一連續分配、固定分割槽分配和動態分割槽分配。 單一連續分配 記憶體在此方式下分為系統區和使用者區,系統區僅提供給作業系統使用,通常在低地址部分;使用者區是為使用者提供的、除系統區之外的記憶體空間。這
kafka的分割槽在broker上的分配方式
首先,這個過程與分割槽在rebalance是不一樣的。Rebalance是發生在消費者群組中,為了將一個topic中的分割槽分配給某一個消費者的演算法。 問題背景 假設現在的kafka叢集中有4個broker,現在需要建立一個包含5個partition
作業系統固定分割槽管理方式的主存分配回收模擬系統的設計
使用C語言編寫 1.功能描述 固定分割槽管理方式的主存分配回收模擬系統的設計 固定分割槽法就是把記憶體區固定地劃分為若干個大小不等的區域。系統對記憶體的管理和控制通過資料結構----分割槽說明表進行,分割槽說明表各分割槽號、分割槽大小、起始地址和是否是空閒區。記憶體的分配
動態分割槽的分配策略
首次適應(FirstFit)演算法 按地址地址遞增的次序連結,找第一個滿足要求的空閒分割槽。 最佳適應(BestFit)演算法 按容量遞增形成分割槽鏈,找第一個滿足要求的分割槽 最壞適應(WorstFit)演算法 按容量遞減,找最大滿足要求的空閒分
2-3-配置DHCP服務器實現動態地址分配
客戶端 -name sci oom 動態分配 工作站 request請求 負責 evel 學習一個服務的過程: 1、 此服務的概述:名字,功能,特點,端口號 2、 安裝 3、 配置文件的位置 4、 服務啟動關閉腳本,查看端口 5、 此服務的使用方法 6、 修