2011-07-13 58 views
1

我承认我对这个问题做了最小的研究(只是几个浅谷歌搜索)。对线程进行线程化(特别是pthread,但是我的问题适用于所有x86 unix用户线程库)保存每个线程的段寄存器(fs,cs,ds等)?换句话说,每个线程都有自己的段寄存器副本吗?Pthread段寄存器

+0

你为什么在意? –

回答

3

在大多数现代操作系统中,段寄存器具有由操作系统决定的特定含义。 OS线程库将确保为每个线程始终正确设置寄存器。例如在Windows上,FS寄存器指向具有线程特定数据的段,因此每个线程切换都会更新该段,而DS寄存器指向进程范围的段,因此对于进程中的所有线程都是相同的。

如果一个平台允许用户设置段寄存器值,那么我希望它们可以像其他任何寄存器一样在线程切换器中正确保存。

一般来说,我会希望段寄存器被保留下来,因为这比查找它们“应该”更容易,并且导致出乎意料的可能性最小。

+0

太棒了。我问这个问题是因为我最近在C语言中开发了一个线程库(用于学习目的)。谢谢! – Chris