82,11 → 82,14 |
the frame allocator first tries to find a zone that can satisfy the |
request (i.e. has the required amount of free frames). Once a suitable |
zone is found, the frame allocator uses the buddy allocator on the |
zone's buddy system to perform the allocation. During deallocation, |
which is triggered by a call to <code>frame_free()</code>, the frame |
allocator looks up the respective zone that contains the frame being |
deallocated. Afterwards, it calls the buddy allocator again, this time |
to take care of deallocation within the zone's buddy system.</para> |
zone's buddy system to perform the allocation. If no free zone is |
found, the frame allocator tries to reclaim slab memory.</para> |
|
<para>During deallocation, which is triggered by a call to |
<code>frame_free()</code>, the frame allocator looks up the respective |
zone that contains the frame being deallocated. Afterwards, it calls |
the buddy allocator again, this time to take care of deallocation |
within the zone's buddy system.</para> |
</formalpara> |
</section> |
|
164,11 → 167,11 |
first entity within a block is used to represent the entire block. |
The first entity keeps the order of the whole block. Other entities |
within the block are assigned the magic value |
<constant>BUDDY_INNER_BLOCK</constant>. This is especially important |
<constant>BUDDY_SYSTEM_INNER_BLOCK</constant>. This is especially important |
for effective identification of buddies in a one-dimensional array |
because the entity that represents a potential buddy cannot be |
associated with <constant>BUDDY_INNER_BLOCK</constant> (i.e. if it |
is associated with <constant>BUDDY_INNER_BLOCK</constant> then it is |
associated with <constant>BUDDY_SYSTEM_INNER_BLOCK</constant> (i.e. if it |
is associated with <constant>BUDDY_SYSTEM_INNER_BLOCK</constant> then it is |
not a buddy).</para> |
</formalpara> |
</section> |
203,7 → 206,7 |
</indexterm> |
|
<para>Slabs of one object type are organized in a structure called slab |
cache. There are ususally more slabs in the slab cache, depending on |
cache. There are usually more slabs in the slab cache, depending on |
previous allocations. If the the slab cache runs out of available slabs, |
new slabs are allocated. In order to exploit parallelism and to avoid |
locking of shared spinlocks, slab caches can have variants of |