2016-05-24 23 views

回答

8

板是相同大小的對象的集合。它通過分配相當大的內存塊並將其分割成相同大小的塊來避免碎片化。件數通常遠遠大於兩件,比如說128件左右。

有兩種方法可以使用平板。首先,您可以爲您分配頻繁的一種尺寸設置一塊平板。例如,內核可能有一個inode板塊。但是,您也可以有一些漸進大小的平板,例如128字節的平板,192字節的平板,256字節的平板等等。然後,您可以從下一個尺寸大小的塊中分配任意大小的對象。

請注意,在任何情況下,除非整個板被釋放回全局「大塊」分配器,否則slab不會重新使用不同大小的對象的內存。

好友系統是一個不相關的方法,其中每個對象都有一個「好友」對象,當它被釋放時它與它合併。當需要更小的塊時,塊被分成兩半。請注意,在夥伴系統中,塊被劃分併合併爲較大的塊,作爲分配和返回重用的主要方式。這與板坯的工作方式有很大不同。

或者把它更簡單:

好友系統:分配和合並時,各種大小的塊劃分釋放需要有效分割大塊成各種尺寸的更小的塊時。

板:非常大的塊被分配一次並分成相等大小的塊。沒有其他分割或合併發生,並且釋放的塊僅保存在列表中以分配給後續分配。

Linux內核的核心分配器是一個靈活的夥伴系統分配器。該分配器爲各種板坯allcoators提供板坯。

+0

如果你可以在你的答案中解釋好友分配器和slab分配器之間的連接(如[this](http://image.slidesharecdn.com/mm-121212232739-phpapp02/95/linux- memory-management-11-638.jpg?cb = 1355354903),但可能有更多的細節)。謝謝。 –

2

通常,板塊分配器是一個固定大小的板塊列表,用於放置預定義的大小元素。由於相同大小的池中的所有對象都沒有碎片。

好友分配器將內存分成大小加倍的塊。例如,如果min塊是1k,則下一個將是2K,然後是4K等。因此,如果我們要求分配100b,那麼將選擇大小爲1k的塊。什麼會導致碎片化,但允許分配任意大小的對象(所以它非常適合用戶內存分配,其中確切的對象大小可以是任何大小)。

參見:

也差了檢查這個介紹:http://events.linuxfoundation.org/images/stories/pdf/klf2012_kim.pdf 幻燈片第22頁顯示differencies的總結。

相關問題