2016-05-24 56 views

cevap

8

Bir levha aynı boyuttaki nesnelerin bir koleksiyonudur. Oldukça büyük bir bellek bloğu tahsis ederek ve onu eşit boyutlu parçalara bölerek parçalanmayı önler. Parçaların sayısı tipik olarak ikiden çok daha büyüktür, yani 128 ya da öylesine.

Döşeme kullanmanın iki yolu vardır. Öncelikle, çok sık ayırdığınız bir boyut için bir kütük olabilir. Örneğin, bir çekirdek bir inode slab olabilir. Ancak, 128 baytlık bir slab, 192 baytlık bir slab, 256 baytlık bir slab gibi, ilerleyici boyutlarda bir dizi slab da olabilir. Daha sonra, bir sonraki slab boyutundan herhangi bir boyuttaki bir nesneyi ayırabilirsiniz.

Her iki durumda da, bir slabın, tüm slab genel bir "büyük blok" ayırıcısına geri gönderilmediği sürece, farklı boyuttaki bir nesnenin belleğini yeniden kullanmaz.

Arkadaşlık sistemi, her nesnenin, serbest bırakıldığında bir araya getirilen "arkadaş" nesnesine sahip olduğu ilişkisiz bir yöntemdir. Küçük bloklara ihtiyaç duyulduğunda bloklar yarıya bölünür. Arkadaş sistemde blokların ayrıldığını ve birincil kullanım aracı olarak daha büyük bloklara dönüştürüldüğünü ve yeniden kullanım için geri döndüğünü unutmayın. Bu, plakaların nasıl çalıştığından çok farklı.

Ya da daha basit bir ifade edilecek olursa

eşleştirme sistemi: ayrılan ve birleştirildi zaman çeşitli boyutlarda bloklar ayrılır gerektiğinde verimli çeşitli boyutlarda küçük bloklar halinde büyük bir blok bölmek için serbest zaman.

Slab: Çok büyük bloklar ayrılır ve eşit büyüklükte bloklara bölünür. Başka hiçbir bölünme ya da birleşme gerçekleşmez ve serbest bırakılan bloklar daha sonraki tahsislere tahsis edilecek bir listede tutulur.

Linux çekirdeğinin çekirdek ayırıcısı, esnek bir arkadaş sistem ayırıcısıdır. Bu ayırıcı, çeşitli döşeme allcoator'ları için plakalar sağlar.

+0

Ayrıca, cevabınızdaki buddy allocator ve slab allocator arasındaki bağlantıyı açıklayabiliyorsanız oldukça hoş olurdu (bu gibi bir şey (http://image.slidesharecdn.com/mm-121212232739-phpapp02/95/linux- bellek yönetimi-11-638.jpg? cb = 1355354903), ama muhtemelen daha fazla detay ile). Teşekkürler. –

2

Genel olarak döşeme ayırıcısı, önceden tanımlanmış boyut elemanlarını yerleştirmek için uygun sabit boyutlu bir plaka listesidir. Aynı boyuttaki havuzdaki tüm nesneler parçalanma değildir.

Buddy ayırıcısı, belleği ikiye katlanan parçalara ayırır. Örneğin, min yığın 1k ise, sonraki 2K, sonra 4K vb. Olacaktır. Yani eğer 100b'yi tahsis etmeyi talep edersek, 1k boyutu olan yığın seçilecektir. Parçalanmaya neden olan şey, ancak keyfi boyutta nesnelerin tahsis edilmesine izin verir (bu nedenle, tam nesne boyutunun herhangi bir boyutta olabileceği kullanıcı bellek ayırmalarına çok uygundur).

Ayrıca bakınız: https://en.wikipedia.org/wiki/Buddy_memory_allocation