Chinaunix

标题: where to locate kernel stack per task . [打印本页]

作者: nuclearxin    时间: 2016-12-08 18:33
标题: where to locate kernel stack per task .
好多文档都说 每个task有自己的 kernel stack  2个page 大小  在用户空间的时候是 空的除了thread_info
但是完全不知道这个 8k 存在哪里?

task struct 里面有这个的地址吗? kernel的 address space 里面吧

每创建一个task 就回用2g page 的内存消耗吗??????





作者: nuclearxin    时间: 2016-12-09 09:34
https://www.quora.com/What-is-a- ... ing-the-thread_info

感觉是自己撸的节奏呢。。。。。。

奉上 非官方答案
期待更好的
作者: mournjust    时间: 2016-12-29 11:32
回复 1# nuclearxin

我只能从ARM linux的角度来理解。
每个task都有2个page(8K)的空间。虽然你感觉8K很大,但是即使是1000个进程也才8M而已。
这2 page除了放每个进程的thread_info之外,还用作内核的的栈。




至于task中是否有这个地址,我没有仔细查看,我猜没有。因为不需要。内核总是通过SP来获得这个地址的

static inline struct thread_info *current_thread_info(void)
{
        return (struct thread_info *)
                (current_stack_pointer & ~(THREAD_SIZE - 1));
}

1482982215(1).png (4.28 KB, 下载次数: 54)

1482982215(1).png

作者: Tinnal    时间: 2016-12-29 23:19
回复 1# nuclearxin

thread_info就是这个8K的非常底,如果你想通过task_struct取得这栈的地址,可以释通过task_struct的stack成员取得。









欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2