【问题标题】:Does kernel have its own stack (not kernel thread)? And how to read the `vm_map` structure of kernel in FreeBSD?内核是否有自己的堆栈(不是内核线程)?以及如何在 FreeBSD 中读取内核的 vm_map 结构?
【发布时间】:2015-03-28 07:41:12
【问题描述】:
我需要在 FreeBSD x86_64 下找到所有内核拥有的内存区域。一种选择是遍历vm_map_entry 并找到start_addr 和end_addr 作为K0-K1、K2-K3、K4-K5、K7-K8。
我注意到,这些区域没有堆栈。我相信内核的堆栈非常有限,但是如何找到它的地址呢?
另外,如何知道哪个vm_map 是内核的。
即如何编写内核模块来读取内核vm_map的信息?
【问题讨论】:
标签:
memory
memory-management
kernel
driver
freebsd
【解决方案1】:
这并没有直接回答你的问题,而是看一下故障转储代码,即sys/kern/kern_dump.c。它基本上可以满足您的需要 - 它转储内核拥有的物理内存部分。
至于堆栈 - 内核没有单个堆栈;每个线程都有一个内核堆栈,用户态线程也有一个用户态堆栈。内核堆栈确实有限,为 KSTACK_PAGES,通常为 4(以页为单位,而不是字节)。