(57)【要約】センサネットワークで使用可能なメモリ障害を処理するための方法及びシステムが開示されている。センサノードのオペレーティングシステムを保護するため、センサノードのデータメモリアドレス空間にアプリケーション障害ドメインを作り、実現することにより、粗粒度のメモリ保護が提供される。アプリケーションモジュールによりアクセスされたデータメモリは、データメモリアドレス空間内の（アプリケーション障害ドメインを定める）領域に制限される。アプリケーションモジュールは、ソフトウェアベースの実行時間チェックにより、アプリケーション障害ドメイン外のメモリへのアクセスを防止される。オペレーションシステムの状態は、アプリケーション障害ドメイン外に維持され、従って、あらゆるアプリケーションモジュールによるメモリの破損から保護される。アプリケーションモジュールが破損した状態では動作しないことを保証するため、細粒度の誤り検出及び回復がアプリケーション障害ドメインの中で提供される。アプリケーション障害ドメイン内のメモリのどのような破損でも、オペレーティングシステムカーネルに実現された実行時間メモリ完全性検証により検出される。回復は、破損状態を取り除き、破損していない状態で動作するため、影響を受けたアプリケーションモジュールのみを再起動することを含んでいる。
2009522664.tif 000002
【特許請求の範囲】
【請求項１】
単一のメモリアドレス空間内でメモリにアクセスする複数のアプリケーションモジュールを実行するステップと、
アプリケーションモジュールによるアプリケーションの状態へのメモリアクセスよりも前に、前記アプリケーションモジュールの前記状態が破損しているか否かを検出するステップと、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールをマイクロリブートするステップとを含む方法。
【請求項２】
請求項１に記載の方法において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールによる前記メモリアクセスを可能にすることをさらに含む方法。
【請求項３】
請求項１に記載の方法において、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップは、前記アプリケーションモジュールの実行よりも前に行われる方法。
【請求項４】
請求項１に記載の方法において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップが、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックに蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一である場合、前記アプリケーションモジュールの前記状態が破損していないと判定するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一ではない場合、前記アプリケーションモジュールの前記状態が破損していると判定するステップとを含む方法。
【請求項５】
請求項４に記載の方法において、
メモリ完全性コード（ＭＩＣ）を計算するステップがチェックサム機能を使用して前記ＭＩＣを計算することを含む方法。
【請求項６】
請求項４に記載の方法において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールの現在の実行が完了するまで、前記アプリケーションモジュールが前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックにアクセスすることを可能にし、前記アプリケーションモジュールの前記実行の直後に、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記ＭＩＣを再計算し、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記蓄積されたＭＩＣを、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記再計算されたＭＩＣに置換することをさらに含む方法。
【請求項７】
請求項１に記載の方法において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップが、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復させることを含む方法。
【請求項８】
請求項１に記載の方法において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップが、
前記アプリケーションモジュールをアンロードすることと、
前記アプリケーションモジュールを再ロードすることとを含む方法。
【請求項９】
請求項１に記載の方法において、
前記アプリケーションモジュールが前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップと、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーティングシステムのカーネルの状態を維持するステップとをさらに含む方法。
【請求項１０】
請求項９に記載の方法において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１の範囲及び前記第２の範囲は重なり合わないようにすることと、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定めることとをさらに含む方法。
【請求項１１】
請求項１０に記載の方法において、
前記アプリケーションモジュールがアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップが、
メモリアドレスの前記第１の範囲の境界を追跡することと、
アプリケーションモジュールの目標メモリアドレスをメモリアドレスの前記第１の範囲の前記境界と比較することと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にある場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを可能にすることと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にない場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを防止することとを含む方法。
【請求項１２】
請求項１に記載の方法において、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールの前記状態を破損したと疑われる１つまたは複数の疑わしいアプリケーションモジュールを識別することをさらに含む方法。
【請求項１３】
メモリ障害を処理するためのコンピュータプログラム命令を蓄積するコンピュータで読み取り可能な媒体であって、
前記コンピュータプログラム命令が、
単一のメモリアドレス空間内でメモリにアクセスする複数のアプリケーションモジュールを実行するステップと、
アプリケーションモジュールによるアプリケーション状態へのメモリアクセスよりも前に、前記アプリケーションモジュールの前記状態が破損しているか否かを検出するステップと、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールをマイクロリブートするステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１４】
請求項１３に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義する前記コンピュータプログラム命令が、前記アプリケーションモジュールの実行よりも前に、前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１５】
請求項１３に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義する前記コンピュータプログラム命令が、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックに蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一である場合、前記アプリケーションモジュールの前記状態が破損していないと判定するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一ではない場合、前記アプリケーションモジュールの前記状態が破損していると判定するステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１６】
請求項１５に記載のコンピュータで読み取り可能な媒体において、
メモリ完全性コード（ＭＩＣ）を計算するステップを定義する前記コンピュータプログラム命令が、チェックサム機能を使用して前記ＭＩＣを計算するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１７】
請求項１５に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールの現在の実行が完了するまで、前記アプリケーションモジュールが前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックにアクセスすることを可能にし、前記アプリケーションモジュールの前記実行の直後に、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記ＭＩＣを再計算し、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記蓄積されたＭＩＣを、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記再計算されたＭＩＣに置換するステップを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項１８】
請求項１３に記載のコンピュータで読み取り可能な媒体において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップを定義する前記コンピュータプログラム命令が、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１９】
請求項１３に記載にコンピュータで読み取り可能な媒体において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップを定義する前記コンピュータプログラム命令が、
前記アプリケーションモジュールをアンロードするステップと、
前記アプリケーションモジュールを再ロードするステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項２０】
請求項１３に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールが前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップと、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーティングシステムのカーネルの状態を維持するステップとを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項２１】
請求項２０に記載のコンピュータ読み取り可能な媒体において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１の範囲及び前記第２の範囲は重なり合わないようにするステップと、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定めるステップとを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項２２】
請求項２１に記載のコンピュータ読み取り可能な媒体において、
前記アプリケーションモジュールがアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップを定義する前記コンピュータプログラム命令が、
メモリアドレスの前記第１の範囲の境界を追跡するステップと、
アプリケーションモジュールの目標メモリアドレスをメモリアドレスの前記第１の範囲の前記境界と比較するステップと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にある場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを可能にするステップと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にない場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを防止するステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項２３】
請求項１３に記載のコンピュータ読み取り可能な媒体において、
前記コンピュータプログラム命令がセンサーノード上にインストールされたオペレーティングシステムのカーネルに実装されるコンピュータで読み取り可能な媒体。
【請求項２４】
請求項２３に記載のコンピュータで読み取り可能な媒体において、
前記オペレーティングシステムは、センサーオペレーティングシステム（ＳＯＳ）を含むコンピュータで読み取り可能な媒体。
【請求項２５】
請求項１３に記載のコンピュータで読み取り可能な媒体において、
前記コンピュータプログラム命令が、前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールの前記状態を破損したと疑われる１つまたは複数の疑わしいアプリケーションモジュールを識別するステップを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項２６】
単一のデータメモリ空間内でメモリにアクセスする複数のアプリケーションモジュールを実行する手段と、
アプリケーションモジュールによる状態へのメモリアクセスよりも前に、アプリケーションモジュールの状態が破損しているか否かを検出する手段と、
破損状態の検出に応じて前記アプリケーションモジュールをマイクロリブートする手段とを有する装置。
【請求項２７】
請求項２６に記載の装置において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
実行すべきアプリケーションモジュールの状態が別のアプリケーションモジュールによって破損しているか否かを検出する手段は、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロック内に蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算する手段と、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較する手段とを有する装置。
【請求項２８】
請求項２６に記載の装置において、
前記アプリケーションモジュールをマイクロリブートする手段は、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復させる手段を有する装置。
【請求項２９】
請求項２６に記載の装置において、
前記アプリケーションモジュールをマイクロリブートする手段は、
前記アプリケーションモジュールをアンロードする手段と、
前記アプリケーションモジュールを再ロードする手段とを有する装置。
【請求項３０】
請求項２６に記載の装置において、
前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所に前記アプリケーションモジュールが書き込むことを防止する手段と、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーションシステムのカーネルの状態を維持する手段とをさらに有する装置。
【請求項３１】
請求項２６に記載の装置において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１及び前記第２の範囲は重なり合わないようにする手段と、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定める手段とをさらに有する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ障害の処理に関し、特に、メモリ障害を処理するためにセンサーネットワークで使用可能なシステム及び方法に関する。
【背景技術】
【０００２】
センサーネットワークは、通常、複数の無線センサー装置を有する。それぞれの無線センサー装置は、センサーネットワーク内でノードとして動作する。それぞれのセンサーノードにおいて検知されたデータは、センサーネットワークを介して基地局に送信される。
【０００３】
センサーネットワーク技術の最近の発展は、センサーネットワーク上で動作する分散アプリケーションを可能にした。センサーネットワークは、工業用、民生用、医療用のアプリケーションにおいて、ますます使われるようになってきている。これらの分野におけるセンサーネットワークの評判及び重要性の高まりは、センサーネットワークの需要の増大を招いた。
【０００４】
例えば、救急医療及び災害対応計画に使用されるプロトタイプ的な医療センサーネットワークプラットフォームであるコードブルーは、継続的な高信頼性、長寿命及び安全な動作を必要とする。他の例としては、産業用プロセス及びセキュリティシステムに使用するために作られたセンサーネットワークがある。
【０００５】
センサーネットワークシステムにおいては、いかなる予期しない障害も、経済的損失から生命を脅かす状況に至る広い範囲に悪影響を及ぼす恐れがある。
【０００６】
ソフトウェアの欠陥は、センサーノードの障害の一般的な原因である。特に、他のアプリケーションからの保護の欠如によるアプリケーションやカーネルの状態の破損は、ノードのクラッシュもしくはフリーズ、または検知されたデータの破損を招く恐れがある。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
センサーノードは、一般的に、単純なアーキテクチャーを有する。従って、センサーノードのアーキテクチャーは、通常、デスクトップ／サーバクラスのシステムにおいて１つのプログラムのデータやコードを他のプログラムから分離するために、または保護するために使用されるメモリ管理ユニット、特権モードの実行等のような特徴を有しない。さらに、センサーノードで使用されるマイクロコントローラは、一般的には、プログラムのためのメモリとデータ蓄積のためのメモリとを別々に有し、センサーノードの全てのデータメモリは、センサーノード上で実行される全てのプログラムモジュールが単一のアドレス空間を介してアクセス可能である。
【０００８】
センサーノードアーキテクチャーは比較的単純であるが、センサーノード上で実行されるソフトウェアは複雑であり得る。ソフトウェアの複雑さは、多様な形式のセンサーと、複数の分散型ミドルウェアサービスと、ダイナミックなコードアップデートと、リソースが制約された環境下で同時に実行するアプリケーションと、をサポートする必要があることから生ずる。
【０００９】
ソフトウェアコンポーネントを実装するために、プログラマーは、幾つかのリソース制約条件、同時実行及び競合条件の問題を取り扱う必要がある。さらに、センサーノードハードウェアのデバッギングのためのサポートが限定されていることにより、プログラム作成上のエラーが頻繁に発生する。これらのエラーは、あるアプリケーションが他のアプリケーションにより使用されているメモリを破損するというメモリ障害を招く恐れがある。
【００１０】
他のアプリケーションによる破損に加え、ハードウェア障害や一時的なエラー等によっても、メモリ障害を招く恐れがある。メモリ障害の影響は、ノードフリーズ（フェールストップ）から無症状の破損にまで至り、非常に深刻な場合がある。この場合、障害のあるセンサーノードにより生成された欠陥のあるデータは、センサーネットワークを介してさらに伝搬し、ネットワーク内の他のセンサーノードの動作を混乱に陥れる。
【００１１】
ハイエンドのデスクトップ／サーバクラスのシステムにおいてメモリの破損から保護する方法は、一般的に、静的なプログラム解析ツールまたはランタイムメモリアクセスチェッカーの２つのカテゴリーのうちの１つである。
【００１２】
静的なプログラム解析ツールは、Ｊａｖａ及びコントロールＣのような型安全な言語の言語制約、または、不正なメモリアクセスにフラグを立てるためのプログラマー注釈／言語拡張に依存する。これらのツールは、言語に少なからぬ制限を課したり、安全性を保証するためにプログラマーに特別な負担を課したり、または、センサーネットワークシステムに効率良く実装することができなくなるような重大なリソースの非効率化を招いたりする。
【００１３】
デスクトップ／サーバクラスのシステムにおいて不正なメモリアクセスを阻止するための実行時間チェックは、オーバーヘッドの増加を犠牲にして追求されてきた。例えば、ソフトウェアベースの障害分離（ＳＦＩ）は、複数の協調的なモジュールにより仮想アドレス空間を安全に共有するために、静的に分割された広い仮想アドレス空間に依存している。このような静的な分割は、センサーノードに特有の厳しく制限されたアドレス空間では使用することができない。
【００１４】
ハイエンドのデスクトップ／サーバクラスのシステムにおいては、幾つかのハードウェアアシスト型の技術がさらに提案されている。しかし、ハードウェアによる解決は、複雑で費用が嵩むハードウェアの拡張を必要とし、センサーノードの単純なハードウェアアーキテクチャーでは実現不可能である。
【００１５】
無線センサーネットワークの分野では、問題の診断／局所化のために、または、そのような概念に賛同して信頼性の欠如を克服するために、ネットワークレベルのプロトコルを開発することに大部分の研究は集中した。しかし、センサーノードに適用される最も一般的な方法である全てのノードのリブートによってメモリ障害から保護するためのノードレベルのサポートに及ぶ研究は、非常に限定されている。
【課題を解決するための手段】
【００１６】
本発明は、メモリ障害を処理する方法とシステムに重点を置いている。この方法とシステムは、センサーネットワークのセンサーノードに実装される。例えば、本方法は、センサーネットワークのセンサーノード上で、ソフトウェアのみのソリューションとして実装される。
【００１７】
本発明は、センサーノード上で実行されるアプリケーションモジュールによる不正なメモリ書き込みに起因するあらゆる破損から、センサーノードのオペレーティングシステムのカーネルの状態を保護することができる。
【００１８】
本発明は、アプリケーションモジュールが破損状態にある場合、アプリケーションモジュールが決して動作しないことも保証できる。
【００１９】
本発明は、センサーネットワークに限定されるものではなく、様々な他の形式のコンピュータシステムにおいてメモリの破損を処理するために同様に使用できる。
【００２０】
センサーノードのオペレーティングシステムを保護するために、センサーノードのデータメモリアドレス空間にアプリケーション障害ドメインを作り、実現することにより、粗粒度のメモリ保護が提供される。アプリケーションモジュールによるアクセスが可能なデータメモリは、データメモリアドレス空間内の領域に制限される。本明細書では、この領域は、「アプリケーション障害ドメイン」と定義される。
【００２１】
アプリケーションモジュールは、ソフトウェアベースの実行時間チェックにより、アプリケーション障害ドメイン外のメモリへのアクセスを防止される。オペレーティングシステムの状態は、アプリケーション障害ドメインの外に保たれ、従って、任意のアプリケーションモジュールによるメモリの破損から保護される。
【００２２】
アプリケーションモジュールが破損状態では動作しないことを保証するために、細粒度の破損検出及び回復がアプリケーション障害ドメイン内で提供される。他のあらゆるアプリケーションモジュールに起因するアプリケーション障害ドメイン内のメモリの破損は、オペレーティングシステムのカーネルの中に実装された実行時間メモリ完全性検証により検出される。
【００２３】
障害検出は、破損したメモリが任意のアプリケーションモジュールによって使用されることができるようになる前、通常、その直前に実行される。回復には、破損状態を取り除くことと、新しい初期状態で動作するために、影響を受けたアプリケーションモジュールのみを再起動することとを含む。
【００２４】
本発明の１つの実施形態によれば、複数のアプリケーションモジュールが、単一のデータメモリ空間で実行される。それぞれのアプリケーションモジュールのそれぞれの実行の前に、システムは、アプリケーションモジュールの状態が破損しているか否かを検出する。アプリケーションモジュールが破損状態であれば、そのアプリケーションモジュールはマイクロリブートされる。
【００２５】
本発明による方法及びシステムは、センサーノードの持つ動作特性により使用できるが、それに限定されるものではない。本発明は、メモリ保護を誤り検出及び回復と組み合わせることが可能である。センサーノードの上の限定されたアドレス空間は、全てのアプリケーションモジュールに別々の障害ドメインを実装することを不可能にするので、センサーノードのオペレーティングシステムの状態を保護するために、粗粒度のメモリ保護が使用される。
【００２６】
本発明は、また、その時のリソースの必要条件に基づき、実行時間中に自動的にサイズの調整が可能な障害ドメインを実装する。さらに、実行時間チェックは、通常、アプリケーションモジュールにのみ影響を与えるので、オペレーティングシステムの性能は影響を受けない。割り込み処理のような時間依存形の動作は、通常、オペレーティングシステムのカーネルによって実行され、破損検出のための実行時間完全性チェックによっては影響を受けない。
【００２７】
本発明による以上の利点および他の利点は、下記の詳細な説明と添付図面を参照すれば、当業者には明白であろう。
【発明を実施するための最良の形態】
【００２８】
本発明は、メモリ障害の処理に重点を置いている。本発明は、センサーネットワーク内のセンサーノードにおけるメモリの破損を処理するために、センサーネットワークで使用可能である。本明細書において本発明は、センサーネットワークのセンサーノードに実装されると説明されているが、本発明は、センサーネットワークに限定されるものではなく、様々な他の形式のコンピュータシステムにおいてメモリの破損を処理するため、同様に利用されることができる。
【００２９】
図１は、典型的なセンサーネットワーク１００のネットワークトポロジーを示す。
【００３０】
図１に示すようにセンサーネットワークは、基地局１０２と、複数のセンサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０とを有する。
【００３１】
センサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０のそれぞれは、何らかの形式のデータを検知する無線センサー装置である。センサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０のそれぞれは、限定された無線信号範囲内の他のセンサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０の少なくとも１つと通信する。
【００３２】
センサーネットワーク１００において少なくともセンサーノード１０４，１０８は、基地局１０２と通信する。
【００３３】
センサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０のそれぞれにおいて検知されたデータは、データパケットに変換され、そのデータパケットは、センサーノード１０４，１０６，１０８，１１０，１１２，１１４，１１６，１１８，１２０を介して基地局に送られる。
【００３４】
図１に示すネットワークトポロジーは、センサーネットワークを単純化して図示したものである。公知のようにセンサーネットワーク内の通信は、距離に加え、混信、隠れノード等のような様々な他の問題により影響を受ける恐れがある。
【００３５】
図２は、本発明を実装することが可能なセンサーノードハードウェアの高レベルブロック図を示す。
【００３６】
図２に示すようにセンサーノード２００は、カーネル及びアプリケーションモジュールにより定義されたセンサーノード２００の全体的な動作を実行するマイクロコントローラ（ＭＣＵ）２０２を有する。ＳＯＳカーネル及びアプリケーションモジュールは、プログラムメモリ２０４に２進イメージとして蓄積される。
【００３７】
プログラムメモリ２０４は、フラッシュメモリとして実装される。
【００３８】
アプリケーションモジュールは、センサーノード２００のオペレーティングシステムを定義するコアモジュール（カーネル）に加え、検知、局所化、時間同期、ルーティング、更新等のような様々なタスクを実行するためのモジュールを有する。
【００３９】
データメモリ２０６は、様々なアプリケーションモジュールの状態を蓄積している。特定のアプリケーションモジュールの状態は、そのアプリケーションモジュールに関連する任意のデータを参照する。例えば、ルーティングモジュールの状態は、データ経路内の次のホップを識別するデータを有することができ、また、検知アプリケーションモジュールの状態は、検知モジュールを実行する場合に検知されるデータであり得る。
【００４０】
データメモリ２０６は、ＲＡＭのようなダイナミックメモリである。
【００４１】
検知ハードウェア２０８は、条件を検知してデータを収集するために、ＭＣＵ２０２により制御される。様々な形式の検知ハードウェア２０８が、センサーノード２００の目的に応じ、温度・圧力・磁界等のような多種多様な条件を検知するために使用できる。
【００４２】
無線トランシーバー２１０は、他のセンサーノード及び／または基地局と通信するために無線信号を送受信する。
【００４３】
検知ハードウェア２０８により収集されたデータは、無線トランシーバー２１０によってセンサーネットワーク内を１つまたは複数のホップを経由し、基地局に送信される。
【００４４】
無線トランシーバー２１０は、通常、限定された信号範囲を有する低エネルギートランシーバーとして実装される。
【００４５】
センサーネットワーク用には、様々なオペレーティングシステムが存在する。オペレーティングシステムは、主に、スケジューリングとリソース管理とノード内通信及びノード間通信の両方とを制御する。
【００４６】
一般的なオペレーティングシステムであるタイニーＯＳは、一般的なサービスを実装するために再利用可能なソフトウェアコンポーネントを使用するが、センサーネットワーク内の全てのノードは、１つの静的にリンクされたシステムイメージを実行する。しかし、メモリ保護、障害分離及び効率的な回復のためには、単一の２進イメージは適用できない。これに対し、カーネルとユーザーコンポーネントとが明確に分離されているモジュール式のソフトウェアアーキテクチャーは、このような特徴を実現するために、自然な境界を提供する。
【００４７】
このようなモジュール式のソフトウェアアーキテクチャーは、ＳＯＳ、ＭＡＮＴＩＳ及びＣｏｎｔｉｋｉを含む最近開発されたオペレーティングシステムで使用されている。これらのオペレーティングシステムは、タイニーＯＳと比べ、効率性を損なわずに２進レベルでのモジュール性を維持する。
【００４８】
本明細書において本発明は、ＳＯＳを使用して実装されるものとして説明される。しかし、本発明はＳＯＳに限定されるものではなく、任意のモジュール式のオペレーティングシステムは本発明を実装するのに適している。
【００４９】
ＳＯＳは、センサーネットワーク内の全てのノードにカーネルがインストールされるセンサーオペレーティングシステムである。システムの残りの部分とアプリケーションレベルの機能とは、本明細書においてモジュールと呼ぶ１組の動的にロード可能な２進モジュールにより実装される。このモジュール性は、明確な境界を定め、各モジュールが実行時間中にロードされ、アンロードされることを可能するため、ＳＯＳソフトウェアアーキテクチャーの基盤を構成する。さらに、この分離は、ＳＯＳカーネルが各メモリブロックの所有権を実行時間中に追跡することと、実行コンテキストを識別することとを可能にする。
【００５０】
図３Ａ，図３Ｂは、ＳＯＳ内の基本的な通信アーキテクチャーを示す。図に示すようにモジュール３０２，３０４，３０８は、相互に情報を交換し合うために、また、ＳＯＳカーネル３１０と相互に情報を交換し合うために、明確に定義された通信経路を使用する。
【００５１】
各モジュール３０２，３０４，３０８は、所要のメッセージハンドラーを実装し、オプションとしてシステムの残りの部分に提供する１つまたは複数の機能を実装する。
【００５２】
他のモジュール３０２，３０４，３０８は、後者の機能の利用を選択することができる。
【００５３】
図３Ａに示すようにモジュール３０２，３０４は、それぞれ、対応するメッセージハンドラーに引き渡されるメッセージを送ることにより、または、提供される機能を呼び出すことにより実現される非同期メッセージパッシングまたは同期関数呼出しを通じ、相互に通信することが可能である。
【００５４】
ダイナミックリンカー３０６は、モジュールをロードする時に、利用される機能を提供される機能にリンクするのを補助する。
【００５５】
図３Ｂは、同様に、モジュールとカーネルとの間の通信を示す。
【００５６】
モジュール３０８は、公知のシステムコールを呼び出し、モジュールのメッセージハンドラーに非同期に引き渡されるシステムメッセージを受信する。これらの明確に定義されたモジュール間、または、モジュールとカーネルとの間の通信経路は、ＳＯＳカーネル３１０が実行コンテキスト及びメモリ所有権情報の両方を実行とデータとが交差する境界として正確に追跡できるような明確な介在点を提供する。
【００５７】
図４は、本発明の実施形態によるセンサーノード内のメモリ障害の処理方法を示している。
【００５８】
この方法は、２階層のソフトウェアに実装される。第１の階層（ステップ４１０）は、アプリケーションモジュールを原因とするメモリ障害による破損から、センサーノードのオペレーティングシステムの中核となるサービス（リソース管理、通信、スケジューリング等）を保護するために、粗粒度のメモリ保護を使用する。
【００５９】
第２の階層（ステップ４２０）は、破損したアプリケーションモジュールの細粒度の検出と、破損したアプリケーションモジュールの回復を提供する。
【００６０】
破損の処理は、データ構造とカーネル内で維持される状態とに依存するため、カーネル自身をアプリケーションモジュールによる破損から保護することが重要である。
【００６１】
図４に示すようにステップ４１０において、カーネルのメモリ空間は、アプリケーションモジュールによる破損から保護される。カーネルのメモリ空間は、粗粒度のメモリ保護を使用して保護され、アプリケーション障害ドメインは、センサーノードのデータメモリアドレス空間の中で定義される。
【００６２】
アプリケーション障害ドメインは、データメモリアドレス空間の全体の一部であり、アプリケーションモジュールが使用するために割り当てられた部分のことである。
【００６３】
図５は、センサーノードの典型的なデータメモリアドレス空間５００を示している。
【００６４】
図５に示すようにアプリケーション障害ドメイン５０２は、カーネルの状態５０４から分離されている。アプリケーションモジュールの状態（データ）は、完全にアプリケーション障害ドメイン５０２内に常駐する。
【００６５】
カーネルの状態５０４は、完全にアプリケーション障害ドメイン５０２外に常駐する。
【００６６】
アプリケーション障害ドメイン５０２は、動的なメモリ割り当てを使用して実現される。従って、アプリケーション障害ドメイン５０２のサイズは、利用できるリソースに応じて変わり得る。
【００６７】
アプリケーションモジュールがメモリを必要とする場合、ＳＯＳカーネルは、アプリケーション障害ドメイン５０２内のメモリのブロックをアプリケーションモジュールの使用のために割り当てる。
【００６８】
本発明の実現可能な実施形態によれば、動的なメモリ割り当ての技術を使用して、メモリを割り当てることができる。動的なメモリ割り当ての技術は、全てのアプリケーションモジュール（アプリケーション障害ドメイン）のアドレス範囲とカーネルのメモリブロックのアドレス範囲とが連続的であり、かつ、重なり合わないことを保証する。この具体例を図５に示す。
【００６９】
図５においてアプリケーション障害ドメイン５０２は、メモリの１つの連続的な範囲であり、カーネルの状態５０４は、メモリの別の連続的な範囲であり、これらの範囲は重なり合わない。これは、アプリケーション障害ドメイン５０２がメモリアドレスの１つの範囲により定義されること可能にし、アプリケーション障害ドメイン５０２とカーネルの状態５０４との間に容易に識別可能な境界が存在している。
【００７０】
カーネルに割り当てることができないアプリケーション障害ドメイン５０２内の使用されていないメモリブロックのフラグメンテーションによる疑似的なリソース制約を防止するため、連続的な順序でのブロックの割り当てを促進し、その結果、アプリケーション障害ドメイン５０２のフラグメンテーションが限定的になるように、割り当てアルゴリズムを最適化することが可能である。
【００７１】
アプリケーション障害ドメインとカーネルの状態とがメモリの連続的な範囲になるようなメモリ割り当てについて上述したが、本発明はこの実施形態に限定されるものではない。
アプリケーション障害ドメインが、アプリケーションモジュールとカーネルとが使用するために割り当てられる非連続的なデータブロックを含むことも可能である。この場合、メモリブロックの連続的な範囲によってアプリケーション障害ドメインとカーネルの状態とを識別する代わりに、どのデータブロックがカーネルに割り当てられ、どのデータブロックがアプリケーション障害ドメインに割り当てられるかを追跡することが必要である。
【００７２】
データシェアリングやメモリ割り当ての間に、アプリケーション障害ドメインを実現することが必要である。アプリケーションモジュールとＳＯＳカーネルとは、上述したように、非同期メッセージを介して相互に情報を交換し、データを共有する（図３Ｂ参照）。
【００７３】
カーネルからアプリケーションモジュールに渡されたこれらのメッセージは、オペレーティングシステムのデータ構造へのポインタを含むことは決してない。例えば、ＳＯＳにおいてカーネルからモジュールへの同期関数呼出しは、動的にロード可能なセンサードライバモジュールに制限される。この場合、カーネルは、センサードライバモジュールが実装すべきインタフェイスを記述し、インタフェイス定義には、いかなるポインタパラメタも含まない。従って、アプリケーションモジュールは、いかなるオペレーティングシステム（カーネル）の状態に対する参照もリーガルに含むことはできない。
【００７４】
逆に、ＳＯＳカーネルは、アプリケーションが所有するメモリブロックに対する参照を有してもよい。しかし、カーネルは、それらのブロックに対して決して動作（すなわち、読み取りまたは書き込み）をせず、単に、他のモジュールまたはドライバーにそれらを渡すだけである。
【００７５】
カーネルは、メッセージのペイロード内にある実際のデータを渡すことにより、アプリケーションモジュールへ情報を伝達する。モジュールは、メッセージのペイロードの読み取りは可能であるが、メッセージのペイロードの記憶場所への書き込みをすることやメッセージのペイロードを参照し続けるにはペイロードの所有権を得る必要がある。例えば、ＳＯＳでは、メッセージのペイロードの所有権移転は、ker_msg_take_dataシステムコールを通じて発生する。
【００７６】
アプリケーション障害ドメインを実現するために、メッセージのペイロードの所有権を得るためのシステムコールは、まず、メッセージのペイロードが障害ドメイン内から割り当てられているか否かを調べる。
【００７７】
もし、そのペイロードがアプリケーション障害ドメイン外に常駐していれば、アプリケーション障害ドメイン内から割り当てられた新しいバッファにそのペイロードはコピーされる。従って、もし、メッセージのペイロードの記憶場所がカーネルに割り当てられていれば、記憶場所は、アプリケーションモジュールに再び割り当てられない。その代わりに、アプリケーション障害ドメイン内の新しいメモリブロックがアプリケーションモジュールに割り当てられ、メッセージペイロードは、このメモリブロックにコピーされる。
【００７８】
図６は、本発明の実施形態による実行時間チェックによってアプリケーション障害ドメインを実現する方法を示す。
【００７９】
図６に示すようにステップ６１０において、アプリケーション障害ドメインの境界は追跡される。メモリは動的に割り当てられるので、アプリケーション障害ドメインのサイズ及び境界は、メモリがアプリケーションモジュールまたはＳＯＳカーネルに割り当てられるかに応じ、変化することができる。従って、アプリケーション障害ドメインの境界は、それらが変化するのに応じ、カーネル内で追跡される。
【００８０】
ステップ６２０においてアプリケーションモジュールは、アプリケーション障害ドメイン外のメモリへの書き込みを実行時間チェックを通じて防止される。これは、ＳＯＳカーネルに実装された境界チェッカーにより実行される。
【００８１】
アプリケーションモジュールは、データメモリへの書き込みを試みる任意の動作の前に、境界チェッカーへ呼出しを行う。アプリケーションモジュールの２進またはソースコードを書き直すことにより、これらの呼出しはアプリケーションモジュールに挿入できる。従って、アプリケーションモジュールの設計者の介在の有無に拘わらず、呼出しは実装され得る。
【００８２】
次に、境界チェッカーは、アプリケーションモジュールが書き込みを試みている記憶場所がアプリケーション障害ドメイン内であるか否かを判定する。アプリケーション障害ドメインがメモリブロックの連続的範囲として割り当てられている場合、記憶場所がアプリケーション障害ドメイン内であるか否かを判定するために、境界チェッカーは、記憶場所をアプリケーション障害ドメインの境界と比較することができる。
【００８３】
もし、記憶場所がアプリケーション障害ドメイン内であれば、アプリケーションモジュールは、その記憶場所に書き込みをすることが許可される。
【００８４】
もし、記憶場所がアプリケーション障害ドメイン内でなければ、アプリケーションモジュールは、その記憶場所への書き込みをすることが防止される。
【００８５】
この場合、アプリケーションモジュールのためにカスタマイズされたエラーハンドラーが呼び出される。例えば、エラーハンドラーは、障害となったアプリケーションモジュールを停止及び／または再起動することが可能である。アプリケーションモジュールのエラーハンドラーの動作は、カスタマイズ可能である。従って、異なるアプリケーションモジュールのエラーハンドラーは、アプリケーション障害ドメイン外の記憶場所への書き込みを試みるアプリケーションモジュールに応じて異なる動作をすることが可能である。
【００８６】
データメモリ内の限定されたアドレス空間は、それぞれのアプリケーションモジュールに対して連続した障害ドメインを作ることを不可能にする。従って、複数のアプリケーションモジュールは、単一のメモリ空間（アプリケーション障害ドメイン）の中で実行される。従って、アプリケーションモジュールの状態は、アプリケーション障害ドメイン内の他のアプリケーションモジュールにより破損される恐れがある。
【００８７】
図４に戻って、ステップ４２０においてメモリの破損は、アプリケーション障害ドメイン内のアプリケーションモジュールの状態の中で検出され、任意の破損したアプリケーションモジュールは回復される。このステップは、メモリの破損が発生した後、破損したメモリが影響を受けたモジュールによって使用できるようになる前に、メモリの破損を検出するためにＳＯＳカーネル内に実装されたメモリ完全性検証方法を使用する。
【００８８】
メモリの破損を発見すると、影響を受けたモジュールは、破損していない状態に回復される。
【００８９】
メモリの完全性検証を行うためには、カーネルは、ブロックレベルのメモリ所有権モデルを維持することが可能でなければならない。ＳＯＳカーネルは、アプリケーション障害ドメイン内の全てのメモリブロックのモジュール所有権を正確に追跡する。
【００９０】
カーネルもまたさらに、センサーノード上のアプリケーションモジュールの実行を追跡することが可能であり、これをシステムの制御流れと呼ぶ。ＳＯＳカーネルは、モジュールへの及びモジュールからの制御流れの入口点／出口点の全てをモニタすることができる。
【００９１】
ＳＯＳは、非プリエンプティブな協力的計画的システムであるため、アプリケーションモジュールは、他のモジュールの実行に割り込むことはできない。従って、アプリケーションモジュールにより所有されるメモリブロックの内容は、モジュールの連続した実行中に変更すべきではない。従って、メモリ完全性検証方法は、モジュールにより所有されるメモリブロックの内容がモジュールの連続した実行中に変化しているか否かを検出する。
【００９２】
アプリケーション障害ドメイン内の各メモリブロックのメモリ完全性コード（ＭＩＣ）が、メモリブロックの内容の関数として計算され、蓄積される。
【００９３】
ＭＩＣは、メモリの内容を要約するために、メモリの内容の関数として計算される値である。例えば、ＭＩＣはチェックサムでもよい。チェックサムは、公知のＣＲＣ１６アルゴリズムを使用して実装される。アプリケーション障害ドメインの各メモリブロックに対するＭＩＣは、カーネルに割り当てられたメモリアドレス空間内のテーブルに蓄積される。これにより、ＭＩＣは、破損から保護されている。上述したように、カーネルのアドレス空間は、アプリケーションモジュールによる破損から保護されているためである。
【００９４】
アプリケーションモジュールが呼び出される時にはいつでも（すなわち、アプリケーションモジュールへの制御流れの入口点において）、アプリケーションモジュールに対してメモリ完全性検証が実行される。
【００９５】
図７は、本発明の実施形態によるメモリ完全性の検証方法と、破損したアプリケーションモジュールの回復方法とを示している。
【００９６】
ステップ７１０において、アプリケーションモジュールが呼び出される。上述したように（図３参照）、制御流れは、システム内の明確に定義された点からのみモジュールに入ることが可能である。これらの点は、他のモジュール及びカーネルからのメッセージを処理するメッセージハンドラーであり、また、他のモジュールから呼び出された同期関数呼出しである。
【００９７】
ステップ７２０において、メモリブロックの内容に基づき、アプリケーションモジュールによって所有される各メモリブロックのＭＩＣが計算される。上述したように、ＭＩＣはチェックサムでもよい。
【００９８】
ステップ７３０において、計算されたＭＩＣと蓄積されたＭＩＣとが各メモリブロックにおいて同一であるか否かを判定するために、アプリケーションモジュールにより所有された各メモリブロックの計算されたＭＩＣは、各メモリブロックの蓄積されたＭＩＣと比較される。
【００９９】
計算されたＭＩＣと蓄積されたＭＩＣとが、アプリケーションモジュールにより所有された各メモリブロックにおいて同一であれば、本方法はステップ７４０に進む。
【０１００】
計算されたＭＩＣと蓄積されたＭＩＣとが、アプリケーションモジュールにより所有されたメモリブロックのいずれとも同一でなければ、アプリケーションモジュールのメモリは破損しており、本方法はステップ７６０に進む。
【０１０１】
図７の実施形態においてアプリケーションモジュールのメモリの完全性は、アプリケーションモジュールを実行する前にチェックされるが、本発明の他の実施形態によれば、アプリケーションモジュールの実行中で、アプリケーションモジュールがメモリに対して最初にアクセスを試みる直前にメモリ完全性検証を実行することが可能である。
【０１０２】
ステップ７４０において、アプリケーションモジュールが実行される。これは、計算されたＭＩＣと蓄積されたＭＩＣとがアプリケーションモジュールにより所有される各メモリブロックで一致したことが、ステップ７３０において判定されているからであり、アプリケーションモジュールのメモリは破損しておらず、モジュールを実行することが可能である。
【０１０３】
アプリケーションモジュールの実行中にメモリ完全性検証が実行される実施形態では、アプリケーションモジュールがアクセスを試みているメモリブロックの計算されたＭＩＣと蓄積されたＭＩＣとが一致していると判定された場合、アプリケーションモジュールは、メモリにアクセスすることが許され、実行を継続する。
【０１０４】
ステップ７５０において、アプリケーションモジュールの実行後、アプリケーションモジュールにより所有される各メモリブロックのＭＩＣが再計算され、メモリブロックのそれぞれについて蓄積されたＭＩＣは、再計算されたＭＩＣに置換される。これは、アプリケーションモジュールの実行中におけるメモリブロックの内容のあらゆる正当な変化を考慮に入れている。
【０１０５】
アプリケーションモジュールの実行中に内容が修正されたメモリブロックについてのみ、ＭＩＣが再計算され置換されることは可能である。
【０１０６】
ステップ７６０において、破損したメモリに関連するアプリケーションモジュールは、マイクロリブートされる。本明細書において使用される用語であるマイクロリブートは、特定のアプリケーションモジュールのみを再起動し、その状態を以前の破損していない状態に回復させることを意味する。この破損していない状態は、アプリケーションモジュールの初期状態でもよく、または、アプリケーションモジュールが破損していないと判明している最近の状態であってもよい。これは、アプリケーションモジュールの破損状態を除去する。
【０１０７】
マイクロリブートは、破損したアプリケーションモジュールを再起動するのみであることに気づくことは重要である。従って、センサーノードの完全なリブートと比べて回復時間は非常に短い。さらに、マイクロリブートは、ノード上にある、破損したアプリケーションモジュールと直接的には相互に関連していない実行中の他のアプリケーションモジュールに及ぼす混乱を最小限にする。
【０１０８】
ＳＯＳカーネルは、実行時間中にアプリケーションモジュールをロードしたり、アンロードしたりすることが可能である。モジュールがシステムにロードされるとき、カーネルは、モジュールが必要とするリソースを割り当て、モジュールが利用する機能群を関連付け、通知する。
【０１０９】
モジュールのアンロードの間に、カーネルは、モジュールのリソースを解放し、モジュールの機能群を切り離す。例えば、アプリケーションモジュールをアンロードし、次に、そのアプリケーションモジュールをシステムに再ロードすることにより、マイクロリブートはＳＯＳの中に実装される。これは、アプリケーションモジュールを初期状態で再起動することとなる。
【０１１０】
モジュールは、直ちにシステムに再ロードされるので、モジュールにより提供される機能群の切り離しのような不必要なステップを除外することも可能である。
【０１１１】
本発明の１つの実施形態によれば、アプリケーションモジュールの状態が破損しているとき、そのアプリケーションモジュールを破損したと疑われる１つまたは複数の疑わしいアプリケーションモジュールを、カーネルが識別することも可能である。疑わしいアプリケーションモジュールの識別は、アプリケーションモジュールの実行ログをカーネルが保持することによって実装される。
【０１１２】
アプリケーションモジュールの状態が破損していると判定されると、次に、カーネルは、疑わしいアプリケーションモジュールを判定するために、破損したアプリケーションモジュールの前回の実行以降、他のどのアプリケーションモジュールが実行されたかをログでチェックすることが可能である。
【０１１３】
他のアプリケーションモジュールの状態の破損を招いた疑わしいアプリケーションモジュールを絞り込むために、疑わしい実行中のアプリケーションモジュールのリストをカーネルが保持することが可能である。
【０１１４】
本発明のこの実施形態は、メモリの破損の検出と、破損状態のアプリケーションモジュールの回復とに加えて、メモリの破損に関して可能性のある原因をカーネルが診断することを可能にする。
【０１１５】
上述のように、本発明は、センサーネットワークのセンサーノードにおいて使用可能な、ノードレベルのソフトウェアベースのメモリの障害検出方法及び回復方法を提供する。この方法は、局所的にメモリ障害を検出し、効率的な局所的な回復を提供する。この局所的な回復は、ネットワークレベルの回復メカニズムを支援し、または加速することができるはずである。
【０１１６】
以上、本発明は、センサーノードに実装されるとして説明したが、本発明は、他の様々な形式のコンピュータシステムにおいて実装されることができる。
【０１１７】
以上の詳細説明は、あらゆる点で説明的であり典型的であるが、制約的なものではないと理解されるべきであり、また、本明細書に開示されている本発明の範囲は、詳細説明から判断されるべきではなく、より正確に言えば、特許法により許容される最大限によって解釈される特許請求の範囲から判定されるべきである。
【０１１８】
本明細書において例示し説明した実施形態は、本発明による原理の単なる実例であり、本発明の範囲と技術思想から逸脱することなく、様々な修正が当業者により実現可能であると理解されるべきである。当業者は、本発明の範囲と技術思想から逸脱することなく、さまざまな他の特徴の組み合わせを実現することができるはずである。
【０１１９】
本出願は、２００６年１月３日に出願し、その開示が参考文献として本明細書に包含される、米国仮特許出願第６０／７４３，０９２号による優先権を主張する。
【図面の簡単な説明】
【０１２０】
【図１】典型的なセンサーネットワークのネットワークトポロジーを示す。
【図２】本発明を実装することができるセンサーノードハードウェアの高レベルブロック図を示す。
【図３Ａ】ＳＯＳ（センサーオペレーティングシステム）におけるモジュール間の通信を示す。
【図３Ｂ】ＳＯＳにおけるモジュールとカーネルとの間の通信を示す。
【図４】本発明の実施形態によるセンサーノードをメモリ破損障害から保護する方法を示す。
【図５】センサーノードの典型的なデータメモリアドレス空間を示す。
【図６】本発明の実施形態による実行時間チェックによってアプリケーション障害ドメインを実現する方法を示す。
【図７】本発明の実施形態によるメモリ完全性検証方法及び破損したアプリケーションモジュールの回復方法を示す。
【図１】
2009522664.tif 000003
【図２】
2009522664.tif 000004
【図３Ａ】
2009522664.tif 000005
【図３Ｂ】
2009522664.tif 000006
【図４】
2009522664.tif 000007
【図５】
2009522664.tif 000008
【図６】
2009522664.tif 000009
【図７】
2009522664.tif 000010
【手続補正書】
【提出日】平成20年7月4日(2008.7.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
単一のメモリアドレス空間内でメモリにアクセスする複数のアプリケーションモジュールを実行するステップと、
アプリケーションモジュールによるアプリケーションの状態へのメモリアクセスよりも前に、前記アプリケーションモジュールの前記状態が破損しているか否かを検出するステップと、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールをマイクロリブートするステップとを含む方法。
【請求項２】
請求項１に記載の方法において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールによる前記メモリアクセスを可能にすることをさらに含む方法。
【請求項３】
請求項１に記載の方法において、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップは、前記アプリケーションモジュールの実行よりも前に行われる方法。
【請求項４】
請求項１に記載の方法において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップが、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックに蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一である場合、前記アプリケーションモジュールの前記状態が破損していないと判定するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一ではない場合、前記アプリケーションモジュールの前記状態が破損していると判定するステップとを含む方法。
【請求項５】
請求項４に記載の方法において、
メモリ完全性コード（ＭＩＣ）を計算するステップがチェックサム機能を使用して前記ＭＩＣを計算することを含む方法。
【請求項６】
請求項４に記載の方法において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールの現在の実行が完了するまで、前記アプリケーションモジュールが前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックにアクセスすることを可能にし、前記アプリケーションモジュールの前記実行の直後に、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記ＭＩＣを再計算し、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記蓄積されたＭＩＣを、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記再計算されたＭＩＣに置換することをさらに含む方法。
【請求項７】
請求項１に記載の方法において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップが、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復させることを含む方法。
【請求項８】
請求項１に記載の方法において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップが、
前記アプリケーションモジュールをアンロードすることと、
前記アプリケーションモジュールを再ロードすることとを含む方法。
【請求項９】
請求項１に記載の方法において、
前記アプリケーションモジュールが前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップと、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーティングシステムのカーネルの状態を維持するステップとをさらに含む方法。
【請求項１０】
請求項９に記載の方法において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１の範囲及び前記第２の範囲は重なり合わないようにすることと、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定めることと、
前記アプリケーションモジュールがアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップが、
メモリアドレスの前記第１の範囲の境界を追跡することと、
アプリケーションモジュールの目標メモリアドレスをメモリアドレスの前記第１の範囲の前記境界と比較することと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にある場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを可能にすることと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にない場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを防止することとをさらに含む方法。
【請求項１１】
請求項１に記載の方法において、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールの前回の実行以降に実行された、または、実行中のアプリケーションモジュールを前記カーネルがチェックすることにより、前記アプリケーションモジュールの前記状態を破損したと疑われる１つまたは複数の疑わしいアプリケーションモジュールを識別することをさらに含む方法。
【請求項１２】
メモリ障害を処理するためのコンピュータプログラム命令を蓄積するコンピュータで読み取り可能な媒体であって、
前記コンピュータプログラム命令が、
単一のメモリアドレス空間内でメモリにアクセスする複数のアプリケーションモジュールを実行するステップと、
アプリケーションモジュールによるアプリケーション状態へのメモリアクセスよりも前に、前記アプリケーションモジュールの前記状態が破損しているか否かを検出するステップと、
前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールをマイクロリブートするステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１３】
請求項１２に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義する前記コンピュータプログラム命令が、前記アプリケーションモジュールの実行よりも前に、前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１４】
請求項１２に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
前記アプリケーションモジュールの状態が破損しているか否かを検出するステップを定義する前記コンピュータプログラム命令が、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックに蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一である場合、前記アプリケーションモジュールの前記状態が破損していないと判定するステップと、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣが前記蓄積されたＭＩＣと同一ではない場合、前記アプリケーションモジュールの前記状態が破損していると判定するステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１５】
請求項１４に記載のコンピュータで読み取り可能な媒体において、
メモリ完全性コード（ＭＩＣ）を計算するステップを定義する前記コンピュータプログラム命令が、チェックサム機能を使用して前記ＭＩＣを計算するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１６】
請求項１４に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールの前記状態が破損していない場合、前記アプリケーションモジュールの現在の実行が完了するまで、前記アプリケーションモジュールが前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックにアクセスすることを可能にし、前記アプリケーションモジュールの前記実行の直後に、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記ＭＩＣを再計算し、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記蓄積されたＭＩＣを、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記再計算されたＭＩＣに置換するステップを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項１７】
請求項１２に記載のコンピュータで読み取り可能な媒体において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップを定義する前記コンピュータプログラム命令が、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復するステップを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１８】
請求項１２に記載にコンピュータで読み取り可能な媒体において、
前記破損状態を有する前記アプリケーションモジュールをマイクロリブートするステップを定義する前記コンピュータプログラム命令が、
前記アプリケーションモジュールをアンロードするステップと、
前記アプリケーションモジュールを再ロードするステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項１９】
請求項１２に記載のコンピュータで読み取り可能な媒体において、
前記アプリケーションモジュールが前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップと、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーティングシステムのカーネルの状態を維持するステップとを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項２０】
請求項１９に記載のコンピュータ読み取り可能な媒体において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１の範囲及び前記第２の範囲は重なり合わないようにするステップと、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定めるステップと、
前記アプリケーションモジュールがアプリケーション障害ドメイン外の記憶場所へ書き込むことを防止するステップを定義する前記コンピュータプログラム命令が、
メモリアドレスの前記第１の範囲の境界を追跡するステップと、
アプリケーションモジュールの目標メモリアドレスをメモリアドレスの前記第１の範囲の前記境界と比較するステップと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にある場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを可能にするステップと、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にない場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを防止するステップとを定義するコンピュータプログラム命令を含むコンピュータで読み取り可能な媒体。
【請求項２１】
請求項１２に記載のコンピュータで読み取り可能な媒体において、
前記コンピュータプログラム命令が、前記アプリケーションモジュールの前記状態が破損している場合、前記アプリケーションモジュールの前回の実行以降に実行された、または、実行中のアプリケーションモジュールを前記カーネルがチェックすることにより、前記アプリケーションモジュールの前記状態を破損したと疑われる１つまたは複数の疑わしいアプリケーションモジュールを識別するステップを定義するコンピュータプログラム命令をさらに含むコンピュータで読み取り可能な媒体。
【請求項２２】
単一のデータメモリ空間内でメモリにアクセスする複数のアプリケーションモジュールを実行する手段と、
アプリケーションモジュールによる状態へのメモリアクセスよりも前に、アプリケーションモジュールの状態が破損しているか否かを検出する手段と、
破損状態の検出に応じて前記アプリケーションモジュールをマイクロリブートする手段とを有する装置。
【請求項２３】
請求項２２に記載の装置において、
前記アプリケーションモジュールのそれぞれが前記単一のデータメモリ空間内にメモリの少なくとも１つのブロックを割り当てられ、
実行すべきアプリケーションモジュールの状態が別のアプリケーションモジュールによって破損しているか否かを検出する手段は、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロック内に蓄積された内容の関数として、前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックのメモリ完全性コード（ＭＩＣ）を計算する手段と、
前記アプリケーションモジュールに割り当てられたメモリの前記少なくとも１つのブロックの前記計算されたＭＩＣを蓄積されたＭＩＣと比較する手段とを有する装置。
【請求項２４】
請求項２２に記載の装置において、
前記アプリケーションモジュールをマイクロリブートする手段は、前記アプリケーションモジュールを再起動し、前記アプリケーションモジュールの前記状態を破損していない状態に回復させる手段を有する装置。
【請求項２５】
請求項２２に記載の装置において、
前記アプリケーションモジュールをマイクロリブートする手段は、
前記アプリケーションモジュールをアンロードする手段と、
前記アプリケーションモジュールを再ロードする手段とを有する装置。
【請求項２６】
請求項２２に記載の装置において、
前記単一のデータメモリ空間内に定められたアプリケーション障害ドメイン外の記憶場所に前記アプリケーションモジュールが書き込むことを防止する手段と、
前記アプリケーション障害ドメイン外の前記単一のデータメモリ空間の一部に、オペレーションシステムのカーネルの状態を維持する手段とをさらに有する装置。
【請求項２７】
請求項２２に記載の装置において、
プログラムモジュールに関連する記憶場所を連続したメモリアドレスの第１の範囲に動的に割り当て、オペレーティングシステムのカーネルに関連する記憶場所を連続したメモリアドレスの第２の範囲に動的に割り当て、連続したメモリアドレスの前記第１及び前記第２の範囲は重なり合わないようにする手段と、
連続したメモリアドレスの前記第１の範囲を前記アプリケーション障害ドメインと定める手段と、
メモリアドレスの前記第１の範囲の境界を追跡する手段と、
アプリケーションモジュールの目標メモリアドレスをメモリアドレスの前記第１の範囲の前記境界と比較する手段と、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にある場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを可能にする手段と、
前記目標メモリアドレスがメモリアドレスの前記第１の範囲の前記境界内にない場合、前記アプリケーションモジュールが前記目標メモリアドレスに書き込むことを防止する手段とをさらに有する装置。
【国際調査報告】
2009522664.tif 000011