原文:
ff和nf演算法都是基於順序搜尋的動態分割槽分配演算法,在記憶體中檢索一塊分割槽分配給作業。如果空間大小合適則分配,如果找不到空間則等待。
ff演算法按位址遞增從頭掃瞄空閒分割槽,如果找到空閒分割槽大小》=作業大小則分配。如果掃瞄完空閒分割槽表都沒有找到分割槽,則分配失敗。
nf演算法和ff演算法類似,但是nf演算法每次分配都會記錄下位置,下次分配的時候從記錄的位置開始,迴圈掃瞄一遍空閒分割槽。
注:**分割槽的演算法寫的和書上不太一樣,書上是分配過後把分割槽從空閒分割槽鏈中移除,我是直接分配然後狀態為設定為false,所以可能不太一樣。
//公共模組,負責定義結構體,初始化,顯示結果,**
#ifndef blockjob_h_
#define blockjob_h_
#include
const
intminsize = 10;
//最小不可分割分割槽大小
//空閒分割槽
typedef
struct
block
block;
//作業
typedef
struct
job
; //初始化空閒分割槽與作業
void
init(std::vector&blocklist, std::vector&joblist);
//顯示結果
void
show(std::vector&blocklist, std::vector&joblist);
//**分割槽
void
recycle(std::vector&blocklist, std::vector&joblist);
#endif
#include "blockjob.h"
#include
#include
//初始化空閒分割槽與作業
void
init(std::vector&blocklist, std::vector&joblist)
std::cout <
; std::cin >> num;
std::cout <
; job tempj;
for(
inti = 0; i
} //顯示結果
void
show(std::vector&blocklist, std::vector&joblist)
//**分割槽
void
recycle(std::vector&blocklist, std::vector&joblist)
else
//不與後乙個分割槽鄰接
} else
if(it != blocklist.end()-1 && (*it).start +(*it).size == (*(it+1)).start)
//不與前乙個分割槽鄰接,與後乙個分割槽鄰接
else
//都不鄰接
break
; }
} for
(std::vector::iterator it = joblist.begin(); it != joblist.end(); ++it)
} }
[cpp]
view plain
copy
#include "blockjob.h"
//ff演算法
void
ff(std::vector&blocklist, std::vector&joblist);
intmain()
//ff演算法
void
ff(std::vector&blocklist, std::vector&joblist)
else
//剩餘空間不可分配,全部分配給此作業
break
; }
} }
}
[cpp]
view plain
copy
#include "blockjob.h"
//nf演算法
void
nf(std::vector&blocklist, std::vector&joblist);
intmain()
//nf演算法
void
nf(std::vector&blocklist, std::vector&joblist)
else
//剩餘空間不可分配,全部分配給此作業
break
; }
++itblock;
if(itblock == blocklist.end())
itblock = blocklist.begin();
} while
(pos != &(*itblock) - &blocklist[0]);
} }
首次適應演算法 FF 及其應用
我們在作業系統和後台儲存一些東西的時候,需要考慮儲存管理器的問題,就是如何把我們要放置安置的東西,如虛擬機器等東西最優化地儲存,就需要用到今天講的分割槽分配演算法。我們用的比較多的就是ff,首次適應演算法。空閒分割槽鏈以位址遞增的次序鏈結 分配時,從鏈首開始順序查詢,直至找到乙個大小能滿足要求的空閒...
首次適應演算法 最佳適應演算法和最差適應演算法
首次適應演算法 first fit 從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給作業,這種方法的目的在於減少查詢時間。最佳適應演算法 best fit 從全部空閒區中找出能滿足作業要求的,且大小最小的空閒分割槽,這種方法能使碎片盡量小。最差適應演算法 worst fit 它...
作業系統 迴圈首次適應演算法
迴圈首次適應演算法介紹 每次為程序分配空間的時候,從上一次剛分配過的空閒區的下一塊開始尋找,比如,初始化的記憶體空閒區是使用者輸入的max大小,沒有進行 之前之前必定是只有最後一塊是空閒的,但是經過 之後,你設定的表 這裡是設定了一張表,也可以用倆張,但是一張就可以解決的沒必要倆張 從是空閒區的區號...