迴圈首次適應演算法介紹
每次為程序分配空間的時候,從上一次剛分配過的空閒區的下一塊開始尋找,比如,初始化的記憶體空閒區是使用者輸入的max大小,沒有進行**之前之前必定是只有最後一塊是空閒的,但是經過**之後,你設定的表(這裡是設定了一張表,也可以用倆張,但是一張就可以解決的沒必要倆張),從是空閒區的區號開始分配之後,標記此塊,下次分配從標記的這一塊開始向下尋找,符合就分配,然後標記分配的空閒區區號,與首次適應演算法的區別就在這
**#include
#include
#include
#define free 0 //空閒狀態
#define busy 1 //已用狀態
#define ok 1 //完成
#define error 0 //出錯
typedef int status;
int flag;
/***設定空閒塊
*有三個識別符號
*address起始位址
*size空閒塊大小
*state空閒塊狀態
*/typedef struct freearea
elemtype;
/***設定鍊錶指標
*/typedef struct dulnode
dulnode, *dulinklist;
/***block_first
*鍊錶首位址
*block_last
*鍊錶尾位址
*/dulinklist block_first;
dulinklist lastfind;
dulinklist block_last;
void alloc(int);
void free(int);
status nf(int);
void show();
void initblock();
/***初始化記憶體
*傳入使用者需設定的記憶體大小max_length
*/void initblock(int max_length)
/***輸入程序請求的空閒塊大小
*呼叫分配空閒塊大小的演算法nf(response)
*/void alloc()
else
else}}
/***迴圈首次適應演算法
*lastfind為上次分配空閒的位置,如果是首次分配就不存在lastfind
*request為使用者輸入的程序請求空閒塊的大小
*尋找記憶體中空閒塊大於等於請求的空閒塊
*即size>response&&state=free
*等於則直接修改該狀態
*大於則分配response大小後把剩餘的存為空閒塊
*找到則標記為lastfind
*/status nf(int request)
if(lastfind->data.state==free&&lastfind->data.size>request)
lastfind=lastfind->next;}}
else
if(p->data.state==free&&p->data.size>request)
p=p->next;}}
}/**
***記憶體演算法
*若**的區號的左右指標均為空閒塊,則三塊**為一塊
*若只有左指標為空閒塊,則倆塊合併為一塊
*若只有右指標為空閒塊,則倆塊合併為一塊
*若左右均不是空閒塊,則只改變該區號的狀態為空閒
*/void free(int flag)
}p->data.state=free;
if(p->prior->data.state==free&&p->next->data.state!=free)
if(p->prior->data.state!=free&&p->next->data.state==free)
if(p->prior->data.state==free&&p->next->data.state==free)
}/**
*顯示記憶體分配函式
*從鍊錶的首指標開始
*依次顯示
*/void show()
else
q=q->next;
}printf("++++++++++++++++++++++++++++\n");
}int main()
else if(choice==2)
else if(choice==3)
else if(choice==4)
else
}return 0;
}
首次適應演算法 FF 和迴圈首次適應演算法 NF
原文 ff和nf演算法都是基於順序搜尋的動態分割槽分配演算法,在記憶體中檢索一塊分割槽分配給作業。如果空間大小合適則分配,如果找不到空間則等待。ff演算法按位址遞增從頭掃瞄空閒分割槽,如果找到空閒分割槽大小 作業大小則分配。如果掃瞄完空閒分割槽表都沒有找到分割槽,則分配失敗。nf演算法和ff演算法類...
作業系統適應演算法
分割槽分配演算法 1 首次適應演算法 first fit 從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給 作業,這種方法的目的在於減少查詢時間。為適應這種演算法,空閒分割槽表 空閒區鏈 中的空閒分割槽要按位址由低到 高進行排序。該演算法優先使用低址部分空閒區,在低址空間造成許...
動態分割槽分配 迴圈首次適應演算法 最佳適應演算法
文章待更新 1 採用空閒區表,並增加已分配區表。分配演算法採用最佳適應演算法 記憶體空閒區按照尺寸大小從小到大的排列 和迴圈首次適應演算法,實現記憶體的分配與 include include include include includeusing namespace std int pos,n,s...