記憶體分配策略和分配演算法

2021-07-13 20:20:14 字數 3411 閱讀 3011

----- 在為程序分配記憶體時,將涉及到3個問題:

1)最小物理塊數的確定;2)物理塊的分配策略;3)物理塊的分配演算法

1、最小物理塊數的確定

-- 這裡所說的最小物理塊數,是指能保證程序正常執行所需的最小物理塊數。

-- 當系統為程序分配的物理塊數小於此值時,程序將無法執行。

-- 程序應獲得的最少物理塊數與計算機的硬體結構有關,取決於指令的格式、功能和定址方式

2、物理塊的分配策略

-- 在請求分頁系統中,可採取兩種記憶體分配策略,即固定可變分配策略。在進行置換時,也可採取兩種策略,即全域性置換區域性置換

於是可組合出以下三種適用的策略。

1)固定分配區域性置換(fixed allocation,local replacement)

---- 這是指基於程序的型別(互動型或批處理型等),或根據程式設計師、程式管理員的建議,為每個程序分配一定數目的物理塊,在整個執行期間

不再改變。採用該策略時,如果程序在執行中發現缺頁,則只能從該程序在記憶體的n個頁面中選出乙個頁換出,然後再調入一頁,以保證分配給該

程序的記憶體空間不變(固定分配)。

---- 實現這種策略的困難在於:應為每個程序分配多少個物理塊難以確定。若太少,會頻繁地出現缺頁中斷,降低了系統的吞吐量;若太多,又必

然使記憶體中駐留的程序數目減少,進而可能造成cpu空閒或其他資源空閒的情況,而且在實現程序對換時,會花費更多的時間。

2)可變分配全域性置換(variable allocation,global replacement)

這可能是最易於實現的一種物理塊分配和置換策略,已用於若干個os中。在採用這種策略時,先為系統中的每個程序分配一定數目的物理塊,而

os自身也保持乙個空閒物理塊佇列。當某程序發現缺頁時,由系統從空閒物理塊佇列中取出乙個物理塊分配給該程序,並將欲調入的(缺)頁裝

入其中。這樣,凡產生缺頁(中斷)的程序,都將獲得新的物理塊。僅當空閒物理塊佇列中的物理塊用完時,os才能從記憶體中選擇一頁調出,該頁

可能是系統中任一程序的頁,這樣,自然又會使那個程序的物理塊減少,進而使其缺頁率增加。

3)可變分配區域性置換(variable allocation,local replacement)

這同樣是基於程序的型別或根據程式設計師的要求,為每個程序分配一定數目的物理塊,但當某程序發現缺頁時,只允許從該程序在記憶體的頁面中選出

一頁換出,這樣就不會影響其它程序的執行。如果程序在執行中頻繁地發生缺頁中斷,則系統需再為該程序分配若干個附加的物理塊,直至該程序

的缺頁率減少到適當程度為止;反之,若乙個程序在執行過程中的缺頁率特別低,則此時可適當減少分配給該程序的物理塊數,但不應引起其缺頁率

的明顯增加。

---- 全域性是指置換頁面時,換出的頁面可能是記憶體中的任一程序的頁面,區域性只能是本(缺頁)程序的頁面。

---- 固定分配指為乙個程序分配的物理塊是固定的,可變分配指可根據缺頁率調整所分配的物理塊數。

3、物理塊分配演算法

-- 在採用固定分配策略時,如何將系統中可供分配的所有物理塊分配給各個程序,可採用下述幾種演算法。

1)平均分配演算法

-- 這是將系統中所有可供分配的物理塊平均分配給各個程序。例如,當系統中有100個物理塊,有5個程序在執行時,每個程序可分得20個物理塊。

這種方法看似公平,實際不然,因為它未考慮到各程序本身的大小

假如有乙個程序大小為200頁,只分配給它20個塊,它必然有很高的缺頁率;而另一程序只有10頁,卻有10個物理塊閒置未用。

2)按比例

分配演算法

-- 這是根據程序的大小按比例分配物理塊的演算法。如果系統中共有n個程序,每個程序的頁面數為si,則系統中各程序頁面數的總和為:

s=s1+s2+...+si+...+sn-1+sn (i=1~n)     又假定系統中可用的物理塊總數為m,則每個程序所能分到的物理塊數為bi,則有:

bi=(si*m)/s   其中,b應該取整,它必須大於最小物理塊數。

3)考慮優先權的分配演算法

-- 在實際應用中,為了照顧到重要的、緊迫的作業能盡快地完成,應為它分配較多的記憶體空間。通常採取的方法是把記憶體中可供分配的所有物理塊

分成兩部分:一部分按比例地分配給各程序;另一部分則根據各程序的優先權,適當地增加其相應份額後,分配給各程序。

在有的系統中,如重要的實時控制系統,則可能是完全按優先權來為各程序分配其物理塊的。

4、調頁策略

---- 預調頁策略和請求調頁策略

---- 確定從何處調入頁面

請求分頁系統中的外存分為兩部分:檔案區對換區(用於存放檔案的檔案區和用於存放對換頁面的對換區)。

通常,對換區採用連續分配方式,檔案區是採用連續分配方式。故對換區的磁碟i/o速度比檔案區的高。何處調入分3種情況:

-- 1)系統擁有足夠的對換區空間,可全部從對換區調入所需頁面。在程序執行前,需將與該程序有關的檔案從檔案區拷貝到對換區。

-- 2)系統缺少足夠的對換區空間,不會被修改的檔案都直接從檔案區調入,當換出這些頁面時,由於它們未被修改而不必將它們換出,以後

再調入時,仍從檔案區直接調入。對於那些可能被修改的部分,在將它們換出時,需調到對換區,以後需要從對換區調入。

-- 3)unix方式。凡是未執行過的頁面,都應從檔案區調入。曾經執行過但又被換出的頁面,放在對換區,調入時從對換區調入。unix系統執行

頁面共享,因此某程序所請求的頁面有可能已被其它程序調入記憶體,此時無需再從對換區調入。

記憶體管理之程序分配記憶體的策略和分配演算法涉及的問題

在為多個程序分配記憶體空間時,由於記憶體的大小固定,所以如何分?分多少?量不夠?等問題都會影響到記憶體的利用效率 涉及三個問題 1 最小物理塊的確定,乙個程序有多個頁組成,在記憶體中完全儲存有可能需要很多個塊,但是在cpu中一次執行一條指令,所以停留在記憶體中的很多頁面都不是必要的,只需要在記憶體中...

Memcache 記憶體分配策略

memcached預設採用了名為slab allocator的機制分配和管理記憶體。在該機制出現以前,記憶體的分配是通過對所有記錄簡單的進行malloc和free來進行了。但是這種方式會導致記憶體碎片化嚴重,加重作業系統記憶體管理器的負擔。slab allocator就是位了解決該問題而誕生的。sl...

(八)記憶體分配策略

在虛擬機器中,我們知道物件的記憶體是分配在堆中的。但是堆又可以劃分為更小的區域以便垃圾 那麼,物件到底是怎麼在分配在堆中的呢?大多數情況下,物件都在新生代的eden區中分配記憶體。而因為大部分的物件都是 朝生夕死 的,所以新生代又會頻繁進行垃圾 需要大量連續空間的物件,如 長字串 陣列等,會直接在老...