如何知道用户进程和内核线程中内核栈的地址范围?

How to know the address range of kernel stack in user process and kernel thread?

我想知道内核堆栈的地址范围。对于user-space进程,我们可以用/proc/pid/maps通过关键字[stack]查看栈地址范围,但不知道哪一个是内核栈。对于内核线程,通常/proc/pid/maps为空。

那么我怎么知道FreeBSD的用户space进程和内核线程的内核栈地址范围呢?


编辑:

好像内核为每个内核线程分配了两个页面(IA-32),我们如何在x86_64下找到这两页的地址? (可能x86_64有点不一样)

内核的堆栈根本没有(据我所知)映射到用户进程的地址space。

在Linux内核3.10下,内核线程可以通过current->stack获取栈起点,其中current是struct task_struct.

的指针