亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

內(nèi)核源碼學(xué)習(xí):伙伴算法

系統(tǒng) 1874 0
1.原理

Linux的伙伴算法把所有的空閑頁面分為10個(gè)塊組,每組中塊的大小是2的冪次方個(gè)頁面,例如,第0組中塊的大小都為2 0 (1個(gè)頁面),第1組中塊的大小為都為2 1 (2個(gè)頁面),第9組中塊的大小都為2 9 (512個(gè)頁面)。也就是說,每一組中塊的大小是相同的,且這同樣大小的塊形成一個(gè)鏈表。

我們通過一個(gè)簡單的例子來說明該算法的工作原理。

假設(shè)要求分配的塊其大小為128個(gè)頁面(由多個(gè)頁面組成的塊我們就叫做 頁面塊 )。該算法先在塊大小為128個(gè)頁面的鏈表中查找,看是否有這樣一個(gè)空閑塊。如果有,就直接分配;如果沒有,該算法會查找下一個(gè)更大的塊,具體地說,就是在塊大小為256個(gè)頁面的鏈表中查找一個(gè)空閑塊。如果存在這樣的空閑塊,內(nèi)核就把這256個(gè)頁面分為兩等份,一份分配出去,另一份插入到塊大小為128個(gè)頁面的鏈表中。如果在塊大小為256個(gè)頁面的鏈表中也沒有找到空閑頁塊,就繼續(xù)找更大的塊,即512個(gè)頁面的塊。如果存在這樣的塊,內(nèi)核就從512個(gè)頁面的塊中分出128個(gè)頁面滿足請求,然后從384個(gè)頁面中取出256個(gè)頁面插入到塊大小為256個(gè)頁面的鏈表中。然后把剩余的128個(gè)頁面插入到塊大小為128個(gè)頁面的鏈表中。如果512個(gè)頁面的鏈表中還沒有空閑塊,該算法就放棄分配,并發(fā)出出錯(cuò)信號。

以上過程的逆過程就是塊的釋放過程,這也是該算法名字的來由。滿足以下條件的兩個(gè)塊稱為伙伴:

·兩個(gè)塊的大小相同

·兩個(gè)塊的物理地址連續(xù)

伙伴算法把滿足以上條件的兩個(gè)塊合并為一個(gè)塊,該算法是迭代算法,如果合并后的塊還可以跟相鄰的塊進(jìn)行合并,那么該算法就繼續(xù)合并。

2.?dāng)?shù)據(jù)結(jié)構(gòu)

在6.2.5節(jié)中所介紹的管理區(qū)數(shù)據(jù)結(jié)構(gòu)struct zone_struct中,涉及到空閑區(qū)數(shù)據(jù)結(jié)構(gòu):

free_area_t free_area[MAX_ORDER];

我們再次對free_area_t給予較詳細(xì)的描述。

#difineMAX_ORDER10

typestruct free_area_struct {

structlist_headfree_list

unsignedint*map

} free_area_t


其中l(wèi)ist_head域是一個(gè)通用的雙向鏈表結(jié)構(gòu),鏈表中元素的類型將為mem_map_t(即struct page結(jié)構(gòu))。Map域指向一個(gè)位圖,其大小取決于現(xiàn)有的頁面數(shù)。free_area第k項(xiàng)位圖的每一位,描述的就是大小為2 k 個(gè)頁面的兩個(gè)伙伴塊的狀態(tài)。如果位圖的某位為0,表示一對兄弟塊中或者兩個(gè)都空閑,或者兩個(gè)都被分配,如果為1,肯定有一塊已被分配。當(dāng)兄弟塊都空閑時(shí),內(nèi)核把它們當(dāng)作一個(gè)大小為2 k+1 的單獨(dú)快來處理。如圖6.9給出該數(shù)據(jù)結(jié)構(gòu)的示意圖:

內(nèi)核源碼學(xué)習(xí):伙伴算法

圖6.9伙伴系統(tǒng)使用的數(shù)據(jù)結(jié)構(gòu)

圖6.9中,free_aea數(shù)組的元素0包含了一個(gè)空閑頁(頁面編號為0);而元素2則包含了兩個(gè)以4個(gè)頁面為大小的空閑頁面塊,第一個(gè)頁面塊的起始編號為4,而第二個(gè)頁面塊的起始編號為56。

我們曾提到,當(dāng)需要分配若干個(gè)內(nèi)存頁面時(shí),用于DMA的內(nèi)存頁面必須是連續(xù)的。其實(shí)為了便于管理,從伙伴算法可以看出,只要請求分配的塊大小不超過512個(gè)頁面(2KB),內(nèi)核就盡量分配連續(xù)的頁面。

內(nèi)核源碼學(xué)習(xí):伙伴算法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费超级淫片日本高清视频 | 草草影院1 | 偷自拍视频区综合视频区 | 天天干天天操天天爽 | 国产成人爱片免费观看视频 | 午夜成年人网站 | 999久久久精品视频在线观看 | 97福利影院| 久久精品国产亚洲网址 | 不卡高清av手机在线观看 | 亚洲精品一区二区观看 | 国产午夜免费 | 色视频亚洲 | 老司机午夜免费影院 | 日韩国产片 | 99视频精品免费99在线 | 一本色道久久综合狠狠躁 | 欧美乱淫视频 | 大色综合色综合资源站 | 真实国产精品视频国产网 | 欧美日韩你懂的 | 欧美日韩在线成人免费 | 玖玖在线资源 | 国产精品久久做爰 | 国产午夜精品久久久久九九 | 久久国产精品范冰啊 | 国产小网站| 奇米影视888| 一级一级18女人毛片 | 91综合久久婷婷久久 | 四虎永久在线精品2022 | 最新国产在线精品91尤物 | 国产小姨子 | 天天爱天天色天天干 | 伊人久久精品亚洲精品一区 | 国产精品免费福利 | 四虎精品影院4hutv四虎 | 九九精品视频免费 | 97国产视频 | 久草视频在线免费看 | 在线欧美亚洲 |