Pthread 段寄存器

发布于 2024-11-19 18:07:51 字数 129 浏览 3 评论 0原文

我承认我对这个问题做了很少的研究(只是一些浅层的谷歌搜索)。线程包(特别是 pthreads,但我的问题适用于所有 x86 unix 用户线程库)是否为每个线程保存段寄存器(fs、cs、ds 等)?换句话说,每个线程是否都有自己的段寄存器副本?

I will admit I did minimal research for this question (just a few shallow google searches). Do threading packages (pthreads specifically, but my question applies to all x86 unix user thread libraries) save segment registers (fs, cs, ds, etc) per thread? In other words, does each thread have its own copy of segment registers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失眠症患者 2024-11-26 18:07:51

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

如果平台允许用户设置段寄存器值,那么我希望它们能够在线程切换之间正确保留,就像任何其他寄存器一样。

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

On most modern OSes, the segment registers have specific meanings determined by the OS. The OS thread libraries will ensure that the registers are set correctly for each thread at all times. e.g. on Windows, the FS register points to a segment with thread-specific data, which is thus updated with every thread switch, whereas the DS register refers to a process-wide segment, so is the same for all threads within a process.

If a platform allows the user to set segment register values, then I would expect them to be properly preserved across thread switches, just like any other register.

In general, I would expect the segment registers to be preserved, because that is easier than looking up what they "should" be, and leads to the least possibility of surprise.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文