1

私はこの質問に対して最小限の調査を行ったことを認めます (ほんの数回の浅い Google 検索)。スレッド化パッケージ (具体的には pthreads ですが、私の質問はすべての x86 UNIX ユーザー スレッド ライブラリに適用されます) は、スレッドごとにセグメント レジスタ (fs、cs、ds など) を保存しますか? つまり、各スレッドはセグメント レジスタの独自のコピーを持っているのでしょうか。

4

1 に答える 1

3

最近のほとんどの OS では、セグメント レジスタには OS によって決定される特定の意味があります。OS スレッド ライブラリは、各スレッドのレジスタが常に正しく設定されるようにします。たとえば、Windows では、FS レジスタはスレッド固有のデータを含むセグメントを指し、スレッドが切り替わるたびに更新されますが、DS レジスタはプロセス全体のセグメントを参照するため、プロセス内のすべてのスレッドで同じです。

プラットフォームでユーザーがセグメント レジスタ値を設定できる場合、他のレジスタと同様に、それらがスレッド スイッチ間で適切に保持されることが期待されます。

一般に、セグメント レジスタが保持されることを期待します。これは、セグメント レジスタが「あるべき」ものを調べるよりも簡単であり、驚きの可能性を最小限に抑えるためです。

于 2011-07-28T14:47:11.943 に答える