linux對記憶體區內的頁框的分配和釋放,採用的演算法是夥伴系統。
如上圖,linux分配頁時,只能分配2^n個頁。核心維護max_order個鍊錶,每個鍊錶記錄著連續的空閒頁。第乙個鍊錶中的每一項為1個空閒頁,第二個鍊錶中的每一項為2個空閒頁,第三個鍊錶中的每一項為4個空閒頁。。。,依次類推。分配頁時,從對應的鍊錶上摘除空閒頁;釋放頁時,將對應的頁歸還到對應的鍊錶。分配釋放頁的過程中,可能伴隨著記憶體頁的拆分和合併。比如要分配16個空閒頁,但是對應的鍊錶為空,這時如果32個空閒頁對應的鍊錶如果不為空,則從鍊錶中摘除32個空閒頁,並將其一分為二,其中16個頁用於記憶體分配,剩餘16個頁則插入到16個頁對應的鍊錶中。
儘管頁的分配演算法是簡單的,但是實際過程卻非常複雜。這是因為分配頁式必須考慮一下幾點:
1 備用記憶體區。當從乙個記憶體區無法得到記憶體時,系統會從同一記憶體節點的其它記憶體區或者從另乙個記憶體節點中的記憶體區中獲取記憶體。
2 頁的換入和換出,在沒有足夠多的空閒頁時,可能需要將頁換出以獲取空閒記憶體。
3 頁的**,對一些緩衝區的不再使用的頁進行**,以獲取空閒頁。
4 系統中必須保持一定「水位」的空閒頁,以應付對記憶體的緊急分配。如果系統將頁分配完,在急需記憶體時,再進行頁的**或換出,無疑是非常糟糕的設計。系統中必須保持一定量的記憶體頁。
5 不同的分配策略。不同的分配策略可能採用的方法有區別。
總之,頁的分配和釋放需要考慮許多因素,盡量滿足記憶體分配的同時,要保證系統的穩定性和健壯性。
Linux記憶體管理之三 頁的分配和釋放
linux對記憶體區內的頁框的分配和釋放,採用的演算法是夥伴系統。如上圖,linux分配頁時,只能分配2 n個頁。核心維護max order個鍊錶,每個鍊錶記錄著連續的空閒頁。第乙個鍊錶中的每一項為1個空閒頁,第二個鍊錶中的每一項為2個空閒頁,第三個鍊錶中的每一項為4個空閒頁。依次類推。分配頁時,從...
ExtJS實踐 之三 頁面布局應用
extjs提供了很多容器,最常用的是panel,其他的還有tabpanel viewport window等,開發應用程式時,最好是在最外層例項化乙個viewport,然後將其他元件放置到其中。原因是viewport會自動充滿整個頁面,同時會根據瀏覽器視窗尺寸的調整而自動調整。需要注意的是,乙個頁面...
今天筆試的幾道題目分享 三頁智力題 三頁程式題
題目直接上圖,可能不是太清晰 不太清晰的題目我稍作說明下 1.第一題是左邊的平面圖,經過摺疊後會變成右邊哪個立體的圖形。2.第二題是從起點到終點,要不重複abcd四個點走到終點,有多少種走法。3.第三題是用帶 2,1,6的三張卡片 能不能組成乙個整除43的數,答案是 能 和不能。4.這個比較清楚,就...