如果我在POSIX环境中使用pthread,并且上下文切换即将发生,esp
寄存器的当前值必须存储在某处,以便在上下文切换回此时我可以检索它线程,因为esp
寄存器的值将被另一个线程保存的SP值覆盖。我认为不可能为每个线程分别注册esp
(如果我错了,请纠正我)。话虽如此,我想知道在上下文切换被命中之前,当前线程的SP值存储在什么数据结构中?
我尝试从struct pthread*
的值中查找pthread_t
的值,但是当我调用某个函数来更改线程的当前SP时,没有任何变化测试(即在调用测试函数之前和之后进行比较)。
答案 0 :(得分:1)
这完全取决于Posix库的实现方式。如果线程由OS实现,则在上下文切换之前,所有寄存器的值都存储在线程的[process]上下文块中。
如果线程是在库中实现的,则寄存器必须存储在由库管理的某些数据结构中。这样的库实现需要保存所有通用寄存器,但不需要(也不能)保存特定于进程的内核寄存器。