
私はLinuxプロセススケジューラについて学び、pthread_setsched関数について読みました。https://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
私を驚かせる一つのことは、スレッドが独自の優先順位/カテゴリを変更できることです。プロデューサーやコンシューマーなどの特定のマルチスレッドアプリケーションを構成するためにこれがどのように妥当であるかを知ることができますが、すべてのプロセスが独自の優先順位設定を要求する可能性があるため、システムの安定性のリスクがあるようです。私のhelloworld.outが最高の優先順位でSCHED_FIFOを要求できないのはなぜですか?これにより、システムが完全にロックされる可能性があります。
それでは、プロセスがスケジューラを完全に制御するのを防ぐメカニズムは何ですか?システムエラーEPERMを設定できるようですが、これはどこで構成されていますか?
答え1
カーネルはこれを行います。ルールについては後で詳しく説明します。「権限とリソースの制限」セクションman 7 sched
;簡単に言えば:
SCHED_DEADLINE
ポリシーは、権限のあるスレッドによってのみ変更(使用)できますCAP_SYS_NICE
。- 0に設定されたリアルタイムスレッドは、
RLIMIT_RTPRIO
優先順位を下げるか、非リアルタイムポリシーに切り替えることができます。 - ゼロ以外の値を持つスレッドは、優先
RLIMIT_RTPRIO
順位が高く設定されていない限り(権限のあるスレッドによって)この制限の対象となります。
スレッドはCAP_SYS_NICE
必要なものは何でもできますが、他のすべては厳密に制御されます。