如何解决需要Linux 2.6内核中的thread_info结构吗?
| 在Linux 2.6内核之前,每个进程的内核堆栈末尾都有“ 0”。没有“ 1”的概念。但是在Linux 2.6内核中,不是将ѭ2放在进程的内核堆栈的末尾,而是将ѭ1放在末尾。该thread_info结构包含指向“ 2”结构的指针。 引入“ 5”结构的需要是什么?如果将task_struct
放置在进程内核堆栈的末尾,则可以直接使用stack pointer
访问task_struct
结构。
在2.6内核中,使用slab_allocator
动态分配task_struct
。在2.6内核之前,它是静态分配的吗?
解决方法
弗兰克·H,他正在寻找(出于我个人的兴趣,我怀疑)是这种变化的原因。这就是我用l33t Google技能发现的东西。链接后面的更多信息:
\“ task_struct很大。在32位计算机上大约为1.7KB。
另一方面,您可以轻松地看到thread_info更苗条。
内核堆栈为4或8KB,而1.7KB则相当漂亮
因此,存储一个更苗条的结构,它指向task_struct,
立即节省大量堆栈空间,是可扩展的解决方案。”
(c)http://www.spinics.net/lists/newbies/msg22263.html
,我们之所以需要thread_info的原因是由于我们正在使用Slab分配器为task_struct分配内存。现在您可能会问这些之间的关系是什么?
要了解您需要了解Slab Allocator的工作方式。
如果没有Slab Allocator,内核开发人员可以为特定进程在内核堆栈中为task_struct分配内存,以便可以轻松访问它。现在随着Slab Allocator的出现,内存将分配给Slab Allocator确定的task_struct。因此,使用Slab分配器,您可以将task_struct存储在其他位置,而不是存储在特定进程的内核堆栈中。现在,内核开发人员引入了thread_info并在其中放置了一个指向task_struct所在位置的指针。这就是为什么我们必须使用thread_info。
您可以在Robert Love的书Linux Kernel Development中阅读有关Slab Allocator的信息。
,您好在linux内核开发第三版的第25页上写了以下声明,这可能有助于您理解
\“新结构还使计算汇编代码中使用的值的偏移变得相当容易\”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。