Linux下的內存分配

1.夥伴算法

一種物理內存分配和回收的方法,物理內存所有空閒頁都記錄在BUDDY鏈表中。首選,系統建立一個鏈表,鏈表中的每個元素代表一類大小的物理內存,分別爲2的0次方、1次方、2次方,個頁大小,對應4K、8K、16K的內存,沒一類大小的內存又有一個鏈表,表示目前可以分配的物理內存。例如現在僅存需要分配8K的物理內存,系統首先從8K那個鏈表中查詢有無可分配的內存,若有直接分配;否則查找16K大小的鏈表,若有,首先將16K一分爲二,將其中一個分配給進程,另一個插入8K的鏈表中,若無,繼續查找32K,若有,首先把32K一分爲二,其中一個16K大小的內存插入16K鏈表中,然後另一個16K繼續一分爲二,將其中一個插入8K的鏈表中,另一個分配給進程........以此類推。當內存釋放時,查看相鄰內存有無空閒,若存在兩個聯繫的8K的空閒內存,直接合併成一個16K的內存,插入16K鏈表中。(夥伴算法用於物理內存分配方案)

 

 

2.Slab算法

是一種對夥伴算的一種補充,對於用戶進程的內存分配,夥伴算法已經夠好了,但對於內核進程,還需要存在一類很小的數據(字節大小,比如進程描述符、虛擬內存描述符等),若每次給幾個字節的數據分配一個4KB的頁,實在太浪費,於是就有了SLBA算法,SLAB算法其實就是把一個頁用力劈成一小塊一小塊,然後再分配。

 

 

堅持✊

 

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