![]() ![]() Permanent kernel mappings allow the kernel to establish long-lasting mappings of high-memory page frames into the kernel address space. After all, only 128 MB of linear address space are left for mapping the high memory, while PAE supports systems having up to 64 GB of RAM. Of course, none of these techniques allow addressing the whole RAM simultaneously. ![]() Conversely, establishing a temporary kernel mapping never requires blocking the current process its drawback, however, is that very few temporary kernel mappings can be established at the same time. Thus, a permanent kernel mapping cannot be used in interrupt handlers and deferrable functions. In this section, we focus on the first two techniques the third one is discussed in Section 7.3 later in this chapter.Įstablishing a permanent kernel mapping may block the current process this happens when no free Page Table entries exist that can be used as "windows" on the page frames in high memory (see the next section). To do this, the kernel may use three different mechanisms, which are called permanent kernel mappings, temporary kernel mappings, and noncontiguous memory allocation. Once allocated, a high-memory page frame has to be mapped into the fourth gigabyte of the linear address space, even though the physical address of the page frame may well exceed 4 GB. ![]() In short, allocation of high-memory page frames must be done only through the alloc_pages( ) function and its alloc_page( ) shortcut, which both return the address of the page descriptor of the first allocated page frame. In turn, the kernel cannot use the page frame even worse, the page frame cannot be released because the kernel has lost track of it. If the allocator assigned a page frame in high memory,_get_free_pages( )Ĭannot return its linear address because it doesn't exist thus, the function returns NuLL. This implies that any page allocator function that returns the linear address of the assigned page frame doesn't work for the high memory.įor instance, suppose that the kernel invoked_get_free_pages(GFP_HiGHMEM,0) to allocate a page frame in high memory. Page frames above the 896 MB boundary are not mapped in the fourth gigabyte of the kernel linear address spaces, so they cannot be directly accessed by the kernel. ![]()
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |