作業系統 迴圈首次適應演算法

2021-08-11 09:27:26 字數 2274 閱讀 9243

迴圈首次適應演算法介紹

每次為程序分配空間的時候,從上一次剛分配過的空閒區的下一塊開始尋找,比如,初始化的記憶體空閒區是使用者輸入的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...