想知道为什么thread_struct
是Linux中进程堆栈的一部分。
Robert Love说,它可能位于进程堆栈的最低内存地址。
1)为什么我们需要首先将它放在 Process Stack 中?
2)如果我们需要将它放在进程堆栈的固定地址(最低内存地址) - 这是否意味着进程堆栈的大小是固定的?
答案 0 :(得分:3)
thread_struct位于与堆栈固定偏移的原因是因为它是一个经常访问的数据结构,每个任务需要一个单独的数据结构。
因此,最好的办法是将thread_struct的地址放入寄存器中。这样,每当我们需要它时,它的地址就已经存在于寄存器中以便访问它。由于寄存器作为任务上下文切换的一部分进行交换,每次切换任务时地址都会自动更改。
只有一个问题 - 某些架构(如x86)的寄存器供应非常有限。 "消瘦"仅用于thread_struct地址的整个寄存器是不可行的。
但是,我们已经有一个指向堆栈的专用寄存器。通过将thread_struct置于堆栈开始的固定偏移量处,我们可以通过对堆栈指针寄存器的值应用位掩码来获取此重要数据结构的地址 - 因此我们可以获得两全其美的优势 - thread_stuck并且不浪费寄存器。
是的,内核空间任务堆栈是有限的,通常是一个或两个架构页面,但使用thread_struct和堆栈指针的技巧不是原因。