スケジューラは、プロセスをいつどのくらいの時間実行するかを決定します。したがって、スケジューラの動作はシステム性能に大きな影響を与えます。
デフォルトでは、ユーザープロセスはすべてタイムシェアリングプロセスです。priocntl(2) 呼び出しによってのみ、プロセスのクラスが変更できます。
リアルタイムプロセス優先順位は、どのタイムシェアリングプロセスよりも優先順位が高くなっています。リアルタイムプロセスが実行可能である間、タイムシェアリングプロセスやシステムプロセスは実行できません。CPU の制御に失敗することがあるリアルタイムアプリケーションは、その他のユーザーや重要なカーネルハウスキーピングを完全にロックアウトする可能性があります。
プロセスのクラスと優先順位を制御する以外に、リアルタイムアプリケーションは、性能に影響するほかの要因も制御する必要があります。性能に最も影響する要因は、CPU、一次メモリー量、入出力スループットです。これらの要因は相互に複雑に関連しています。sar(1) コマンドには、すべての性能要因を表示するオプションがあります。
リアルタイム制約が厳しいアプリケーションは、プロセスがスワップされたり二次メモリーにページアウトされたりしないようにする必要があります。次の図では、UNIX のプロセスの状態と状態間の変移の概要を示します。
動作中のプロセスは、通常、上記の図の 5 つのうち 1 つの状態にあります。矢印は、プロセスの状態の変化を示します。
プロセスは、CPU に割り当てられていれば実行中である。優先順位が高いプロセスが実行可能になると、優先順位が低い実行中のプロセスはスケジューラによって実行状態から削除される。プロセスがタイムスライスをすべて使用したときに、同じ優先順位のプロセスが実行可能な場合にも、プロセスは横取りされる。
プロセスが一次メモリー内にあり、実行準備ができているが CPU には割り当てられていない場合、メモリー内で実行可能である。
プロセスが一次メモリー内にあるが、実行を継続するために特定のイベントを待っている場合、メモリー内で休眠中である。たとえば、入出力操作の完了、ロックされている資源の解放、またはタイマの終了を待っている間、プロセスは休眠する。イベントが発生すると、ウェイクアップコールがプロセスに送信される。休眠の原因が解消されると、プロセスは実行可能になる。
プロセスが特定のイベントを待っておらず、そのアドレス空間全体が二次メモリーに書き込まれている場合、そのプロセスは実行可能な状態であり、スワップされている。
プロセスが特定のイベントを待っており、そのアドレス空間全体が二次メモリーに書き込まれている場合、そのプロセスは休眠中であり、スワップされている。
動作中のプロセスをすべて保留するために十分な一次メモリーがマシンにない場合は、アドレス空間の一部を二次メモリーにページングするかスワップする必要があります。
システムの一次メモリーが不足した場合は、いくつかのプロセスの個々のページが二次メモリーに書き込まれるが、そのプロセスは実行可能なままである。実行中のプロセスがそのページにアクセスする場合、ページが一次メモリー内に読み戻されるまでプロセスは休眠する。
システムの一次メモリー不足がさらに深刻になると、いくつかのプロセスのすべてのページが二次メモリーに書き込まれる。このように二次メモリーに書き込まれたページは「スワップされた」とマークされる。このようなプロセスがスケジュール可能な状態に戻るのは、システムスケジューラデーモンがこれらのプロセスをメモリー内に読み戻すように選択した場合だけである。
プロセスが再度実行可能になった場合、ページングとスワップの両方により、遅延が発生します。タイミング要求が厳しいプロセスにとっては、この遅延は受け入れられないものです。
リアルタイムプロセスにすれば、プロセスの一部がページングされることがあってもスワップはされないため、スワップによる遅延を避けることができます。プログラムは、テキストとデータを一次メモリー内にロックして、ページングとスワップを避けることができます。詳細は、memcntl(2) のマニュアルページを参照してください。ロックできる量はメモリー設定によって制限されます。また、ロックが多すぎると、テキストやデータをメモリー内にロックしていないプロセスが大幅に遅れる可能性があります。
リアルタイムプロセスの性能とその他のプロセスとの性能の兼ね合いは、ローカルな必要性によって異なります。システムによっては、必要なリアルタイム応答を保証するためにプロセスのロックが必要な場合もあります。
リアルタイムアプリケーションの応答時間については、ディスパッチ応答時間を参照してください。