プログラミングインタフェース

コマンドとインタフェース

次の図に、デフォルトのプロセス優先順位を示します。

図 4–1 プロセス優先順位 (プログラマから見た場合)

リアルタイムスレッドの優先順位はシステムスレッドよりも高い。システムスレッドの優先順位はタイムシェアリングスレッドよりも高い。各クラスは個々の実行待ち行列を持ちます。

プロセス優先順位が意味を持つのは、スケジューリングクラスについてだけです。プロセス優先順位を指定するには、クラスとクラス固有の優先順位の値を指定します。クラスとクラス固有の値は、システムによってグローバル優先順位に割り当てられ、この値を使用してプロセスがスケジューリングされます。

優先順位は、システム管理者から見た場合とユーザーまたはプログラマから見た場合とで異なります。スケジューリングクラスを設定する場合、システム管理者はグローバル優先順位を直接取り扱います。システムでは、ユーザーが指定した優先順位は、このグローバル優先順位に割り当てられます。優先順位の詳細は、『Solaris のシステム管理 (基本編)』を参照してください。

ps(1) コマンドで -cel オプションを指定すると、動作中のすべてのプロセスのグローバル優先順位が表示されます。priocntl(1) コマンドを指定した場合、ユーザーとプログラマが使用するクラス固有の優先順位が表示されます。

priocntl(1) コマンド、priocntl(2) インタフェース、および priocntlset(2) インタフェースは、プロセスのスケジューリングパラメータを設定または取得するために使用されます。優先順位を設定するときには、これらのコマンドおよびインタフェースいずれの場合でも、次の同じ手順に従います。

  1. ターゲットプロセスを指定する。

  2. そのプロセスに希望するスケジューリングパラメータを指定する。

  3. プロセスにパラメータを設定するコマンドまたはインタフェースを実行する。

プロセス ID は UNIX プロセスの基本設定項目です。詳細は、Intro(2) を参照してください。クラス ID はプロセスのスケジューリングクラスです。priocntl(2) は、タイムシェアリングクラスと実時間クラスだけに有効で、システムクラスには使用できません。

priocntl の使用法

priocntl(1) ユーティリティーは、プロセスをスケジューリングする際に、次の 4 つの制御インタフェースを実行します。

priocntl -l

構成情報を表示します

priocntl -d

プロセスのスケジューリングパラメータを表示します

priocntl -s

プロセスのスケジューリングパラメータを設定します

priocntl -e

指定したスケジューリングパラメータでコマンドを実行します

次に、priocntl(1) を使用したいくつかの例を示します。

priocntl(1) には、nice(1) のインタフェースが含まれます。nice(1) は、タイムシェアリングプロセスについてだけ有効で、数値が大きいほど優先順位が低くなります。前述の例は、nice(1) を使用してインクリメントを 10 に設定するのと同じです。


$ nice -10 make bigprog

priocntl インタフェース

priocntl(2) は、1 つのプロセスまたは 1 組のプロセスのスケジューリングパラメータを管理します。priocntl(2) 呼び出しにより管理できるのは、LWP、単独のプロセス、またはプロセスのグループです。プロセスのグループは、親プロセス、プロセスグループ、セッション、ユーザー、グループ、クラス、または動作中のすべてのプロセスによって識別できます。詳細は、priocntl のマニュアルページを参照してください。

クラス ID を指定した場合、PC_GETCLINFO コマンドはスケジューリングクラス名とパラメータを取得します。このコマンドを使用すると、設定するクラスを想定しないプログラムを作成できます。

PC_SETXPARMS コマンドは、一組のプロセスのスケジューリングクラスとパラメータを設定します。idtypeid の入力引数は、変更するプロセスを指定します。