Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我承认我对这个问题做了很少的研究(只是一些浅的谷歌搜索)。线程包(特别是 pthreads,但我的问题适用于所有 x86 unix 用户线程库)是否为每个线程保存段寄存器(fs、cs、ds 等)?换句话说,每个线程都有自己的段寄存器副本吗?
在大多数现代操作系统上,段寄存器具有由操作系统确定的特定含义。操作系统线程库将确保始终为每个线程正确设置寄存器。例如,在 Windows 上,FS 寄存器指向具有线程特定数据的段,因此每次线程切换都会更新该段,而 DS 寄存器指向进程范围的段,因此对于进程中的所有线程都是相同的。
如果一个平台允许用户设置段寄存器值,那么我希望它们能够在线程切换中正确保存,就像任何其他寄存器一样。
一般来说,我希望段寄存器被保留,因为这比查找它们“应该”是什么更容易,并且导致意外的可能性最小。