(57)【要約】【課題】従来待ち状態に対処できる仕組みを持たないシステムコールの処理において、ユーザプログラムの待ち状態が長時間継続することを回避する仕組みを提供することである。【解決手段】ユーザプログラムからのアクセスから保護され、システム処理を実行するシステム処理部と、前記システム処理部を起動する起動インターフェースの定義を格納する格納部と、前記起動インターフェースを通じて、ユーザプログラムからシステム処理の実行依頼を受け付ける受付部と、前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割する処理分割部とを備え、前記システム処理部は、ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行する。【選択図】図１
2005050023.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラムからのアクセスから保護され、システム処理を実行するシステム処理部と、
前記システム処理部を起動する起動インターフェースの定義を格納する格納部と、
前記起動インターフェースを通じて、ユーザプログラムからシステム処理の実行依頼を受け付ける受付部と、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割する処理分割部とを備え、
前記システム処理部は、ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行する情報処理装置。
【請求項２】
前記処理分割部は、前記起動インターフェースの定義の種別に応じて、分割する処理を決定する請求項１記載の情報処理装置。
【請求項３】
前記処理分割部は、前記システム処理部が実行した処理結果に基づいて、次に実行する処理を決定する請求項１記載の情報処理装置。
【請求項４】
ユーザプログラムから起動され、起動された処理が完了するまで他の処理の起動が保留される、システム処理を起動する起動インターフェースを通じて、ユーザプログラムから前記システム処理の実行依頼を受け付けるステップと、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割するステップ、
ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行するステップとを実行する情報処理方法。
【請求項５】
ユーザプログラムから起動され、起動された処理が完了するまで他の処理の起動が保留される、システム処理を起動する起動インターフェースを通じて、ユーザプログラムから前記システム処理の実行依頼を受け付けるステップと、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割するステップ、
ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行するステップとをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ユーザプログラムがコンピュータ・システムの資源を操作するときの処理に関する。
【０００２】
【従来の技術】
コンピュータ・システムはファイルシステム、メモリ管理、タスク管理、デバイスドライバインターフェースなどのいろいろな資源によって構成されている。そして、オペレーティング・システム（以下ＯＳという）内のカーネルと呼ばれる部分がこれらの資源を管理する。
【０００３】
ＯＳは、コンピュータ・システムの破壊を防ぐために、これらの資源に対するユーザプログラムの操作を制限することによって、これらの資源を保護する。
【０００４】
カーネルは、ユーザがこれらの資源を操作できるように、システムコールというアプリケーション・プログラム・インターフェース（以下、ＡＰＩという）を提供する。
【０００５】
ユーザプログラムは、システムコールを利用してカーネルに資源の利用を要求し、カーネルは要求を受けるとユーザプログラムに代わって資源を操作する。
【０００６】
このような従来のシステムコール処理は、以下のような流れで実行される。ユーザプログラムは、システムコールを利用する時には、システムコールライブラリ内の関数（以下、ライブラリ関数という）を介して利用する。
【０００７】
このライブラリ関数は、ユーザプログラムが利用するシステムコールの種別と引数をレジスタに格納して、ソフトウェア割り込み命令（ｉｎｔ  ０ｘ８０）を実行する。そして、ライブラリ関数は、制御をユーザプログラムからカーネルに切り替える。すなわち、制御はユーザモードからカーネルモードに移行する。このようにユーザプログラムが処理を実行できる状態のことをユーザモードという。これに対して、カーネルが資源を操作できる状態のことをカーネルモードをいう。
【０００８】
カーネルは、ユーザプログラムがレジスタに格納したシステムコールの種別を取得し、システムコールの種別に対応した処理関数を実行する。処理関数の実行時には、カーネルはレジスタに格納された引数を処理関数に渡す。
【０００９】
カーネルがシステムコール処理を実行するとき、カーネルは他の全ての割り込み受付を保留して処理を実行する。
【００１０】
カーネル内部でシステムコールの処理が終了した後、または必要に応じて制御切り替えなどの処理を経た後、カーネルは、処理結果をライブラリ関数に返し、制御をカーネルモードからユーザモードに移行する。そして、ライブラリ関数はユーザプログラムに処理結果を返す。そして、カーネルは、保留していた次の割り込みを受け付け、次のシステムコール処理を実行する。
【００１１】
上述のように従来のいくつかのシステムコールの処理においては、ユーザプログラムがシステムコールを利用し、カーネルモードに制御が切り替わると、カーネルは他の全ての割り込み受付を保留して処理を実行していた。
【００１２】
そのため、そのようなシステムコールの処理において、特定のユーザプログラムに、長い待ち状態が生じる場合があった。その間他のユーザプログラムに制御が切り替わらず、その結果他のユーザプログラムの処理が進まないといった問題が生じていた。
【００１３】
また、ｒｅａｄ／ｗｒｉｔｅなどの一部分のシステムコールでは、処理が待ち状態になると、処理状態を保存し、もしくはユーザプログラムに処理再実行の通知を出し、動的に制御を他のユーザプログラムに切り替える仕組みを持っている。
【００１４】
このようなシステムコールでは、待ち状態と、その待ち状態の解除および処理の再開とを繰り返し、動的に制御が切り替えられる。そのため、このような一部分のシステムコールにおいては上記の問題は発生しない。
【００１５】
しかしながら、このような仕組みを持っていないシステムコールもある。そのようなシステムコールに対して、動的に制御を他のユーザプログラムに切り替えようとすると、システムコールを呼び出すユーザプログラムを変更することが必要である。
【００１６】
また、従来技術として、処理を細かく分割することによりシステムが持つ機能の取捨選択を柔軟に行うことができるシステムコール処理装置も提供されている。この技術は、組み込みシステム用のリアルタイムＯＳが管理する複数の資源が持つ待ち行列にタスクを接続させるシステムコール処理方式に関する。この技術では、処理対象である資源に対して指定可能な動作オプションにそれぞれ対応する処理ルーチンを用意し、資源に対しては指定された動作オプションに対応する処理を一対一に登録する。そして、システムコール処理の際に、この登録しておいた処理ルーチンを実行し、動作オプションで指定された処理を行う（例えば特許文献１参照。）。
【００１７】
【特許文献１】
特願平５−３３４１０５号公報。
【００１８】
【発明が解決しようとする課題】
本発明は、上述のような従来技術の問題に鑑みてなされたものである。すなわち、本発明が解決しようとする課題は、従来待ち状態に対処できる仕組みを持たないシステムコールの処理において、ユーザプログラムの待ち状態が長時間継続することを回避する仕組みを提供することである。そして、本発明の課題はその場合に、ライブラリ関数と連携して、ユーザプログラムには従来のシステムコールＡＰＩに変更が無いように見せることである。
【００１９】
すなわち、ユーザプログラムがシステムコールを要求するときに用いるＡＰＩ、及びユーザプログラムを変更しない。また、ユーザプログラムがシステムコールを要求すると、システムコールの全処理が終了するまでユーザプログラムには処理を戻さない。このような条件の下で、本発明はライブラリ関数を介してシステムコールを利用したユーザプログラムの処理を待たせながら、他のユーザプログラムへの制御切り替えを実現できる技術を提供する。
【００２０】
【課題を解決するための手段】
本発明は、上記課題を解決するために以下の手段を採用した。
【００２１】
本発明に係る情報処理装置は、ユーザプログラムからのアクセスから保護され、システム処理を実行するシステム処理部と、前記システム処理部を起動する起動インターフェースの定義を格納する格納部と、前記起動インターフェースを通じて、ユーザプログラムからシステム処理の実行依頼を受け付ける受付部と、前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割する処理分割部とを備え、前記システム処理部は、ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行することを特徴とする。ここで、起動インターフェースとしては、例えばシステムコールが挙げられる。
【００２２】
このような構成にすると、あるユーザプログラムが発行した起動インターフェースの処理を分割し、それぞれの処理を別々の起動インターフェースで実行する。その結果、例えば計算機などにおいて、ユーザプログラムの並列処理を実現することができ、このような計算機の性能向上に寄与することができる。
【００２３】
また、前記処理分割部は、前記起動インターフェースの定義の種別に応じて、分割する処理を決定してもよい。また、前記処理分割部は、前記システム処理部が実行した処理結果に基づいて、次に実行する処理を決定してもよい。また、前記処理が実行した処理結果が所定の結果でない場合には、処理分割部は異常終了であることをユーザプログラムに通知してもよい。また、前記処理分割部は、割り込みにより分割された処理の実行を起動させてもよい。
【００２４】
また、本発明は上記のようなプログラムを読み取り可能な記憶媒体に記憶したものであってもよい。
【００２５】
【発明の実施の形態】
以下に図１から図１１の図面を参照して、本発明の好適な実施の形態を説明する。図１は本発明における原理説明図であり、図２はシステム構成図であり、図３から図１０はシステムのブロック図であり、図１１は本発明の特徴部分であるシステム監視部の処理フローである。
＜原理説明＞
図１を参照して本発明の原理を説明する。本発明は、ライブラリ関数を介して、ユーザプログラムが要求するシステムコールの処理を２つの処理（前処理、後処理）に分け、前処理と後処理を別々のシステムコールで実行する。そのため、本発明は、前処理と後処理の間で、別のユーザプログラムに制御を切り替えることができる。
【００２６】
本発明はユーザプログラム１０１、システムコールライブラリ１０２、システムコール監視部１０３、及びカーネル１０４によって実現される。
【００２７】
ユーザプログラム１０１は、システムコールライブラリ１０２を介してシステムコールを利用するプログラムである。
【００２８】
システムコールライブラリ１０２は、ユーザプログラム１０１がシステムコールを利用する際に実行される関数（ライブラリ関数）を格納する。ユーザプログラム１０１がシステムコールを利用するとき、このライブラリ関数はシステムコール監視部１０３にユーザプログラム１０１が呼び出したシステムコールの種別を通知する。また、ライブラリ関数はシステムコール監視部１０３からシステムコール処理結果を受け取り、ユーザプログラム１０１へ通知する。
【００２９】
システムコール監視部１０３は、ユーザプログラム１０１が利用するシステムコールを前処理と後処理に分けて、システムコールを管理する。すなわち、システムコール監視部１０３は、ユーザプログラム１０１が利用するシステムコールの種別をシステムコールライブラリ１０２から受け取り、前処理で実行するシステムコールを決定し、カーネル１０４にシステムコールの実行依頼を通知する。この時に処理状態がユーザモードからカーネルモードに切り替わる。その後、システムコール監視部１０３は、カーネル１０４から戻り値とともにシステムコール処理結果を受け取り、後処理を実行するシステムコールを決定する、もしくはシステムコールの処理結果をシステムコールライブラリ１０２へ通知する。この時に処理状態がカーネルモードからユーザモードに切り替わる。
【００３０】
ここで、ユーザプログラム１０１が処理を実行できる状態のことをユーザモードという。つまり、システムコール監視部１０３がユーザプログラム１０１から要求されたシステムコールを前処理と後処理に分けて、カーネル１０４に処理の実行を依頼するまでの状態、およびシステムコール監視部１０３が、カーネル１０４から戻り値とともに実行処理結果を受け取ってからの状態をいう。
【００３１】
また、カーネル１０４が資源を操作できる状態のことをカーネルモードをいう。つまり、システムコール監視部１０３から依頼を受けて、カーネル１０４がシステムコール処理を実行する状態をカーネルモードという。
【００３２】
カーネル１０４は、システムコール監視部１０３からシステムコール実行依頼を受け、システムコール処理を実行する。その後、カーネル１０４は処理結果をシステムコール監視部１０３へ通知する。
＜システム構成＞
図２を参照して、ＬＡＮで接続されたマシンＡとマシンＢにおいて実現されるシステムに、本発明を適用した実施形態を説明する。
【００３３】
図２はこのシステムの構成図である。マシンＡ上のユーザプログラムＸは、マシンＢ上のインターフェースＹを介して、システムコール処理を実行する。そして、マシンＡ上のユーザプログラムＸは、マシンＢを介して処理結果を受け取る。
【００３４】
図３はこのシステムにおけるマシンＡのブロック図である。このようなシステムでは、ユーザプログラム３１０、システムコールライブラリ３２０、カーネル３３０、システムコール転送部３４０によって実現される。
【００３５】
このシステムでは、システムコールライブラリ３２０はライブラリ関数３２１とシステムコール監視部３２２を含み、カーネル３３０はシステムコール処理部３３１を含む。
【００３６】
システムコール処理部３３１は、システムコール監視部３２２が発行したシステムコールと転送の要／不要を受け取る。システムコール処理部３３１は、転送が必要ならばシステムコール転送部３４０へシステムコールの転送を依頼し、転送依頼が終了すると処理終了をシステムコール監視部３２２へ通知する。一方、システムコール処理部３３１は、転送不要なシステムコールに関しては従来のシステムコール処理を実行し、処理結果をシステムコール監視部３２２へ通知する。
【００３７】
システムコール転送部３４０は、ユーザプログラム３１０が発行したシステムコールをシステムコール処理部３３１から受け取り、別のマシンＢに転送する。また、システムコール転送部３４０は、別のマシンＢからシステムコールの処理結果を受け取り、システムコール処理部へ転送する。
＜処理の流れ＞
図４から図１０を参照して、全体の処理の流れを説明する。
【００３８】
まず、図４に示すように、システムコール監視部３２２は、システム立ち上げ時に、前処理を実行するシステムコールと後処理を実行するシステムコールを決定するための検索テーブルを作成する。この検索テーブルはマシン起動時に自動で読み出される。また、検索テーブルはマシン起動時に手動で設定されてもよい。
【００３９】
この検索テーブルの項目には、引数、戻り値、システムコール種別、前処理のシステムコール、及後処理のシステムコールがある。システムコール種別は、ユーザプログラム３１０が利用するシステムコールの種別を示す。本実施の形態では、このシステムコールを《ｉｏｃｔｌ》として説明する。戻り値は、システムコール処理の戻り値であり、前処理・後処理を決定するために、ユーザプログラム３１０が利用するシステムコールともに検索キーとして利用される。
【００４０】
引数は、ユーザプログラム３１０が指定した処理対象との授受情報を示す。本実施の形態では、引数を検索テーブルの項目に入れているが、引数は前処理・後処理の決定には関係ないため、別テーブルで実現してもよい。
【００４１】
前処理のシステムコールは、ユーザプログラム３１０が要求したシステムコールを分けた際に最初に実行される処理であり、後処理のシステムコールは最後に実行される処理である。
【００４２】
また、システム立ち上げ時に、システムコール転送部３４０とシステムコール処理部３３１は、プロセス間通信が可能なコネクションを確立する。
【００４３】
つぎに、図５に示すように、ユーザプログラム３１０がライブラリ関数を用いてシステムコールを呼び出す（Ｓ５０１）と、システムコールライブラリ３２０内のｉｏｃｔｌ用ライブラリ関数３２１はシステムコール監視部３２２にユーザプログラム３１０が呼び出したシステムコールの種別（ここでは《ｉｏｃｔｌ》とする）を渡す（Ｓ５０２）。
【００４４】
そして、システムコール監視部３２２は、システムコール種別《ｉｏｃｔｌ》から前処理を行うシステムコール《ｉｏｃｔｌシステムコール》を取得する。またシステムコール監視部３２２は、検索テーブルの引数に基づいて、システムコールの転送の要／不要を判定し、カーネル３３０に通知する。
【００４５】
システムコール監視部３２２は、ｉｏｃｔｌ処理をカーネル３３０に依頼し（Ｓ５０３）、ソフトウェア割り込み命令を実行して、制御をユーザモードからカーネルモードに切り替える。このとき、システムコール監視部３２２はシステムコール種別《ｉｏｃｔｌ》を保持しておく。この状態でのシステムコールの呼び出しは保留される。
【００４６】
つぎに、図６に示すように、システムコール処理部３３１は、ユーザプログラム３１０が呼び出したｉｏｃｔｌ処理を別のマシンＢに転送する必要があるかを、システムコール監視部３２２の通知に従って判断する。
【００４７】
システムコール処理部３３１は、転送する必要がある場合はプロセス間通信を用いて、《ｉｏｃｔｌ転送依頼》をシステムコール転送部３４０に送信する（Ｓ６０１）。
【００４８】
その後、システムコール処理部３３１は、《ｉｏｃｔｌ転送依頼》を受け取ると、システムコール監視部３２２にシステムコール処理結果待ちを意味する戻り値《ＥＷＡＩＴ》を戻す（Ｓ６０２）。この時点で制御がカーネルモードからユーザモードに切り替わるのでシステムコール転送部３４０は別のマシンＢへｉｏｃｔｌを転送する（Ｓ６０３）。
【００４９】
この状態で制御はユーザモードであるので、他のユーザプログラムも待ち時間なしにシステムコールを実行可能である。
【００５０】
つぎに、図７に示すように、システムコール監視部３２２は、戻り値《ＥＷＡＩＴ》と、ユーザプログラム３１０が呼び出したシステムコール《ｉｏｃｔｌ》とをキーとしてテーブルを検索し、続きの処理《ｒｅａｄシステムコール》を取得し、ｒｅａｄ処理をカーネル３３０に依頼し（Ｓ７０１）、ソフトウェア割り込み命令を実行して制御をユーザモードからカーネルモードに切り替える。本実施の形態では、前処理《ｉｏｃｔｌシステムコール》に続いて後処理《ｒｅａｄシステムコール》を実行するが、他のユーザプログラムが要求したシステムコールを処理してもよい。
【００５１】
すなわち、複数のユーザプログラム（プロセス）からシステムコールが呼び出されている場合、上記前処理を行ったシステムコールの実行完了後に、プロセスの優先順位やキュー内の順位（図示せず）に従って、次にカーネル３３０に依頼されるシステムコールが決定される。
【００５２】
つぎに、図８に示すように、システムコール転送部３４０は、別のマシンＢからｉｏｃｔｌ処理結果《ＥＯＫ》を受信する（Ｓ８０１）と、プロセス間通信を用いてシステムコール処理部３３１にｉｏｃｔｌ処理結果《ＥＯＫ》を送信する（Ｓ８０２）。そしてシステムコール処理部３３１は、ｒｅａｄ処理でｉｏｃｔｌ処理結果《ＥＯＫ》を読み出してシステムコール監視部３２２に返す（Ｓ８０３）。
【００５３】
つぎに、図９に示すように、システムコール監視部３２２は、ｉｏｃｔｌ処理結果《ＥＯＫ》とユーザプログラムが呼び出したシステムコール《ｉｏｃｔｌ》をキーとしてテーブルを検索するがヒットしないので、ｉｏｃｔｌ処理結果《ＥＯＫ》をシステムコールライブラリのｉｏｃｔｌ用ライブラリ関数に渡す（Ｓ９０１）。そしてｉｏｃｔｌ用ライブラリ関数３２１は、処理結果《ＥＯＫ》をユーザプログラム３１０に渡す（Ｓ９０２）。
【００５４】
最後に、図１０に示すように、前処理、後処理のシステムコールの処理結果が予期していない結果だった場合、システムコール監視部３２２は、ｉｏｃｔｌ用ライブラリ関数３２１に対して、処理が異常終了したことを示す《ＥＥＲＲＯＲ》を渡す（Ｓ１００１）。そしてｉｏｃｔｌ用ライブラリ関数３２１は、処理結果《ＥＥＲＲＯＲ》をユーザプログラム３１０に渡す（Ｓ１００２）。
＜システムコール監視部の処理フロー＞
図１１を参照して、システムコール監視部３２２の処理を説明する。図１１はシステムコール監視部３２２の処理フローを示す。
【００５５】
システムコール監視部３２２はシステムコール入力待ち状態である（Ｓ１１０１）。
【００５６】
システムコール監視部３２２はシステムコールを解析し、種別、引数を取得する（Ｓ１１０２）。システムコール監視部３２２は、ライブラリ関数３２１からユーザプログラム３１０が呼び出したシステムコールの種別を取得する。そして、システムコール監視部３２２は、このシステムコール種別から前処理・後処理を決定する。
【００５７】
システムコール監視部３２２は、引数をキーとして検索テーブルを検索する（Ｓ１１０３）。つまり、システムコール監視部３２２は、このシステムコールの転送の要／不要を判断するため、検索テーブルを検索する。
【００５８】
システムコール監視部３２２は、検索がヒットしたか否かを判断する（Ｓ１１０４）。
【００５９】
Ｓ１１０４で、システムコール監視部３２２は、検索がヒットしなかったと判断した場合、通常のシステムコール処理を実行する（Ｓ１１０５）。システムコール監視部３２２は、転送不要なシステムコールとして、システムコール処理部３３１に処理の実行を依頼する。
【００６０】
一方Ｓ１１０４で、システムコール監視部３２２は、検索がヒットしたと判断した場合、システムコールの種別をキーとして検索テーブルを検索する（Ｓ１１０６）。
【００６１】
システムコール監視部３２２は、検索がヒットしたか否かを判断する（Ｓ１１０７）
Ｓ１１０７で、システムコール監視部３２２は、検索がヒットしなかったと判断した場合、エラーをユーザプログラムに通知する（Ｓ１１０８）。
【００６２】
一方Ｓ１１０７で、システムコール監視部３２２は、検索がヒットしたと判断した場合、システムコールを取得し、処理を実行する（Ｓ１１０９）。つまり、システムコール監視部３２２は、ライブラリ関数３２１からシステムコールを取得し、カーネル３３０内のシステム処理部３３１に処理の実行を依頼する。システム処理部３３１への実行依頼にともなって、制御はユーザモードからカーネルモードに切り替わる。
【００６３】
システムコール監視部３２２は、システムコールの戻り値を取得する（Ｓ１１１０）。システムコール監視部３２２は、システムコール処理部３３１から戻り値を取得する。システムコール監視部３２２の戻り値の取得にともなって、制御はカーネルモードからユーザモードに切り替わる。
【００６４】
システムコール監視部３２２は、取得した戻り値が後処理の存在を示す値《ＥＷＡＩＴ》であるか否かを判断する（Ｓ１１１１）。
【００６５】
Ｓ１１１１で、システムコール監視部３２２は、戻り値が《ＥＷＡＩＴ》であると判断した場合、後処理を実行するか否かを判断する（Ｓ１１１２）。
【００６６】
ここで、後処理を実行するか否かの判断は、例えば優先レベルに基づいて実行できる。つまり、現状の処理の優先レベルより、高い優先レベルのシステムコールが待ち状態であれば、そのシステムコールを処理するため、後処理を実行しない。一方、現状の処理の優先レベルより、高いシステムコール、もしくは待ち状態のシステムコールが存在しない場合には、続いて後処理を実行する。
【００６７】
ここで、現状の処理が優先レベルの高いシステムコールであり、現状の処理は割り込んで実行された場合、割り込み前の後処理と現状の処理に対する後処理とが存在する。このような状況であっても、優先レベルに応じて後処理を決定して実行することができる。
【００６８】
Ｓ１１１２で、システムコール監視部３２２は、戻り値をキーとしてテーブルを検索する（Ｓ１１１３）。そして、システムコール監視部３２２は、処理をＳ１１０７に戻し後処理を実行する。
【００６９】
一方Ｓ１１１２で、システムコール監視部３２２は、後処理を実行しないと判断した場合、Ｓ１１０２に戻って、他のシステムコールの処理を実行する。すなわち、Ｓ１１１２で後処理よりも優先レベルが高いシステムコールが待ち状態であるため、このシステムコールの処理を実行する。
【００７０】
一方Ｓ１１１１で、システムコール監視部３２２は、戻り値が《ＥＷＡＩＴ》でないと判断した場合、ライブラリ関数３２１を介して、処理終了をユーザプログラム３１０に通知する（Ｓ１１１４）。このとき、システムコール監視部３２２は、処理が正常終了であれば《ＥＯＫ》を通知し、予期していなかった結果であれば異常終了を示す《ＥＥＲＲＯＲ》を通知する。その後、システム監視部３２２は処理を終了する（Ｓ１１１５）。
＜実施形態の効果＞
以上説明したように、本実施の形態では、あるユーザプログラムが発行したシステムコールの処理を前処理と後処理に２分し、それぞれの処理を別々のシステムコールで実行する。そのため、あるユーザプログラムが発行したシステムコールの完全な処理終了を待たなくても、例えば、前処理が終了すれば、別のユーザプログラムが処理を進めることが出来るという効果を奏する。その結果、計算機においてユーザプログラムの並列処理を実現することができ、係る計算機の性能向上に寄与することができる。
＜変形例＞
上述の実施の形態では、図２に示すように、マシンＡ上のユーザプログラムＸが、同一ＬＡＮ上に存在するマシンＢのインターフェースＹの設定を《ｉｏｃｔｌ》というシステムコールで変更する場合について説明した。しかしながら、本発明はこのようなシステムに限定されない。
【００７１】
本発明は単体マシンにも適用することができる。以下、本発明を単体マシンに適用した変形例を説明する。上述の実施の形態のように、ユーザプログラムは、ｉｏｃｔｌを呼び出す際に引き数として、処理種別を渡す。ところで、《ｉｏｃｔｌ》の処理の中で、接続しているプリンタの設定を行う処理がある。
【００７２】
このような処理では、プリンタに処理を転送するバスの速度やプリンタの性能によって、ユーザプログラムの要求に対する応答に時間がかかる場合がある。このよな状況の場合に本発明を単体マシンに適用すると、プリンタ設定のシステムコールを前処理と後処理に分割し、前処理の実行後に別のユーザプログラムに処理を移すことができる。したがって、ユーザプログラムを並列処理することで、プリンタに処理を転送するバスの速度やプリンタの性能による遅延を抑制することができる。
【００７３】
なお、上記実施の形態は本発明の範囲をなんら限定するものではなく、当業者が理解できる範囲において適宜、各種の変形の態様があり得る。
＜その他＞
さらに、本実施の形態は以下の発明を開示する。
（付記１）ユーザプログラムからのアクセスから保護され、システム処理を実行するシステム処理部と、
前記システム処理部を起動する起動インターフェースの定義を格納する格納部と、
前記起動インターフェースを通じて、ユーザプログラムからシステム処理の実行依頼を受け付ける受付部と、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割する処理分割部とを備え、
前記システム処理部は、ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行する情報処理装置。
（付記２）前記処理分割部は、前記起動インターフェースの定義の種別に応じて、分割する処理を決定する付記１記載の情報処理装置。
（付記３）前記処理分割部は、前記システム処理部が実行した処理結果に基づいて、次に実行する処理を決定する付記１記載の情報処理装置。
（付記４）前記処理が実行した処理結果が所定の結果でない場合には、処理分割部は異常終了であることをユーザプログラムに通知する付記１記載の情報処理装置。
（付記５）前記処理部は、割り込みにより分割された処理の実行を起動させる付記１記載の情報処理装置。
（付記６）ユーザプログラムから起動され、起動された処理が完了するまで他の処理の起動が保留される、システム処理を起動する起動インターフェースを通じて、ユーザプログラムから前記システム処理の実行依頼を受け付けるステップと、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割するステップ、
ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行するステップとを実行する情報処理方法。
（付記７）前記システム処理を分割するステップは、前記起動インターフェースの定義の種別に応じて、分割する処理を決定する付記６記載の情報処理方法。
（付記８）前記実行するステップは、前記分割されたシステム処理が実行された処理結果に基づいて、次に実行する処理を決定される付記６記載の情報処理方法。
（付記９）前記処理結果が所定の結果でない場合には、異常終了であることをユーザプログラムに通知するステップをさらに実行する付記６記載の情報処理方法。
（付記１０）割り込みにより分割された処理の実行を起動させるステップをさらに実行する付記６記載の情報処理方法。
（付記１１）ユーザプログラムから起動され、起動された処理が完了するまで他の処理の起動が保留される、システム処理を起動する起動インターフェースを通じて、ユーザプログラムから前記システム処理の実行依頼を受け付けるステップと、
前記実行依頼を受け付けたシステム処理を複数のシステム処理に分割するステップ、
ユーザプログラムから実行依頼を受けた前記システム処理、または分割された前記システム処理を実行するステップとをコンピュータに実行させるプログラム。
（付記１２）前記システム処理を分割するステップは、前記起動インターフェースの定義の種別に応じて、分割する処理を決定する付記１１記載の情報処理方法。
（付記１３）前記システム処理を分割するステップは、前記分割された処理が実行された処理結果に基づいて、次に実行する処理を決定する付記１１記載のプログラム。
（付記１４）前記処理結果が所定の結果でない場合には、異常終了であることをユーザプログラムに通知するステップをさらに実行させる付記１１記載のプログラム。
（付記１５）割り込みにより分割された処理の実行を起動させるステップをさらに実行させる付記１１記載のプログラム。
【００７４】
【発明の効果】
以上で説明したように、本発明は、従来待ち状態に対処できる仕組みを持たないシステムコールに対して、待ち状態に対処できる仕組みを提供することができる。
【図面の簡単な説明】
【図１】本発明の原理説明図である。
【図２】実施の形態におけるシステム構成図である。
【図３】システム全体の処理を説明するためのブロック図である。
【図４】システム全体の処理を説明するためのブロック図である。
【図５】システム全体の処理を説明するためのブロック図である。
【図６】システム全体の処理を説明するためのブロック図である。
【図７】システム全体の処理を説明するためのブロック図である。
【図８】システム全体の処理を説明するためのブロック図である。
【図９】システム全体の処理を説明するためのブロック図である。
【図１０】システム全体の処理を説明するためのブロック図である。
【図１１】システム監視部の処理フローを示す図である。
【符号の説明】
１０１…ユーザプログラム
１０２…システムコールライブラリ
１０３…システムコール監視部
１０４…カーネル
３１０…ユーザプログラム
３２０…システムコールライブラリ
３２１…ライブラリ関数
３２２…システムコール監視部
３３０…カーネル
３３１…システムコール処理部
３４０…システムコール転送部
【図１】
2005050023.tif 000003
【図２】
2005050023.tif 000004
【図３】
2005050023.tif 000005
【図４】
2005050023.tif 000006
【図５】
2005050023.tif 000007
【図６】
2005050023.tif 000008
【図７】
2005050023.tif 000009
【図８】
2005050023.tif 000010
【図９】
2005050023.tif 000011
【図１０】
2005050023.tif 000012
【図１１】
2005050023.tif 000013