(57)【要約】  コンピュータのコマンド処理の負荷を軽減する。  コンピュータ（１０）は、コマンド（１２ｂ）が入力されると、コマンド（１２ｂ）より前に入力されたコマンド（１２ａ）に基づいて発行された、応答待ち中のシステムコール＃１が存在するか判定する。システムコール＃１が存在する場合、システムコール＃１の応答結果を用いて、コマンド（１２ｂ）に対応する処理を行う。応答待ち中のシステムコール＃１が存在しない場合、システムコール＃２を発行する。
2012124017.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータが実行するコマンド制御方法であって、
コマンドが前記コンピュータに入力されると、前記コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定し、
前記第１のシステムコールが存在する場合、前記第１のシステムコールの応答結果を用いて、前記コマンドに対応する処理を行い、
前記第１のシステムコールが存在しない場合、第２のシステムコールを発行し、前記第２のシステムコールの応答結果を用いて、前記コマンドに対応する処理を行う、
コマンド制御方法。
【請求項２】
応答待ち中であった前記第１のシステムコールの応答結果が得られるとバッファに格納し、前記バッファに格納された応答結果を、前記コマンドおよび前記他のコマンドに対応するプロセスに提供する、請求の範囲第１項記載のコマンド制御方法。
【請求項３】
前記第１のシステムコールが応答待ち中である間に入力された、前記コマンドを含む１またはそれ以上のコマンドの数を、メモリ上に生成したカウンタを用いて管理し、
前記カウンタを参照して、前記バッファに格納された応答結果を前記１またはそれ以上のコマンドに対応するプロセスに提供することを制御する、
請求の範囲第２項記載のコマンド制御方法。
【請求項４】
前記バッファに格納された応答結果を前記１またはそれ以上のコマンドおよび前記他のコマンドに対応するプロセスに提供した後、前記バッファを削除する、
請求の範囲第３項記載のコマンド制御方法。
【請求項５】
前記第１のシステムコールを発行するとき、前記バッファをメモリ上に生成し、
前記第１のシステムコールの応答結果を前記バッファに格納するとき、前記バッファをメモリ上で識別するための識別情報を書き換える、
請求の範囲第２項乃至第４項の何れか一項に記載のコマンド制御方法。
【請求項６】
前記コマンドおよび前記他のコマンドは、オペレーティングシステムが管理するシステム統計情報を取得するためのコマンドである、
請求の範囲第１項乃至第５項の何れか一項に記載のコマンド制御方法。
【請求項７】
オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータに実行させるコマンド制御プログラムであって、前記コンピュータに、
コマンドが前記コンピュータに入力されると、前記コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定し、
前記第１のシステムコールが存在する場合、前記第１のシステムコールの応答結果を、前記コマンドに対応するプロセスに提供し、
前記第１のシステムコールが存在しない場合、第２のシステムコールを発行し、前記第２のシステムコールの応答結果を、前記コマンドに対応するプロセスに提供する、
処理を実行させるコマンド制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータのコマンド制御方法およびコマンド制御プログラムに関する。
【背景技術】
【０００２】
コンピュータのオペレーティングシステム（ＯＳ：Operating System）上で実行される処理には、権限レベルの高いカーネル空間で実行されるものと、権限レベルの低いユーザ空間で実行されるものがある。ユーザ空間のプロセスが、権限の壁を越えてＯＳのカーネル機能を呼び出すときには、システムコール（スーパーバイザコールと呼ぶこともある）が発行される。システムコールが発行されると、コンピュータは、例えば、発行元のプロセスがもつアクセス権の確認などのセキュリティ検査を行い、セキュリティに問題がなければ、カーネル空間で実行されるプログラムに制御を渡す。【０００３】
ＯＳのカーネルが提供する機能には、ハードウェアの利用状況やプロセスの実行状況などを示すシステム統計情報を管理することが含まれる。システム統計情報を取得するコマンドがコンピュータに入力されると、入力されたコマンドに対応するプロセスがユーザ空間で起動され、カーネルが管理するシステム統計情報を参照するためのシステムコールが発行される。システムコールを受けて、カーネルはシステム統計情報をユーザ空間のプロセスに提供する。例えば、コンピュータの動作に異常が生じたとき、ユーザがコマンドを入力してシステム統計情報を取得することで、異常の原因を分析することが考えられる。【０００４】
なお、複数のノードがネットワークに接続された並列計算機システムにおいて、各ノードで採取されたモニタデータを１つの管理ノードに集め、集めたモニタデータをリアルタイムでコンソール装置に表示する方法が提案されている。また、並列計算機に含まれる複数のノードそれぞれで採取された性能データを１つのノードに集め、集めた性能データを複数のモニタ用計算機に分配する方法が提案されている。また、アプリケーションプログラムがシステムコールを発行する際、制御権を取得してチェックポイント情報を記録しておくことで、フォールトトレランス（耐故障性）を実現する方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−４４６８０号公報
【特許文献２】特開平９−３３０３０２号公報
【特許文献３】特開平１０−１８７６１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、システムコールは、権限レベルの切り替えを伴うため、処理の負荷が比較的大きい。そのため、高い権限レベルの機能を利用するコマンド（例えば、システム統計情報を取得するコマンドなど）がコンピュータに複数入力され、コマンド毎にシステムコールが発行されると、コンピュータの負荷の増大が問題となる。【０００７】
例えば、サーバコンピュータなどの複数のユーザが利用するコンピュータには、複数のユーザから並列にコマンドが入力されることがある。また、システム統計情報を取得するコマンドは、異常の有無の監視のために、平常時でも継続的に入力される可能性がある。また、異常発生時には、異常原因を分析するために、平常時よりも多数のコマンドが入力されることが想定される。このように、多数のコマンドがコンピュータに入力される場合があり、コマンド処理の負荷が応答速度などの性能を悪化させる原因となる場合がある。【０００８】
本発明はこのような点に鑑みてなされたものであり、コンピュータのコマンド処理の負荷を軽減することができるコマンド制御方法およびコマンド制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータが実行するコマンド制御方法が提供される。コマンド制御方法では、コマンドがコンピュータに入力されると、コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定する。第１のシステムコールが存在する場合、第１のシステムコールの応答結果を用いて、コマンドに対応する処理を行う。第１のシステムコールが存在しない場合、第２のシステムコールを発行し、第２のシステムコールの応答結果を用いて、コマンドに対応する処理を行う。【００１０】
また、オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータに実行させるコマンド制御プログラムが提供される。コマンド制御プログラムは、以下の処理をコンピュータに実行させる。コマンドがコンピュータに入力されると、コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定する。第１のシステムコールが存在する場合、第１のシステムコールの応答結果を、コマンドに対応するプロセスに提供する。第１のシステムコールが存在しない場合、第２のシステムコールを発行し、第２のシステムコールの応答結果を、コマンドに対応するプロセスに提供する。
【発明の効果】
【００１１】
上記コマンド制御方法およびコマンド制御プログラムによれば、コンピュータのコマンド処理の負荷が軽減される。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】コマンド制御方法の例を示す図である。
【図２】情報処理装置のハードウェア例を示すブロック図である。
【図３】情報処理装置のソフトウェア例を示すブロック図である。
【図４】情報処理装置上でのコマンドプロセスの実行例を示す図である。
【図５】システム統計情報の参照状態を示す状態遷移図である。
【図６】システム統計情報の取得処理を示すフローチャートである。
【図７】システム統計情報の取得処理を示すフローチャート（続き）である。
【図８】システム統計情報の取得のシーケンス例を示す図である。
【図９】メモリ領域上のデータの変化例を示す第１の図である。
【図１０】メモリ領域上のデータの変化例を示す第２の図である。
【図１１】メモリ領域上のデータの変化例を示す第３の図である。
【図１２】メモリ領域上のデータの変化例を示す第４の図である。
【図１３】メモリ領域上のデータの変化例を示す第５の図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、コマンド制御方法の例を示す図である。コンピュータ１０は、複数のコマンドを受け付け、ＯＳのシステムコールを発行してコマンドに対応する処理を行う。
【００１４】
コマンドとしては、例えば、ハードウェアの利用状況やプロセスの実行状況を示すシステム統計情報を取得するコマンドが挙げられる。システム統計情報は、例えば、カーネル空間で管理される。コマンドは、ユーザ操作により入力されてもよいし、コンピュータ１０または他のコンピュータ上で実行されるプロセスにより入力されてもよい。複数のコマンドは、同種のコマンドでもよいし、カーネル空間で管理される共通の情報を処理対象とする異なる種類のコマンドであってもよい。
【００１５】
コンピュータ１０は、コマンドの入力に応じてシステムコールの発行を制御するコマンド制御部１１を有する。コマンド制御部１１は、プログラムのモジュール（例えば、ライブラリプログラム）として実装してもよい。コマンド制御部１１は、コマンドがコンピュータ１０に入力されると、当該コマンドより前にコンピュータ１０に入力された他のコマンドに基づいて発行された、応答待ち中のシステムコールが存在するか判定する。
【００１６】
応答待ち中のシステムコールが存在する場合、コマンド制御部１１は、新たなシステムコールを発行せず、既存のシステムコールの応答を待つ。既存のシステムコールの応答結果が得られると、当該応答結果を用いて、入力されたコマンドに対応する処理が行われるようにする（例えば、コマンドに対応するプロセスに応答結果を渡す）。一方、応答待ち中のシステムコールが存在しない場合、コマンド制御部１１は、新たなシステムコールを発行する。新たに発行したシステムコールの応答結果が得られると、当該応答結果を用いて、入力されたコマンドに対応する処理が行われるようにする。
【００１７】
例えば、コマンド制御部１１は、コマンド１２ａが入力されたとき（ステップＳ１）、応答待ち中のシステムコールが存在しなければ、システムコール＃１を発行する（ステップＳ２）。コマンド１２ａの後にコマンド１２ｂが入力されたとき（ステップＳ３）、システムコール＃１が応答待ち中であれば、新たなシステムコールを発行しない。その後、システムコール＃１の応答結果を用いて、コマンド１２ａ，１２ｂの処理が行われるようにする。コマンド１２ｂの後にコマンド１２ｃが入力されたとき（ステップＳ４）、応答待ち中のシステムコールが存在しなければ（システムコール＃１の応答結果が得られた後であれば）、システムコール＃２を発行する（ステップＳ５）。その後、システムコール＃２の応答結果を用いて、コマンド１２ｃの処理が行われるようにする。
【００１８】
なお、コマンド制御部１１は、システムコールの応答結果が得られると、メモリ上のバッファに格納し、バッファに格納された応答結果を、１またはそれ以上のコマンドに対応するプロセスに分配するようにしてもよい。また、システムコールが応答待ち中である間に入力されたコマンドの数を、メモリ上に生成したカウンタを用いてカウントしておき、カウンタを参照してバッファに格納された応答結果を分配してもよい。バッファは、システムコールを発行するときにメモリ上に生成してもよく、応答結果の分配が終わった後にメモリから削除してもよい。コマンド制御部１１は、メモリ上にバッファが存在すか確認することで、応答待ち中のシステムコールが存在するか判定してもよい。
【００１９】
第１の実施の形態のコンピュータ１０によれば、コマンドがコンピュータ１０に入力されると、当該コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定される。第１のシステムコールが存在する場合、第１のシステムコールの応答結果を用いて、コマンドに対応する処理が行われる。第１のシステムコールが存在しない場合、第２のシステムコールが発行され、第２のシステムコールの応答結果を用いて、入力されたコマンドに対応する処理が行われる。
【００２０】
これにより、コマンド毎にシステムコールを発行する場合と比べて、複数のコマンドが入力されたときのシステムコールの発行回数を削減でき、コンピュータ１０のコマンド処理の負荷を軽減できる。また、応答待ち中のシステムコールが存在しなければ新たなシステムコールを発行するため、古い応答結果に基づいてコマンド処理が行われてしまうことを抑制でき、カーネル空間で管理される情報とコマンド処理との間の整合性を図れる。また、カーネル空間で管理される情報のキャッシュをユーザ空間で常に保持する方法と比べて、キャッシュの整合性を維持するための負荷を削減できる。
【００２１】
第１の実施の形態のコマンド制御方法は、前述の通り、システム統計情報を取得するコマンドの処理に適用することができる。システム統計情報は、カーネルによって高い頻度で更新され得る。システム統計情報を取得するコマンドは、異常の有無の監視のために、継続的にコンピュータ１０に入力される可能性がある。また、異常発生時には、異常原因を分析するために、多数のコマンドが入力される可能性がある。また、コンピュータ１０がサーバコンピュータなどの複数のユーザが利用するものである場合、複数のユーザまたは複数の他のコンピュータから並列にコマンドが入力される可能性もある。よって、上記のコマンド制御方法によってコマンド処理の負荷を軽減することは、コマンド処理の応答速度が向上して異常分析などを迅速に行えるようになる点で、特に有用である。
【００２２】
以下に説明する第２の実施の形態では、システム統計情報を取得するコマンドの処理を行う情報処理装置の例を挙げる。ただし、第１の実施の形態で説明したコマンド制御方法は、システム統計情報を取得するコマンド以外のコマンドにも適用できる。
【００２３】
［第２の実施の形態］
図２は、情報処理装置のハードウェア例を示すブロック図である。第２の実施の形態の情報処理装置１００は、ＣＰＵ（Central Processing Unit）１０１、ＲＡＭ（Random Access Memory）１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信部１０７を有する。上記ユニットは、情報処理装置１００内でバスに接続されている。
【００２４】
ＣＰＵ１０１は、情報処理装置１００における情報処理を制御する演算装置である。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部を読み出し、ＲＡＭ１０２に展開してプログラムを実行する。なお、情報処理装置１００は、複数の演算装置を備え、情報処理を分散して実行してもよい。
【００２５】
ＲＡＭ１０２は、ＣＰＵ１０１が扱うプログラムやデータを一時的に記憶する揮発性メモリである。なお、情報処理装置１００は、ＲＡＭ以外の種類のメモリを備えていてもよく、複数のメモリを備えていてもよい。
【００２６】
ＨＤＤ１０３は、ＯＳプログラムやアプリケーションプログラムなどのプログラム、および、情報処理に用いられるデータを記憶する不揮発性の記憶装置である。ＨＤＤ１０３は、ＣＰＵ１０１の命令に従って、内蔵の磁気ディスクに対する読み書きを行う。なお、情報処理装置１００は、ＨＤＤ以外の種類の不揮発性の記憶装置（例えば、ＳＳＤ（Solid State Drive））を備えていてもよく、複数の記憶装置を備えていてもよい。
【００２７】
画像信号処理部１０４は、ＣＰＵ１０１の命令に従って、情報処理装置１００に接続されたディスプレイ２１に画像を出力する。ディスプレイ２１として、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイを用いることができる。
【００２８】
入力信号処理部１０５は、情報処理装置１００に接続された入力デバイス２２から入力信号を取得し、ＣＰＵ１０１に通知する。入力デバイス２２として、例えば、マウスやタッチパネルなどのポインティングデバイスや、キーボードを用いることができる。
【００２９】
ディスクドライブ１０６は、記録媒体２３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体２３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１の命令に従って、記録媒体２３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３０】
通信部１０７は、ネットワーク２４に接続して通信を行う通信インタフェースである。ネットワーク２４への接続方法は、有線でも無線でもよい。すなわち、通信部１０７は、有線通信インタフェースでも無線通信インタフェースでもよい。
【００３１】
図３は、情報処理装置のソフトウェア例を示すブロック図である。情報処理装置１００は、ｋｓｔａｔ記憶部１１１、ｐｒｏｃｆｓ記憶部１１２、ｋｓｔａｔ処理部１１３、ｐｒｏｃｆｓ処理部１１４、ｋｓｔａｔ参照部１２１、ｐｒｏｃｆｓ参照部１２２、共有記憶部１２３、ｓａｒコマンド部１３１、ｖｍｓｔａｔコマンド部１３２、ｉｏｓｔａｔコマンド部１３３、ｍｐｓｔａｔコマンド部１３４、ｐｓコマンド部１３５、ｐｒｓｔａｔコマンド部１３６およびｐｆｉｌｅｓコマンド部１３７を有する。
【００３２】
ｋｓｔａｔ記憶部１１１、ｐｒｏｃｆｓ記憶部１１２および共有記憶部１２３は、ＲＡＭ１０２上に確保されたメモリ領域として実現できる。他のユニットは、ＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。ｋｓｔａｔ記憶部１１１、ｐｒｏｃｆｓ記憶部１１２、ｋｓｔａｔ処理部１１３およびｐｒｏｃｆｓ処理部１１４は、ＲＡＭ１０２のカーネル空間に配置される。他のユニットは、ＲＡＭ１０２のユーザ空間に配置される。ユーザ空間に配置されるモジュールからカーネル空間に配置されるモジュールを呼び出すときには、システムコールが発行される。
【００３３】
ｋｓｔａｔ記憶部１１１は、システム統計情報の一種であるｋｓｔａｔ（Kernel Statistics：カーネル統計情報）を記憶する。ｋｓｔａｔには、ＣＰＵ１０１の負荷、ＲＡＭ１０２のメモリ領域の使用量、ＨＤＤ１０３へのＩ／Ｏ（Input and Output）アクセスの頻度、通信部１０７の帯域使用率など、ハードウェアの使用状況を示す情報が含まれる。
【００３４】
ｐｒｏｃｆｓ記憶部１１２は、システム統計情報の一種であるｐｒｏｃｆｓ（Process Filesystem：プロセスファイルシステム情報）を記憶する。ｐｒｏｃｆｓには、情報処理装置１００におけるプロセスの実行状況を示す情報が含まれる。なお、第２の実施の形態では、システム統計情報の例として、ｋｓｔａｔとｐｒｏｃｆｓを挙げたが、カーネルは他の種類のシステム統計情報を保持してもよい。
【００３５】
ｋｓｔａｔ処理部１１３は、カーネル権限で、ｋｓｔａｔ記憶部１１１に記憶されたｋｓｔａｔの更新および読み出しを行う。ｋｓｔａｔ処理部１１３は、ハードウェアの使用状況を監視し、定期的（例えば、数ミリ秒毎）にｋｓｔａｔを更新する。ｋｓｔａｔを更新する際には、ｋｓｔａｔへのアクセスを一時的に排除するため排他ロックを設定する。また、ｋｓｔａｔ処理部１１３は、ｋｓｔａｔ参照部１２１からシステムコールを受け付けると、ｋｓｔａｔ記憶部１１１からｋｓｔａｔを読み出し、ｋｓｔａｔ参照部１２１が指定したユーザ空間のメモリ領域にｋｓｔａｔを書き込む。
【００３６】
ｐｒｏｃｆｓ処理部１１４は、カーネル権限で、ｐｒｏｃｆｓ記憶部１１２に記憶されたｐｒｏｃｆｓの更新および読み出しを行う。ｐｒｏｃｆｓ処理部１１４は、情報処理装置１００のプロセスの実行状況を監視し、実行状況が変化する毎に（不定期に）ｐｒｏｃｆｓを更新する。ｐｒｏｃｆｓを更新する際には、ｐｒｏｃｆｓへのアクセスを一時的に排除するため排他ロックを設定する。また、ｐｒｏｃｆｓ処理部１１４は、ｐｒｏｃｆｓ参照部１２２からシステムコールを受け付けると、ｐｒｏｃｆｓ記憶部１１２からｐｒｏｃｆｓの全部または所定ブロック数分を読み出し、ｐｒｏｃｆｓ参照部１２２が指定したユーザ空間のメモリ領域にｐｒｏｃｆｓを書き込む。
【００３７】
ｋｓｔａｔ参照部１２１は、ｋｓｔａｔを参照するシステムコールの発行を制御する。ｋｓｔａｔ参照部１２１は、例えば、ｓａｒコマンド部１３１、ｖｍｓｔａｔコマンド部１３２、ｉｏｓｔａｔコマンド部１３３およびｍｐｓｔａｔコマンド部１３４から呼び出されるライブラリプログラムとして実現できる。ｋｓｔａｔ参照部１２１は、ｋｓｔａｔを格納するメモリ領域をユーザ空間に確保し、当該メモリ領域を指定してシステムコールを発行する。そして、取得したｋｓｔａｔを１またはそれ以上のコマンドのプロセスに分配する。なお、ｋｓｔａｔ参照部１２１の動作の詳細は後述する。
【００３８】
ｐｒｏｃｆｓ参照部１２２は、ｐｒｏｃｆｓを参照するシステムコールの発行を制御する。ｐｒｏｃｆｓ参照部１２２は、例えば、ｐｓコマンド部１３５、ｐｒｓｔａｔコマンド部１３６およびｐｆｉｌｅｓコマンド部１３７から呼び出されるライブラリプログラムとして実現できる。ｐｒｏｃｆｓ参照部１２２は、ｐｒｏｃｆｓを格納するメモリ領域をユーザ空間に確保し、当該メモリ領域を指定してシステムコールを発行する。そして、取得したｐｒｏｃｆｓを１またはそれ以上のコマンドのプロセスに分配する。
【００３９】
共有記憶部１２３は、ｋｓｔａｔ参照部１２１およびｐｒｏｃｆｓ参照部１２２が使用する共有メモリ領域である。共有記憶部１２３内には、システムコールの応答結果であるシステム統計情報（ｋｓｔａｔやｐｒｏｃｆｓ）を、コマンドプロセスに分配する前に一時的に格納する共有バッファが生成される。また、システム統計情報の分配制御に用いられる参照カウンタが生成される。共有バッファや参照カウンタの詳細は後述する。なお、共有記憶部１２３は、複数のプロセスが共通に使用できる記憶手段（例えば、メモリファイルシステム）であればよく、共有メモリ領域でなくてもよい。
【００４０】
ｓａｒコマンド部１３１は、ｓａｒコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｓａｒコマンドは、ＣＰＵ使用率などの負荷情報を取得するためのコマンドである。ｓａｒコマンド部１３１は、ｋｓｔａｔ参照部１２１を介してｋｓｔａｔを取得し、情報処理装置１００の負荷に関連するデータをｋｓｔａｔから抽出し、フォーマット（表示形式）を整えてコマンドの入力元に出力する。
【００４１】
ｖｍｓｔａｔコマンド部１３２は、ｖｍｓｔａｔコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｖｍｓｔａｔコマンドは、ページングやスワップなどの仮想メモリの情報を取得するためのコマンドである。ｖｍｓｔａｔコマンド部１３２は、ｋｓｔａｔ参照部１２１を介してｋｓｔａｔを取得し、仮想メモリに関連するデータをｋｓｔａｔから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４２】
ｉｏｓｔａｔコマンド部１３３は、ｉｏｓｔａｔコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｉｏｓｔａｔコマンドは、ディスクＩ／Ｏの情報を取得するためのコマンドである。ｉｏｓｔａｔコマンド部１３３は、ｋｓｔａｔ参照部１２１を介してｋｓｔａｔを取得し、ディスクＩ／Ｏに関連するデータをｋｓｔａｔから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４３】
ｍｐｓｔａｔコマンド部１３４は、ｍｐｓｔａｔコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｍｐｓｔａｔコマンドは、ＣＰＵの割り込みの発生状況や待ち時間など、ＣＰＵの詳細情報を取得するためのコマンドである。ｍｐｓｔａｔコマンド部１３４は、ｋｓｔａｔ参照部１２１を介してｋｓｔａｔを取得し、ＣＰＵに関連するデータをｋｓｔａｔから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４４】
ｐｓコマンド部１３５は、ｐｓコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｐｓコマンドは、情報処理装置１００で実行中のプロセスの一覧を取得するためのコマンドである。ｐｓコマンド部１３５は、ｐｒｏｃｆｓ参照部１２２を介してｐｒｏｃｆｓを取得し、プロセスの一覧を生成するためのデータをｐｒｏｃｆｓから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４５】
ｐｒｓｔａｔコマンド部１３６は、ｐｒｓｔａｔコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｐｒｓｔａｔコマンドは、プロセス毎の実行時間などの稼動状況を取得するためのコマンドである。ｐｒｓｔａｔコマンド部１３６は、ｐｒｏｃｆｓ参照部１２２を介してｐｒｏｃｆｓを取得し、プロセスの稼動状況に関連するデータをｐｒｏｃｆｓから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４６】
ｐｆｉｌｅｓコマンド部１３７は、ｐｆｉｌｅｓコマンドが入力されたとき、当該コマンドに対応する処理を行う。ｐｆｉｌｅｓコマンドは、プロセスが参照しているファイルの一覧を取得するためのコマンドである。ｐｆｉｌｅｓコマンド部１３７は、ｐｒｏｃｆｓ参照部１２２を介してｐｒｏｃｆｓを取得し、ファイルの参照状況に関連するデータをｐｒｏｃｆｓから抽出し、フォーマットを整えてコマンドの入力元に出力する。
【００４７】
このように、情報処理装置１００には、システム統計情報を取得するコマンドとして、複数の種類のコマンドが用意されている。コマンドの種類によって、出力されるデータの内容やフォーマットが異なる。ｓａｒコマンド、ｖｍｓｔａｔコマンド、ｉｏｓｔａｔコマンドおよびｍｐｓｔａｔコマンドでは、出力されるデータがｋｓｔａｔに基づいて生成される。ｐｓコマンド、ｐｒｓｔａｔコマンドおよびｐｆｉｌｅｓコマンドでは、出力されるデータがｐｒｏｃｆｓに基づいて生成される。コマンド処理を行う各ユニットが、システム統計情報を加工して、コマンドの入力元に応答する。なお、上記説明では７種類のコマンドの例を挙げたが、他の種類のコマンドが用意されていてもよい。
【００４８】
コマンドは、ユーザが入力デバイス２２から情報処理装置１００に入力してもよい。その場合、情報処理装置１００は、入力されたコマンドの処理結果を、ディスプレイ２１に表示してもよい。また、コマンドは、他の情報処理装置がネットワーク２４を介して情報処理装置１００に入力してもよい。その場合、情報処理装置１００は、入力されたコマンドの処理結果を、ネットワーク２４を介して当該他の情報処理装置に送信してもよい。
【００４９】
コマンドが情報処理装置１００に入力される毎に、入力されたコマンドに対応するプロセスがユーザ空間で起動され、コマンドの種類に対応するユニット（ｓａｒコマンド部１３１など）の処理が当該プロセスにおいて開始される。ユーザ空間のプロセスは、システム統計情報を取得するため、ｋｓｔａｔ参照部１２１またはｐｒｏｃｆｓ参照部１２２を呼び出す（例えば、ライブラリ関数を呼び出す）。呼び出されたｋｓｔａｔ参照部１２１またはｐｒｏｃｆｓ参照部１２２の処理は、呼び出し元のプロセスの中で実行される。
【００５０】
図４は、情報処理装置上でのコマンドプロセスの実行例を示す図である。図４では、情報処理装置１００に、ｓａｒコマンド、ｖｍｓｔａｔコマンド、ｍｐｓｔａｔコマンドおよびｓａｒコマンドの４つが順に入力された場合を示している。
【００５１】
ｓａｒコマンドが入力されると、ｓａｒコマンド部１３１で定義された処理を実行するコマンドプロセス１４１が起動する。ｖｍｓｔａｔコマンドが入力されると、ｖｍｓｔａｔコマンド部１３２で定義された処理を実行するコマンドプロセス１４２が起動する。ｍｐｓｔａｔコマンドが入力されると、ｍｐｓｔａｔコマンド部１３４で定義された処理を実行するコマンドプロセス１４３が起動する。ｓａｒコマンドが入力されると、ｓａｒコマンド部１３１で定義された処理を実行するコマンドプロセス１４４が起動する。
【００５２】
コマンドプロセス１４１〜１４４は、ｋｓｔａｔを取得するためにｋｓｔａｔ参照部１２１を呼び出し、ｋｓｔａｔ参照部１２１で定義された処理を各自のコマンドプロセスの中で実行する。図４は、ｋｓｔａｔ参照部１２１をライブラリプログラムとして実装した場合を示している。システムコールを発行する処理は、ｋｓｔａｔ参照部１２１の中で定義されている。コマンドの入力タイミングに応じて、コマンドプロセス１４１〜１４４の一部または全部が、システムコールを発行する。
【００５３】
メモリ領域には、コマンドプロセス１４１〜１４４に対応する個別バッファ１６１〜１６４が生成される。個別バッファ１６１〜１６４は、コマンドの種類に応じてｋｓｔａｔを加工するために用いられる。また、共有記憶部１２３には、コマンドプロセス１４１〜１４４から共通に参照可能な共有バッファ１５１と参照カウンタ１５２が生成される。共有バッファ１５１は、システムコールを発行することでｋｓｔａｔ処理部１１３から取得された、加工前のｋｓｔａｔを記憶する。参照カウンタ１５２は、取得されたｋｓｔａｔを１またはそれ以上のコマンドプロセスに分配する際に参照される。また、メモリ領域には、起動しているコマンドプロセスを示すプロセスリスト１５３が生成される。
【００５４】
図５は、システム統計情報の参照状態を示す状態遷移図である。参照状態は、ｋｓｔａｔ参照部１２１およびｐｒｏｃｆｓ参照部１２２がシステムコール単位で管理する。参照状態は、状態＃０〜＃４の５つの何れか１つをとる。
【００５５】
状態＃０は、システムコールを発行していない状態である。状態＃０では、当該システムコールに対応する共有バッファおよび参照カウンタは、共有記憶部１２３に生成されていない。参照状態が状態＃０のときに、何れかのコマンドプロセスがｋｓｔａｔ参照部１２１またはｐｒｏｃｆｓ参照部１２２の呼び出し（システム統計情報の要求）を行うと、システムコールが発行され、参照状態が状態＃１に遷移する。
【００５６】
状態＃１は、１つのコマンドプロセスがシステム統計情報を要求し、システムコールの応答を待っている状態である。状態＃１では、当該システムコールに対応する共有バッファおよび参照カウンタが、共有記憶部１２３に生成されている。状態＃１では、当該共有バッファは空であり、参照カウンタの値は０である。参照状態が状態＃１のときに、更に何れかのコマンドプロセスがシステム統計情報を要求すると、参照状態が状態＃１に遷移する。一方、システムコールの応答結果（ｋｓｔａｔまたはｐｒｏｃｆｓ）が取得されると、参照状態が状態＃４に遷移する。
【００５７】
状態＃２は、２つ以上のコマンドプロセスがシステム統計情報を要求し、システムコールの応答を待っている状態である。状態＃２では、当該システムコールに対応する共有バッファは空であり、参照カウンタの値は１以上である。参照カウンタの値は、システムコールを発行したコマンドプロセス以外に、システム統計情報を待っているコマンドプロセスの数を示している。参照状態が状態＃２のときに、更に何れかのコマンドプロセスがシステム統計情報を要求すると、参照状態が状態＃２に維持される。システム統計情報が全部でＮ個（Ｎは２以上の整数）のコマンドプロセスから要求されるとすると、状態＃２の自己遷移はＮ−２回行われることになる。一方、システムコールの応答結果が取得されると、参照状態が状態＃３に遷移する。
【００５８】
状態＃３は、システムコールによってシステム統計情報が取得され、２つ以上のコマンドプロセスに対してまだ分配していない状態である。状態＃３では、当該システムコールに対応する共有バッファは加工前のシステム統計情報を記憶しており、参照カウンタの値は１以上である。参照状態が状態＃３のときに、何れかのコマンドプロセスに対応する個別バッファに加工前のシステム統計情報がコピーされると、参照カウンタの値が１だけ減少する。このとき、更新後の参照カウンタの値が１以上であれば、参照状態が状態＃３に維持され、更新後の参照カウンタの値が０であれば、参照状態が状態＃４に遷移する。なお、状態＃３の自己遷移はＮ−２回行われることになる。
【００５９】
状態＃４は、システムコールによってシステム統計情報が取得され、１つのコマンドプロセスに対してまだ分配していない状態である。状態＃４では、当該システムコールに対応する共有バッファは加工前のシステム統計情報を記憶しており、参照カウンタの値は０である。参照状態が状態＃４のときに、残り１つのコマンドプロセスに対応する個別バッファにシステム統計情報がコピーされると、当該共有バッファと参照カウンタが共有記憶部１２３から削除され、参照状態が状態＃４に遷移する。
【００６０】
なお、システム統計情報を待っているコマンドプロセスの数が、システムコールの応答が得られた時点で１つである場合（参照状態が状態＃１から状態＃４に遷移した場合）には、共有バッファを経由せずに個別バッファにシステム統計情報を書き込んでもよい。
【００６１】
図６は、システム統計情報の取得処理を示すフローチャートである。ｋｓｔａｔ参照部１２１およびｐｒｏｃｆｓ参照部１２２が、何れかのコマンドプロセスから呼び出される毎に、図６に示す処理を実行する。以下では、ｋｓｔａｔ参照部１２１が呼び出される場合を想定して、図６に示す処理をステップ番号に沿って説明する。
【００６２】
（ステップＳ１１）ｋｓｔａｔ参照部１２１は、ｓａｒコマンド部１３１、ｖｍｓｔａｔコマンド部１３２、ｉｏｓｔａｔコマンド部１３３またはｍｐｓｔａｔコマンド部１３４に対応するコマンドプロセスから、関数（ライブラリ関数など）の呼び出しを受け付ける。ｋｓｔａｔ参照部１２１は、呼び出し元のコマンドプロセスの識別情報（例えば、プロセスＩＤ）を、プロセスリスト１５３に記録する。
【００６３】
（ステップＳ１２）ｋｓｔａｔ参照部１２１は、共有バッファ１５１が共有記憶部１２３に存在するか判断する。共有バッファ１５１が存在する場合、応答待ち中のシステムコールがあると判断し、処理をステップＳ２１に進める。共有バッファ１５１が存在しない場合、応答待ち中のシステムコールがないと判断し、処理をステップＳ１３に進める。
【００６４】
（ステップＳ１３）ｋｓｔａｔ参照部１２１は、ｋｓｔａｔ用の共有バッファ１５１および参照カウンタ１５２を共有記憶部１２３に生成する。このとき、共有バッファ１５１は空であり、参照カウンタ１５２の値は０に初期化されている。
【００６５】
（ステップＳ１４）ｋｓｔａｔ参照部１２１は、システムコールの応答結果が書き込まれるメモリ領域をユーザ空間に確保し、当該メモリ領域を指定してｋｓｔａｔ処理部１１３にシステムコールを発行する。そして、ｋｓｔａｔ処理部１１３からの応答を待つ。
【００６６】
（ステップＳ１５）ｋｓｔａｔ参照部１２１は、ｋｓｔａｔ処理部１１３からシステムコールに対する応答があると、ステップＳ１３で生成した共有バッファ１５１のバッファ名を変更する。バッファ名を変更することで、共有バッファ１５１の存在が隠蔽され、それ以降に実行されるステップＳ１２の処理では、ｋｓｔａｔ用の共有バッファが共有記憶部１２３に存在せず応答待ちのシステムコールがないものと判断される。
【００６７】
（ステップＳ１６）ｋｓｔａｔ参照部１２１は、参照カウンタ１５２の値が０であるか判断する。値が０の場合、ステップＳ１１の呼び出し元のコマンドプロセス以外の他のコマンドプロセスが存在しないと判断し、処理をステップＳ１７に進める。値が１以上の場合、他のコマンドプロセスが存在すると判断し、処理をステップＳ１９に進める。
【００６８】
（ステップＳ１７）ｋｓｔａｔ参照部１２１は、ステップＳ１４で確保したメモリ領域に記憶されているシステム統計情報（ｋｓｔａｔ）を、ステップＳ１１の呼び出し元のコマンドプロセスに対応する個別バッファに書き込む。共有バッファ１５１を経由しないことで、システム統計情報のコピー回数を削減できる。ただし、システム統計情報を共有バッファ１５１に一度書き込むようにしてもよい。個別バッファに書き込まれたシステム統計情報は、呼び出し元のコマンドプロセスによって加工される。
【００６９】
（ステップＳ１８）ｋｓｔａｔ参照部１２１は、ステップＳ１３で生成した共有バッファ１５１（バッファ名を変更済み）および参照カウンタ１５２を、共有記憶部１２３から削除する。そして、ｋｓｔａｔ参照部１２１の処理を終了する。
【００７０】
（ステップＳ１９）ｋｓｔａｔ参照部１２１は、ステップＳ１４で確保したメモリ領域に記憶されているシステム統計情報を、ステップＳ１３で生成した共有バッファ１５１（バッファ名を変更済み）に書き込む。
【００７１】
（ステップＳ２０）ｋｓｔａｔ参照部１２１は、プロセスリスト１５３を参照して、システムコールの応答を待ち合わせてスリープしているコマンドプロセスを特定する。そして、特定したコマンドプロセスに対し、プロセス間通信によって割り込みのメッセージを通知し、スリープ状態を解除する。そして、処理をステップＳ２３に進める。
【００７２】
図７は、システム統計情報の取得処理を示すフローチャート（続き）である。
（ステップＳ２１）ｋｓｔａｔ参照部１２１は、共有記憶部１２３に生成されている参照カウンタ１５２の値を１だけ増やす。
【００７３】
（ステップＳ２２）ｋｓｔａｔ参照部１２１は、既に発行されているシステムコールの応答を待ち合わせるため、呼び出し元のコマンドプロセスをスリープ状態にする。これにより、システムコールの応答があるまで、当該コマンドプロセスにはＣＰＵ時間が割り当てられない。その後、当該コマンドプロセスは、他のコマンドプロセスからの通知（ステップＳ２０）を受けて、スリープ状態から実行状態または実行可能状態に戻る。
【００７４】
（ステップＳ２３）ｋｓｔａｔ参照部１２１は、共有記憶部１２３に生成されている共有バッファ１５１から、呼び出し元のコマンドプロセスに対応する個別バッファに、システム統計情報をコピーする。なお、共有バッファ１５１の変更後のバッファ名は、変更を行ったコマンドプロセスから他のコマンドプロセスに通知されるようにしてもよい。
【００７５】
（ステップＳ２４）ｋｓｔａｔ参照部１２１は、参照カウンタ１５２の値が０であるか判断する。値が０の場合、システム統計情報が分配されていない他のコマンドプロセスが存在しないと判断し、処理をステップＳ２５に進める。値が１以上の場合、他のコマンドプロセスが存在すると判断し、処理をステップＳ２６に進める。
【００７６】
（ステップＳ２５）ｋｓｔａｔ参照部１２１は、共有バッファ１５１および参照カウンタ１５２を共有記憶部１２３から削除し、ｋｓｔａｔ参照部１２１の処理を終了する。
（ステップＳ２６）ｋｓｔａｔ参照部１２１は、参照カウンタ１５２の値を１だけ減らし、呼び出し元のコマンドプロセスに関する処理を終了する。
【００７７】
図８は、システム統計情報の取得のシーケンス例を示す図である。ここでは、図４に示したように、コマンドプロセス１４１〜１４４が順に起動する場合を考える。
ｓａｒコマンドが入力されると、コマンドプロセス１４１が、ｋｓｔａｔ参照部１２１を呼び出す（ステップＳ３１）。ｋｓｔａｔ参照部１２１は、共有記憶部１２３に共有バッファがないことを確認すると、共有バッファ１５１を生成してシステムコールを発行する（ステップＳ３２）。その後に、ｖｍｓｔａｔコマンドが入力されると、コマンドプロセス１４２が、ｋｓｔａｔ参照部１２１を呼び出す（ステップＳ３３）。また、ｍｐｓｔａｔコマンドが入力されると、コマンドプロセス１４３が、ｋｓｔａｔ参照部１２１を呼び出す（ステップＳ３４）。ｋｓｔａｔ参照部１２１は、共有バッファ１５１が存在することを確認すると、新たなシステムコールを発行せずにシステムコールの応答を待つ。
【００７８】
ｋｓｔａｔ処理部１１３からシステムコールの応答があると、ｋｓｔａｔ参照部１２１は、共有バッファ１５１のバッファ名を変更し、システム統計情報（ｋｓｔａｔ）を共有バッファ１５１に格納する（ステップＳ３５）。その後に、ｓａｒコマンドが入力されると、コマンドプロセス１４４が、ｋｓｔａｔ参照部１２１を呼び出す（ステップＳ３６）。ｋｓｔａｔ参照部１２１は、バッファ名を変更する前の共有バッファが共有記憶部１２３にないことを確認すると、新たな共有バッファを生成してシステムコールを発行する（ステップＳ３７）。
【００７９】
ｋｓｔａｔ参照部１２１は、共有バッファ１５１に格納されたシステム統計情報を、コマンドプロセス１４１〜１４３に対応する個別バッファ１６１〜１６３にコピーする（ステップＳ３８〜Ｓ４０）。一方、ｋｓｔａｔ処理部１１３からシステムコールの応答があると、ｋｓｔａｔ参照部１２１は、コマンドプロセス１４４に対応する個別バッファ１６４にシステム統計情報を書き込む（ステップＳ４１，Ｓ４２）。なお、個別バッファ１６１〜１６４は、コマンドプロセス１４１〜１４４が生成するものであり、コマンドプロセス１４１〜１４４がその位置（メモリアドレス）を知っている。
【００８０】
図９は、メモリ領域上のデータの変化例を示す第１の図である。コマンドプロセス１４１は、ｋｓｔａｔ参照部１２１を呼び出すとき（上記ステップＳ３１）、空の個別バッファ１６１をＲＡＭ１０２に生成する。コマンドプロセス１４１は、ｋｓｔａｔ参照部１２１を通してシステムコールを発行するとき（上記ステップＳ３２）、空の共有バッファ１５１と値が０に初期化された参照カウンタ１５２をＲＡＭ１０２に生成する。
【００８１】
図１０は、メモリ領域上のデータの変化例を示す第２の図である。コマンドプロセス１４２は、ｋｓｔａｔ参照部１２１を呼び出すとき（上記ステップＳ３３）、空の個別バッファ１６２をＲＡＭ１０２に生成する。また、コマンドプロセス１４２は、ｋｓｔａｔ参照部１２１を通して、参照カウンタ１５２の値を１にインクリメントする。コマンドプロセス１４３は、ｋｓｔａｔ参照部１２１を呼び出すとき（上記ステップＳ３４）、空の個別バッファ１６３をＲＡＭ１０２に生成する。また、コマンドプロセス１４３は、ｋｓｔａｔ参照部１２１を通して、参照カウンタ１５２の値を２にインクリメントする。
【００８２】
図１１は、メモリ領域上のデータの変化例を示す第３の図である。コマンドプロセス１４１は、ｋｓｔａｔ処理部１１３からシステム統計情報を取得すると（上記ステップＳ３５）、共有バッファ１５１のバッファ名を変更し、加工前のシステム統計情報を共有バッファ１５１に書き込む。また、コマンドプロセス１４１は、プロセスリスト１５３に登録されているコマンドプロセス１４２，１４３のスリープ状態を解除する。
【００８３】
図１２は、メモリ領域上のデータの変化例を示す第４の図である。コマンドプロセス１４４は、ｋｓｔａｔ参照部１２１を呼び出すとき（上記ステップＳ３６）、空の個別バッファ１６４をＲＡＭ１０２に生成する。コマンドプロセス１４４は、ｋｓｔａｔ参照部１２１を通してシステムコールを発行するとき（上記ステップＳ３７）、新たな空の共有バッファ（共有バッファ１５１ａ）と値が０に初期化された新たな参照カウンタ（参照カウンタ１５２ａ）をＲＡＭ１０２に生成する。
【００８４】
図１３は、メモリ領域上のデータの変化例を示す第５の図である。コマンドプロセス１４１は、ｋｓｔａｔ参照部１２１を通して、共有バッファ１５１のシステム統計情報を個別バッファ１６１にコピーし、参照カウンタ１５２を１にデクリメントする（上記ステップＳ３８）。コマンドプロセス１４２は、システム統計情報を個別バッファ１６２にコピーし、参照カウンタ１５２を０にデクリメントする（上記ステップＳ３９）。コマンドプロセス１４３は、システム統計情報を個別バッファ１６３にコピーし、共有バッファ１５１および参照カウンタ１５２を削除する（上記ステップＳ４０）。
【００８５】
コマンドプロセス１４１〜１４３の中では、共有バッファ１５１から各自の個別バッファへのシステム統計情報のコピーによって、ｋｓｔａｔ参照部１２１の処理が終了する。その後、コマンドプロセス１４１は、個別バッファ１６１のシステム統計情報を用いて、ｓａｒコマンドに対応するデータを生成して出力する。コマンドプロセス１４２は、個別バッファ１６２のシステム統計情報を用いて、ｖｍｓｔａｔコマンドに対応するデータを生成して出力する。コマンドプロセス１４３は、個別バッファ１６３のシステム統計情報を用いて、ｍｐｓｔａｔコマンドに対応するデータを生成して出力する。
【００８６】
なお、共有バッファ１５１にシステム統計情報が格納された後のコマンドプロセス１４１〜１４３の処理（上記ステップＳ３８〜Ｓ４０の処理）は、任意の順序で実行できる。図８には、コマンドプロセス１４１、コマンドプロセス１４２、コマンドプロセス１４３の順序で実行される例を示したが、これと異なる順序で実行されることもある。コマンドプロセス１４１〜１４３の実行順序は、ＯＳによるプロセスのスケジューリングに依存してもよい。ただし、参照カウンタ１５２の値を確認してから参照カウンタ１５２を更新するまでの間は、プロセスの切り替えが発生しないよう制御することが望ましい。
【００８７】
第２の実施の形態の情報処理装置１００によれば、コマンドプロセス毎にシステムコールを発行する場合と比べて、システムコールの発行回数を削減でき、情報処理装置１００のコマンド処理の負荷を軽減できる。また、応答待ち中のシステムコールが存在しなければ新たなシステムコールを発行するため、古いシステム統計情報に基づいてコマンド処理が行われてしまうことを抑制でき、カーネル空間で管理されるシステム統計情報とコマンド処理との間の整合性を図れる。また、システム統計情報のキャッシュをユーザ空間で常に保持する方法と比べて、キャッシュの整合性を維持するための負荷を削減できる。
【００８８】
また、コマンドの種類に応じた加工を行う前のシステム統計情報（ＲＡＷデータ）を共有バッファ１５１に格納して複数のコマンドプロセスに分配するため、１回のシステムコールで取得したシステム統計情報を、種類の異なる複数のコマンドの処理に利用することができる。また、システムコールの応答があったときに共有バッファ１５１のバッファ名を変更するようにしたので、所定の名称の共有バッファが共有記憶部１２３に存在するか確認することで、応答待ち中のシステムコールが存在するか判断することができる。
【００８９】
なお、上記のように、第２の実施の形態のコマンド制御方法は、コンピュータとしての機能を有する情報処理装置１００に、コマンド制御プログラムを実行させることで実現できる。コマンド制御プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体２３）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【００９０】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク２４経由で当該プログラムを配布することもできる。情報処理装置１００は、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＨＤＤ１０３などの記憶装置に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワーク２４を介して受信したプログラムを直接実行してもよい。
【００９１】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【００９２】
１０  コンピュータ
１１  コマンド制御部
１２ａ，１２ｂ，１２ｃ  コマンド
【図１】
2012124017.tif 000003
【図２】
2012124017.tif 000004
【図３】
2012124017.tif 000005
【図４】
2012124017.tif 000006
【図５】
2012124017.tif 000007
【図６】
2012124017.tif 000008
【図７】
2012124017.tif 000009
【図８】
2012124017.tif 000010
【図９】
2012124017.tif 000011
【図１０】
2012124017.tif 000012
【図１１】
2012124017.tif 000013
【図１２】
2012124017.tif 000014
【図１３】
2012124017.tif 000015
【手続補正書】
【提出日】平成25年8月29日(2013.8.29)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５６
【補正方法】変更
【補正の内容】
【００５６】
状態＃１は、１つのコマンドプロセスがシステム統計情報を要求し、システムコールの応答を待っている状態である。状態＃１では、当該システムコールに対応する共有バッファおよび参照カウンタが、共有記憶部１２３に生成されている。状態＃１では、当該共有バッファは空であり、参照カウンタの値は０である。参照状態が状態＃１のときに、更に何れかのコマンドプロセスがシステム統計情報を要求すると、参照状態が状態＃２に遷移する。一方、システムコールの応答結果（ｋｓｔａｔまたはｐｒｏｃｆｓ）が取得されると、参照状態が状態＃４に遷移する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００５９
【補正方法】変更
【補正の内容】
【００５９】
状態＃４は、システムコールによってシステム統計情報が取得され、１つのコマンドプロセスに対してまだ分配していない状態である。状態＃４では、当該システムコールに対応する共有バッファは加工前のシステム統計情報を記憶しており、参照カウンタの値は０である。参照状態が状態＃４のときに、残り１つのコマンドプロセスに対応する個別バッファにシステム統計情報がコピーされると、当該共有バッファと参照カウンタが共有記憶部１２３から削除され、参照状態が状態＃０に遷移する。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータが実行するコマンド制御方法であって、
コマンドが前記コンピュータに入力されると、前記コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定し、
前記第１のシステムコールが存在する場合、前記第１のシステムコールの応答結果を用いて、前記コマンドに対応する処理を行い、
前記第１のシステムコールが存在しない場合、第２のシステムコールを発行し、前記第２のシステムコールの応答結果を用いて、前記コマンドに対応する処理を行う、
コマンド制御方法。
【請求項２】
応答待ち中であった前記第１のシステムコールの応答結果が得られるとバッファに格納し、前記バッファに格納された応答結果を、前記コマンドおよび前記他のコマンドに対応するプロセスに提供する、請求項１記載のコマンド制御方法。
【請求項３】
前記第１のシステムコールが応答待ち中である間に入力された、前記コマンドを含む１またはそれ以上のコマンドの数を、メモリ上に生成したカウンタを用いて管理し、
前記カウンタを参照して、前記バッファに格納された応答結果を前記１またはそれ以上のコマンドに対応するプロセスに提供することを制御する、
請求項２記載のコマンド制御方法。
【請求項４】
前記バッファに格納された応答結果を前記１またはそれ以上のコマンドおよび前記他のコマンドに対応するプロセスに提供した後、前記バッファを削除する、
請求項３記載のコマンド制御方法。
【請求項５】
前記第１のシステムコールを発行するとき、前記バッファをメモリ上に生成し、
前記第１のシステムコールの応答結果を前記バッファに格納するとき、前記バッファをメモリ上で識別するための識別情報を書き換える、
請求項２乃至４の何れか一項に記載のコマンド制御方法。
【請求項６】
前記コマンドおよび前記他のコマンドは、オペレーティングシステムが管理するシステム統計情報を取得するためのコマンドである、
請求項１乃至５の何れか一項に記載のコマンド制御方法。
【請求項７】
オペレーティングシステムのシステムコールを発行してコマンドに対応する処理を行うコンピュータに実行させるコマンド制御プログラムであって、前記コンピュータに、
コマンドが前記コンピュータに入力されると、前記コマンドより前に入力された他のコマンドに基づいて発行された、応答待ち中の第１のシステムコールが存在するか判定し、
前記第１のシステムコールが存在する場合、前記第１のシステムコールの応答結果を、前記コマンドに対応するプロセスに提供し、
前記第１のシステムコールが存在しない場合、第２のシステムコールを発行し、前記第２のシステムコールの応答結果を、前記コマンドに対応するプロセスに提供する、
処理を実行させるコマンド制御プログラム。
【国際調査報告】
2012124017.tif 000016
2012124017.tif 000017