Библиотека сайта 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: 10.4 Bounce Buffers Up: 10. High Memory Management Previous: 10.2 Mapping High Memory   Contents   Index
10.3 Mapping High Memory Pages Atomically
The use of kmap_atomic()
is heavily discouraged but slots are
reserved for each CPU for when they are necessary, such as when bounce
buffers, are used by devices from interrupt. There are a varying number of
different requirements an architecture has for atomic high memory mapping
which are enumerated by km_type
. The total number of uses is
KM_TYPE_NR
10.3.
KM_TYPE_NR
entries per processor are reserved at boot time for
atomic mapping at the location FIX_KMAP_BEGIN
and ending
at FIX_KMAP_END
. Obviously a user of an atomic kmap may not
sleep or exit before calling kunmap_atomic()
as the next process
on the processor may try to use the same entry and fail.
The function kmap_atomic()
has the very simple task of mapping
the requested page to the slot set aside in the page tables for the requested
type of operation and processor. The function kunmap_atomic()
is interesting as it will only clear the PTE with pte_clear()
if debugging is enabled. It is considered unnecessary to bother unmapping
atomic pages as the next call to kmap_atomic()
will simply replace
it making TLB flushes unnecessary.
Footnotes
- ...
KM_TYPE_NR
10.3 - There are a total of six different uses for atomic kmaps on the x86.
Next: 10.4 Bounce Buffers Up: 10. High Memory Management Previous: 10.2 Mapping High Memory   Contents   Index Mel 2004-02-15