(57)【要約】課題  ライブラリプログラムを含む複数プログラムからなるアプリケーションにおいて、アプリケーションが呼び出すシステムコールの処理の許否を決定できるルールを適用可能なオペレーティングシステムを提供する。解決手段  プログラムをロードしたメモリ上のアドレスをプログラムと対応させてアドレス範囲セットとして記憶し、アプリケーションの起動処理において、各プログラムをメモリ上にロードし、アドレス範囲セットをアドレス範囲セット記憶手段に記憶させ、アプリケーションからのシステムコールの呼び出しを受け、各種の処理を実行し、アプリケーションを構成するプログラムによるシステムコールの利用の可否を記述する動作ルールを記憶し、システムコール処理手段によって呼び出された処理を実行するか否かを、システムコールの呼び出し元のプログラムに対応した動作ルールに基づいて決定する。
2008114560.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションを構成する１以上のプログラムをロードしたメモリ上のアドレスを前記プログラムと対応させてアドレス範囲セットとして記憶するアドレス範囲セット記憶手段と、
アプリケーションの起動処理において、アプリケーションを構成する各プログラムをメモリ上にロードし、前記アドレス範囲セットをアドレス範囲セット記憶手段に記憶させる機能を有するアプリケーションロード手段と、
アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行するシステムコール処理手段と、
アプリケーションを構成するプログラムによるシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段と、
前記システムコール処理手段によって呼び出された処理を実行するか否かを、システムコールの呼び出し元のプログラムに対応した前記動作ルールに基づいて決定する動作ルール適用手段と
を備えることを特徴とするコンピュータ。
【請求項２】
前記プログラムをロードしたメモリ上のアドレスの上限値と下限値と前記プログラムの識別子との組を前記アドレス範囲セットとして記憶することを特徴とする請求項１に記載のコンピュータ。
【請求項３】
前記動作ルール適用手段において、システムコールの呼び出し元のアドレスを特定する呼び出し元アドレス特定手段と、
前記動作ルール適用手段において、前記呼び出し元アドレス特定手段によって得られたアドレスと、前記アドレス範囲セット記憶手段に記憶されたアドレス範囲セット中の各プログラムのアドレス範囲を比較することにより、システムコールの呼び出し元のプログラムを特定する呼び出し元プログラム特定手段とをさらに備えることを特徴とする請求項１又は請求項２に記載のコンピュータ。
【請求項４】
前記動作ルールには、前記アプリケーションを構成する各プログラム毎に、利用可能なリソース量の上限・下限を記述することを特徴とする請求項１から請求項３の何れかに記載のコンピュータ。
【請求項５】
前記アプリケーションの終了を検知して、前記アドレス範囲セット記憶手段から、終了したアプリケーションの前記アドレス範囲セットを削除するアプリケーション終了監視手段を備えることを特徴とする請求項１から請求項４の何れかに記載のコンピュータ。
【請求項６】
前記アドレス範囲セット記憶手段は、前記アプリケーションを一意に識別するタスクＩＤをキー値として、複数のアプリケーションのアドレス範囲セットを記憶し、
前記呼び出し元プログラム特定手段は、前記タスクＩＤをキー値として前記アドレス範囲セット記憶手段中から特定したアドレス範囲セット中の各プログラムのアドレス範囲と、前記呼び出し元アドレスを比較することにより、システムコールの呼び出し元のプログラムを特定することを特徴とする請求項１から請求項５の何れかに記載のコンピュータ。
【請求項７】
前記アプリケーションロード手段は、
前記アプリケーションの起動時に、前記アプリケーションを構成するプログラムをメモリ上にロードした後、前記アプリケーションの実行中に、前記アプリケーションを構成するプログラムをメモリ上に追加ロードし、前記アドレス範囲セットに、追加ロードしたプログラムのアドレス範囲を追加することを特徴とする請求項１から請求項６の何れかに記載のコンピュータ。
【請求項８】
前記動作ルール記憶手段は、システムコールに引き渡すパラメータに基づくシステムコール利用の可否についての記述を含む前記動作ルールを記憶する機能をさらに有し、
前記動作ルール適用手段は、前記アプリケーションがシステムコールに引き渡したパラメータを前記動作ルールと比較して処理の実行の可否を判定する機能をさらに含むことを特徴とする請求項１から請求項７の何れかに記載のコンピュータ。
【請求項９】
前記動作ルール記憶手段は、アプリケーションを構成する２以上のプログラムについて、少なくとも１のプログラムについて、システムコールの利用の可否についての記述を含む前記動作ルールを記憶し、それ以外のプログラムについては、システムコールの利用の可否の記述を含む他のプログラムの動作ルールを指定して、指定した他のプログラムの動作ルールに従う旨を記述した動作ルールを記憶し、
前記動作ルール適用手段は、前記呼び出し元プログラム特定手段によって特定されたプログラムに対応した動作ルールに、他のプログラムの動作ルールを指定して、指定した動作ルールに従う旨の記述が含まれていた場合には、指定した動作ルールに従ってシステムコールの処理の可否を判定する機能をさらに含むことを特徴とする請求項１から請求項８の何れかに記載のコンピュータ。
【請求項１０】
前記アプリケーションロード手段は、アドレス範囲セット中に、アプリケーションの実行の起点となるプログラムの識別子を記録し、
前記動作ルール適用手段は、プログラムの動作ルール中にアプリケーションの実行の起点となるプログラムの動作ルールに従う旨が記述されていた場合には、前記アドレス範囲セット中から実行の起点となるプログラムの識別子を取得し、前記プログラムの識別子を用いてアプリケーションの実行の起点となるプログラムの動作ルールを特定し、動作ルールを適用する機能をさらに含むことを特徴とする請求項９に記載のコンピュータ。
【請求項１１】
仮想記憶機能を備え、前記アドレスとして仮想アドレスを用いることを特徴とする請求項１から請求項１０の何れかに記載のコンピュータ。
【請求項１２】
前記プログラムと当該プログラムと対応する前記動作ルールとを一体に１つのファイル中に記憶する記憶手段が、前記プログラムを格納するプログラム記憶手段と、前記動作ルールを記憶する前記動作ルール記憶手段を兼ねることを特徴とする請求項１から請求項１１の何れかに記載のコンピュータ。
【請求項１３】
プログラムの識別子として、プログラムを記憶したファイルのパス名を用いることを特徴とする請求項２から請求項１２の何れかに記載のコンピュータ。
【請求項１４】
オペレーティングシステムによる動作ルール適用方法であって、
アプリケーションを構成する各プログラムをメモリ上にロードする処理において、アプリケーションを構成する各プログラムのメモリ上へのロード先のアドレスを前記プログラムと対応させてアドレス範囲セットとしてアドレス範囲セット記憶手段に記憶し、
アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行する際に、アプリケーションを構成するプログラム毎にシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段からシステムコールの呼び出し元のプログラムに対応した前記動作ルールを選択し、前記システムコールによって呼び出された処理を実行するか否かを決定することにより、アプリケーションを構成する各プログラムに個別に動作ルールを適用することを特徴とする動作ルール適用方法。
【請求項１５】
前記プログラムをロードしたメモリ上のアドレスの上限値と下限値と前記プログラムの識別子との組を前記アドレス範囲セットとして記憶することを特徴とする請求項１４に記載の動作ルール適用方法。
【請求項１６】
システムコールの呼び出し元のアドレスと、前記アドレス範囲セット記憶手段に記憶されたアドレス範囲セット中の各プログラムのアドレス範囲を比較することにより、システムコールの呼び出し元のプログラムを特定することを特徴とする請求項１４又は請求項１５に記載の動作ルール適用方法。
【請求項１７】
前記動作ルールには、前記アプリケーションを構成する各プログラム毎に、利用可能なリソース量の上限・下限を記述することを特徴とする請求項１４から請求項１６の何れかに記載の動作ルール適用方法。
【請求項１８】
前記アプリケーションの終了を検知して、前記アドレス範囲セット記憶手段から、終了したアプリケーションの前記アドレス範囲セットを削除するステップを有することを特徴とする請求項１４から請求項１７の何れかに記載の動作ルール適用方法。
【請求項１９】
前記アプリケーションを一意に識別するタスクＩＤをキー値として、複数のアプリケーションのアドレス範囲セットを記憶し、
前記タスクＩＤをキー値として前記アドレス範囲セット記憶手段中から特定したアドレス範囲セット中の各プログラムのアドレス範囲と、前記呼び出し元アドレスを比較することにより、システムコールの呼び出し元のプログラムを特定することを特徴とする請求項１４から請求項１８の何れかに記載の動作ルール適用方法。
【請求項２０】
前記アプリケーションの起動時に、前記アプリケーションを構成するプログラムをメモリ上にロードした後、前記アプリケーションの実行中に、前記アプリケーションを構成するプログラムをメモリ上に追加ロードし、前記アドレス範囲セットに、追加ロードしたプログラムのアドレス範囲を追加することを特徴とする請求項１４から請求項１９の何れかに記載の動作ルール適用方法。
【請求項２１】
前記動作ルール記憶手段にシステムコールに引き渡すパラメータに基づくシステムコール利用の可否についての記述を含む前記動作ルールを記憶し、
前記アプリケーションがシステムコールに引き渡したパラメータを前記動作ルールと比較して処理の実行の可否を判定することを特徴とする請求項１４から請求項２０の何れかに記載の動作ルール適用方法。
【請求項２２】
前記動作ルール記憶手段に、アプリケーションを構成する２以上のプログラムについて、少なくとも１のプログラムについて、システムコールの利用の可否についての記述を含む前記動作ルールを記憶し、それ以外のプログラムについては、システムコールの利用の可否の記述を含む他のプログラムの動作ルールを指定して、指定した他のプログラムの動作ルールに従う旨を記述した動作ルールを記憶し、
特定されたプログラムに対応した動作ルールに、他のプログラムの動作ルールを指定して、指定した動作ルールに従う旨の記述が含まれていた場合には、指定した動作ルールに従ってシステムコールの処理の可否を判定することを特徴とする請求項１４から請求項２１の何れかに記載の動作ルール適用方法。
【請求項２３】
前記アドレス範囲セット中に、アプリケーションの実行の起点となるプログラムの識別子を記録し、
前記プログラムの動作ルール中にアプリケーションの実行の起点となるプログラムの動作ルールに従う旨が記述されていた場合には、前記アドレス範囲セット中から実行の起点となるプログラムの識別子を取得し、前記プログラムの識別子を用いてアプリケーションの実行の起点となるプログラムの動作ルールを特定し、動作ルールを適用することを特徴とする請求項２２に記載の動作ルール適用方法。
【請求項２４】
仮想記憶機能を備え、前記アドレスとして仮想アドレスを用いることを特徴とする請求項１４から請求項２３の何れかに記載の動作ルール適用方法。
【請求項２５】
前記プログラムと当該プログラムと対応する前記動作ルールとを一体に１つのファイル中に記憶することを特徴とする請求項１４から請求項２４の何れかに記載の動作ルール適用方法。
【請求項２６】
プログラムの識別子として、プログラムを記憶したファイルのパス名を用いることを特徴とする請求項１５から請求項２５の何れかに記載の動作ルール適用方法。
【請求項２７】
アプリケーションを構成する各プログラムをメモリ上にロードする処理において、アプリケーションを構成する各プログラムのメモリ上へのロード先のアドレスを前記プログラムと対応させてアドレス範囲セットとしてアドレス範囲セット記憶手段に記憶する処理と、
アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行する際に、アプリケーションを構成するプログラム毎にシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段からシステムコールの呼び出し元のプログラムに対応した前記動作ルールを選択し、前記システムコールによって呼び出された処理を実行するか否かを決定することにより、アプリケーションを構成する各プログラムに個別に動作ルールを適用する処理とをコンピュータに実行させることを特徴とするオペレーティングシステム。
【請求項２８】
前記プログラムをロードしたメモリ上のアドレスの上限値と下限値と前記プログラムの識別子との組を前記アドレス範囲セットとして記憶する処理をコンピュータに実行させることを特徴とする請求項２７に記載のオペレーティングシステム。
【請求項２９】
システムコールの呼び出し元のアドレスと、前記アドレス範囲セット記憶手段に記憶されたアドレス範囲セット中の各プログラムのアドレス範囲を比較することにより、システムコールの呼び出し元のプログラムを特定する処理をコンピュータに実行させることを特徴とする請求項２７又は請求項２８に記載のオペレーティングシステム。
【請求項３０】
前記動作ルールに、前記アプリケーションを構成する各プログラム毎に、利用可能なリソース量の上限・下限を記述する処理をコンピュータに実行させることを特徴とする請求項２７から請求項２９の何れかに記載のオペレーティングシステム。
【請求項３１】
前記アプリケーションの終了を検知して、前記アドレス範囲セット記憶手段から、終了したアプリケーションの前記アドレス範囲セットを削除する処理をコンピュータに実行させることを特徴とする請求項２７から請求項３０の何れかに記載のオペレーティングシステム。
【請求項３２】
前記アプリケーションを一意に識別するタスクＩＤをキー値として、複数のアプリケーションのアドレス範囲セットを記憶する処理と、
前記タスクＩＤをキー値として前記アドレス範囲セット記憶手段中から特定したアドレス範囲セット中の各プログラムのアドレス範囲と、前記呼び出し元アドレスを比較することにより、システムコールの呼び出し元のプログラムを特定する処理をコンピュータに実行させることを特徴とする請求項２７から請求項３１の何れかに記載のオペレーティングシステム。
【請求項３３】
前記アプリケーションの起動時に、前記アプリケーションを構成するプログラムをメモリ上にロードした後、前記アプリケーションの実行中に、前記アプリケーションを構成するプログラムをメモリ上に追加ロードし、前記アドレス範囲セットに、追加ロードしたプログラムのアドレス範囲を追加する処理をコンピュータに実行させることを特徴とする請求項２７から請求項３２の何れかに記載のオペレーティングシステム。
【請求項３４】
前記動作ルール記憶手段にシステムコールに引き渡すパラメータに基づくシステムコール利用の可否についての記述を含む前記動作ルールを記憶する処理と、
前記アプリケーションがシステムコールに引き渡したパラメータを前記動作ルールと比較して処理の実行の可否を判定する処理をコンピュータに実行させることを特徴とする請求項２７から請求項３３の何れかに記載のオペレーティングシステム。
【請求項３５】
前記動作ルール記憶手段に、アプリケーションを構成する２以上のプログラムについて、少なくとも１のプログラムについて、システムコールの利用の可否についての記述を含む前記動作ルールを記憶し、それ以外のプログラムについては、システムコールの利用の可否の記述を含む他のプログラムの動作ルールを指定して、指定した他のプログラムの動作ルールに従う旨を記述した動作ルールを記憶する処理と、
特定されたプログラムに対応した動作ルールに、他のプログラムの動作ルールを指定して、指定した動作ルールに従う旨の記述が含まれていた場合には、指定した動作ルールに従ってシステムコールの処理の可否を判定する処理をコンピュータに実行させることを特徴とする請求項２７から請求項３４の何れかに記載のオペレーティングシステム。
【請求項３６】
前記アドレス範囲セット中に、アプリケーションの実行の起点となるプログラムの識別子を記録する処理と、
前記プログラムの動作ルール中にアプリケーションの実行の起点となるプログラムの動作ルールに従う旨が記述されていた場合には、前記アドレス範囲セット中から実行の起点となるプログラムの識別子を取得し、前記プログラムの識別子を用いてアプリケーションの実行の起点となるプログラムの動作ルールを特定し、動作ルールを適用する処理をコンピュータに実行させることを特徴とする請求項３５に記載のオペレーティングシステム。
【請求項３７】
仮想記憶機能を備え、前記アドレスとして仮想アドレスを用いることを特徴とする請求項２７から請求項３６の何れかに記載のオペレーティングシステム。
【請求項３８】
前記プログラムと当該プログラムと対応する前記動作ルールとを一体に１つのファイル中に記憶することを特徴とする請求項２７から請求項３７の何れかに記載のオペレーティングシステム。
【請求項３９】
プログラムの識別子として、プログラムを記憶したファイルのパス名を用いることを特徴とする請求項２８から請求項３８の何れかにオペレーティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムを搭載するコンピュータに関し、特にアプリケーションを構成する各プログラムの動作を個別に制御するコンピュータ、動作ルール適用方法、オペレーティングシステムに関する。
【背景技術】
【０００２】
関連技術としてのオペレーティングシステムの一例が、非特許文献１に記載されている。この非特許文献１に記載のオペレーティングシステムは、アプリケーションを構成するプログラムのうち、プログラムの実行の起点となるプログラムに付与された“タイプ”と呼ばれる分類情報に基づいて、アプリケーションの動作を制御する動作ルールである“ポリシー”を特定することにより、アプリケーションが呼び出すシステムコールの実行を許可するか、禁止するかを決定するよう動作する。【０００３】
ここで、例えば、あるアプリケーション（仮に、アプリケーションＡとする）が、ＨＴＴＰ通信を行うために、ＨＴＴＰ通信ライブラリを利用する場合、アプリケーションＡの実行の起点となるプログラムの動作を制御するための動作ルール中に、ＨＴＴＰ通信ライブラリの動作ルールを含めて記述する。【０００４】
別のアプリケーション（仮に、アプリケーションＢとする）が、ＨＴＴＰ通信を行うために、アプリケーションＡが利用しているものと同一のＨＴＴＰ通信ライブラリを利用する場合、アプリケーションＡの実行の起点となるプログラムの動作ルールのうち、ＨＴＴＰ通信ライブラリの動作に関して記述した部分を、アプリケーションＢの実行の起点となるプログラムの動作ルール中に、ＨＴＴＰ通信ライブラリの動作ルールを、アプリケーションＡの動作ルールと同様に含めて再度記述する。【０００５】
上記の関連技術の場合、特に、ＨＴＴＰ通信ライブラリの動作がバージョンアップなどにより変更された場合、ＨＴＴＰ通信ライブラリの動作ルールも変更が必要となるが、アプリケーションＡの実行の起点となるプログラムの動作ルールとアプリケーションＢの実行の起点となるプログラムの動作ルールの両方の書き換えが必要となる。【０００６】
また、特許文献１に記載されている他のオペレーティングシステムでは、アプリケーションの実行の起点となるプログラムのファイルにハードリンクが作成されているなどの理由により、動作ルールの候補が複数個になる場合には、動作ルール群のうち、他の動作ルールの完全部分集合となる動作ルールを適用するよう動作する。また、完全部分集合となる動作ルールが存在しない場合には、最も限定的な動作ルールを適用するよう動作する。【０００７】
さらに、特許文献２に記載されている装置では、特権命令の実行の可否判定を、特権命令実行時のアドレスがＲＯＭ領域にあるか、ＲＡＭ領域にあるかで変化させるよう動作する。この装置はＲＯＭ領域用の動作ルールと、ＲＡＭ領域用の動作ルールを個別に指定して、特権命令の実行を制御していると思われる。【０００８】
【特許文献１】特開２００４−３０３２４３号公報
【特許文献２】特許第３７６３１４２号
【非特許文献１】PeterLoscocco, Stephen Smalley. Integrating Flexible Support for Security Policiesinto the Linux Operating System. In Proceedings of the FREENIX Track of the2001 USENIX Annual Technical Conference.
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上述した関連技術のオペレーティングシステムにおける動作ルールの適用においては以下に述べるような問題点がある。【００１０】
第１の問題点は、非特許文献１に記載されているオペレーティングシステムでは、アプリケーションを構成するプログラムが２つ以上存在する場合に、プログラム毎に個別に動作ルールを記述し、アプリケーションの動作を制御することができないということである。【００１１】
その理由は、アプリケーションを構成するプログラムのうち、アプリケーションの実行の起点となるプログラムについてのみ動作ルールを記述することができ、アプリケーションを構成するその他のプログラムについては動作ルールを記述することができないからである。【００１２】
第２の問題点は、特許文献１に記載されているオペレーティングシステムでは、アプリケーションの動作ルールを分割して記述して、適用する動作ルールを、実行点がどのプログラムに属しているかに基づいて切り替えることができないことである。【００１３】
その理由は、適用すべき動作ルールの切り替えは、動作ルールの内容の比較によって行われ、実行点がどのプログラムに属しているかによっては行われないからである。【００１４】
第３の問題点は、特許文献２に記載されている装置では、柔軟な動作ルールの記述が難しいことである。【００１５】
その理由は、特権命令の実行のみが動作ルールによる制御対象であり、オペレーティングシステムが提供するシステムコールのような、複雑な処理に対しての動作ルールを記述することができないからである。【００１６】
第４の問題点は、特許文献２に記載されている装置では、複数の動作ルールのうちいずれの動作ルールを適用するかの判断を、ＲＡＭ上での実行点のアドレスの違いに従って切り替えることができないということである。【００１７】
その理由は、実行点のアドレスがＲＯＭ領域上かＲＡＭ領域上かで、適用する動作ルールを切り替えているからである。【００１８】
（発明の目的）
本発明の目的は、ライブラリプログラムを含む複数のプログラムから構成されるアプリケーションにおいて、プログラムの実行点が個々のプログラムのいずれに属しているかに従って、アプリケーションが呼び出すシステムコールの処理を許可するか否かを決定できるような動作ルールを適用することができるコンピュータ、動作ルール適用方法、オペレーティングシステムを実現することにある。
【課題を解決するための手段】
【００１９】
本発明のオペレーティングシステムを搭載するコンピュータは、アプリケーションを構成する１以上のプログラムをロードしたメモリ上のアドレスをプログラムと対応させてアドレス範囲セットとして記憶するアドレス範囲セット記憶手段と、アプリケーションの起動処理において、アプリケーションを構成する各プログラムをメモリ上にロードし、アドレス範囲セットをアドレス範囲セット記憶手段に記憶させる機能を有するアプリケーションロード手段と、アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行するシステムコール処理手段と、アプリケーションを構成するプログラムによるシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段と、システムコール処理手段によって呼び出された処理を実行するか否かを、システムコールの呼び出し元のプログラムに対応した動作ルールに基づいて決定する動作ルール適用手段とを含む。【００２０】
本発明のオペレーティングシステムによる動作ルール適用方法は、アプリケーションを構成する各プログラムをメモリ上にロードする処理において、アプリケーションを構成する各プログラムのメモリ上へのロード先のアドレスをプログラムと対応させてアドレス範囲セットとしてアドレス範囲セット記憶手段に記憶し、アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行する際に、アプリケーションを構成するプログラム毎にシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段からシステムコールの呼び出し元のプログラムに対応した動作ルールを選択し、システムコールによって呼び出された処理を実行するか否かを決定することにより、アプリケーションを構成する各プログラムに個別に動作ルールを適用する。【００２１】
本発明のオペレーティングシステムは、アプリケーションを構成する各プログラムをメモリ上にロードする処理において、アプリケーションを構成する各プログラムのメモリ上へのロード先のアドレスをプログラムと対応させてアドレス範囲セットとしてアドレス範囲セット記憶手段に記憶する処理と、アプリケーションからのシステムコールの呼び出しを受けて、各種の処理を実行する際に、アプリケーションを構成するプログラム毎にシステムコールの利用の可否を記述する動作ルールを記憶する動作ルール記憶手段からシステムコールの呼び出し元のプログラムに対応した動作ルールを選択し、システムコールによって呼び出された処理を実行するか否かを決定することにより、アプリケーションを構成する各プログラムに個別に動作ルールを適用する処理とをコンピュータに実行させる。
【発明の効果】
【００２２】
本発明によれば以下のような効果が実現される。【００２３】
第１の効果は、アプリケーションの動作を制御する動作ルールを、アプリケーション本体プログラムに関する動作ルールと、アプリケーションが利用するライブラリプログラムに関する動作ルールとに分割して記述できることである。【００２４】
その理由は、アプリケーションが複数のプログラムから構成されている場合でも、実行時にシステムコール呼び出し元のプログラムを特定して、動作ルールを適用できるためである。【００２５】
第２の効果は、アプリケーションの動作を制御する動作ルールを、実行点が属するプログラムに従って切り替えることができることである。【００２６】
その理由は、アプリケーションロード手段が、個々のプログラムをロードしたアドレス範囲を組にしたアドレス範囲セットをアドレス範囲セット記憶手段に記憶させているため、システムコール呼び出し時に、システムコール呼び出し元のアドレスから、そのアドレスがどのプログラムに属しているかを特定できるためである。【００２７】
第３の効果は、柔軟な動作ルールを記述できることにある。【００２８】
その理由は、動作ルール適用手段が、システムコール呼び出し時に動作ルールの適用を行うため、特権命令のような小さな処理単位に対してではなく、システムコールという複雑な処理を含む大きな処理単位に対して動作ルールを記述できるからである。【００２９】
第４の効果は、メモリ上での実行点のアドレスの違いに従って、適用する動作ルールの切り替えができることである。【００３０】
その理由は、アドレス範囲セット記憶手段が記憶しているアドレス範囲セットに含まれている各アドレス範囲と、実行点のアドレスを比較することにより、適用する動作ルールを切り替え、記憶手段の違いによって切り替えているのではないからである。
【図面の簡単な説明】
【００３１】
【図１】本発明の第１の実施の形態のハードウェア構成を示すブロック図である。
【図２】本発明の第１の実施の形態によるオペレーティングシステムの機能的な構成を示すブロック図である。
【図３】本発明の第１の実施の形態によるアプリケーション、プログラム記憶手段及びアドレス範囲セット記憶手段間の各データの関連を示す図である。
【図４】本発明の第１の実施の形態によるアプリケーションプログラムの起動におけるオペレーティングシステムの動作を説明するフローチャートである。
【図５】本発明の第１の実施の形態によるアプリケーションプログラムからオペレーティングシステムへ処理依頼が行われた際の動作を説明するフローチャートである。
【図６】本発明の第１の実施の形態によるタスク終了時におけるオペレーティングシステムの動作を説明するフローチャートである。
【図７】本発明の第２の実施の形態によるアプリケーションプログラムからオペレーティングシステムへ処理依頼が行われた際の動作を説明するフローチャートである。
【図８】本発明の第２の実施の形態によるタスク終了時におけるオペレーティングシステムの動作を説明するフローチャートである。
【図９】本発明の第３の実施の形態によるオペレーティングシステムの機能的な構成を示すブロック図である。
【図１０】本発明の実施例のハードウェア構成を示すブロック図である。
【図１１】本発明の実施例によるオペレーティングシステムの機能的な構成を示すブロック図である。
【図１２】本発明の実施例によるアドレス範囲セットの内容例を示す図である。
【図１３】本発明の実施例によるアプリケーションプログラムの起動における動作を説明するフローチャートである。
【図１４】本発明の実施例によるアプリケーションプログラムからオペレーティングシステムへ処理依頼が行われた際の動作を説明するフローチャートである。
【図１５】本発明の実施例によるタスク終了時におけるオペレーティングシステムの動作を説明するフローチャートである。
【発明を実施するための最良の形態】
【００３２】
次に、発明の実施の形態について、図面を参照して詳細に説明する。【００３３】
（第１の実施の形態）
図１を参照すると、本発明の第１の実施の形態は、コンピュータ１００によって構成される。【００３４】
コンピュータ１００は、プログラム制御により動作する中央演算装置１０１と、コンピュータ１００への電源投入直後に中央演算装置１０１を制御するためのプログラム（初期化プログラム）を永続的に記憶するＲＯＭ装置１０２と、中央演算装置１０１を制御するプログラム及び当該プログラムによって処理されるデータを一時的に記憶する主記憶装置１０３と、中央演算装置１０１を制御するためのプログラム及び当該プログラムによって処理されるデータを永続的に記憶する二次記憶装置１０４とを備えて構成されている。【００３５】
ＲＯＭ装置１０２及び主記憶装置１０３上に記憶されているプログラムは、中央演算装置１０１上でそのまま実行可能であるが、二次記憶装置１０４上に記憶されているプログラムは、そのままでは中央演算装置１０１上では実行することができず、主記憶装置１０３上にロードすることによって初めて実行可能となる。【００３６】
コンピュータ１００には、周辺機器１１０が接続されている。この周辺機器は、必須ではなくかつその構成も必要に応じて変形可能である。【００３７】
周辺機器１１０の構成例としては、図示のような、ユーザ１２０からの入力を受け付けるキーボードやマウスに代表される入力装置１１１や、ユーザへの情報出力を行うディスプレイ装置に代表される出力装置１１２や、通信ネットワーク１３０を介しての通信を行うネットワークインタフェース装置１１３などが挙げられる。【００３８】
上述した各構成要素はそれぞれ概略以下のように動作する。【００３９】
中央演算装置１０１は、まずＲＯＭ装置１０２中に記憶されている初期化プログラムを実行する。初期化プログラムを実行することにより、二次記憶装置１０４中に記憶されているオペレーティングシステムが、主記憶装置１０３上にロードされ、中央演算装置１０１によって実行可能な状態となる。【００４０】
以降の動作の概略について図２を参照して説明する。【００４１】
図２は、コンピュータ１００上でオペレーティングシステムを動作させ、さらにオペレーティングシステムの管理下においてアプリケーションプログラムを動作させることによって実現される、本発明の機能的な構成を示すブロック図である。【００４２】
オペレーティングシステム２００は、中央演算装置１０１上で実行されるソフトウェアとして構成され、アプリケーション２１０の動作に必要な基本機能を提供する。【００４３】
ここで基本機能とは、ファイルのオープン、クローズ、シーク、リード、ライトなどの処理や、コンピュータ１００に接続された周辺機器１１０の制御などを多岐にわたるが、当業者にとって既知の事柄であるためそれらの詳細な説明は省略する。【００４４】
アプリケーション２１０は、中央演算装置１０１上で実行されるソフトウェアとして構成され、オペレーティングシステム２００が提供する基本機能をシステムコール処理手段２０４を介して利用することにより、所望の目的を達成する。【００４５】
プログラム記憶手段２２０は、二次記憶装置１０４へのデータの読み書きをオペレーティングシステム２００が管理する（ファイルシステムと呼ばれることが多い）ための機能を実現し、アプリケーション２１０の動作を記述したプログラムを記憶するよう動作する。【００４６】
動作ルール記憶手段２３０は、二次記憶装置１０４へのデータの読み書きをオペレーティングシステム２００が管理するための機能を実現し、アプリケーション２１０が動作する際に遵守すべき動作ルールを、アプリケーション２１０を構成する個々のプログラムの単位で記憶する。【００４７】
ここでいう動作ルールは、アプリケーション２１０を構成する各部分（本体部分、それぞれのライブラリ部分）が利用することができるリソースの一覧（読み書きが許可されているファイルの一覧など）、及び、利用することができるリソースの量（ＣＰＵ占有時間、主記憶装置の容量、二次記憶装置の容量など）の上限・下限を記述したものである。なお、動作ルールは、ポリシーと呼ばれる場合もある。【００４８】
アプリケーション２１０が、リソースを利用する場合には、オペレーティングシステム２００を介してリソースにアクセスするものとする。ここで、オペレーティングシステムを介さずにリソースにアクセスできるような、リソース管理の緩いオペレーティングシステムも存在するが、そのような場合には、オペレーティングシステムを介さずにアクセスできるリソースについては動作ルールを記述できないものとする。【００４９】
アプリケーションロード手段２０１は、オペレーティングシステム２００内のソフトウェアモジュールとして構成され、アプリケーション２１０を構成するプログラムを主記憶装置１０３上に適切にロードして、中央演算装置１０１上で実行できるようにすることでアプリケーション２１０を有効な状態にするよう動作する。【００５０】
なお、アプリケーション２１０の動作を記述したプログラムは、１個である場合もあり得るが、現状の大多数のアプリケーションプログラムは複数のプログラム（１個のアプリケーション本体部分２１１、及び、１個以上のライブラリ部分２１２）から構成されている。【００５１】
ここで、ライブラリプログラムは、複数のアプリケーションプログラムから共通に利用されることも多く、そのようなライブラリプログラムはシェアードライブラリ（共有ライブラリ）と呼ばれる。【００５２】
また、アプリケーションロード手段２０１は、前記のロード動作に付随した内部動作として、アプリケーション２１０を記述したアプリケーション本体部分２１１とライブラリ部分２１２を主記憶装置１０３上にロードした際のアドレス範囲を、アプリケーション本体部分２１１とライブラリ部分２１２についてアドレス範囲セットとして登録し、アドレス範囲セット記憶手段２０２に記憶させるように動作する。【００５３】
ここで、アドレス範囲とは、個々のプログラムに対して定義され、プログラムを一意に識別するＩＤ値と、プログラムがロードされたアドレスの上限値及び下限値を１組にしたデータである。【００５４】
また、アドレス範囲セットとは、アプリケーション２１０のＩＤ値及びアプリケーション本体部分２１１とライブラリ部分２１２を構成する全てのプログラムについての、アドレス範囲を１組にしたものである。【００５５】
アプリケーション２１０のＩＤ値としては、オペレーティングシステム２００がアプリケーション２１０を管理するための単位である、タスクＩＤ、もしくはプロセスＩＤなどを用いることが好適である。【００５６】
プログラムのＩＤ値としては、プログラムのファイル名を用いることができる。【００５７】
アドレス範囲セット記憶手段２０２は、主記憶装置１０３上の一部への読み書きを、オペレーティングシステム２００が管理するための機能として実現され、アプリケーションロード手段２０１から指定されたアプリケーション本体部分２１１とライブラリ部分２１２のアドレス範囲を含む、アドレス範囲セット２０３を記憶するよう動作する。【００５８】
さらに、個々のアドレス範囲セット２０３は、後述する呼び出し元プログラム特定手段２０７によって読み取られる。【００５９】
また、個々のアドレス範囲セット２０３は、必要に応じてアプリケーション後述する終了監視手段２０８によって消去される。【００６０】
システムコール処理手段２０４は、オペレーティングシステム２００内のソフトウェアモジュールとして構成され、アプリケーション２１０からの処理依頼を受理し、処理依頼に応じてオペレーティングシステム２００が備える基本機能を実行するよう動作する。【００６１】
なお、システムコールは、ＡＰＩやサービスコールと呼ばれる場合もある。【００６２】
前述したアプリケーションプログラムからのリソースの利用は、上記システムコール処理手段２０４を介して行われる。【００６３】
ここで、システムコール処理手段２０４は、アプリケーション２１０からの処理依頼に対し、常にオペレーティングシステム２００が備える基本機能を実行するのではなく、場合によっては処理依頼を拒否するようにも動作する。処理依頼を受理するか拒否するかの判断は動作ルール適用手段２０５によってなされる。【００６４】
動作ルール適用手段２０５は、システムコール処理手段２０４内のソフトウェアモジュールとして構成され、呼び出し元アドレス特定手段２０６と呼び出し元プログラム特定手段２０７を有している。【００６５】
動作ルール適用手段２０５は、動作ルール記憶手段２３０に記憶されている動作ルールを読み込み、その動作ルールに従って、アプリケーション２１０からの処理依頼の受理もしくは拒否を決定するよう動作する。【００６６】
その際、動作ルール適用手段２０５は、呼び出し元アドレス特定手段２０６によって、処理依頼の発生元のアドレスを特定し、呼び出し元プログラム特定手段２０７によって、前記アドレスに対応するプログラムを特定することにより、処理依頼に対して適用すべき動作ルールを特定するよう動作する。【００６７】
アプリケーション終了監視手段２０８は、オペレーティングシステム２００内のソフトウェアモジュールとして構成され、アプリケーション２１０を監視し、アプリケーション２１０の動作が終了した時点で、主記憶装置１０３上からアプリケーション２１０を消去し、さらに、アドレス範囲セット記憶手段２０２から対応するアプリケーション２１０のアドレス範囲セット２０３を削除するよう動作する。【００６８】
図３を参照して、アドレス範囲セットについてさらに詳細に説明する。【００６９】
オペレーティングシステムによっては、ある時点で複数のアプリケーションプログラムを有効にする機能を備えている。このような機能を備えたオペレーティングシステムをマルチタスクオペレーティングシステムと呼ぶ。マルチタスクオペレーティングシステムは当業者にとって既知の技術であり、詳細な説明は省略する。【００７０】
オペレーティングシステム２００がマルチタスクオペレーティングシステムである場合、ある時点で複数のアプリケーションプログラムが主記憶装置１０３上に配置された状態となる。【００７１】
よって、アドレス範囲セット２０３は、複数のアプリケーションプログラムのそれぞれについて生成され、記憶される必要がある。【００７２】
ここで図３は、マルチタスクオペレーティングシステム上で、アプリケーション（Ａ）３１０とアプリケーション（Ｂ）３２０が有効になっている状態を図示したブロック図である。【００７３】
アプリケーション（Ａ）３１０は、アプリケーション（Ａ）本体部分３１１とライブラリ（Ａ）部分３１２とライブラリ（Ｓ）部分３２３からなっており、マルチタスクオペレーティングシステムによって、タスクＩＤ＝１が割り振られて管理されている。【００７４】
アプリケーション（Ｂ）３２０は、アプリケーション（Ｂ）本体部分３２１とライブラリ（Ｂ）部分３２２とライブラリ（Ｓ）部分３２３からなっており、マルチタスクオペレーティングシステムによって、タスクＩＤ＝２が割り振られて管理されている。【００７５】
ここで、ライブラリ（Ｓ）部分３２３は共有ライブラリである。【００７６】
プログラム記憶手段３００は、以下の各プログラムを記憶している。【００７７】
（１）アプリケーション（Ａ）本体プログラム３０１
（２）アプリケーション（Ｂ）本体プログラム３０２
（３）ライブラリ（Ａ）プログラム３０３
（４）ライブラリ（Ｂ）プログラム３０４
（５）ライブラリ（Ｓ）プログラム３０５【００７８】
これらのプログラムは図３に示すようにロードされ、各アプリケーションの一部となる。【００７９】
アドレス範囲セット記憶手段３３０は、各アプリケーションについて、タスクＩＤをキー値として、個別にアドレス範囲セットを記憶している。【００８０】
これによって、マルチタスクオペレーティングシステムによる複数アプリケーションプログラムの有効化に対応するができると共に、シェアードライブラリ（ライブラリプログラム）にも対応することができる。【００８１】
シェアードライブラリは、概念的にはアプリケーション（Ａ）３１０とアプリケーション（Ｂ）３２０のそれぞれにロードされているのと同様に振舞うが、主記憶装置１０３上に存在するシェアードライブラリ（ライブラリプログラム）は単一である。【００８２】
しかし、タスクＩＤと組み合わせて記憶することにより、呼び出し元プログラム特定手段２０７は、処理依頼の発生元を正しく判定することができる。【００８３】
次いで、本発明の第１の実施の形態による動作について、図を参照して説明する。【００８４】
図４を参照して、アプリケーションプログラムの起動について説明する。【００８５】
まず、オペレーティングシステム２００は、アプリケーションプログラムの動作単位である、タスクを生成する（ステップ４００）。【００８６】
次に、オペレーティングシステム２００内のアプリケーションロード手段２０１は、アプリケーション本体プログラムをロードする（ステップ４０１）。ここで、アプリケーション本体プログラムが見つからないなどの理由で、ロードに失敗した場合には（ステップ４０２）、アプリケーションプログラムの起動は失敗終了となる（ステップ４０３）。【００８７】
アプリケーションロード手段２０１は、アプリケーションプログラムのためのアドレス範囲セット２０３を作成し、タスクＩＤをアドレス範囲セット２０３に設定し、アプリケーション本体プログラムのアドレス範囲をアドレス範囲セットに追加する（ステップ４０４）。【００８８】
アプリケーションロード手段２０１は、アプリケーション本体プログラムを解析し、必要なライブラリプログラムをリストアップする（ステップ４０５）。【００８９】
ここで、必要なライブラリプログラムのリストは、アプリケーション本体プログラムの作成時にアプリケーション本体プログラム内に記録される。この記録方法は、アプリケーション本体プログラムのファイルの形式（例えば、ＡＯＵＴ形式、ＥＬＦ形式など）によって異なるが、当業者にとっては既知の事柄であるので、詳細な説明は省略する。【００９０】
アプリケーションロード手段２０１は、必要なライブラリプログラムが全てロードされるまで、ロード処理を行う（ステップ４０６、４０７、４０８）。【００９１】
また、アプリケーションロード手段２０１は、ロードしたライブラリプログラムのアドレス範囲をアドレス範囲セットに追加する（ステップ４１０）。【００９２】
ここで、必要なライブラリが見つからず（何らかの手違いで、プログラム記憶手段中に存在しないなど）、ライブラリプログラムのロードに失敗した場合には（ステップ４０８）、アプリケーションプログラムの起動処理は失敗終了する（ステップ４０９）。【００９３】
アプリケーションロード手段２０１は、ロードしたアプリケーション本体プログラム、ライブラリプログラムのアドレス範囲とプログラムのＩＤ（前述したようにファイル名を用いるのが好ましい）とをタスクＩＤと組にして、アドレス範囲セット２０３として登録する（ステップ４１１）。【００９４】
上記全ての作業が完了した後に、オペレーティングシステム２００は、アプリケーションプログラムの処理を開始させる（ステップ４１２）。【００９５】
図５を参照して、アプリケーションプログラムからオペレーティングシステム２００へ処理依頼が行われた際の動作について説明する。【００９６】
アプリケーションプログラムからの処理依頼を受け、オペレーティングシステム２００は、システムコール処理手段２０４によってシステムコールの処理を開始する（ステップ５００）。【００９７】
オペレーティングシステム２００は、処理依頼元のタスクＩＤを特定する（ステップ５０１）。オペレーティングシステム２００はタスクを管理しているため、タスクＩＤの特定は可能である。【００９８】
例えば、あるオペレーティングシステムでは全てのタスクを「タスク管理構造体」というデータ構造で管理しており、かつ、現在実行中のタスクを「カレントタスク」として、カレントタスクのタスク構造体のアドレスを記憶している。処理依頼を行ったタスクは、つまり実行中タスクであるので、カレントタスクのタスク構造体中のＩＤ値を調べることにより、タスクＩＤを知ることができる。【００９９】
処理依頼元のタスクＩＤの特定方法は、個々のオペレーティングシステムの実装形態に依存し、上記の方法とは異なる場合があるが、当業者にとっては既知の事柄であるので詳細な説明は省略する。【０１００】
オペレーティングシステム２００は、動作ルール適用手段２０５の呼び出し元アドレス特定手段２０６によって処理依頼元のアドレスを特定する（ステップ５０２）。【０１０１】
処理依頼が、いわゆる「関数呼び出し」によって行われた場合には、関数のコールスタック中に呼び出し元のアドレスが保存されているため、処理依頼元のアドレスを特定することが可能である。【０１０２】
処理依頼が、いわゆる「ソフトウェア割り込み」によって行われた場合には、ソフトウェア割り込みを発生させたアドレスはＣＰＵの機能により自動的にスタックへと退避されるため、スタック中の値を調べることにより、処理依頼元のアドレスを特定することが可能である。【０１０３】
なお、アドレスを指す名称が「インストラクションポインタ」「プログラムカウンタ」などのようにＣＰＵの種類によって異なっていたり、「ソフトウェア割り込み」の用語がＣＰＵによっては「例外」と呼ばれることがあるが、当業者にとっては既知の事柄であり、処理の方法には差が無いので、詳細な説明は省略する。【０１０４】
また、ＣＰＵの種類によっては、割り込みを発生させたアドレスを、スタックに退避させるのではなく、退避用レジスタに退避させる場合があるが、その場合、退避用レジスタ中の値を調べることにより、同様に処理依頼元のアドレスを特定することが可能である。このことは当業者にとっては既知の事柄であり、これ以上の詳細な説明は省略する。【０１０５】
オペレーティングシステム２００は、上記処理依頼元のタスクＩＤと、処理依頼元のアドレスを元に、呼び出し元プログラム特定手段２０７によって処理依頼元のプログラムを特定する（ステップ５０３）。【０１０６】
プログラムの特定においては、まず、アドレス範囲セットに対して、処理依頼元のタスクＩＤキー値として検索を行う（つまり、キー値と等しいタスクＩＤを持つアドレス範囲セットをアドレス範囲セット記憶手段中２０２から特定する）。【０１０７】
次に、前記の特定したアドレス範囲セット中から、処理依頼元アドレスを、アドレス範囲に含むプログラムを特定する。これによって、処理依頼元のプログラムを特定することができる。【０１０８】
オペレーティングシステム２００は、動作ルール適用手段２０５によって上記の特定したプログラムをキー値として、動作ルール記憶手段２３０を検索し、動作ルールを特定する（ステップ５０４）。【０１０９】
動作ルールは、プログラムをキー値として記憶されているため、適用すべき動作ルールを検索によって特定することができる。【０１１０】
動作ルールには、前述したように、利用可能なリソースの一覧と、利用可能なリソース量の上限・下限が記述されている。【０１１１】
オペレーティングシステム２００は、動作ルール適用手段２０５によって上記のように特定した動作ルールと、処理依頼の内容を比較して、処理の可否を判定する（ステップ５０５）。【０１１２】
処理の可否の判定結果が、否であれば、オペレーティングシステム２００は処理依頼を拒否する（ステップ５０６）。【０１１３】
処理の可否の判定結果が、可であれば、オペレーティングシステム２００は処理依頼を受理する（ステップ５０７）。【０１１４】
オペレーティングシステム２００は、オペレーティングシステム２００が備える基本機能のうち、受理した処理依頼に対応する基本機能を実行する（ステップ５０８）。【０１１５】
図６を参照して、タスク終了時の動作について説明する。【０１１６】
オペレーティングシステム２００は、アプリケーション終了監視手段２０８によってアプリケーション２１０の終了を検知する（ステップ６００）。【０１１７】
ここで、アプリケーション２１０の終了には、１）アプリケーション２１０が、処理の終了をオペレーティングシステム２００に対して自己申告する場合と、２）アプリケーション２１０の異常動作をオペレーティングシステム２００が検知し、その結果としてオペレーティングシステム２００によってアプリケーション２１０が強制終了させられる場合とが考えられる。【０１１８】
１）の場合には、オペレーティングシステム２００は、アプリケーション２１０の申告により、終了を検知することができる。ここでの申告は、システムコールを通じた処理依頼によってなされるのが通常である。これらの技術的内容については当業者にとって既知の事項であるので、詳細な説明を省略する。【０１１９】
２）の場合には、オペレーティングシステム２００は、自身がアプリケーション２１０を終了させることからアプリケーション２１０の終了を検知することができる。ここで、異常検知については、ＣＰＵに内蔵されたメモリ管理ユニットによる、アプリケーション２１０のメモリアクセス違反や、前述した動作ルールに違反した処理依頼などが考えられる。異常検知の種類は多数であり、かつ、当業者にとって既知の事項であるので、これ以上の詳細な説明は省略する。【０１２０】
オペレーティングシステム２００は、アプリケーション終了監視手段２０８によって終了したアプリケーション２１０のタスクＩＤを特定する（ステップ６０１）。【０１２１】
オペレーティングシステム２００は、タスクを管理しているので、アプリケーション２１０のタスクＩＤを特定することが可能である。アプリケーション２１０が終了をオペレーティングシステム２００に自己申告した場合及びアプリケーション２１０が異常終了した場合のいずれにおいても、オペレーティングシステム２００が管理している、現在実行中のタスク（いわゆるカレントタスク）のタスクＩＤをもって、終了したアプリケーション２１０のタスクＩＤとすることができる。これらの技術的事項は当業者にとっては既知の事項であるので、これ以上の詳細な説明は省略する。【０１２２】
オペレーティングシステム２００のアプリケーション終了監視手段２０８は、終了したアプリケーション２１０のタスクＩＤをキー値にして、対応するアドレス範囲セット２０３を特定し、当該アドレス範囲セットをアドレス範囲セット記憶手段２０２から削除する（ステップ６０２）。【０１２３】
オペレーティングシステム２００は、終了したアプリケーション２１０のタスクを消去する（ステップ６０３）。この処理は、前述したタスク構造体の消去などの処理を含むが、オペレーティングシステム２００の種類毎に処理内容が異なり、かつ、それらは当業者にとって既知の事項であるので、これ以上の詳細な説明は省略する。【０１２４】
上記のように、本実施の形態によるオペレーティングシステムによれば、アプリケーション本体プログラム向けのアプリケーション本体動作ルール２３１と、ライブラリプログラム向けのライブラリ動作ルール２３２を個別に動作ルール記憶手段２３０に記憶し、アプリケーションプログラム起動時にアプリケーション本体プログラムとライブラリプログラムをロードしたアドレス範囲を含むアドレス範囲セットをアドレス範囲セット記憶手段２０２に記憶し、システムコールの処理依頼の発信元のタスクＩＤとアドレスを特定して、適用すべき動作ルールを決定することにより、アプリケーションプログラムに対してアプリケーション本体プログラム向け動作ルールとライブラリプログラム向け動作ルールを適切に適用することが可能となる。【０１２５】
なお、本発明のオペレーティングシステムでは、アプリケーションを構成するプログラムを、主記憶装置１０３にロードするたびに、ロードしたプログラムのアドレス範囲が変わる。このため、ロードしたアドレス範囲とプログラムのＩＤとを対にしてアドレス範囲セットしてロードする度に記憶するようにしている。【０１２６】
また、本発明の実施の形態における、主記憶装置１０３へのプログラムのロードは、コンピュータ１００を起動する度に毎回実行されるアプリケーション起動動作であり、そのアプリケーションの起動時に、プログラムのアドレス範囲セットに基づいて特定される動作ルールを適用するものである。【０１２７】
（第２の実施の形態）
本発明の第２の実施の形態について説明する。【０１２８】
本発明の第１の実施の形態においては、いわゆるマルチタスク向けのオペレーティングシステムを前提にして説明したが、本発明はシングルタスク向けのオペレーティングシステムにおいても適用することが可能である。【０１２９】
システム構成及びオペレーティングシステムの機能的な構成については、図２及び図３に示す第１の実施の形態と同様であるので、ここではそれらの説明を省略する。【０１３０】
シングルタスク向けのオペレーティングシステムに本発明を適用する場合には、ある時点々々で１つのアプリケーションプログラムだけが有効であるため、タスクＩＤは存在しない。【０１３１】
よって、アドレス範囲セット２０３には、タスクＩＤ値が含まれず、アドレス範囲セット記憶手段２０２中には、ある時点々々において１つのアドレス範囲セットだけが存在することになる。【０１３２】
その場合、処理依頼元のプログラムを特定する動作においては、処理依頼元のアドレスだけがわかれば十分である。【０１３３】
本実施の形態においては、アドレス範囲セット２０３にアプリケーション毎のタスクＩＤがセットされないだけであり、アプリケーションプログラムの起動の動作については、図４に示した第１の実施の形態と同様である。【０１３４】
また、アプリケーションプログラムからオペレーティングシステム２００へ処理依頼が行われた際の動作は、図７のフローチャートに示すように、第１の実施の形態の動作を示す図５におけるステップ５０１のオペレーティングシステム２００による処理依頼元のタスクＩＤを特定する処理が省略されるだけであり、それ以降の処理（ステップ５０２〜５０８）については第１の実施の形態と同様である。【０１３５】
さらに、タスク終了時の動作については、図８のフローチャートに示すように、第１の実施の形態の図６におけるステップ６０１のオペレーティングシステム２００が終了したアプリケーション２１０のタスクＩＤを特定する処理が省略されるだけであり、それ以外の処理（ステップ６０２〜６０３）については第１の実施の形態と同様である。【０１３６】
（第３の実施の形態）
本発明の第３の実施の形態について説明する。【０１３７】
本発明の第１の実施の形態においては、アプリケーションプログラムの起動時に、アプリケーション本体プログラム２２１とライブラリプログラム２２２をロードしているが、オペレーティングシステム２００の種類によっては、アプリケーションプログラムの起動の後、アプリケーションプログラム実行中にライブラリプログラム２２２をロードする機能を持つものがある。【０１３８】
このようにアプリケーションプログラムの実行中にロードされるライブラリプログラムを動的リンクライブラリと呼ぶ。【０１３９】
本発明の第３の実施の形態においては、このような動的リンクライブラリに対しても個別に記述した動作ルールを適用することが可能である。【０１４０】
図９は、第３の実施の形態によるオペレーティングシステム２００の機能的な構成例を示すブロック図である。【０１４１】
アプリケーションプログラムが実行中にオペレーティングシステムに対し、動的リンクライブラリをロードするため、システムコールの処理依頼を発行すると、動的リンクライブラリロード手段２０１ａが動的リンクライブラリ（ライブラリプログラム２２２）のロードを行う。ここで、オペレーティングシステムの種類によって、図９に示すように、動的リンクライブラリロード手段２０１ａとアプリケーションロード手段２０１が別のソフトウェアモジュールで構成されていてもよいし、アプリケーションロード手段２０１が動的リンクライブラリロード手段３０１ａを兼ねる構成であってもよい。【０１４２】
動的リンクライブラリロード手段２０１ａは、ロードの際に、処理依頼発行元のアプリケーションプログラムのタスクＩＤをキー値にして、アプリケーションプログラムのアドレス範囲セットを特定し、アドレス範囲セット２０３に動的リンクライブラリをロードしたアドレス範囲（アドレス値の上限・下限・プログラムＩＤを含む）を追記して、アドレス範囲セット記憶手段２０２に書き戻す。【０１４３】
第３の実施の形態に示すように、本発明は動的リンクライブラリをロードする機能を持つオペレーティングシステムに対しても適用することが可能である。【０１４４】
（第４の実施の形態）
本発明の第４の実施の形態について説明する。【０１４５】
本発明の第１の実施の形態においては、アプリケーション本体プログラムとライブラリプログラムに対して個別に動作ルールを記述し、それぞれの動作ルールの中には利用してよいリソースの種類と利用してよいリソースの量の上限・下限を記述しているが、この第４の実施の形態においては、第１の実施の形態での動作ルールの記述方式に加えて、ライブラリプログラムのライブラリ動作ルール２３２の記述の仕方として「アプリケーション本体プログラムの動作ルールに従う」という内容の動作ルールの記述を認める構成としている。【０１４６】
システム構成及びオペレーティングシステムの機能的な構成については、図２及び図３に示す第１の実施の形態と同様であるので、ここではそれらの説明を省略する。【０１４７】
このような第４の実施の形態は、汎用のシェアードライブラリについての動作ルール記述においてとても有用である。【０１４８】
例えば、Ｃ言語標準関数群を実装したライブラリプログラム２２２（いわゆる、ｌｉｂｃ）等においては、汎用ライブラリプログラムであることから、利用しうるリソースの種類と量共に多岐にわたる。全ての動作を許可するような動作ルールを記述すると、ライブラリプログラムを用いるアプリケーションプログラムの動作を制限できず、ライブラリプログラムを用いるアプリケーションプログラムはどのような動作も可能となってしまう。【０１４９】
しかし、許可するのが全ての動作ではない動作ルールをライブラリプログラムの動作ルールとして記述した場合には、正常動作できないアプリケーションプログラムが発生してしまう可能性がある。【０１５０】
そこで、ライブラリプログラム２２２（例えば、ｌｉｂｃ）のライブラリ動作ルール２３２として、「アプリケーション本体プログラム２２１の動作ルールに従う」という動作ルールを記述することにより、動作ルールの観点からは、ライブラリプログラム（例えば、ｌｉｂｃ）をアプリケーション本体プログラムと一体として扱うことができ、ライブラリプログラム（例えば、ｌｉｂｃ）の汎用性を損なうことなく、個々のアプリケーションプログラムに適した動作ルールを記述することができるようになる。【０１５１】
（第５の実施の形態）
本発明の第５の実施の形態について説明する。【０１５２】
本発明の第１の実施の形態においては、プログラム記憶手段２２０と動作ルール記憶手段２３０を別個の手段としていたが、プログラムと動作ルールを両方とも記憶できる汎用の記憶手段によって構成してもよい。例えば、プログラムと動作ルールをファイルとして管理する場合には、このように１個のファイルシステム上にプログラムと動作ルールを記憶するのが自然な形態である。【０１５３】
また、さらにプログラム（アプリケーション本体プログラム２２１、ライブラリプログラム２２２）と、そのプログラムと対になる動作ルール（アプリケーション本体動作ルール２３１、ライブラリ動作ルール２３２）を、一体として記憶する構成としてもよい。つまり、プログラムファイル（アプリケーション本体プログラム２２１、ライブラリプログラム２２２）中に、動作ルール（アプリケーション本体動作ルール２３１、ライブラリ動作ルール２３２）の内容も含まれて、１個のファイルとして管理しても良い。
【実施例】
【０１５４】
次に、本発明の具体的な実施例について説明する。【０１５５】
本実施例では、ＰＣ（コンピュータ）７００上にインストールした、ＰＯＳＩＸ準拠、もしくはそれに近いＵＮＩＸ（登録商標）類似のオペレーティングシステムに、本発明を適用した例を示す。【０１５６】
図１０を参照して、本実施例のハードウェア構成について説明する。【０１５７】
ＰＣ７００は、ＣＰＵ（中央演算装置）７０１と、ＢＩＯＳ（ＲＯＭ装置）７０２と、ＤＲＡＭ（主記憶装置）７０３と、ＨＤＤ（二次記憶装置）７０４から構成され、周辺機器７１０としてマウス／キーボード（入力装置）７１１と、ビデオカード（出力装置）７１２と、Ｅｔｈｅｒｎｅｔ（登録商標）インタフェースカード（ネットワークインタフェース装置）７１３が接続されている。【０１５８】
ビデオカード７１２には、ディスプレイ７１４が接続されており、ＰＣ７００からの画像出力が可能となっている。【０１５９】
また、Ｅｔｈｅｒｎｅｔ（登録商標）インタフェースカード７１３は、ＬＡＮ７３０に接続され、ＰＣ７００はＬＡＮ７３０を通じて通信を行うことができる。【０１６０】
ユーザ７２０はマウス／キーボード７１１を通じてＰＣ７００を操作し、操作の結果をディスプレイ７１４を通じて確認する。【０１６１】
図１１に本実施例によるオペレーティングシステム８００の機能的な構成を示す。【０１６２】
オペレーティングシステム８００は、ＨＤＤ７０４中に記憶されており、ＰＣ７００の起動時にＢＩＯＳ７０２中に記憶されている初期化ルーチンを実行することにより、ＤＲＡＭ７０３上にロードされる。ロードされた以降はオペレーティングシステム８００がＰＣ７００を管理する基本ソフトウェアとして動作する。【０１６３】
オペレーティングシステム８００は、ＡＯＵＴ形式のプログラムを実行するためのＡＯＵＴアクティベータ８０１と、アドレス範囲セット８０３を記憶するためのアドレス範囲セット記憶手段であるアドレス範囲セット管理用データ構造体８０２と、システムコールの処理を行うシステムコール処理モジュール８０４と、プロセスの終了を監視するためのプロセス終了監視モジュール８０８とを備える。【０１６４】
システムコール処理モジュール８０４は、サブモジュールとして動作ルール適用モジュール８０５を備え、さらに動作ルール適用モジュール８０５は、サブモジュールとしてソフトウェア割り込み発生アドレス特定モジュール８０６とシステムコール発生元プログラム特定モジュール８０７とを備える。【０１６５】
ソフトウェア割り込み発生アドレス特定モジュール８０６は、システムコールの発生元アドレスを、ソフトウェア割り込みの発生元アドレスから特定する機能を備える。【０１６６】
システムコール発生元プログラム特定モジュール８０７は、プロセスＩＤをキー値にしてアドレス範囲セット管理用データ構造体８０２を検索してアドレス範囲セットを特定し、得られたアドレス範囲セット中の各アドレス範囲とシステムコールの発生元アドレスを比較することにより、システムコールの発生元プログラムを判定する機能を備える。【０１６７】
動作ルール適用モジュール８０５は、システムコールの発生元プログラムに対応した動作ルールを適用し、システムコールの処理の可否を判定する。【０１６８】
なお、本実施例で扱っているＵＮＩＸ（登録商標）類似のオペレーティングシステムは、通常は、仮想記憶の機能を有している。この場合、オペレーティングシステムはアドレスとして、仮想アドレスと実アドレス（物理アドレス）の２種類のアドレスを管理し、相互に変換を行っている。仮想記憶については、当業者にとって既知の事柄であるので、これ以上の詳細な説明は避けるが、本実施例におけるアドレスは、特に断りが無い限り仮想アドレスをさすものとする。【０１６９】
本実施例において仮想アドレスに着目する理由は、プログラムが配置されているアドレスについて、実アドレスを用いた場合、例えばスワップ動作などにより、プログラムの実行中に変化する可能性があるが、仮想アドレスは変化しないためである。【０１７０】
アドレス範囲とシステムコール発生元アドレスとの比較処理において、プログラムの配置されているアドレスが、アプリケーションプログラムの起動時から終了時まで変化しないことが本実施例の動作に必要である。【０１７１】
アドレス範囲セット管理用データ構造体８０２は、ＰＩＤをキー値としてアドレス範囲セットを特定できるようなデータ構造として構成される。一例としては、ＰＩＤをキー値とした二分木データ構造をＤＲＡＭ７０３上に構成するというものが挙げられる。【０１７２】
アプリケーションの例としてはＷｅｂブラウザアプリケーション（以下、単にブラウザアプリケーション８１０と呼ぶ）を用いた場合を示している。【０１７３】
ブラウザアプリケーション８１０は、ブラウザ本体部分８１１とＨＴＴＰライブラリ部分８１２から構成される。【０１７４】
ＨＴＴＰライブラリ部分８１２は、ＨＴＴＰに準拠した通信を行うことにより、通信ネットワークを介してＷｅｂページ記述データを取得する機能を、ブラウザ本体部分８１１に対して提供する。【０１７５】
ブラウザ本体部分８１１は、Ｗｅｂページ記述データに従って、Ｗｅｂページをディスプレイ７１４に表示する機能を備える。また、ブラウザアプリケーション８１０はユーザ７２０がマウス／キーボード７１１を介して行う操作を受け、必要に応じて、次に表示すべきＷｅｂページの記述データの取得を、ＨＴＴＰライブラリ部分８１２に依頼する機能を備える。【０１７６】
ブラウザ本体部分８１１のプログラムは、ブラウザ本体プログラム８２１であり、プログラムのＩＤはプログラムを記録したファイルのフルパス名（／ｂｉｎ／ｂｒｏｗｓｅｒ）とする。【０１７７】
また、ＨＴＴＰライブラリ部分８１２のプログラムは、ＨＴＴＰライブラリプログラム８２２であり、プログラムのＩＤは、プログラムを記録したファイルのフルパス名（／ｌｉｂ／ｌｉｂｈｔｔｐ）とする。【０１７８】
それぞれのプログラムは、ＡＯＵＴ形式で編成されており、ファイルシステム８２０上に記憶されている。ファイルシステム８２０は、ＨＤＤ７０４へのデータの読み書きをオペレーティングシステム８００が管理することによって実現される。【０１７９】
ブラウザ本体部分８１１の動作ルールは、ブラウザ本体動作ルール８２３である。【０１８０】
また、ＨＴＴＰライブラリ部分８１２の動作ルールは、ＨＴＴＰライブラリ動作ルール８２４である。【０１８１】
それぞれの動作ルールは、ファイルシステム８２０上にファイルとして記憶されている。【０１８２】
本実施例では、ブラウザ本体動作ルール８２３には、ブラウザ本体部分８１１のＩＤがフルパス名（／ｂｉｎ／ｂｒｏｗｓｅｒ）であることが記述され、さらに、ブラウザ本体部分８１１がディスプレイ７１４への画像を出力すること、及び、ブラウザ本体部分８１１がマウス／キーボード７１１を介したユーザ７２０からの入力を受け取ることを許可する内容が記述されている。【０１８３】
また、ＨＴＴＰライブラリ動作ルール８２４には、ＨＴＴＰライブラリ部分８１２のＩＤがフルパス名（／ｌｉｂ／ｌｉｂｈｔｔｐ）であることが記述され、さらに、ＨＴＴＰライブラリ部分８１２がＩＰ通信を行うことを許可する内容が記述されている。【０１８４】
本実施例においては、上記以外の明示的に許可されていない動作については、禁止されているものとして説明する。【０１８５】
次に、図１３、図１４、図１５を参照し、本実施例の動作について説明する。【０１８６】
図１３のフローチャートを参照してブラウザアプリケーション８１０の起動処理について説明する。【０１８７】
ブラウザアプリケーション８１０の起動処理において、オペレーティングシステム８００は、まずプロセスを生成する（ステップ１０００）。【０１８８】
この際にオペレーティングシステム８００は、プロセスに管理用のＩＤ値としてＰＩＤ（プロセスＩＤ）を割り振る。【０１８９】
以下の説明では、ＰＩＤとして「１０２４」が割り振られたものとして説明を行う。【０１９０】
次に、オペレーティングシステム８００は、ＡＯＵＴアクティベータ８０１を用いて、ブラウザ本体プログラム８２１をプロセス（ＰＩＤ＝１０２４）の実行コードとしてロードする（ステップ１００１）。【０１９１】
以下の説明においては、アドレス値として「０ｘ８０４８０００」から「０ｘ０８０ｄｃ０００」の間の領域にロードすることに成功したものとして説明を行う。【０１９２】
もし、ブラウザ本体プログラム８２１のロードに失敗したならば失敗終了となり、ブラウザアプリケーション８１０は起動されない（ステップ１００２、１００３）。【０１９３】
ＡＯＵＴアクティベータ８０１は、ブラウザアプリケーション８１０のためのアドレス範囲セット８０３を作成し、ＰＩＤとして「１０２４」を設定し、ブラウザ本体プログラム８２１のアドレス範囲を追加する（ステップ１００４）。【０１９４】
ＡＯＵＴアクティベータ８０１は、ブラウザ本体プログラム８２１を解析し、必要なライブラリプログラムをリストアップする（ステップ１００５）。【０１９５】
以下の説明においては、ブラウザ本体プログラム８２１に必要なライブラリプログラムはＨＴＴＰライブラリ部分８１２であるとして説明を行う。【０１９６】
ＡＯＵＴアクティベータ８０１は、ブラウザ本体プログラム８２１がＨＴＴＰライブラリ部分８１２を必要としているため、ＨＴＴＰライブラリプログラム８２２をプロセス（ＰＩＤ＝１０２４）の実行コードとして追加ロードする（ステップ１００６、１００７、１００８）。【０１９７】
また、ＡＯＵＴアクティベータ８０１は、ＨＴＴＰライブラリプログラム８２２のアドレス範囲を、アドレス範囲セット８０３に追加する（ステップ１０１０）。【０１９８】
以下の説明においては、アドレス値として「０ｘ４００１６０００」から「０ｘ４００１ｃ０００」の間の領域にロードすることに成功したものとして説明を行う。【０１９９】
もし、ＨＴＴＰライブラリプログラム８２２のロードに失敗したならば失敗終了となり、ブラウザアプリケーション８１０は起動されない（ステップ１００９）。【０２００】
ＡＯＵＴアクティベータ８０１は、ブラウザアプリケーション８１０のアドレス範囲セット８０３をアドレス範囲セット管理用データ構造体８０２に登録する（ステップ１０１１）。【０２０１】
ここで、アドレス範囲セット８０３の内容の詳細は、図１２のアドレス範囲セット８０３に模式的に示すように、ＰＩＤ＝１０２４、プログラムＩＤ＝／ｂｉｎ／ｂｒｏｗｓｅｒのプログラムをロードしたアドレス範囲は、０ｘ０８０４８０００〜０ｘ０８０ｄｃ０００、プログラムＩＤ＝／ｌｉｂ／ｌｉｂｈｔｔｐのプログラムをロードしたアドレス範囲は、０ｘ０４００１６０００〜０ｘ４００１ｃ０００というものである。【０２０２】
ＡＯＵＴアクティベータ８０１は、プログラムのロードと、アドレス範囲セットの登録が終了した後に、ブラウザアプリケーション８１０の動作を開始させる（ステップ１０１２）。【０２０３】
ブラウザアプリケーション８１０は、動作中に、必要に応じてオペレーティングシステム８００が備える基本機能を利用するため、システムコール呼び出しを行う。【０２０４】
このブラウザアプリケーション８１０からオペレーティングシステム８００へシステムコール呼び出しが行われた際の動作について図１４を参照して説明する。【０２０５】
この呼び出しは、ソフトウェア割り込みを発生させることによって行われる。割り込みが発生するとオペレーティングシステム８００でトラップされ、オペレーティングシステム８００内に処理の実行点が移ることになる。なお、システムコールの実装をソフトウェア割り込みによって行うことは、当業者にとって既知の事項であるため、これ以上の詳細な説明は省略する。【０２０６】
ブラウザアプリケーション８１０のシステムコール呼び出により、オペレーティングシステム８００はソフトウェア割り込みをトラップする（ステップ１１００）。【０２０７】
次に、オペレーティングシステム８００はシステムコール元のＰＩＤを特定する（ステップ１１０１）。【０２０８】
オペレーティングシステム８００は、プロセスの実行を管理しているので、システムコール元のＰＩＤを特定することができる。通常、これはカレントプロセスのＰＩＤがシステムコール元のＰＩＤであるとすればよい。【０２０９】
次に、オペレーティングシステム８００は、ソフトウェア割り込み発生アドレス特定モジュール８０６を用いて、システムコール元のアドレスを特定する（ステップ１１０２）。【０２１０】
ここでいうシステムコール元のアドレスとは、ソフトウェア割り込み命令が置かれていたメモリ上のアドレスを意味する。【０２１１】
ソフトウェア割り込みの発生時に、ＣＰＵ７０１の実行点はトラップ用コードへと移動するが、その際にＣＰＵ７０１は予め指定しておいた特定のメモリ領域（スタックとして管理されている）へ、ソフトウェア割り込みを発生させた際の実行点を退避するよう動作する。これは本実施例でのＣＰＵによる動作である。【０２１２】
よって、ソフトウェア割り込み発生アドレス特定モジュール８０６は、退避された実行点をもって、システムコール元のアドレスを特定することができる。【０２１３】
次に、オペレーティングシステム８００は、システムコール発生元プログラム特定モジュール８０７を用いて、システムコール元のプログラムを特定する（ステップ１１０３）。【０２１４】
ＰＩＤをキーにしてアドレス範囲セット８０３をアドレス範囲セット管理用データ構造体８０２中から特定し、さらに、システムコール元のアドレスを、ロード範囲に含むプログラムをアドレス範囲セット８０３中から検索することにより、システムコール元のプログラムを特定することができる。【０２１５】
次に、オペレーティングシステム８００は、特定したプログラムをキーにして、適用すべき動作ルールを特定する（ステップ１１０４）。【０２１６】
本実施例では、動作ルールはファイルシステム８２０中にファイルの形式で保存されているので、ファイルシステム８２０中から、特定したプログラムのフルパス名を含む動作ルールのファイルを検索することにより、適用すべき動作ルールを特定することができる。【０２１７】
なお、一般にＨＤＤ７０４へのデータの読み書きは、ＤＲＡＭ７０３へのデータの読み書きより遅いため、予めファイルシステム８２０上の動作ルールを全て、ＤＲＡＭ７０３上に読み込んでおくことにより、適用すべき動作ルールを特定する処理を高速化することが可能である。一例としては、プログラムのＩＤであるフルパス名のハッシュ値を計算して、動作ルール群をハッシュ表の形で、ＤＲＡＭ７０３上にあらかじめ読み込んでおく方式が考えられる。【０２１８】
次に、オペレーティングシステム８００は、特定した動作ルールと、システムコールの内容を比較し、システムコールの処理を行うか否かを判定する（ステップ１１０５）。【０２１９】
システムコールの内容が動作ルールにおいて明示的に許可されている場合には、システムコールを受理し（ステップ１１０７）、オペレーティングシステム８００の備える基本機能を実行し（ステップ１１０８）、しかる後にブラウザアプリケーション８１０へとリターンする。【０２２０】
動作ルールにおいて明示的な許可が無い場合には、本実施例においては、該当する動作は禁止されていると解釈されるため、システムコールをエラーリターンする（ステップ１１０６）。【０２２１】
最後に、オペレーティングシステム８００は、プロセス終了監視モジュール８０８を用い、ブラウザアプリケーション８１０の終了を検知する（ステップ１２００）。【０２２２】
通常の処理においてはブラウザアプリケーション８１０は、ｅｘｉｔシステムコールを呼び出すことによりオペレーティングシステム８００に終了を通知する。この場合は、オペレーティングシステム８００はシステムコール呼び出しの形で、ブラウザアプリケーション８１０の終了を検知することができる。【０２２３】
また、異常な処理としてブラウザアプリケーション８１０が危険な動作を行い、オペレーティングシステム８００に強制終了させられる場合がある。危険な動作の一例としてはメモリ保護違反等が挙げられる。【０２２４】
この場合、メモリ管理ユニットからの割り込みをオペレーティングシステム８００がトラップすることによりオペレーティングシステム８００はブラウザアプリケーション８１０の危険な動作を検知することができ、これをもってブラウザアプリケーション８１０の終了検知に代えることができる。【０２２５】
そのほかの危険な動作（例えば、非特権状態での特権命令の実行）についても、割り込みとして検知することができ、オペレーティングシステム８００はブラウザアプリケーション８１０の終了を検知することができる。これらの事項は当業者にとって既知の事柄であるので、詳細な説明は省略する。【０２２６】
図１５を参照して、プロセス終了時の動作について説明する。【０２２７】
プロセスの終了を検知すると、オペレーティングシステム８００は、終了プロセスのプロセスＩＤを特定する（ステップ１２０１）。【０２２８】
そして、特定したプロセスＩＤをキー値にして、終了プロセスのアドレス範囲セット８０３を特定し、特定したアドレス範囲セット８０３をアドレス範囲セット管理用データ構造体８０２から削除する（ステップ１２０２）。【０２２９】
さらに、オペレーティングシステム８００は、プロセスそのものを消去する（１２０３）。【０２３０】
プロセスの消去に関する処理は、プロセス管理用データ構造体８０２の消去する処理や、プロセスに割当てていた物理メモリを、未割当てメモリ扱いに変更する処理など多岐にわたるが、それらは当業者にとっては既知の事項であるので、詳細な説明は省略する。【０２３１】
上記に説明した実施例において、例えば、ブラウザ本体部分８１１がディスプレイへの画像表示を行う動作を考える。【０２３２】
本実施例で扱っているＵＮＩＸ（登録商標）類似のＯＳにおいては、ディスプレイなどの周辺機器へのアクセスは、デバイスファイルへのアクセスとして抽象化されるのが一般的であるため、この場合では、ブラウザ本体部分８１１は、／ｄｅｖ／ｆｂというデバイスファイルをｏｐｅｎするシステムコールを呼び出すことになる。【０２３３】
すると、オペレーティングシステム８００が特定するシステムコールの発行元は、ＰＩＤ＝１０２４、アドレスは「０ｘ８０４８０００」から「０ｘ８０ｄｃ０００」の間のどこかとなる。【０２３４】
それに従ってオペレーティングシステム８００が特定するブラウザ本体プログラム８２１の動作ルールには、デバイスファイル（／ｄｅｖ／ｆｂ）のｏｐｅｎを許可する旨が記述されている。【０２３５】
よって、ブラウザ本体部分８１１がディスプレイへの画像表示を行うことが可能である（通常においては、ｏｐｅｎだけでなく、デバイスファイル（／ｄｅｖ／ｆｂ）のｒｅａｄ、ｗｒｉｔｅ、ｉｏｃｔｌなども許可しなければならないが、説明が煩雑になるため本実施例では省略している）。【０２３６】
同様に、ブラウザ本体部分８１１がキーボード／マウス７１１を通じてユーザ７２０からの入力を受ける動作を考える。【０２３７】
キーボード／マウス７１１へのアクセスが／ｄｅｖ／ｈｉｄというファイルへのアクセスとして抽象化されているとすると、ファイル（／ｄｅｖ／ｈｉｄ）へのｏｐｅｎを許可しているので、ブラウザ本体部分８１１はユーザ７２０からの入力を受けることができる（通常においては、ｏｐｅｎだけでなく、／ｄｅｖ／ｆｂのｒｅａｄ、ｗｒｉｔｅ、ｉｏｃｔｌなども許可しなければならないが、説明が煩雑になるため本実施例では省略している）。【０２３８】
しかし、ブラウザ本体部分８１１がＨＴＴＰライブラリ部分８１２を介さずにＩＰ通信を行う動作については、ブラウザ本体プログラム８２１の動作ルールには、ＡＦ＿ＩＮＥＴドメインを指定した、ｓｏｃｋｅｔシステムコールの呼び出しについての明示的な許可が存在しない。【０２３９】
よって、ブラウザ本体部分８１１によるＨＴＴＰライブラリ部分８１２を介さないＩＰ通信はオペレーティングシステム８００によって禁止されることになる。【０２４０】
また、次の例として、ＨＴＴＰライブラリ部分８１２がＩＰ通信を行う動作について説明する。【０２４１】
本実施例で扱っているＵＮＩＸ（登録商標）類似のＯＳにおいては、通信を行う際にはｓｏｃｋｅｔシステムコールの呼び出しを行うことが一般的であり、さらにＩＰ通信を行う際にはｓｏｃｋｅｔシステムコールの引数にＡＦ＿ＩＮＥＴを指定することが一般的である。【０２４２】
この場合、ＨＴＴＰライブラリ部分８１２からのｓｏｃｋｅｔシステムコール呼び出しにおいて、オペレーティングシステム８００が特定するシステムコールの呼び出し元は、ＰＩＤ＝１０２４、アドレスは「０ｘ４００１６０００」から「０ｘ４００１ｃ０００の間のどこかとなる。【０２４３】
それに従ってオペレーティングシステム８００が特定するＨＴＴＰライブラリ部分８１２の動作ルールには、ｓｏｃｋｅｔシステムコールをＡＦ＿ＩＮＥＴを指定して呼び出すことを許可する旨が記述されている。【０２４４】
よって、ＨＴＴＰライブラリ部分８１２がＩＰ通信を行うことが可能である。【０２４５】
ここで、ブラウザ本体部分８１１は自分自身ではＩＰ通信を行うことができないが、ＨＴＴＰライブラリ部分８１２を介してであれば、ＩＰ通信を行うことが可能である。【０２４６】
そこで、ＨＴＴＰライブラリ部分８１２に対して、事前に十分に品質検査を行うことにより、ブラウザアプリケーション８１０のＩＰ通信関連の動作の品質を保証することができる。なぜならばブラウザ本体部分８１１はＨＴＴＰライブラリ部分８１２を介さずにＩＰ通信を行うことができないからである。【０２４７】
以上説明したように、本発明の実施の形態によれば、アプリケーションの起動処理において、アプリケーションを構成する各プログラムをメモリ上にロードするアプリケーションロード手段が、アプリケーションを構成する１以上のプログラム（アプリケーション本体プログラム、ライブラリプログラム）をロードしたメモリ（主記憶装置）上のアドレス範囲と前記プログラムの識別子とをアドレス範囲セットとしてアドレス範囲セット記憶手段に記憶する。【０２４８】
システムコール処理手段でアプリケーションからのシステムコールの呼び出しを受け付けると、システムコールの呼び出し元のプログラムのタスクＩＤを特定し、呼び出し元アドレス特定手段によって呼び出し元のプログラムのアドレスを特定し、そのタスクＩＤとアドレスに基づいて、呼び出し元プログラム特定手段によって処理依頼元のプログラムを特定する。【０２４９】
そして、動作ルール適用手段によって、特定したプログラムに対応する動作ルールを動作ルール記憶手段から特定し、特定した動作ルールと、呼び出された処理の内容を比較することで、呼び出された処理を実行するか否かを決定する。【０２５０】
以上好ましい実施の形態と実施例をあげて本発明を説明したが、本発明は必ずしも、上記実施の形態及び実施例に限定されるものでなく、その技術的思想の範囲内において様々に変形して実施することができる。【０２５１】
この出願は、２００７年２月２１日に出願された日本出願特願２００７−０４０７４６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０２５２】
本発明によれば、セキュリティを強化したコンピュータといった用途に適用できる。また、セキュリティ強化を強化した、コンピュータを含む組込み機器といった用途にも適用可能である。
【図１】
2008114560.tif 000003
【図２】
2008114560.tif 000004
【図３】
2008114560.tif 000005
【図４】
2008114560.tif 000006
【図５】
2008114560.tif 000007
【図６】
2008114560.tif 000008
【図７】
2008114560.tif 000009
【図８】
2008114560.tif 000010
【図９】
2008114560.tif 000011
【図１０】
2008114560.tif 000012
【図１１】
2008114560.tif 000013
【図１２】
2008114560.tif 000014
【図１３】
2008114560.tif 000015
【図１４】
2008114560.tif 000016
【図１５】
2008114560.tif 000017
【国際調査報告】
2008114560.tif 000018
2008114560.tif 000019
2008114560.tif 000020
2008114560.tif 000021