Chinaunix
标题:
内核运行地址,堆栈地址问题
[打印本页]
作者:
rw99yy
时间:
2009-03-30 11:52
标题:
内核运行地址,堆栈地址问题
请问:
1 内核本身的运行地址是哪个地址,我想应该是被bootloader加载到的地址吧,那大小又是多少如何确定的呢?
2 堆和栈的地址又是多少呢?又是如何确定的呢?
作者:
jiangzj123
时间:
2009-03-30 15:36
内核运行于虚拟高端地址,跟bootloader加载到的物理地址是两码事
作者:
rw99yy
时间:
2009-04-02 14:09
不是吧 居然没人来看看?
作者:
wanghonghui
时间:
2009-04-02 14:21
内核运行在内核逻辑地址空间,也就是0xC0000000开始系统实际物理内存大小的虚拟地址空间,不是虚拟高端地址空间;bootloader加载内核的地址是内核逻辑地址对应的虚拟地址。
作者:
rw99yy
时间:
2009-04-02 16:32
那堆栈的地址呢 堆栈对应地址是多少怎么确定 ?
作者:
fantry_t
时间:
2009-04-02 22:40
标题:
回复 #5 rw99yy 的帖子
堆:内核里面使用的堆都是通过vmalloc来获取的,而vmalloc获取的其实就是3G~4G之间除了哪些直接映射物理内存条之外的地址空间,所以在内核里面所有的堆中中的东西起地址永远超过0xC0000000+RAM_SIZE的。(RAM_SIZE<=896)。
栈:任何一个内核routine在运行时,其都有依赖于某个进程的环境,也就是current指向的进程。栈的地址就是current指向的那个页面的顶端开始。大小要么是4K要么是8K,是有编译内核的时候决定的。
和bootloader看到的物理地址的关系。在内核启动的时候,内核会对所有的物理内存做个一一映射到3G开始的虚拟地址中,因此内核中看到的代码的地址和bootloader看到的物理地址实际上差了一个常数即0xC0000000. 表面上只是差了一个常数,但是从该虚拟地址到内存物理地址的映射还是要经过cpu的mmu硬件机制,也就是还是要依靠页表机制,只是这页表计算出来的物理地址正好是和该虚拟地址差常数。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2