After this documentation was released in July 2003, I was approached
by Prentice Hall and asked to write a book on the Linux VM under the Bruce Peren's Open Book Series.
The book is available and called simply "Understanding The Linux Virtual
Memory Manager". There is a lot of additional material in the book that is
not available here, including details on later 2.4 kernels, introductions
to 2.6, a whole new chapter on the shared memory filesystem, coverage of TLB
management, a lot more code commentary, countless other additions and
clarifications and a CD with lots of cool stuff on it. This material (although
now dated and lacking in comparison to the book) will remain available
although I obviously encourge you to buy the book from your favourite book
store :-) . As the book is under the Bruce Perens Open Book Series, it will
be available 90 days after appearing on the book shelves which means it
is not available right now. When it is available, it will be downloadable
from http://www.phptr.com/perens
so check there for more information.
To be fully clear, this webpage is not the actual book.
Next: 7.1 Managing Free Blocks
Up: understand-html
Previous: 6.5 Retiring the Boot
  Contents
  Index
7. Physical Page Allocation
This chapter describes how physical pages are managed and allocated
in Linux. The principal algorithm used is the Binary Buddy
Allocator, devised by Knowlton [#!knowlton65!#] and further described
by Knuth [#!knuth68!#]. It is has been shown to be extremely fast in
comparison to other allocators [#!korn85!#].
This is an allocation scheme which combines a normal power-of-two allocator
with free buffer coalescing [#!vahalia96!#] and the basic concept behind
it is quite simple. Memory is broken up into large blocks of pages where
each block is a power of two number of pages. If a block of the desired size
is not available, a large block is broken up in half and the two blocks are
buddies to each other. One half is used for the allocation and the
other is free. The blocks are continuously halved as necessary until a block
of the desired size is available. When a block is later freed, the buddy is
examined and the two coalesced if it is free.
This chapter will begin with describing how Linux remembers what blocks of
memory are free. After that the methods for allocating and freeing pages will
be discussed in details. The subsequent section will cover the flags which
affect the allocator behavior and finally the problem of fragmentation and
how the allocator handles it will be covered.
Subsections
Next: 7.1 Managing Free Blocks
Up: understand-html
Previous: 6.5 Retiring the Boot
  Contents
  Index
Mel
2004-02-15