需要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页上写了以下声明,这可能有助于您理解 \“新结构还使计算汇编代码中使用的值的偏移变得相当容易\”