首次適應演算法 FF 和迴圈首次適應演算法 NF

2021-08-20 14:27:39 字數 2746 閱讀 7794

原文:

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大小,沒有進行 之前之前必定是只有最後一塊是空閒的,但是經過 之後,你設定的表 這裡是設定了一張表,也可以用倆張,但是一張就可以解決的沒必要倆張 從是空閒區的區號...