0

如果我要在 POSIX 环境中使用 pthread,并且即将发生上下文切换,则必须将esp寄存器的当前值存储在某个地方,以便在上下文切换回该线程时可以检索它,因为esp寄存器的值将是被另一个线程保存的 SP 值覆盖。我认为不可能esp为每个线程都有单独的寄存器(如果我错了,请纠正我)。话虽如此,我想知道在上下文切换之前,当前线程的SP值存储在什么数据结构中?

我尝试查找struct pthread*从 的值转换的 ' 值pthread_t,但是当我调用某个函数来更改我正在测试的线程的当前 SP(即在调用测试函数之前和之后进行比较)时,什么都没有改变。

4

1 回答 1

1

这完全取决于 Posix 库是如何实现的。如果线程由操作系统实现,则所有寄存器的值在上下文切换之前存储在线程的 [process] 上下文块中。

如果线程在库中实现,则寄存器必须存储在库管理的某些数据结构中。这样的库实现需要保存所有通用寄存器,但不需要(也不能)保存特定于进程的内核寄存器。

于 2017-04-10T23:57:46.803 回答