存儲器管理——基於順序搜索的動態分區分配算法

前言

爲了實現動態分區分配,通常是將系統中的空閒分區鏈接成一個鏈。所謂順序搜索是指依次搜索空閒分區上的空閒分區,去尋找一個其大小能夠滿足要求的分區。基於順序搜索的動態的分區分配算法有如下四種:首次適應算法、循環首次適應算法、最佳適應算法和最壞適應算法。

1.首次適應(first fif. FF)算法

我們以空閒分區鏈爲例來說明採取FF算法時的分配情況。FF算法要求空閒分區鏈以地址遞增的次序鏈接。在分配內存時,從鏈首開始順序查找,直至找到一個大小能滿足的空閒分區爲止。然後再按照作業的大小,從該分區中劃出一塊內存空間,分配給請求者,餘下的空閒分區仍留在空閒鏈中。若從鏈首直至鏈尾都不能找到一個能滿足要求的分區,則表明系統中已經沒有足夠大的內存分配給該內存,內存分配失敗,返回。
該算法傾向於優先利用內存中低址部分的空閒分區,從而保留了高址部分的大空閒區。這爲以後到達的大作業分配大的內存空間創造了條件。其缺點是低址部分不斷被劃分,會留下許多難以利用的,很小的空閒分區,稱爲碎片。而每次查找又都是從低址部分開始的,這無疑又會增加差價可用空閒分區時的開銷。

2.循環首次適應(next fit, NF)算法

爲避免低址部分留下許多很小的空閒分區,以及減少查找可用空閒分區的開銷,循環首次適應算法在爲進程分配內存空間時,不再是每次都從鏈首開始查找,而是從上次找到的空閒分區的下一個空閒分區開始查找,直至找到一個能滿足要求的空閒分區,從中劃出一塊與請求大小相等的內存空間分配給作業。爲實現該算法,應設置一起始查尋指針,用於指示下一次起始查尋的空閒分區,並採用循環查找方式,即如果最後一個(鏈尾)空閒分區的大小仍不能滿足要求,則應返回到第一個空閒分區,比較其大小是否滿足要求。找到後,應調整起始查是指針,該算法能使內存中的空困分區分佈得更均勻,從而減少了查找空閒分區時的開銷,但這樣會缺乏大的空困分區。

3.最佳適應(best fit, BF)算法

所謂“最佳”是指,每次爲作業分配內存時,總是把滿足要求,又是最小的空閒分區分配給作業,避免“大材小用”。爲了加速尋找,該算法要求將所有的空閒分區按其容量以從小到大的順序形成一空閒分區鏈。 這樣,第一次找到的能滿足要求的空閒區必然是最佳的。孤立地看,最佳適應算法似乎是最佳的,然而在宏觀上卻不一定。因爲每次分配後所切割下來的剩餘部分總是最小的,這樣,在存儲器中會留下許多難以利用的碎片。

4.最壞適應(worst fit, WF)算法

由於最壞適應分配算法選擇空閒分區的策略正好與最佳適應算法相反:它在掃描整個空閒分區表或鏈表時,總是挑選-一個最大的空閒區,從中分割一部分存儲空間給作業使用,以至於存儲器中缺乏大的空閒分區,故把它稱爲是最壞適應算法。實際上,這樣的算法未必是最壞的,它的優點是可使剩下的空閒區不至於太小,產生碎片的可能性最小,對中、小作業有利。同時,最壞適應分配算法查找效率很高,該算法要求,將所有的空閒分區,按其容量以從大到小的順序形成空閒分區鏈, 查找時,只要看第一個分區能否滿足作業要求即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章