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