gpt4 book ai didi

linux - 在进程栈中有 thread_struct 的意义

转载 作者:太空狗 更新时间:2023-10-29 12:02:15 24 4
gpt4 key购买 nike

想知道为什么 thread_struct 是 Linux 中的 Process Stack 的一部分。Robert Love 说,它可能位于进程堆栈的最低内存地址。

1) 为什么我们需要将它放在进程堆栈的第一位?

2) 如果我们需要将它放在进程堆栈的固定地址(最低内存地址) - 这是否意味着进程堆栈的大小是固定的?

最佳答案

thread_struct 位于堆栈的固定偏移位置的原因是因为它是一种经常访问的数据结构,并且每个任务都需要一个单独的数据结构。

因此,最好的办法是将 thread_struct 的地址放入寄存器中。这样,每当我们需要访问它时,它的地址就已经在寄存器中,并且由于寄存器是作为任务上下文切换的一部分进行交换的,所以每次我们切换任务时,地址都会自动更改。

只有一个问题 - 某些体系结构(如 x86)的寄存器供应非常有限。仅仅为 thread_struct 地址“浪费”整个寄存器是不可行的。

但是,我们已经有一个指向堆栈的专用寄存器。通过将 thread_struct 放置在距堆栈起始位置的固定偏移处,我们能够通过对堆栈指针寄存器的值应用位掩码来获取这个重要数据结构的地址 - 这样我们就可以两全其美 - 廉价访问thread_stuck 并且不浪费寄存器。

是的,内核空间任务堆栈是有限的,通常是一个或两个架构页面,但 thread_struct 和堆栈指针的技巧不是原因。

关于linux - 在进程栈中有 thread_struct 的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30865662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com