我承认我对这个问题进行了极少的研究(只是一些浅谷搜索)。线程包(特别是pthreads,但我的问题适用于所有x86 unix用户线程库)每个线程保存段寄存器(fs,cs,ds等)?换句话说,每个线程都有自己的段寄存器副本吗?
答案 0 :(得分:3)
在大多数现代操作系统中,段寄存器具有由OS确定的特定含义。操作系统线程库将确保始终为每个线程正确设置寄存器。例如在Windows上,FS寄存器指向具有特定于线程的数据的段,因此每个线程切换都会更新,而DS寄存器指的是进程范围的段,因此对于进程内的所有线程都是相同的。
如果一个平台允许用户设置段寄存器值,那么我希望它们能够在线程交换机中正确保存,就像任何其他寄存器一样。
一般来说,我希望保留段寄存器,因为这比查找它们“应该”的内容更容易,并且导致出乎意料的可能性最小。