(57)【要約】【課題】  システム障害またはクラッシュに繋がりかねないソフトウェアフォールトの連鎖を防止する。【解決手段】  本発明にかかるソフトウエアフォールトを閉じこめる方法は、メモリをソフトウェアモジュールインスタンスに割り振ること、ソフトウェアモジュールインスタンスに割り当てられた少なくとも１つのオブジェクトにメモリを割り振ること、メモリ中のソフトウェアモジュールインスタンスに割り当てられた少なくとも１つのオブジェクトを識別すること、およびソフトウェアモジュールインスタンスに対するメモリへのアクセスを制限することを含む。【選択図】図３
2005063435.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアフォールトを封じ込めるシステムであって、
プロセッサ（４１０）と、
該プロセッサ（４１０）に接続されたメモリ（４１５）と、
メモリをソフトウェアモジュールインスタンスに割り振るロジック（４２５）と、
ソフトウェアモジュールインスタンスに割り当てられた少なくとも１つのオブジェクトにメモリを割り振るロジック（４２５）と、
前記メモリに少なくとも１つのオブジェクトを配置し、識別するロジック（４３０、４３５）と、
前記ソフトウェアモジュールインスタンスの命令に対する、前記少なくとも１つのオブジェクトに割り振られた前記メモリへのアクセスを制限するロジック（４４０）と
を備えたシステム。
【請求項２】
前記ソフトウェアモジュールインスタンスに割り当てられた前記少なくとも１つのオブジェクトを操作する要求を受け取るロジック（４５０）と、
前記要求に従って、前記ソフトウェアモジュールインスタンスの前記オブジェクトを操作するロジック（４５０）と
をさらに備えた請求項１記載のシステム。
【請求項３】
前記要求の完了を示す応答を送るロジック（４５０）を
さらに備えた請求項２記載のシステム。
【請求項４】
前記ソフトウェアモジュールインスタンスに関連するソフトウェアフォールトを識別するロジック（４５５）と、
前記ソフトウェアモジュールインスタンスの不安定性を報告するメッセージを第２のソフトウェアモジュールインスタンスに送るロジック（４２０、４５０）と、
前記ソフトウェアモジュールインスタンスを再構築するロジック（４６０）と、
前記ソフトウェアモジュールインスタンスの安定性を報告するメッセージを前記第２のソフトウェアモジュールインスタンスに送るロジック（４２０、４５０）と
をさらに備えた請求項２記載のシステム。
【請求項５】
前記ソフトウェアモジュールインスタンスに割り振られたメモリを解放するロジック（４６０）と、
前記ソフトウェアモジュールインスタンスに割り当てられた前記少なくとも１つのオブジェクトの前記データ記憶メモリを解放するロジック（４６０）と、
前記ソフトウェアモジュールインスタンスにメモリを再度割り振るロジック（４２５）と、
前記再度割り振られたデータ記憶メモリ（４３０、４３５）に少なくとも１つのオブジェクトを配置し、識別するロジックと、
前記ソフトウェアモジュールインスタンスの前記命令に再度割り振られた前記データ記憶メモリへのアクセスを制限するロジック（４４０）と
をさらに備えた請求項４記載のシステム。
【請求項６】
第２のソフトウェアモジュールが、第１のソフトウェアモジュールインスタンスに割り当てられた前記少なくとも１つのオブジェクトを間接的に操作できるようにするロジック（４５０）と、
前記第１のソフトウェアモジュールが、前記第２のソフトウェアモジュールインスタンスに割り当てられた前記少なくとも１つのオブジェクトを間接的に操作できるようにするロジック（４５０）と
をさらに備えた請求項１記載のシステム。
【請求項７】
第１のソフトウェアモジュールインスタンスに関連するソフトウェアフォールトを識別するロジック（４５５）と、
前記第１のソフトウェアモジュールインスタンスの不安定性を報告するメッセージを送るロジック（４２０、４５０）と、
前記第１のソフトウェアモジュールインスタンスを再構築するロジック（４６０）と、
前記第１のソフトウェアモジュールインスタンスの安定性を報告するメッセージを送るロジック（４２０、４５０、４６０）と
をさらに備えたシステム。
【請求項８】
前記第１のソフトウェアモジュールインスタンスをリロードするロジック（４６０）と、
前記第１のソフトウェアモジュールインスタンスに割り当てられた前記少なくとも１つのオブジェクトをリロードするロジック（４３５、４６０）と
をさらに備えた請求項７記載のシステム。
【請求項９】
前記第１のソフトウェアモジュールインスタンスに関連するソフトウェアフォールトを識別するロジックは、
前記第１のソフトウェアモジュールインスタンスによる、前記第２のソフトウェアモジュールインスタンスに割り当てられたデータを直接操作しようとする試みを識別するロジック（４５５）
を備える
請求項７記載のソフトウェアフォールトを封じ込めるシステム。
【請求項１０】
前記第１のソフトウェアモジュールインスタンスを修復するロジックは、
前記第１のソフトウェアモジュールインスタンスの既知の良好な状態を識別するロジック（４６０）と、
前記既知の良好な状態から前記第１のソフトウェアモジュールインスタンスを再構築するロジックと
を備える
請求項７記載のソフトウェアフォールトを封じ込めるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアフォールトを封じ込める方法およびシステムに関する。
【背景技術】
【０００２】
コンピュータ上で実行されるソフトウェアモジュールインスタンスは、往々にして不安定になることがある。
一般に、ソフトウェアモジュールインスタンスとは、状態構造、キュー制御メモリ等の特定のセットを指す。
このような不安定性は一般に「ソフトウェアフォールト」と呼ばれ、たとえば、正しくないロジック、ゼロによる除算、および他のソフトウェア符号化エラーすなわち「バグ」を含む様々な要因に起因する場合がある。
【０００３】
図１は、ソフトウェアモジュールインスタンスＡ１１０およびソフトウェアモジュールインスタンスＢ１１５が、共有メモリ１２０の領域中のオブジェクトＡ１２５、オブジェクトＢ１３０、およびオブジェクトＣ１３５を格納し、アクセスし、かつ更新する代表的な従来のメモリ構成のブロック図を示す。
システムによっては、共有メモリの内容へのアクセスは、複数のソフトウェアモジュールインスタンス間でアクセスが重複しないように調整するために、１つまたは複数のロック機構を使用して制御することができる。
たとえば、ソフトウェアモジュールインスタンスＡ１１０は、ＰＯＳＩＸｐｔｈｒｅａｄ＿ｍｕｔｅｘ＿ｌｏｃｋ（）を使用して、ｍｕｔｅｘロック保護オブジェクトＡ１２５を取得することができる。
ソフトウェアモジュールインスタンスＢ１１５もｐｔｈｒｅａｄ＿ｍｕｔｅｘ＿ｌｏｃｋ（）を使用して、続けて同じｍｕｔｅｘを取得する場合、ソフトウェアモジュールインスタンスＢ  １１５は、ソフトウェアモジュールインスタンスＡ１１０がｐｔｈｒｅａｄ＿ｍｕｔｅｘ＿ｕｎｌｏｃｋ（）を呼び出してｍｕｔｅｘの制御権を解放するまで制止される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ソフトウェアモジュールインスタンスの間で共有メモリを使用するシステムでは、ソフトウェアフォールトが含まれない場合もある。
ソフトウェアモジュールインスタンスは、一旦不安定になると、共有メモリに格納されているデータを破損する恐れがある。
データの破損は、不安定なソフトウェアモジュールインスタンスにより通常格納され、アクセスされ、または変更されたデータに限られない。
共有メモリに格納されているすべてのデータが、不安定なソフトウェアモジュールインスタンスの予測不能な実行による危険にさらされる。
【０００５】
さらに、不安定なソフトウェアモジュールインスタンスが、他のソフトウェアモジュールインスタンスにより使用されるデータを一旦破損させると、その破損が広がり、他のソフトウェアモジュールインスタンスも不安定にさせる恐れがある。
このソフトウェアフォールトの連鎖は、完全なシステム障害またはクラッシュに繋がる場合もある。
他のソフトウェアモジュールインスタンスが不安定にならない場合であっても、検出するのが非常に困難な方法で、ユーザデータが故障した任意のインスタンスにより破損する恐れがある。
【課題を解決するための手段】
【０００６】
本発明の一実施形態によると、メモリをソフトウェアモジュールインスタンスに割り振ること、ソフトウェアモジュールインスタンスに割り当てられた少なくとも１つのオブジェクトにメモリを割り振ること、メモリ中のソフトウェアモジュールインスタンスに割り当てられた少なくとも１つのオブジェクトを識別すること、およびソフトウェアモジュールインスタンスに対するメモリへのアクセスを制限することを含む、ソフトウェアフォールトを封じ込める方法が開示される。
【発明を実施するための最良の形態】
【０００７】
以下の詳細な説明は、本開示全体を通して使用される例示的な用語の定義を含む。
すべての用語の単数形および複数形の両方がそれぞれの意味に入る。
【０００８】
本明細書において使用される「ソフトウェア」は、１つまたは複数のコンピュータ実行可能命令、ルーチン、アルゴリズム、モジュール、または本明細書に述べる機能およびアクションを実行する動的リンクライブラリからの別個のアプリケーションもしくはコードを含むプログラムを含むが、これらに限定されない。
【０００９】
ソフトウェアは、スタンドアロンプログラム、サーブレット、アプレット、メモリに格納される命令、オペレーティングシステムまたは他のタイプの実行可能命令の一部等、様々な形態で実施することも可能である。
当業者は、ソフトウェアの形態が、たとえば、所望用途の要件、ソフトウェアが実行される環境、および／または設計者／プログラマの要望等によって決まることを理解するであろう。
ソフトウェアはコードとも呼ばれる。
【００１０】
「ロジック」は、本明細書において用いる「回路」と同義であり、機能（複数可）またはアクション（複数可）を実行するハードウェア、ファームウェア、ソフトウェア、および／またはそれぞれの組み合わせを含むがこれらに限定されない。
たとえば、所望の用途または必要性に基づいて、ロジックはソフトウェア制御されるマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）等の離散ロジック、または他のプログラムされたロジックデバイスを含むことができる。
ロジックはソフトウェアとして完全に具現されてもよい。
【００１１】
本明細書において使用する「モジュール」は、一般に、所与のタイプ、またはより一般には、論理的に独立したソフトウェアコンポーネントタイプのドライバまたはカーネルサブシステム等、ソフトウェアの一部を指す。
【００１２】
本明細書において使用される「ソフトウェアモジュールインスタンス」は、ソフトウェアモジュールの特定の繰り返しである。
ソフトウェアモジュールインスタンスは、状態構造、キュー制御メモリ等の特定のセットを指す。
たとえば、ドライブモジュールがデバイスを制御する命令を含む。
ドライバモジュールが１つのデバイスを制御している場合、システムには、１つのデバイスとして機能する、ドライバ状態構造、キュー制御メモリ等の特定のセットを有する１つのドライバモジュールインスタンスがある。
ドライバモジュールによってサポートされている２つの同様のデバイスがある場合、それぞれ各自のドライバ状態のコピーを有する２つのドライバモジュールインスタンスがある。
【００１３】
「オブジェクト」は、個々に選択し操作することが可能な任意のアイテムである。
オブジェクトは、表示画面に現れる形状および絵、ならびにインターネット接続、オープンファイル、またはデータベースレコード等、あまり目に見えてはっきりとわかるものではないソフトウェアエンティティを含むことができる。
オブジェクト指向プログラミングでは、オブジェクトは、データおよびデータを操作する手続きの両方からなる自己完結型のエンティティである。
本書における用語「オブジェクト」の使い方は、より一般的なものを意図し、Ｃ＋＋のようなオブジェクト指向プログラミング言語の場合よりもゆるくデータに関連するデータを操作する手続きを含む。
ここでは、モジュールインスタント毎に所与のデータ型の複数のインスタンスがある場合があり、データを操作する関数は、モジュールインスタンスが別のモジュールから受け取るメッセージと直接的な関係を持っても、かるいは間接的な関係を持ってもよい。
【００１４】
「メモリキー」は、プロセッサのハードウェア特徴を指す。
このようなプロセッサの例は、Ｈｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｐｒｅｃｉｓｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＨＰＰＡ）プロセッサ、およびＩｎｔｅｌ  ＩＡ６４プロセッサである。
これらおよび他のプロセッサは、メモリの１つまたは複数のページに関連するキー値を表す、アクティブメモリキーおよびフィールドを仮想メモリ構造に収容したプロセッサレジスタのセットを有する。
プロセッサが、プロセッサレジスタ中のアクティブキーのいずれともマッチングしないメモリキーを使用してメモリアドレスを参照する場合、フォールト割り込みが生成される。
【００１５】
図２は、本発明の一実施形態による例示的なメモリ構成を示す。
図２に示す例では、メモリ２００は、第１の制限付きメモリ領域２１０および第２の制限付きメモリ領域２５０を備える。
第１の制限付きメモリ領域２１０は、ソフトウェアモジュールインスタンスＡ２１５の状態情報、およびソフトウェアモジュールインスタンスＡ２１５に割り当てられたデータ２２０を格納する。
ソフトウェアモジュールインスタンスの状態情報は一般に、たとえば、プログラムカウンタ等の局所変数を含むプロセッサスタックを含む。
ソフトウェアモジュールインスタンスＡ２１５が担当するデータ２２０は、オブジェクトＡ２２５およびオブジェクトＢ２３０を含む。
同様に、第２の制限付きメモリ領域２５０は、ソフトウェアモジュールインスタンスＢ２５５の状態情報、およびソフトウェアモジュールインスタンスＢ２５５に割り当てられたデータ２６０を格納する。
ソフトウェアモジュールインスタンスＢ２５５が担当するデータ２６０は、オブジェクトＣ２６５を含む。
【００１６】
一般に、ソフトウェアモジュールインスタンスに割り当てられたデータをメモリに格納することにより、メモリへのアクセスが特定のソフトウェアモジュールインスタンスに制限され、ソフトウェアフォールトの封じ込めに役立つ。
このような場合、各ソフトウェアモジュールインスタンスは、特定のソフトウェアモジュールのアクセス制限付きデータ記憶メモリに格納されている割り当てデータを格納し、アクセスし、かつ更新する能力を有する。
別のソフトウェアモジュールインスタンスに割り当てられたデータは、本ソフトウェアモジュールインスタンスによって直接格納または更新することができない。
たとえば、ソフトウェアモジュールインスタンスＡ２１５は、データ２２０に直接アクセスし更新する能力を有する。
しかし、ソフトウェアモジュールインスタンスＡ２１５はデータ２６０に直接アクセスし更新する能力を持たない。
これは、データ２６０がソフトウェアモジュールインスタンスＢ２５５に割り当てられているためである。
ソフトウェアモジュールインスタンスによる、アクセス制限付きデータ記憶メモリ外のデータにアクセスしようという試みは、ソフトウェアフォールトを示すものである。
別のソフトウェアモジュールインスタンスに割り当てられたデータへの間接的なアクセス、格納、および／または更新は、以下さらに詳細に述べる、そのデータを所有するソフトウェアモジュールインスタンスがアクセスし、格納し、かつ／または更新することを要求するメッセージを使用することにより利用が可能になる。
【００１７】
データを所有している第１のモジュールインスタンスが不安定になる場合、そのデータは正確ではない、または信頼できるものではない可能性がある。
第２のソフトウェアモジュールインスタンスは、第１のソフトウェアモジュールインスタンスに属するデータに直接アクセスすることができないため、第２のソフトウェアモジュールインスタンスは、第１のソフトウェアモジュールインスタンスが所有するデータを使用することによって不安定になることがない。
したがって、さらに詳細に以下に述べるように、ソフトウェアフォールトを第１のソフトウェアモジュールインスタンスに封じ込めることができる。
ソフトウェアフォールトが一旦修正される、すなわち、モジュールが修復されると、他のモジュールは修復されたモジュールのデータに間接的にアクセスすることが可能である。
【００１８】
好ましくは、各オブジェクトが、１つのみのソフトウェアモジュールインスタンスに割り当てられる、すなわち所有され、そのソフトウェアモジュールインスタンスは、特定のソフトウェアモジュールインスタンスに割り当てられたオブジェクトを自由にアクセスし、格納し、かつ／または更新することができる。
上に述べたように、別のソフトウェアモジュールインスタンスに割り当てられる、すなわち所有されるオブジェクトの操作は一般に、直接的には許可されないが、好ましくは間接的に実現される。
オブジェクトにアクセスしたいソフトウェアモジュールインスタンスは、そのオブジェクトを所有するソフトウェアモジュールインスタンスがそのオブジェクトにアクセスし、かつ／または操作することを要求する。
その結果、オブジェクトは、各オブジェクトのロックを提供する必要なく保護されるため、図２のシステムでは、各ソフトウェアモジュールインスタンスが、オブジェクトにアクセスする、またはオブジェクトを操作するためにロックを取得する必要がない。
【００１９】
一実施形態では、間接的な操作を通してのアクセス要求は、チャネル２７０を通してソフトウェアモジュールインスタンス間でメッセージ２８０を使用して実現される。
たとえば、ソフトウェアモジュールインスタンスＡ２１５は、ソフトウェアモジュールインスタンスＢ２５５が所有するオブジェクトＣ２６５を間接的に更新することができる。
具体的には、オブジェクトＣ２６５を更新する要求メッセージ２８０Ａが、ソフトウェアモジュールインスタンスＡ２１５からソフトウェアモジュールインスタンスＢ２５５に送られる。
ソフトウェアモジュールインスタンスＢ２５５は、ソフトウェアモジュールインスタンスＡ２１５に代わって更新を行う。
好ましくは、要求が完了すると、ソフトウェアモジュールインスタンスＢ２５５は、要求が完了したことを示すメッセージ２８０ＢをソフトウェアモジュールＡ２１５に返送する。
この方法は、コンピュータオペレーティングシステム（「ＯＳ」）内のモジュールインスタンスに特に適しているが、ユーザレベルのコードにも適用することが可能である。
【００２０】
さらに、メッセージサブシステムを介して、メッセージ２８０をソフトウェアモジュールインスタンス間でやりとりすることができる。
たとえば、ソフトウェアモジュールインスタンスＡ２１５は、オブジェクトＣ２６５を操作したい場合、要求をメッセージサブシステムに送る。
メッセージサブシステムは要求を受け取り、ソフトウェアモジュールインスタンスＢ２５５に提出する。
ソフトウェアモジュールインスタンスＢ２５５は要求を完了し、メッセージをメッセージサブシステムに返送する。
メッセージサブシステムは返信メッセージを受け取り、要求が完了したことを示すメッセージをソフトウェアモジュールインスタンスＡ２１５に送る。
このように、メッセージサブシステムは媒介としての役割を果たし、モジュールインスタンスＡ２１５およびモジュールインスタンスＢ２５５の分離および独立性を確保する。
【００２１】
図３は、ソフトウェアフォールトを封じ込める一実施形態３００の例示的な方法を示す。
図示のように、ブロックは、実行される機能、アクション、および／またはイベントを表す。
電子およびソフトウェアアプリケーションは動的で柔軟性のあるプロセスを含み、したがって図示のブロックを示す順序とは他の順序で実行することが可能なことが理解されるであろう。
ソフトウェアとして具現される要素は、機械語、手続き、オブジェクト指向、または人工知能技法等、様々なプログラミング手法を使用して実施することができる。
さらに、ソフトウェアのいくつかまたはすべてが、装置のオペレーティングシステムの一部として具現することもできる。
【００２２】
ソフトウェアモジュールはメモリにロードされる命令を含む。
ソフトウェアモジュール命令は、読み取り専用アクセスによって保護される。
ソフトウェアモジュール命令は、プラットフォーム上で実行されている１つまたは複数のソフトウェアモジュールインスタンスによって読み取ることができる。
【００２３】
ブロック３１０に示すように、ソフトウェアモジュールインスタンスが使用するメモリが割り振られる。
メモリの割り振りは、ソフトウェアモジュールインスタンスがロードされ、かつ／または実行が開始される前に行っても、その間に行っても、または後に行ってもよい。
ブロック３１２において、データ記憶メモリが、ソフトウェアモジュールインスタンスに割り当てられる、すなわち所有されるデータを格納するのに割り振られる。
ソフトウェアモジュールインスタンスに割り当てられる、すなわち所有されるデータは、たとえば、ソフトウェアモジュールインスタンスそれ自体によって作成されたオブジェクト、オペレーティングシステム（ＯＳ）によってモジュールインスタンスに渡されたオブジェクト、および／または別のモジュールによってソフトウェアモジュールインスタンスに渡されたオブジェクトを含む。
さらに、所有権を変更したオブジェクトに割り振られたデータ記憶メモリは、単純に、オブジェクトを収容するデータ記憶メモリに関連するメモリキー（以下参照）を変更することによって実現することができる。
また、オブジェクトは、保護を目的として他のデータ記憶メモリにコピーし、それから古いオブジェクトを削除することができるように構築することもできる。
割り振られたメモリを含むメモリブロックはいずれも連続している必要はない。
【００２４】
ブロック３１５に示すように、ソフトウェアモジュールインスタンスに割り当てられたすべてのオブジェクトが識別される。
ソフトウェアモジュールインスタンスに割り当てられるオブジェクトは、ソフトウェアモジュールインスタンスが主に担当するオブジェクトである。
先に述べたように、オブジェクトはモジュールインスタンスにより作成されるか、あるいはメッセージによりモジュールインスタンスに渡される。
ブロック３２０において、こういったオブジェクトは割り振られたデータ記憶メモリに配置される。
オブジェクトがソフトウェアモジュールインスタンスそれ自体によって作成されたとき、あるいはオブジェクトがメッセージによりソフトウェアモジュールインスタンスに渡された場合、オブジェクトが環境により割り振られたデータ記憶メモリに移動したときに、オブジェクトは割り振られたデータ記憶メモリに配置される。
オブジェクトの識別は、たとえば、ソフトウェアモジュール間で渡されるメッセージ規格を定義するインタフェース定義によって実施することができる。
これらインタフェース定義は、たとえば、ソフトウェアインスタンス、他のオブジェクト、ファイル、またはプロセスとのオブジェクトの関連または結び付きに基づいて、オブジェクトのリストまたはテーブルをメモリに保持することによって実現することができる。
そして、環境またはプロセスがリストまたはテーブルにアクセスして、オブジェクトを識別することができる。
【００２５】
ブロック３２５において、割り振られたデータ記憶メモリへのアクセスが、メモリが割り振られたソフトウェアモジュールインスタンスの命令に制限される。
データ記憶メモリへのアクセスは様々な方法のいずれで実現してもよい。
たとえば、データ記憶メモリへのアクセスは、ＨＰＰＡプロセッサのメモリアクセスキー機能、ＩＮＴＥＬ（登録商標）ＩＡ６４プロセッサ等のメモリアクセスキー機能、または他のメモリアクセス制御機構を使用することにより制御することができる。
【００２６】
ブロック３３０におけるソフトウェアモジュールインスタンスの実行中、ソフトウェアモジュールインスタンスは、ソフトウェアフォールトを引き起こしたものと識別することができる。
ブロック３４０において、ソフトウェアモジュールインスタンスがフォールトを引き起こしたか否かが判断される。
ソフトウェアフォールトの識別は、たとえば、一般保護違反の検出、またはソフトウェアモジュールインスタンス内の無効な命令を含め、いくつかの方法で実現することができる。
他の例としては、ソフトウェアモジュールインスタンスに割り振られた領域外のデータ記憶メモリにアクセスしようとする試み、ＯＳおよび他のモジュールインスタンスに対して行われた呼び出し中の不適当なパラメータ値の組み合わせ、または不適当なメッセージシーケンスが挙げられるがこれらに限定されない。
【００２７】
フォールト封じ込めロジックは、たとえば、ソフトウェアモジュールインスタンスを取り巻き、分離するマイクロカーネル等、オペレーティングシステムサブ機能の集まりである。
各ソフトウェアモジュールインスタンスは、オペレーティングシステム副機能の集まり内で動作する。
フォールト封じ込めロジックは、たとえば、ソフトウェアモジュールインスタンスに渡され、かつソフトウェアモジュールインスタンスから渡されるオブジェクトに対する所有権の変更、エラーのトラップ等、ソフトウェアモジュールインスタンスとのすべてのインタフェースを処理し保護する。
ソフトウェアフォールトが識別される場合、フォールト封じ込めロジックは、ブロック３４５において、ソフトウェアモジュールインスタンスが安定ではない可能性があることを示すメッセージをオペレーティングシステムおよび／または他のソフトウェアモジュールインスタンスに送る。
その他のソフトウェアモジュールインスタンスは、不安定なソフトウェアモジュールインスタンスとの通信を切断またはシャットダウンする。
この通信をシャットダウンするプロセスにより、新しいインタフェースイベントメッセージが不安定なソフトウェアモジュールインスタンスと交換されることが阻止される。
フォールト封じ込めロジックは、ブロック３４６において、不安定なソフトウェアモジュールインスタンスを破壊し、ブロック３４７において、不安定なソフトウェアモジュールに割り振られていた資源を解放する。
【００２８】
次に、ブロック３５０において、フォールト封じ込めロジックは不安定なソフトウェアモジュールインスタンスを再構築させ、それ以降の適宜実行を確保する。
ブロック３５５において、メッセージをＯＳおよび故障した、または不安定なソフトウェアモジュールインスタンスとやりとりしていた他のモジュールインスタンスに送り、そのソフトウェアモジュールインスタンスが再構築され、今では安定していることを報告する。
ソフトウェアモジュールインスタンスは、ブロック３１０〜３２５において上に述べた手続きを含むがこれに限定されない、既知のプロセスまたは手続きのいずれによって再構築してもよい。
【００２９】
図４は、本発明の一実施形態によるソフトウェアフォールトを封じ込める例示的なシステムを示す。
図示のように、システムは、プロセッサ４１０およびメモリ４１５を備える。
メモリ４１５はプロセッサ４１０に接続され、ソフトウェアフォールトを封じ込めるプロセッサ実行可能命令を格納する。
【００３０】
一実施形態では、メモリ４１５は、ソフトウェアモジュールインスタンス４４５におけるソフトウェアフォールトの封じ込めを制御するとともに、少なくとも１つのオブジェクトにデータ記憶メモリを割り振るフォールト封じ込めロジック４２０を備える。
フォールト封じ込めロジック４２０は、メモリ割り振りモジュール４２５を使用して、メモリをソフトウェアモジュールインスタンス４４５に割り振る。
フォールト封じ込めロジック４２０は、ソフトウェアモジュールインスタンス４４５に割り当てられたオブジェクトをそれぞれ識別し格納するオブジェクト識別子４３０およびオブジェクト格納ロジック４３５も使用する。
フォールト封じ込めロジック４２０は、メモリアクセスコントローラ４４０を使用して、メモリ割り振りモジュール４２５により割り振られたメモリへのアクセスを制限する。
【００３１】
メッセージサブシステム４５０が、ソフトウェアモジュールインスタンス間のメッセージの伝送を制御する。
メッセージサブシステム４５０によりサポートされるメッセージには、オブジェクト操作要求およびこのような要求の完了を示す応答が含まれる。
オブジェクトは、そのオブジェクトが割り当てられたソフトウェアモジュールインスタンス４４５によって操作される。
このような制限付きオブジェクトアクセスは、ＨＰＰＡプロセッサ、ＩＮＴＥＬ（登録商標）ＩＡ６４プロセッサ等のメモリアクセスキー機能、または他の適したメモリアクセス制御機構を使用し得るメモリアクセスコントローラ４４０によって遂行される。
【００３２】
フォールト封じ込めロジック４２０は、ソフトウェアモジュールインスタンス４４５に関連するソフトウェアフォールトを識別するフォールト識別子４５５をさらに使用する。
このようなソフトウェアフォールトが識別されると、フォールト封じ込めロジック４２０は、ソフトウェアモジュールインスタンス４４５が不安定である可能性があることを示すメッセージを送る。
フォールト封じ込めロジック４２０は、モジュールインスタンスを取り巻く環境内に分散された機能であり、フォールト封じ込めロジック４２０の一部はあらゆるＯＳインタフェースコールのロジックにあり、一部はメッセージサブシステムのロジックにあり、一部はプロセッサフォールト検出ロジックにあり、一部はメモリアクセス制御ロジックにある等々である。
メッセージは、ソフトウェアモジュールインスタンス４４５と通信し得るオペレーティングシステムおよび／または他のモジュールインスタンスに送られる。
【００３３】
メッセージがオペレーティングシステムおよび／または他のソフトウェアモジュールインスタンスに送られると、その他のソフトウェアモジュールインスタンスは、不安定なソフトウェアモジュールインスタンスとの新しいインタフェースイベントの生成を停止する。
さらに、不安定なソフトウェアモジュールインスタンスに割り当てられたオブジェクトは、他のソフトウェアモジュールインスタンスによりアクセスすることができないため、その他のソフトウェアモジュールインスタンスが信頼性のないデータにより破損することは起こり得ない。
したがって、不安定なソフトウェアモジュールインスタンスにおいて発生したフォールトまたはエラーは、他のソフトウェアモジュールインスタンスに伝搬しない。
【００３４】
そして、ソフトウェアモジュールフォールト封じ込めロジック４２０は、インスタンスリビルダ４６０を使用して、ソフトウェアモジュールインスタンス４４５を安定化、すなわち修復する。
一般に、不安定なモジュールインスタンスからのデータは、破損している場合もあるため保持することができない。
ソフトウェアモジュールインスタンス４４５は、好ましくは、既知の方法のいずれかにより、または上に述べたようになど、スクラッチから再構築される。
ソフトウェアモジュールインスタンスは、既知の良好な状態から再構築すべきである。
取り巻くソフトウェアモジュールインスタンスは、再構築中のソフトウェアモジュールインスタンスがシステムの状態に適合する状態で再構築されるように、再構築されているモジュールインスタンスとメッセージを交換して、それぞれのシステムの状態についての知識を伝達する。
【００３５】
ソフトウェアモジュールインスタンス４４５が安定化、すなわち再構築されると、フォールト封じ込めロジックは、別のメッセージをオペレーティングシステムおよび／またはソフトウェアモジュールインスタンス４４５と通信し得る他のモジュールインスタンスに送らせる。
メッセージは、ソフトウェアモジュールインスタンス４４５が安定化、すなわち修復されたことを示す。
したがって、その他のソフトウェアモジュールインスタンスは再び、今では安定したソフトウェアモジュールインスタンスとの新しいインタフェースイベントを生成することができる。
【００３６】
図示の実施形態は、結果として、モジュールインスタンスを取り巻き、メッセージを送出し、メッセージが送出された場合にモジュールインスタンスの実行をスケジュールし、各インスタンスが呼び出された場合にメモリキー（非）アクティブ化を管理するフォールト封じ込め下位環境、またはインタフェースセットになる。
当業者は、フォールト封じ込めインフラストラクチャを実現する複数の方法があることを理解するであろう。
さらに、フォールト封じ込めインフラストラクチャは、各モジュールインスタンスが別個のＯＳプロセッサまたはスレッドとして扱われる場合よりも効率的に実行することが可能である。
【００３７】
図示の実施形態は、結果として、たとえば、インスタンス単位で割り振られるメモリになる。
ＨＰＰＡまたはＩＮＴＥＬ（登録商標）ＩＡ６４プロセッサのメモリアクセスキー機能等、メモリアクセス制御機構と併せてメモリを割り振ることにより、割り振られたメモリが破損から保護される。
したがって、モジュールインスタンスが故障した場合、これにより、他のインスタンスにより読み取り可能なメモリが破損することは起こり得ない。
メモリを割り振り、アクセスを制限する方法により、フォールトの伝搬が阻止される。
【００３８】
図示の実施形態はさらに、別のインスタンスが待っているロックを保持しながら、ソフトウェアモジュールインスタンスが動作を完全に停止してしまわない（または、そのようなロックが保持されていることを忘れることによって他のモジュールインスタンスを邪魔しない）ようにする。
ロックを保持する必要性をなくすことにより、１つまたは複数の他のインスタンスを、解放されないロックを待たせながらいつまでも「立ち往生」させるか、あるいは保持されているロックを強制的に解放させる（これは、フォールトを伝搬させる恐れがある）ことに起因する一貫しないオブジェクト状態に曝されるすべてのソフトウェアモジュールインスタンスの保全性を損なうジレンマが回避される。
【００３９】
さらに、図示の実施形態では、故障したソフトウェアモジュールインスタンスによって影響を受ける可能性があるすべてのデータオブジェクトを容易かつ確実に列挙することができる。
実施形態は、故障したモジュールインスタンスの動作停止または再開によって影響を受ける可能性がある「近傍」モジュールインスタンスの容易かつ確実な列挙もサポートする。
データオブジェクトの列挙により、ソフトウェアモジュールインスタンスおよびシステムの影響を受けた領域の動作の復元に要求される必要なモジュール間ダイアログの故障から回復するとき、データオブジェクトを回収または再生することができる。
【００４０】
本発明を本発明の実施形態の説明により示し、また実施形態についてかなり詳細に説明したが、添付の特許請求項の範囲をこのような詳細に制限する、またはいずれの方法でも限定することは出願人の意図ではない。
さらなる利点および変更が当業者に容易に明らかになるであろう。
したがって、本発明は、その広い態様において、特定の詳細に限定されず、代表的な装置および実例を示し説明した。
したがって、本出願人の一般的発明概念の精神または範囲から逸脱することなく、このような詳細から逸脱を行うことが可能である。
【図面の簡単な説明】
【００４１】
【図１】従来技術によるソフトウェアモジュールインスタンスの間でのメモリの割り振りを示すブロック図である。
【図２】本発明の一実施形態によるメモリの割り振りを示すブロック図である。
【図３】本発明の一実施形態によるソフトウェアフォールトを封じ込める方法である。
【図４】本発明の一実施形態によるソフトウェアフォールトを封じ込めるシステムを示すブロック図である。
【符号の説明】
【００４２】
２１０，２５０・・・メモリ、
２１５，２５５・・・ソフトウェアモジュールインスタンスＡ，Ｂ、
２２５，２３０，２６５・・・オブジェクトＡ，Ｂ，Ｃ、
２２０，２６０・・・データ、
２８０・・・メッセージ、
４１０・・・プロセッサ、
４１５・・・メモリ、
４２０・・・フォールト封じ込めロジック、
４２５・・・メモリ割り振りモジュール、
４３０・・・オブジェクト識別子、
４３５・・・オブジェクト格納ロジック、
４４０・・・メモリアクセスコントローラ、
４４５・・・ソフトウェアモジュールインスタンス、
４５０・・・メッセージサブシステム、
４５５・・・フォールト識別子、
４６０・・・インスタンスリビルダ、
【図１】
2005063435.tif 000003
【図２】
2005063435.tif 000004
【図３】
2005063435.tif 000005
【図４】
2005063435.tif 000006