在我看來,它們非常相似。那麼slab和buddy系統之間的關係是什麼?板坯和夥伴系統有什麼區別?
回答
板是相同大小的對象的集合。它通過分配相當大的內存塊並將其分割成相同大小的塊來避免碎片化。件數通常遠遠大於兩件,比如說128件左右。
有兩種方法可以使用平板。首先,您可以爲您分配頻繁的一種尺寸設置一塊平板。例如,內核可能有一個inode板塊。但是,您也可以有一些漸進大小的平板,例如128字節的平板,192字節的平板,256字節的平板等等。然後,您可以從下一個尺寸大小的塊中分配任意大小的對象。
請注意,在任何情況下,除非整個板被釋放回全局「大塊」分配器,否則slab不會重新使用不同大小的對象的內存。
好友系統是一個不相關的方法,其中每個對象都有一個「好友」對象,當它被釋放時它與它合併。當需要更小的塊時,塊被分成兩半。請注意,在夥伴系統中,塊被劃分併合併爲較大的塊,作爲分配和返回重用的主要方式。這與板坯的工作方式有很大不同。
或者把它更簡單:
好友系統:分配和合並時,各種大小的塊劃分釋放需要有效分割大塊成各種尺寸的更小的塊時。
板:非常大的塊被分配一次並分成相等大小的塊。沒有其他分割或合併發生,並且釋放的塊僅保存在列表中以分配給後續分配。
Linux內核的核心分配器是一個靈活的夥伴系統分配器。該分配器爲各種板坯allcoators提供板坯。
通常,板塊分配器是一個固定大小的板塊列表,用於放置預定義的大小元素。由於相同大小的池中的所有對象都沒有碎片。
好友分配器將內存分成大小加倍的塊。例如,如果min塊是1k,則下一個將是2K,然後是4K等。因此,如果我們要求分配100b,那麼將選擇大小爲1k的塊。什麼會導致碎片化,但允許分配任意大小的對象(所以它非常適合用戶內存分配,其中確切的對象大小可以是任何大小)。
參見:
也差了檢查這個介紹:http://events.linuxfoundation.org/images/stories/pdf/klf2012_kim.pdf 幻燈片第22頁顯示differencies的總結。
- 1. chdir(...)和系統(「cd ...」)有什麼區別?
- 2. 有關Windows的系統和環境變量有什麼區別?
- 3. 在操作系統中,系統調用和中斷有什麼區別?
- 4. unix系統編程中send和sendto系統調用有什麼區別?
- 5. dbcontext和POCO模板有什麼區別?
- 6. 「C系統調用」和「C庫例程」有什麼區別?
- 7. 安裝Rubygems「本地」和「系統範圍」有什麼區別?
- 8. 操作系統中頁面和塊之間有什麼區別?
- 9. SQL Server系統視圖中的type和xtype有什麼區別?
- 10. 系統verilog斷言中的 - >和=>有什麼區別?
- 11. hybris系統初始化和更新有什麼區別?
- 12. Linux和OSX的文件系統有什麼區別?
- 13. 網格系統下的push和offset有什麼區別?
- 14. ex-FAT和NTFS文件系統有什麼區別?
- 15. 系統調用和指令集有什麼區別
- 16. Windows系統和PowerShell的環境變量有什麼區別?
- 17. 操作系統和內核有什麼區別?
- 18. Intel x86 Atom和Atom_64系統映像有什麼區別?
- 19. 系統範圍的vimrc和用戶的vimrc有什麼區別?
- 20. 操作系統和框架有什麼區別?
- 21. c中的open和creat系統調用有什麼區別?
- 22. Neo4j和SQL關係有什麼區別?
- 23. ERD和「關係圖」有什麼區別?
- 24. 使用PHP建立夥伴關係
- 25. 有什麼區別`和$(Bash中有什麼區別?
- 26. 有什麼區別? :和||
- 27. &&和||有什麼區別?
- 28. 「/」和「/ *」有什麼區別?
- 29. 有什麼區別:。!和:r!?
- 30. ==和===有什麼區別?
如果你可以在你的答案中解釋好友分配器和slab分配器之間的連接(如[this](http://image.slidesharecdn.com/mm-121212232739-phpapp02/95/linux- memory-management-11-638.jpg?cb = 1355354903),但可能有更多的細節)。謝謝。 –