Linux内存管理 - PAGE_OFFSET理解
2015-01-10 16:45
741 查看
Linux内存管理 - PAGE_OFFSET理解
PAGE_OFFSET 代表的是内核空间和用户空间对虚拟地址空间的划分,对不同的体系结构不同。比如在32位系统中3G-4G 属于内核使用的内存空间,所以 PAGE_OFFSET = 0xC0000000。在X86-64架构下是ffff880000000000。可以看到内核程序可以可以访问从PAGE_OFFSET
之后的内存,访问所有的信息(注意页的写保护)。
参考:https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt
PAGE_OFFSET 代表的是内核空间和用户空间对虚拟地址空间的划分,对不同的体系结构不同。比如在32位系统中3G-4G 属于内核使用的内存空间,所以 PAGE_OFFSET = 0xC0000000。在X86-64架构下是ffff880000000000。可以看到内核程序可以可以访问从PAGE_OFFSET
之后的内存,访问所有的信息(注意页的写保护)。
参考:https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt
Virtual memory map with 4 level page tables: 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm hole caused by [48:63] sign extension ffff800000000000 - ffff87ffffffffff (=43 bits) guard hole, reserved for hypervisor ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB) ... unused hole ... ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks ... unused hole ... ffffffff80000000 - ffffffffa0000000 (=512 MB) kernel text mapping, from phys 0 ffffffffa0000000 - ffffffffff5fffff (=1525 MB) module mapping space ffffffffff600000 - ffffffffffdfffff (=8 MB) vsyscalls ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole The direct mapping covers all memory in the system up to the highest memory address (this means in some cases it can also include PCI memory holes). vmalloc space is lazily synchronized into the different PML4 pages of the processes using the page fault handler, with init_level4_pgt as reference. Current X86-64 implementations only support 40 bits of address space, but we support up to 46 bits. This expands into MBZ space in the page tables. ->trampoline_pgd: We map EFI runtime services in the aforementioned PGD in the virtual range of 64Gb (arbitrarily set, can be raised if needed) 0xffffffef00000000 - 0xffffffff00000000 -Andi Kleen, Jul 2004
相关文章推荐
- 《深入理解LINUX内存管理》学习笔记 (三)
- Linux内存管理之kmalloc 与 __get_free_page()
- 通过Linux理解操作系统(四):内存管理(上)
- 深入理解Linux中内存管理
- 通过Linux理解操作系统(四):内存管理(上)
- 《深入理解LINUX内存管理》学习笔记(一)0.02.01修正版,红字部分为修正后的内容
- 深入理解Linux中内存管理
- 深入理解Linux内存管理机制(一)
- 《深入理解LINUX内存管理》学习笔记
- 深入理解Linux中内存管理
- Linux内存管理之kmalloc 与 __get_free_page()
- Linux内存管理之kmalloc 与 __get_free_page()
- Linux内存管理之kmalloc 与 __get_free_page()
- 要理解LINUX内存管理子系统,先要熟悉一些概念
- linux内存管理 之 页面分配器page allocator
- 《深入理解LINUX内存管理》学习笔记 (四)
- linux mips架构PHYS_OFFSET、CAC_BASE、HIGHMEM_START、PAGE_OFFSET、virt_to_phys、phys_to_virt、page_to_phys的定义
- 深入理解Linux内存管理机制(一)
- 通过Linux理解操作系统(五):内存管理(下)
- 《深入理解LINUX内存管理》学习笔记