表 24-1 に、プロセスに関連する用語を示します。
表 24-1 プロセスに関連する用語
用語 |
説明 |
---|---|
プロセス |
実行中のプログラムの実体 |
軽量プロセス (LWP) |
仮想 CPU または実行資源。LWP は、利用できる CPU 資源をスケジュールクラスと優先順位に基づいて使用するように、カーネルによってスケジュールされる。LWP には、メモリーに常駐する情報が入ったカーネルスレッドと、スワップ可能な情報が入った LWP が含まれる |
アプリケーションスレッド |
ユーザーのアドレス空間内で独立して実行できる別個のスタックを持った一連の命令。LWP の最上部で多重化できる |
1 つのプロセスは、複数の LWP と複数のアプリケーションスレッドで構成できます。カーネルはカーネルスレッド構造をスケジュールします。この構造は、SunOS 5.x 環境内をスケジュールする実体です。表 24-2 に各種プロセス構造体を示します。
表 24-2 プロセス構造体
構造体 |
説明 |
---|---|
proc |
プロセス全体に関連し、メインメモリーに常駐しなければならない情報が入っている |
kthread |
1 つの LWP に関連し、メインメモリーに常駐しなければならない情報が入っている |
user |
スワップ可能な、プロセス単位の情報が入っている |
klwp |
スワップ可能な、LWP プロセス単位の情報が入っている |
図 24-1 に、これらの構造体の関係を示します。
プロセス内のすべてのスレッドは、ほとんどのプロセス資源にアクセスできます。ほとんどすべてのプロセスの仮想メモリーが共有されます。あるスレッドが共有データを変更すると、その変更結果をプロセス内の他のスレッドが利用できます。
表 24-3 に、プロセスを管理するためのコマンドとその説明を示します。
表 24-3 プロセスを管理するためのコマンド
使用するコマンド |
目的 |
---|---|
ps |
システム上のアクティブなプロセスの状態をチェックする。また、プロセスについての詳細な情報を表示する |
dispadmin |
デフォルトのスケジューリングポリシーをリストする |
priocntl |
プロセスに優先順位クラスを割り当てて、プロセスの優先度を管理する |
nice |
タイムシェアリングプロセスの優先度を変更する |
別の機能を使うと、プロセッサセットに関してプロセスグループを制御できます。プロセッサセットを使用するということは、プロセスグループを 1 つのプロセサだけではなく、プロセッサグループにバインドできるということです。システム管理者は、/usr/sbin/psrset コマンドを使用することにより、プロセッサセットの作成と管理を制御できます。詳細は、psrset(1M) のマニュアルページを参照してください。
プロセスを管理するためのコマンドの詳細は、第 25 章「プロセスの管理手順」を参照してください。
/usr/proc/bin ディレクトリ内のプロセスツールを使用すると、/proc にあるプロセスに関して詳細情報を表示できます。/proc ディレクトリは、プロセスファイルシステム (PROCFS) とも呼ばれます。アクティブなプロセスのイメージは、そのプロセス ID 番号を使って /proc に格納されます。
プロセスツールは ps コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。一般に、プロセスツールには次の機能があります。
表 24-4 に、新しい /usr/proc/bin ユーティリティを示します。
表 24-4 プロセスツール
ツールの種類 |
ツールの機能または表示内容 |
---|---|
/usr/proc/bin/pstop pid |
プロセスを停止する |
/usr/proc/bin/prun pid |
プロセスを再開する |
/usr/proc/bin/ptime pid |
microstate アカウントを使用してプロセスの時間を測定する |
/usr/proc/bin/pwait [-v] pid |
指定されたプロセスが終了するのを待つ |
プロセスの詳細を表示するツール |
|
/usr/proc/bin/pcred pid |
資格 |
/usr/proc/bin/pfiles pid |
開いたファイルの fstat 情報と fcntl 情報 |
/usr/proc/bin/pflags pid |
/proc の追跡フラグ、保留シグナルと保持シグナル、lwp ごとの他の状態情報 |
/usr/proc/bin/pldd pid |
各プロセスにリンクされた動的ライブラリ |
/usr/proc/bin/pmap pid |
アドレス空間マップ |
/usr/proc/bin/psig pid |
シグナルの動作 |
/usr/proc/bin/pstack pid |
lwp ごとの 16 進数 + 記号スタックトレース |
/usr/proc/bin/ptree pid |
指定した pid が入ったプロセスツリー |
/usr/proc/bin/pwdx pid |
現在の作業ディレクトリ |
上記の表 24-4 で、pid はプロセス識別番号です。この番号は ps -ef コマンドを使用して表示できます。
第 25 章「プロセスの管理手順」では、プロセスツールコマンドを使用して、プロセスの詳細表示や、プロセスの起動および終了などのシステム管理作業を実行する方法を説明します。プロセスツールのさらに詳細な説明は、proc(1) のマニュアルページを参照してください。
プロセスが無限ループ内でトラップされた場合や、実行時間が長すぎる場合は、プロセスを終了 (Kill) できます。pkill コマンドを使用してプロセスを終了する方法については、第 25 章「プロセスの管理手順」を参照してください。
以前のフラットな /proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリが追加されたディレクトリ階層に再構築されました。
/proc ファイルシステムは、ウォッチポイント機能も提供します。この機能は、プロセスのアドレス領域の個々のページの読み取り権または書き込み権を再マップするために使用されます。この機能は制限がなく、MT-安全です。
新しい /proc ファイル構造は、古い /proc インターフェースと完全なバイナリ互換を提供します。ただし、新しいウォッチポイント機能は、古いインターフェースでは使用できません。
デバッグ用ツールは、/proc の新しいウォッチポイント機能を使用するように変更されています。つまり、ウォッチポイントプロセス全体がより高速になったためです。
dbx デバッグ用ツールを使用してウォッチポイントを設定するときの次の制限は取り除かれました。
SPARC レジスタウィンドウのため、スタック上のローカル変数にウォッチポイントを設定する。
マルチスレッド化されたプロセスにウォッチポイントを設定する。
詳細は、proc(4)、core(4)、および adb(1) のマニュアルページを参照してください。
プロセスには、スケジュールクラスと優先レベルに従って CPU 時間が割り当てられます。デフォルトでは、Solaris オペレーティング環境にはリアルタイム、システム、タイムシェアリング、対話型という 4 つのプロセス優先レベルがあります。
リアルタイムプロセスは、最上位の優先レベルを持っています。このクラスには、外部イベントが発生したら応答しなければならないプロセスが含まれます。たとえば、センサーからデータを収集するプロセスは、データを処理して即座に応答する必要があります。ほとんどの場合、リアルタイムプロセスには専用システムが必要です。CPU の制御がリアルタイムプロセスに移っている間は、他のプロセスを処理できません。デフォルトでは、優先順位の範囲は 100 から 159 までです。
システムプロセスは、中程度の優先レベルを持っています。このクラスは、スワッパーやページングデーモンなど、カーネルによって自動的に実行されるプロセスからなっています。デフォルトでは、優先順位の範囲は 60 から 99 までです。
タイムシェアリングプロセスは、最下位の優先順位を持っています。このクラスには標準の UNIX プロセスが含まれます。通常、すべてのユーザープロセスはタイムシェアリングプロセスです。この種のプロセスには、処理時間を適正に配分し、対話型アプリケーションの応答時間を短縮し、適正な計算処理スループットを保つスケジュールポリシーが適用されます。デフォルトでは、優先順位の範囲は 0 から 59 までです。
対話型プロセスは、SunOS 5.4 環境に導入されています。優先順位の範囲は 0 から 59 までです。OpenWindows 上で開始されるすべてのプロセスは対話型クラスに分類され、キーボードフォーカスを持つプロセスには、より上位の優先順位が与えられます。
スケジュールポリシーによって、各プロセスの実行順序が決まります。
リアルタイムプロセスの優先順位は固定されています。リアルタイムプロセスを実行する準備ができている場合は、システムプロセスやタイムシェアリングプロセスを実行できません。
システムプロセスの優先順位は、開始時にカーネルによって確立され固定されています。システムクラス内のプロセスはカーネルによって制御されるので変更できません。
タイムシェアリングプロセスと対話型プロセスは、その優先順位を動的に割り当てるスケジューラによって制御されます。このクラスのプロセスの優先順位は操作できます。