Библиотека сайта rus-linux.net
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: 8.1 Describing Virtual Memory Up: understand-html Previous: 7.5 Avoiding Fragmentation   Contents   Index
8. Non-Contiguous Memory Allocation
It is preferable when dealing with large amounts of memory to use physically
contiguous physical pages in memory both for cache related and memory access
latency issues. Unfortunately, due to external fragmentation problems with
the buddy allocator, this is not always possible. Linux provides a mechanism
via vmalloc()
where non-contiguous physically memory can be used
that is contiguous in virtual memory.
An area is reserved in the virtual address space between
VMALLOC_START
and VMALLOC_END
. The location
of VMALLOC_START
depends on the amount of available physical
memory but the region will always be at least VMALLOC_RESERVE
in size, which on the x86 is 128MiB. The exact size of the region is discussed
in Section 5.1.
The page tables in this region are adjusted as necessary to point to physical
pages which are allocated with the normal physical page allocator. This means
that allocation must be a multiple of the hardware page size. As allocations
require altering the kernel page tables, there is a limitation on how much
memory can be mapped with vmalloc()
as only the virtual addresses
space between VMALLOC_START
and VMALLOC_END
is
available. As a result, it is used sparingly in the core kernel. In 2.4.20,
it is only used for storing the swap map information (see Chapter
12) and for loading kernel modules into memory.
This small chapter begins with a description of how the kernel tracks which areas in the vmalloc address space are used and how regions are allocated and freed.
Subsections
- 8.1 Describing Virtual Memory Areas
- 8.2 Allocating A Non-Contiguous Area
- 8.3 Freeing A Non-Contiguous Area
Next: 8.1 Describing Virtual Memory Up: understand-html Previous: 7.5 Avoiding Fragmentation   Contents   Index Mel 2004-02-15