POSIX C线程中上下文切换之前存储的当前堆栈指针寄存器的值

时间:2017-04-04 23:10:20

标签: c pthreads posix context-switch stack-pointer

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

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

1 个答案:

答案 0 :(得分:1)

这完全取决于Posix库的实现方式。如果线程由OS实现,则在上下文切换之前,所有寄存器的值都存储在线程的[process]上下文块中。

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