13

POSIX XSH 2.8.4 Process Schedulingは、スレッドおよびプロセスのスケジューリング属性の動作を定義します。sched_*インターフェイスは、スレッドではなく、プロセスのスケジューリング プロパティに影響を与えるように指定されていますこれは、次の節で明確にされています。

POSIX モデルは、「プロセス」をシステム リソースの集合体として扱います。これには、オペレーティング システムが制御するプロセッサ上でスケジュールされる可能性がある 1 つまたは複数のスレッドが含まれます。プロセスには独自のスケジューリング属性のセットがありますが、これらは、以下で説明するように、個々のスレッドのスケジューリング動作に間接的な影響を与えます (存在する場合)。

システム スケジューリング競合スコープを持つスレッドの場合、プロセス スケジューリング属性は、スレッドまたはそのスレッド専用の基になるカーネル スケジューリング エンティティのスケジューリング属性または動作に影響を与えません。

私がこれを読んだのは、「システム スケジューリング コンテンション スコープ」のみがサポートされているシステム (Linux/glibc はそのようなシステムです) では、sched_*関数はまったく目に見える影響を与えるべきではないということです。

sched_*これは、特定のスレッドのスケジューリング属性を設定するLinux/glibc での現在の動作の現実に反しています。

一般的にこの状況をよりよく理解したいということとは別に、次の重要な質問があると思います。

  1. この不一致の根拠を示す文書はありますか?

  2. 標準の私の読みは正しいですか?特に、単一スレッド アプリケーション (メイン スレッドがデフォルトのスケジューリング ポリシーを使用しており、変更できないシステム競合スコープを使用している場合) では、 and が影響を与えないように指定されていることはsched_setparam、私には本当に驚くべきことです。sched_setscheduler

  3. 標準のsched_*機能の有用性は何ですか? それらはほとんどの実装に影響を与えず、プロセス競合スコープをサポートする実装にも最小限の影響しかないように思えます。誰かがそれらの使用目的を説明できますか?

4

2 に答える 2

1

その理由は、NPTL が実装される前からこの方法であり、スレッド グループ全体のスケジューリング属性のサポートをカーネルに提供する人が誰もいなかったためだと思います。

そしておそらく、あなたが指摘したように、POSIX がそれらを指定する方法は、プロセス競合の範囲がなければ、実際にはまったく役に立たないからです…

于 2014-01-19T04:47:14.753 に答える
0

sched_setparamLinuxでのetcの動作の理論的根拠は、スレッドは実際にはclone(2)システムコールによって作成されたプロセスであるということです。glibc/nptl/sysdeps/pthread/createthread.c

于 2012-11-21T14:10:22.653 に答える