2011-07-13 10 views
1

私はこの質問のために最小限の研究を行ったことを認めます。スレッドごとにスレッド(fth、cs、ds、等)を保存するスレッド(特にpthreads、しかし私の質問はすべてのx86 unixユーザスレッドライブラリに適用されます)?言い換えれば、各スレッドはセグメントレジスタの独自のコピーを持っていますか?Pthreadセグメントレジスタ

+0

なぜ気になりますか? –

答えて

3

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

プラットフォームでセグメントレジスタの値を設定できる場合は、他のレジスタと同様に、スレッドスイッチ間でセグメントレジスタの値を正しく保存することが期待されます。

一般的に、私はセグメントレジスタが保存されることを期待します。なぜなら、それは「必要がある」ルックアップよりも簡単であり、驚きの可能性が最も低いからです。

+0

素晴らしいです。最近C言語でスレッドライブラリを開発したので(私は学習目的のために)質問しました。ありがとうございました! – Chris