2011-11-23 130 views
2

在Linux中的线程上下文切换期间,用于保存线程状态(如PC,SP和寄存器)的结构是什么?相当于freebsd中的TCB。如果可能的话,请指向源文件hereLinux中的线程控制块

请注意,PCB本身是不够的,因为我们有PC,SP等每个线程不是每个进程。

回答

6

它实际上是task_struct。在Linux中,任务可以是一个线程,一个进程或其中的某个任务。一个线程就是你赋予一个任务的名字,与其他任务共享大多数事物(VMA的,文件描述符等)。

这与线程只是一种特定类型的进程并且可以通过相同的函数等进行处理的想法大相径庭...... Plan 9的rfork()和Linux的clone()允许创建一个可定制的进程共享级别,所以你最终使用相同的机制来创建进程和线程。

1

也许你想setcontext和朋友(但你的代码不会很便携,而且很难得到正确的)?

或者你是从内核说话吗?那么也许task_struct可能是你期待的?

+0

是的 - 我在寻找更晚的 - 但我不确定task_struct的thread_info是正确的,因为它似乎没有任何结构来存储上下文切换过程中的寄存器。事实上task_struct正是PCB。 – Fakrudeen

+0

我不知道答案,但是从'task_struct'中,您可能可以获得地址空间的表示形式,并从地址空间获取*线程任务*的列表? –