(57)【要約】  本発明は複数のプロセスと共通記憶手段との間のアクセスを管理する記憶管理システム及び方法を提供する。本発明によると、個々のプロセスは、データ処理手段と、データ処理手段が生成したデータを一時的に記憶するキャッシュと、キャッシュと共通記憶手段との間のデータ転送を管理する制御部とを有する。制御部は、データを受け取り記憶する記憶手段の記憶ロケーションの利用可能性を監視し、データを利用可能な記憶ロケーションに割り当てるマネージャと、割り当てられたデータを利用可能な記憶ロケーションに転送するインターフェイスと、排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に記憶手段をロックするロック手段とを有する。
2008547089.tif 000002
【特許請求の範囲】
【請求項１】
記憶管理システムであって、
データ処理手段と、
前記データ処理手段が生成したデータを一時的に記憶するキャッシュと、
前記キャッシュと共通記憶手段との間のデータ転送を管理する制御部とを有し、
前記制御部は、
データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視し、データを利用可能な記憶ロケーションに割り当てるマネージャと、
割り当てられたデータを前記利用可能な記憶ロケーションに転送するインターフェイスと、
排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックするロック手段とを有するシステム。
【請求項２】
前記マネージャはデータエラーが発生した時、破損していないデータを回復するフォールトトレラント手段を有する、請求項１に記載のシステム。
【請求項３】
前記制御部はさらに前記データの破損を検出するデータベリファイヤをさらに有する、請求項１に記載のシステム。
【請求項４】
前記マネージャは前記データベリファイヤと協働して破損したデータをキャンセルする、請求項３に記載のシステム。
【請求項５】
前記制御部は前記データ記憶のバージョンコントロールを使用し、前記マネージャは前記記憶手段に記憶されたデータが現在のデータセットと前のデータセットを含む、請求項１に記載のシステム。
【請求項６】
前記制御部はデータの破損をチェックするデータベリファイヤを有し、前記マネージャは前記データベリファイヤに応答して破損したデータをキャンセルし、かかるデータの前のバージョンに戻す、請求項５に記載のシステム。
【請求項７】
前記制御部はさらにデータを暗号化するデータエンコーダをさらに有する、
請求項１に記載のシステム。
【請求項８】
前記制御部は前記共通記憶手段に転送するため前記データをデータブロックに分割し、前記マネージャは前記データブロックのサイズを決定し、前記データブロックを前記記憶手段の選択されたアドレスとオフセットに割り当てる、請求項１に記載のシステム。
【請求項９】
前記制御部は前記記憶手段中の記憶ロケーションを表す少なくとも１つのマップを有する、
請求項１に記載のシステム。
【請求項１０】
前記少なくとも１つのマップは、前記記憶手段の記憶ブロックを表すブロックマップと、すでに割り当てられている記憶ブロックのアドレスを表すアドレスマップとを含む、請求項９に記載のシステム。
【請求項１１】
前記記憶手段の現在利用できる記憶ロケーションを表す少なくとも１つのリストをさらに有する、請求項９に記載のシステム。
【請求項１２】
前記少なくとも１つのリストは、前に割り当てられもはや必要ないが、現在はロックされていて上書きできない前記記憶手段のブロックを表すフリーロックドリストを有する、請求項１１に記載のシステム。
【請求項１３】
前記少なくとも１つのリストは、まだ割り当てられていない前記記憶手段のブロックを表すフリーオフセットリストと、前に割り当てられ今は自由に再使用ができるブロックのアドレスを表すフリーアドレスリストとを有する、請求項１１に記載のシステム。
【請求項１４】
前記制御部はガーベージコレクションポリシーを使用する、請求項１に記載のシステム。
【請求項１５】
共有アクセスネットワークであって、
複数のプロセスと、
共通記憶手段と、
各プロセスのための記憶管理システムとを有し、かかる記憶管理システムは、
データ処理手段と、
前記データ処理手段が生成したデータを一時的に記憶するキャッシュと、
前記キャッシュと記憶手段との間のデータ転送を管理する制御部とを有し、
前記制御部は、
データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視し、データを利用可能な記憶ロケーションに割り当てるマネージャと、
割り当てられたデータを前記利用可能な記憶ロケーションに転送するインターフェイスと、
排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックするロック手段とを有するネットワーク。
【請求項１６】
前記マネージャはデータエラーが発生した時、破損していないデータを回復するフォールトトレラント手段を有する、請求項１５に記載のネットワーク。
【請求項１７】
前記制御部はさらに前記データの破損を検出するデータベリファイヤをさらに有する、請求項１５に記載のネットワーク。
【請求項１８】
前記マネージャは前記データベリファイヤと協働して破損したデータをキャンセルする、請求項１７に記載のネットワーク。
【請求項１９】
前記制御部は前記データ記憶のバージョンコントロールを使用し、前記マネージャは前記記憶手段に記憶されたデータが現在のデータセットと前のデータセットを含む、請求項１５に記載のネットワーク。
【請求項２０】
前記制御部はデータの破損をチェックするデータベリファイヤを有し、前記マネージャは前記データベリファイヤに応答して破損したデータをキャンセルし、かかるデータの前のバージョンに戻す、請求項１９に記載のネットワーク。
【請求項２１】
前記制御部はさらにデータを暗号化するデータエンコーダをさらに有する、請求項１５に記載のネットワーク。
【請求項２２】
前記制御部は前記記憶手段に転送するため前記データをデータブロックに分割し、前記マネージャは前記データブロックのサイズを決定し、前記データブロックを前記記憶手段の選択されたアドレスとオフセットに割り当てる、請求項１５に記載のネットワーク。
【請求項２３】
前記制御部は前記記憶手段中の記憶ロケーションを表す少なくとも１つのマップを有する、請求項１５に記載のネットワーク。
【請求項２４】
前記少なくとも１つのマップは、前記記憶手段の記憶ブロックを表すブロックマップと、すでに割り当てられている記憶ブロックのアドレスを表すアドレスマップとを含む、請求項２３に記載のネットワーク。
【請求項２５】
前記記憶手段の現在利用できる記憶ロケーションを表す少なくとも１つのリストをさらに有する、請求項２３に記載のネットワーク。
【請求項２６】
前記少なくとも１つのリストは、前に割り当てられもはや必要ないが、現在はロックされていて上書きできない前記記憶手段のブロックを表すフリーロックドリストを有する、請求項２５に記載のネットワーク。
【請求項２７】
前記少なくとも１つのリストは、まだ割り当てられていない前記共通記憶手段のブロックを表すフリーオフセットリストと、前に割り当てられ今は自由に再使用ができるブロックのアドレスを表すフリーアドレスリストとを有する、請求項２５に記載のネットワーク。
【請求項２８】
前記制御部はガーベージコレクションポリシーを使用する、請求項１５に記載のネットワーク。
【請求項２９】
記憶管理方法であって、
データ処理手段によりデータを生成する段階と、
前記データ処理手段が生成したデータをキャッシュに一時的に記憶する段階と、
前記キャッシュと共通記憶手段との間のデータ転送を管理する段階とを有し、
前記管理する段階は、
データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視する段階と、
データを利用可能記憶ロケーションに割り当てる段階と、
前記割り当てられたデータを前記利用可能な記憶ロケーションに転送する段階と、
排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックする段階とを有する方法。
【請求項３０】
データエラーが発生した時、破損していないデータを回復する段階をさらに有する、請求項２９に記載の方法。
【請求項３１】
前記制御部はさらに前記データの破損を検出するデータベリファイ段階をさらに有する、請求項２９に記載の方法。
【請求項３２】
破損データをキャンセルする段階をさらに有する、請求項３１に記載の方法。
【請求項３３】
前記データ記憶のバージョンコントロールを使用し、現在のデータセットと前のデータセットを前記記憶手段に記憶する、請求項３１に記載の方法。
【請求項３４】
データ破損をチェックするデータベリファイ段階と、データ破損の場合、前記破損データをキャンセルして前記前のデータセットに戻す、請求項３３に記載の方法。
【請求項３５】
記憶するデータを暗号化する段階をさらに有する、請求項２９に記載の方法。
【請求項３６】
前記記憶手段に転送するためデータをデータブロックに分割し、前記データブロックのサイズを決定し、前記データブロックを前記記憶手段の選択されたアドレスとオフセットに割り当てる段階をさらに有する、請求項２９に記載の方法。
【請求項３７】
前記記憶手段のサイズを減らすためにガーベージコレクションポリシーを使用する、請求項２９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はセキュアデータ記憶管理システムとデータ記憶のセキュアな管理方法とに関する。
【背景技術】
【０００２】
データ記憶の分野において、多数のパーティ（parties）が単一の記憶手段にアクセスする場合、そのパーティと記憶手段との間の通信リンクと、それぞれのパーティに対する記憶手段内の記憶スペースの割り当てとを管理して、データのインテグリティと一貫したビュー（view）とを維持するようにすることが必要である。
【０００３】
相異なるパーティは、例えば個別のパーソナルコンピュータや、コンピュータネットワーク中の個別のマシン（machines）や、コンピュータネットワーク中の個別のオペレーティングシステムや、単一のオペレーティングシステム内の相異なるプロセスである。かかるパーティはすべて、以下の記載においては「プロセス（processes）」と呼ぶ。
【０００４】
記憶されたデータのインテグリティ（integrity）を確保するため、従来の記憶管理システムにおいて、プロセスと記憶手段との間のプロセス間通信を管理する共通の記憶マネージャ（common  store  manager）を使用することが知られている。かかる従来の記憶管理システムのブロック図を図１に示した。図示したように、このシステムは複数のプロセス１０（プロセス１、プロセス２、．．．プロセスＮと示す）を有し、これらのプロセス１０はそれぞれの通信リンク１４により記憶マネージャプロセス（store  manager  process）１６を介して記憶手段１２と通信している。記憶マネージャプロセス１６は、プロセス１０から通信リンク１４により、記憶手段１２へのデータの読み書きの要求を受け取り、並列要求を処理してデータインテグリティが保持される一連の順次要求（a  single  queue  of  serial  requests）にする。実際には、記憶マネージャプロセス１６は一時的記憶手段としてキャッシュ１８を使用し、データコミットサイクルの終わりにのみ記憶手段１２を更新する。これは処理速度を上げるのに有利である。キャッシュは記憶手段１２と比較して高速だからである。
【０００５】
図１に示した記憶管理システムの不利な点は、このタイプのシステムではプロセス間通信が一般的にはセキュアではなく、データが傍受されて改ざんされる可能性があるということである。
【０００６】
図１に示した記憶管理システムのもう１つの不利な点は、データ記憶を管理するために、記憶マネージャプロセスとして別の追加的プロセスが必要であり、それに付随してキャッシュも必要であることである。
【０００７】
かかる記憶マネージャプロセス（store  manager  process）はシステム全体の中央処理装置の資源とサイクルを消費し、相異なるプロセス１０から別の追加的プロセスに読み書き要求を送るチャネルが必要となり、システム全体の性能と動作速度が低下する。さらに、記憶マネージャプロセスとの通信には、通信プロトコルが必要であり、これでも実行オーバーヘッドがかかる。例えば、記憶手段１２を有する既存のコンピュータシステムにおいて、新しいプロセス１０が追加されたが、記憶マネージャプロセス１６が今はない場合、記憶マネージャプロセス１６を設けることは経済的ではなく、現実的ではない場合もある。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の１つの目的は、追加的な記憶マネージャプロセスが必要ない記憶管理システム及び方法を提供することである。
【０００９】
本発明の他の１つの目的は、複数のプロセスからの単一のデータ記憶手段に対する並列的なアクセス要求を管理できる記憶管理システムと方法を提供することである。
【００１０】
本発明の他の１つの目的は、複数のプロセスからのデータ記憶手段に対する並列的なアクセス要求を、データのインテグリティを保持しセキュアな記憶を提供するように、管理できる記憶管理システムと方法を提供することである。
【００１１】
少なくとも好ましい形式における本発明の他の１つの目的は、フォールトトレラント（fault  tolerant）な記憶管理システムと方法とを提供することである。
【００１２】
少なくとも好ましい形式における本発明の他の１つの目的は、共有された記憶手段の記憶を管理する手段が基本プロセス内に含まれる、記憶管理システムと方法とを提供することである。
【課題を解決するための手段】
【００１３】
本発明により、記憶管理システムが提供される。該システムは、データ処理手段と、前記データ処理手段が生成したデータを一時的に記憶するキャッシュと、前記キャッシュと記憶手段との間のデータ転送を管理する制御部とを有し、前記制御部が、データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視し、データを利用可能な記憶ロケーションに割り当てるマネージャと、割り当てられたデータを前記利用可能な記憶ロケーションに転送するインターフェイスと、排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックするロック手段とを有する。
【００１４】
本発明により共有ネットワークが提供される。該ネットワークは：複数のプロセスと、共通記憶手段と、各プロセスのための記憶管理システムとを有し、かかる記憶管理システムは、データ処理手段と、前記データ処理手段が生成したデータを一時的に記憶するキャッシュと、前記キャッシュと記憶手段との間のデータ転送を管理する制御部とを有し、前記制御部が、データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視し、データを利用可能な記憶ロケーションに割り当てるマネージャと、割り当てられたデータを前記利用可能な記憶ロケーションに転送するインターフェイスと、排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックするロック手段とを有する。
【００１５】
また、本発明により記憶管理方法が提供される。該方法は、データ処理手段によりデータを生成する段階と、前記データ処理手段が生成したデータをキャッシュに一時的に記憶する段階と、前記キャッシュと共通記憶手段との間のデータ転送を管理する段階とを有し、前記管理する段階は、データを受け取り記憶する前記記憶手段の記憶ロケーションの利用可能性を監視する段階と、データを利用可能記憶ロケーションに割り当てる段階と、前記割り当てられたデータを前記利用可能な記憶ロケーションに転送する段階と、排他的アクセスを確保しデータのインテグリティを保持するためにデータ転送の時に前記記憶手段をロックする段階とを有する。
【発明を実施するための最良の形態】
【００１６】
ほんの一例として添付した図面を参照して本発明を説明する。
【００１７】
ここで、図面に示した実施形態を参照して本発明を説明する。言うまでもなく、説明する実施形態は単なる例示であって、様々な修正が可能であり、その修正の一部は以下の説明でも言及する。
【００１８】
ここで、最初に図２を参照して、本発明の好ましい実施形態を説明する。この好ましい実施形態によると、記憶管理システムは（プロセス１、プロセス２、．．．プロセスＮと呼ばれる）複数のプロセス２０を有する。プロセス２０は、ライン２４で示した、オペレーティングシステムにより提供される記憶手段へのアクセスにより、データ記憶手段２２とそれぞれ通信している。共有されたアクセスを管理するため、各プロセス２０はそれぞれ複数アドレス可能フォールトトレラントセキュア記憶（multiple  addressable  fault  tolerant  secure  storage、ＭＡＦＴＳＳ）制御部２６を含み、記憶手段２２へのアクセスと使用を管理するために付随したキャッシュ２８と協働するように構成されている。
【００１９】
具体的には、ブロック記憶を使用して、データを管理し、記憶手段２２に記憶する。制御部２６はデータの暗号化と確認を提供し、記憶手段２２内のデータ記憶ブロックの管理を提供し、記憶手段２２が複数のユーザープロセス間で共有できるようにする。
【００２０】
図２は、複数のプロセス２０と、それに付随するキャッシュ２８と単一の記憶手段２２とを示している。言うまでもなく、システム全体が単一のオペレーティングシステムの一部であってもよく、記憶手段２２以外のシステムが単一のオペレーティングシステムの一部であり、外部に記憶手段２２を有していてもよく、各プロセス２０とそれに付随するキャッシュ２８がそれぞれのオペレーティングシステムの一部であり、それぞれ外部に単一の記憶手段２２を有していてもよい。最後の例では、各プロセス２０とそれに付随するキャッシュ２８は単一のコンピュータを有し、前記の複数のプロセスは別々のマシンにある。さらに、記憶手段２２はいかなるタイプの記憶手段でもよく、フラッシュメモリによる記憶手段や機械的な記憶手段が含まれる。しかし、各場合に、システムは、以下に説明するように、記憶手段２２を排他的にロックする手段（provision）を含んでいなければならない。
【００２１】
本実施形態では、プロセス２０とＭＡＦＴＳＳ制御部２６はすべてソフトウェアプログラムであり、制御部２６はソフトウェアアルゴリズムの形である。しかし、プロセス２０及び／または制御部２６がハードウェア製品の形であることも可能であり、例えば、それぞれのプロセス２０がハードウェア装置であり、その中に制御部２６を形成するハードウェアコンポーネントが組み込まれていてもよい。
【００２２】
図３を参照して制御部２６を説明し、その後、図４から１５を参照してこの制御部２６を用いたデータ記憶の管理を説明する。制御部２６の基本的構成及び動作はすべて同じであるから、１つだけを説明する。
【００２３】
図３を参照して、制御部２６は相異なる機能を有するいくつかの処理ルーチンとサブルーチンを含んでいる。具体的には、制御部２６は、記憶手段２２中のアドレスの割り当てとそれへのアクセスとを管理するアドレステーブルマネージャ（address  table  manager）３０を有する。アドレステーブルマネージャ３０はブロックマネージャ３２と協働して、記憶手段２２中の記憶ブロックを指定して使用する。
【００２４】
この目的のために、ブロックマネージャ（block  manager）３２はブロックマップ３２２を含む。ブロックマップ３２２は記憶手段２２に現在あるすべての記憶ブロックを表して（represent）いる。記憶手段はベースアドレスと相対アドレスを用いたデータ記憶に基づいて動作し、それゆえ、ブロックマップ３２２は実質的にはオフセットとブロックサイズのマップである。ブロックマネージャ３２はフリーブロックマップ３２４とフリーロックドブロックマップ（free  locked  block  map）３２６も有する。フリーブロックマップ３２４は、記憶手段２２中のまだ割り当てられていないすべてのブロックを表している。フリーロックドブロックマップ３２６は、以前割り当てられていて現在は必要ないが、以下に説明する理由により一時的に使用できなくなっているブロックを表す。アドレステーブルマネージャ３０は、割り当てられたすべてのブロックを表すアドレスマップ３０２を有する。言い換えると、アドレスマップ３０２は割り当てられたブロックのアドレスのリストを含んでいる。アドレステーブルマネージャ３０はフリーアドレスリスト３０４をさらに有する。このリストは、以前割り当てられていたが今は必要ないので自由に再使用できるブロックのアドレスを表す。アドレステーブルマネージャは、次に割り当てるフリーアドレスの数とロケーションと次のフリーアドレスのアドレスバージョンとを指定する、ネクストアドレスカウンタ３０６と、アドレスアクセサトレイト（address  accessor  trait）３０８と、アドレスタイプトレイト（address  type  trait）３１０とも含む。
【００２５】
制御部２６に含まれる別の機能は、データ暗号化のためのブロックエンコーダトレイト３４と、データの確認（verification）（特にデータの破損の検出）のためのブロックベリファイヤトレイト３６と、記憶手段２２を表し簡単なアプリケーションプログラムインターフェース（ＡＰＩ）により記憶手段２２へのアクセスを可能にするブロックストアトレイト３８とである。ブロックベリファイヤトレイト３６を参照して、検出可能なデータ破損のタイプは使用する確認アルゴリズムの性質に応じて決まる。
【００２６】
どの点においても、制御部２６は、必ずプロセス２０の記憶システムに２組のプロセスデータ、すなわちカレント（current）プロセスデータとその前にカレントであったプロセスデータがあるようにする。また、制御部２６は記憶手段２２に、制御部２６が使用するデータを表し、以下のデータを含む一組の管理データを記憶する：
オフセットとサイズのマップ（ブロックマップ３２２のデータ）、
フリーオフセットのリスト（フリーブロックマップ３２４のデータ）、
ロックドフリーオフセット（locked  free  offset）のリスト（フリーロックドブロックマップ３２６のデータ）、
アドレスのマップ（アドレスマップ３０２のデータ）、
フリーアドレスのリスト（フリーアドレスリスト３０４のデータ）、
０から始まる数字で表された最大割り当てアドレス（ネクストアドレスカウンタ３０６のデータと、アドレスアクセサトレイト３０８及びアドレスタイプトレイト３１０のデータ）。
【００２７】
図４は記憶手段２２にデータがいかに記憶されるかを示している。記憶手段２２は、各データのベースアドレスと、オフセット及びサイズにより配置された一連の割り当てデータブロック４２と、オフセット及びサイズにより指定される一連のフリーブロック４４とを含む。ヘッダ、割り当てブロック（allocated  blocks）４２、及びフリーブロック４４は記憶手段２２のファイルを含み、それに続くフリー記憶スペースは、他のプロセス２０が記憶手段２２にアクセスできれば使用できる。
【００２８】
記憶手段２２へのデータの書き込み、データの読み出し、及びアドレスの解放（freeing）のルーチンを含む制御部２６の基本的な使用を、それぞれ図５（ａ）、（ｂ）、（ｃ）に例示した。これらの各ルーチンにおいて、システムのプロセスコードは制御部２６のコードを使用して、例示した一連のイベントを開始し、制御する。言うまでもなく、これらのイベントは必ずしも次々と続けて生じるわけではなく、長い時間間隔をあけて生じることもある。
【００２９】
図５（ａ）に示したプロセスでは、プロセスコードは、制御部２６のコードの制御下で、最初にデータを付随するキャッシュ２８に書き込み、次にそのデータをキャッシュ２８から記憶手段２２に転送する。図５（ｂ）に示したプロセスでは、プロセスコードは、制御部２６のコードの制御下で、最初にデータを記憶手段２２から読み出し、次にそのデータを付随するキャッシュ２２に転送する。図５（ｃ）に示したプロセスでは、プロセスコードは、事前に記憶手段２２に割り当てられていたアドレスを解放する。この解放は、このアドレスのデータがもう必要なくなったことを確かめ、そのアドレスをフリーアドレスリスト３０４に追加することにより行う。
【００３０】
ここで具体的に図５（ａ）を参照する。記憶手段２２にデータを書き込むプロセスは、書き込み命令をプロセス２０の一部から受け取ると、ステップ５００で始まる。プロセスコードはステップ５０２に進み、図６に示したサブルーチン（以下に説明する）により記憶手段２２をロックする。記憶手段２２をロック（lock）することにより、書き込みルーチンの間、プロセス２０が記憶手段２２に排他的にアクセスし、データが破損する可能性がある時には、他のプロセス２０はアクセスできない。このようにしてデータインテグリティ（integrity）を確保する。プロセスコードは、記憶手段２２をロックすると、ステップ５０４に進み、フリーアドレスリスト３０４から記憶手段２２のアドレスを割り当て（allocate）、ステップ５０６において、そのアドレスに入れるデータを書き込む。実際には、この段階で、割り当て済みのアドレスに関する情報と、そのアドレスに書き込むデータをキャッシュ２８に記憶する。アドレス割り当てのサブルーチンとデータ書き込みのサブルーチンを図８と図９に例示して以下に説明する。次に、プロセスコードはステップ５０８に進み、データをキャッシュ２８から記憶手段２２中の割り当てられたアドレスに転送し、それに続いてプロセスコードは記憶手段２２をアンロック（unlock）する。このアンロックは図１０に示し以下に説明するサブルーチンにより行われる。データ書き込みルーチンはステップ５１０に進み、完了する。
【００３１】
図５（ｂ）を参照する。読み出しルーチンは、ステップ５１２において、プロセス２０から読み出し命令を受け取ると始まる。プロセスコードはステップ５１４に進み、図１３に示し以下に説明するサブルーチンにより記憶手段２２中の所定アドレスからデータを読み出す。読み出されるデータは記憶手段２２からキャッシュ２８に転送され、プロセスコードは読み出しルーチンの完了を示すステップ５１６に進む。このルーチンでは記憶手段２２のロック（locking）が必要であるが、このロックは図５（ａ）に示したものとは異なる種類のロックであり、図１５を参照して以下に説明する。
【００３２】
次に、図５（ｃ）を参照して、アドレス割り当てプロセスを説明する。記憶手段２２に書き込まれたデータを、ユーザーが必要なくなったため削除するとき、プロセス２０は、ステップ５１８において、そのデータがもはや必要なく、記憶手段２２中の関連アドレスを解放して再利用できることを示す。プロセスコードは次にステップ５２０に進み、このステップにおいて記憶手段２２が図５（ａ）のステップ５０２で使用し、図６に例示して以下に説明するのと同じルーチンによりロックされる。プロセスコードは、記憶手段２２中の関連アドレスを解放し、図１７を参照して以下に説明するように、キャッシュ２８により制御部２６中のフリーアドレスリスト３０４にそのアドレスを追加する。最後に、プロセスコードはステップ５２４において、図５（ａ）のステップ５０８と同じ、図１０に示しサブルーチンを用いて、記憶手段２２を再びアンロックする。プロセスコードはここでステップ５２６に進み、アドレス解放ルーチンが完了したことを示す。
【００３３】
図６から図１７までを参照して、図５（ａ）乃至（ｃ）に示したサブルーチンを詳細に説明する。記憶手段２２のアドレスを割り当て（allocate）、そのアドレスをキャッシュ２８のデータに割り振る（assign）ステップを、最初に図８と図９を参照して説明し、次に、記憶手段のアドレスを読み出すステップを、図１４と図１５を参照して説明する。次に、記憶手段２２のアドレスを解放するサブルーチンを図１７を参照して説明し、最後に、本発明による、記憶手段２２をロック及びアンロックして記憶手段２２との間でデータを転送するメインサブルーチンを、図６、図７及び図１０乃至図１４を参照して説明する。
【００３４】
図５（ａ）のステップ５０４のアドレスを割り当てるプロセスは、図８に示したが、プロセス部２０がデータを書き込むために記憶手段２２のアドレスを割り当てる命令を発行するステップ８００で始まる。ステップ８０２において、制御部２６は、フリーアドレスリスト３０４を調べて（enquire）、既存のアドレスがフリー（free）であるか調べる。答えがＮＯであるとき、制御部２６はネクストアドレスカウンタ３０６のカウント値を１だけ増加させる。ステップ８０２の結果がＹＥＳであり、既存のフリーアドレスが見つかったとき、制御部２６はステップ８０６に進み、このアドレスをフリーアドレスリスト３０４から取り除く。次に、制御部２６はステップ８０８に進み、アドレスマップ３０２にその新しいアドレスを追加して、同時に、そのアドレスの改訂番号（revision  number）をアドレスタイプトレイトに追加する。制御部２６は、次にステップ８１０に進み、データを書き込む記憶手段２２のアドレスを返す。
【００３５】
図９に示したステップ５０６におけるデータの書き込みは、ステップ９００において、書き込みアドレス命令（write  address  instruction）を処理部２０が発行する。制御部２６はステップ９０２に進み、ステップ８１０で返されたアドレスが有効なアドレスであるか、すなわち、そのアドレスがアドレスマップ３０２にあり、そのアドレスの改訂番号（revision  number）がアドレスタイプトレイトの改訂番号と一致するか問い合わせる。答えがＮＯであるとき、制御部２６はステップ９０４において、失敗した書き込み結果を記録する。一方、ステップ９０２においてアドレスが有効であるととき、ステップ９０６において、制御部２６は、そのアドレスと書き込むデータとをキャッシュ２８の書き込み部分に追加する。制御部２６は、次に、ステップ９０８において、成功した書き込み結果を記録する。
【００３６】
図５（ｂ）に示したステップ５１４を参照して言及したように、記憶手段２２からデータを読み出してそのデータをキャッシュ２８に転送するステップを、図１５に例示した。このステップは、最初に、ステップ１５００において処理部２０が、記憶手段２２の選択されたアドレスを含む読み出しアドレス命令を発行する。制御部２６は、ステップ１５０２において記憶手段２２をロックし、ステップ１５０４において与えられたアドレスが有効か、すなわちそのアドレスが記憶手段２２中の読み出し可能データを含むアドレスであるかどうか問い合わせる。ステップ１５０４の問い合わせに対する答えがＮＯである時、制御部２６はステップ１５０６に進み、記憶手段２２をアンロックし、ステップ１５０８において、失敗したアドレス読み出し試行（failed  read  address  attempt）を記録する。一方、ステップ１５０４の問い合わせの結果がＹＥＳである時、制御部２６はステップ１５１０に進み、このアドレスの内容がキャッシュ２８にあるか問い合わせる。答えがＹＥＳであるとき、制御部２６はステップ１５１２に進み、記憶手段２２をアンロックし、ステップ１５２０でキャッシュ２８からのそのデータを返す。一方、ステップ１５１０における問い合わせに対する答えがＮＯであるとき、制御部はステップ１５１４に進み、そのアドレスに対する記憶手段２２のオフセット値を取得する。制御部２６は、ステップ１５１６において、図１６に示したサブルーチンを用いて、そのデータのアドレスからそれぞれの記憶オフセット（store  offset）にアクセスして、データを読み出し、ステップ１５１８においてそのデータをキャッシュ２８に転送する。制御部２６はステップ１５１２に戻り、記憶手段２２をアンロックし、ステップ１５２０でキャッシュ２８からのデータを返す。
【００３７】
ステップ１５１６において記憶手段からデータを読み出すサブルーチンは、図１６に示したように、最初にステップ１６００において記憶手段２２からデータを読み出す。ステップ１６０２において、制御部２６は、記憶手段２２の与えられたオフセットにあるデータを読み出す。このデータは暗号化されている。次にステップ１６０４において、ブロックエンコーダトレイト３４から得られた鍵により、その暗号化されたデータをデコード（decodes）する。ステップ１６０６において、制御部２６はデコードされたデータが有効であるか、すなわち破損していないか、ブロックベリファイヤトレイト３６を用いて問い合わせる。答えがＮＯであるとき、制御部２６はステップ１６０８において、データ読み出しルーチンが失敗したことを記録する。しかし、ステップ１６０６の問い合わせに対する結果がＹＥＳであるとき、制御部２６はステップ１５１８に戻り、記憶手段２２からのデコードされたデータをキャッシュ２８に転送する。
【００３８】
図５（ｃ）のステップ５２２に示した、データを削除して記憶手段２２のアドレスを解放するサブルーチンを図１７に示し、ここで説明する。制御部２６は、ステップ１７００において処理部２０からアドレス解放命令を受け取ると、ステップ１７０２において、そのアドレスのロケーションが有効であるか、すなわちその与えられたアドレスに読み出し可能データがあるかチェックする。答えがＮＯであるとき、そのアドレスには有用な情報が何も含まれておらず、上書きしてもかまわないことを示すから、制御部２６はステップ１７０４において、アドレスマップ３０２からこのオフセットのアドレスを削除する。しかし、ステップ１７０２における問い合わせの結果がＹＥＳであるとき、そのアドレスは再使用できるが、以下に説明する理由で前のデータがまだ必要であり、まだ上書きできない情報を含んでいることを示すから、制御部２６はステップ１７０８に進み、そのアドレスをフリーロックドブロックマップ３２６に追加する。制御部２６は前と同じようにステップ１７０４に進む。次に、制御部２６は、ステップ１７０８において、そのアドレスの改訂番号をインクリメント（increment）し、そのアドレスのデータの最新の（current）改訂番号（revision  number）を表すようにする。次に、ステップ１７１０において、制御部２６は、アドレステーブルマネージャ３０のフリーアドレスリスト３０４にそのアドレスを追加する。制御部２６は、次に、ステップ１７１２に進み、キャッシュ２８の読み書き部分からデータを削除し、ステップ１７１４においてそのアドレスが解放されたことを示す。
【００３９】
本発明によると、データがキャッシュ２８から記憶手段２２に転送されている間、及び記憶手段２２においてデータが変更されている間は、記憶手段２２はロックされている。この目的のために記憶手段をロックするサブルーチンを図５にステップ５０２とステップ５２０として示したが、その後に記憶手段２２をアンロック（unlocking）するサブルーチンは図５にステップ５０８とステップ５２４として示した。ここでこれらのサブルーチンを説明する。最初にロックするサブルーチンを説明する。このサブルーチンは図６と図７に示した。
【００４０】
図６は、図５のステップ５０２とステップ５２０、及び図１５のステップ１５０２のロックサブルーチンのステップを示すフローチャートである。最初に、処理部２０がステップ６００においてロック命令を発行する。ステップ６０２において、制御部２６は一意的な識別子を有するミューテックス（mutex）を生成し、これを使って記憶手段２２のグローバルロックを行う。次に、制御部２６はステップ６０４に進み、キャッシュ２８のデータが有効であるかチェックする。言い換えると、制御部２６は、記憶手段２２にあるプロセスと管理データの最新の（up-to-date）表示を含むかチェックする。答えがＹＥＳである時、制御部２６はステップ６０６に進み、ロックサブルーチンは完了する。一方、ステップ６０４の問い合わせに対する答えがＮＯであるとき、制御部２６はステップ６０８に進み、記憶手段２２からキャッシュ２８にデータ（relevant  data）をロードし、制御部２６が、残りのロックサイクルの間にキャッシュ２８中のデータで作業できるようにする。その後、制御部２６はステップ６０８からステップ６０６に進み、ロックサブルーチンは完了する。
【００４１】
管理データセットをロードするサブルーチン６０８を図７に示し、次に説明する。図６のステップ６０４において、キャッシュ２８中の管理データが最新のもの（up-to-date）でない時、制御部２６はステップ７００において最新の管理データをロードする命令を発行する。制御部２６はステップ７０２に進み、記憶手段２２中のヘッダ４０を読み出し、ステップ７０４において記憶手段２２の割り当てブロック（allocated  block）４２中の現在のデータセットを読み出し、復号する。ステップ７０４に続き、制御部２６は、ステップ７０６において、例えば、管理データのヘッダをチェックしてファイルが無効であり破損したデータを含むかどうか調べるか、復号が失敗したことを知ることにより、読み出しが失敗したか調べる。読み出しが失敗せずに完了した場合、制御部２６はステップ７０８に進み、次のデータ管理ルーチンで必要となるデータを記憶手段２２からキャッシュ２８にロードする。かかるデータはキャッシュヘッダにロードされるが、次のデータ管理ルーチンで不要な（superfluous）データは、記憶手段２２で保持される。何らかの理由で記憶手段２２の現在のデータセットのデータ読み出しが失敗したとステップ７０６で判断された場合、制御部２６はステップ７１０に進み、記憶手段２２に保持された前のデータセットの読み出しを始める。前のデータセットを読み出し終わると、制御部２６は再びステップ７１２において読み出しが失敗したか調べる。答えがＮＯである場合、制御部２６はステップ７０８に戻り、実際に必要なデータを、記憶手段２２に記憶された前のデータからキャッシュ２８にロードする。一方、制御部２６は、ステップ７１２において前のデータセットの読み出しが失敗したと判断した場合、ステップ７１４に進み、記憶手段２２の全体を削除し、それに続けてステップ７１６において記憶手段２２の新しいヘッダ４０を書き込む。最後に、制御部２６は必要に応じてステップ７０８またはステップ７１６からステップ７１８に進む。これは、記憶手段２２のデータセットがデータがある限りキャッシュ２８にロードされたことを示す。
【００４２】
図５（ａ）ステップ５０２と図５（ｃ）のステップ５２０に示したロックサブルーチンを説明した。図１０から図１４までを参照して、図５（ａ）のステップ５０８及び図５（ｃ）のステップ５２４のアンロック（unlocking）サブルーチンをここで説明する。
【００４３】
基本的なアンロックサブルーチンを図１０に示した。このサブルーチンはステップ１０００で始まる。必要なデータ管理ルーチンがキャッシュ２８を用いて完了し、記憶手段２２がロックされた状態にある時、処理部２０はステップ１０００においてアンロック命令を発行する。この時点において、キャッシュ２８に保持されている最後のデータ管理ルーチンからの情報はすべて、アンロックされる前に記憶手段２２に転送される必要がある。それゆえ、制御部２６はステップ１００２に進み、何らかのデータがキャッシュ２８に書き込まれたかチェックする。特に、制御部２６は、書き込みキャッシュ（書き込みに割り当てられたキャッシュの一部分）が空かどうか、何らかのプロセスデータがその書き込みキャッシュに書き込まれていないかどうか調べる。
【００４４】
書き込みキャッシュ２８が空かどうかに関する問い合わせに対する応答がＮＯである場合、制御部はステップ１００４に進み、書き込みキャッシュ２８に含まれるプロセスデータに記憶手段２２のブロックを割り当てる（allocate）。次に、ステップ１００６において、制御部２６はかかるプロセスデータを記憶手段２２に書き込み始める。ステップ１００８において、制御部２６は、このプロセスデータのための有効な既存のロケーション（location）が記憶手段２２中にすでにあるか問い合わせる。答えがＹＥＳである場合、次にステップ１０１０において、制御部２６は、この前のデータセットを一時的に保存するために、このロケーションをフリーロックドブロックマップ３２６に追加し、次にステップ１０１２に進む。ステップ１００８の問い合わせに対する答えがＮＯである場合、制御部２６はステップ１０１２に直接進む。ステップ１０１２において、制御部２６はブロックマップ３２２を更新し、現在のプロセスデータのための記憶手段２２中の新しいロケーションを示す。制御部２６は次にステップ１０１４に進み、記憶手段２２に書き込むプロセスアイテムまだあるか問い合わせ、答えがＹＥＳであれば、ステップ１００４に戻り、かかる別のプロセスデータに記憶手段２２の新しいブロックを割り当てる。答えがＮＯであるとき、制御部２６はステップ１０１６に進む。
【００４５】
ステップ１００２に戻り、制御部２６は書き込みキャッシュが空であることが分かると、直接ステップ１０１６に進み、キャッシュ２８中の管理データのサイズを推定し、ステップ１０１８において、その管理データに記憶手段２２の好適なブロック（block  or  blocks）４４を割り当てる。ステップ１０２０において、制御部２６は記憶手段２２の終わりにあるフリーブロックをチェックする。無ければ、制御部は直接ステップ１０２２に進む。一方、フリーブロックがあれば、制御部２６はそのフリーブロックを破棄し、記憶手段２２のサイズを小さくする。制御部２６は、次に再びステップ１０２２に進み、このサイクルでフリー（free）になったが、前のデータを含んでいるので上書きできなかったオフセットのフリーロックドブロックマップ３２６が空であるか調べる。ステップ１０２２の問い合わせに対する答えがＹＥＳであるとき、制御部２６はステップ１０２６に進み、ステップ１０１６でサイズを推定した現在の管理データセットを表す新しいデータセットを記憶手段２２に書き込む。一方、ステップ１０２２の結果、そのフリーロックドブロックマップ３２６が空でなければ、制御部２６はステップ１０２８に進み、記憶手段２２の今利用できるブロックの最初のものを解放する。これは、ブロックはこのサイクルでは上書きできず、次のサイクルにおいて、前のデータセットのデータを含み、その後に上書きできることを意味する。制御部２６は、次にステップ１０３０に進み、フリーロックドブロックマップ３２６がまだ空かどうか、または解放するブロックがまだ残っているか問い合わせる。答えがＹＥＳである時、制御部２６はステップ１０２８に戻り、他のブロックを解放する。答えがＮＯであるとき、制御部２６はステップ１０２６に進み、ここで管理データセットを記憶手段２２に書き込む。これを行ってから、制御部２６はステップ１０３２で記憶手段２２をアンロックし、ステップ１０３４でアンロックプロセスが完了したことの表示（indication）を発する。
【００４６】
プロセスデータを記憶手段２２に書き込むステップ１００６と、制御部２６がブロックを管理データに割り当てるステップ１０１８と、利用可能ブロックを解放するステップ１０２８と、管理データを記憶手段２２に書き込むステップ１０２６とにそれぞれ含まれるサブルーチンを図１１と図１４に示し、ここで説明する。
【００４７】
図１１はプロセスデータを記憶手段２２に書き込むサブルーチンを示す。ステップ１００６において記憶手段２２に書き込むべきプロセスデータがキャッシュ２８にあれば、制御ユニット２６はステップ１１００において書き込み記憶（write  to  store）命令を発行し、ステップ１１０２において、チェックサム値を発生して、後でデータの有効性を監視するためにデータに付加する。このチェックサム値は、ブロックマネージャ３２がブロックベリファイヤトレイト３６を参照して発生する。次に、制御部２６はステップ１１０４に進み、ブロックエンコーダトレイト３４に含まれる暗号化アルゴリズムを用いてキャッシュ２８中のデータを暗号化する。ステップ１１０６において、制御部２６は、暗号化データのサイズを計算して、サイズ値とチェックサム値を暗号化データのヘッダに付加する。次に、ステップ１１０８において、制御部２６はキャッシュ２８からのデータを記憶手段２２に転送し、そこに記憶する。データ書き込み成功表示（data  writing  success  indication）をステップ１１１０で発行する。
【００４８】
図１２は、ブロックを管理データに割り当てるステップ１０１８のサブルーチンと、ブロックをプロセスデータに割り当てるステップ１００４のサブルーチンとを示す。最初にステップ１２００において、制御部２６がブロックを割り当てる命令を発行する。制御部２６はステップ１２０２に進み、ブロックマップ３２２において書き込むデータと最もよくマッチ（match）するフリーブロックを探す。この場合、最もよいマッチとは、ブロックのサイズがデータのサイズと完全に一致するか、ブロックのサイズは必要なサイズより大きいが、フリーブロックマップ３２６中の他のフリーブロック以下であることを表す。制御部２６はステップ１２０４に進み、好適なフリーブロックが見つかったか問い合わせる。答えがＮＯであるとき、制御部２６はステップ１２０６に進み、割り当てるブロックに必要な量だけ記憶手段２２のサイズを大きくし、それに引き続き、制御部２６はステップ１２０８において新しく作ったブロックをブロックマップ３２２に追加する。制御部２６は次にステップ１２１０に進む。一方、ステップ１２０４における問い合わせに対する答えがＹＥＳであるとき、制御部２６はステップ１２１２に進み、フリーブロックのサイズは厳密に一致するか問い合わせる。答えがＹＥＳであるとき、制御部２６はステップ１２１４においてフリーブロックマップ３２４からのブロックを削除し、ステップ１２１０に進む。ステップ１２１２における問い合わせに対する答えがＮＯであるとき、制御部２６は、ステップ１２１６において、新しく見つけたブロックを２つの部分に分割し、一方（ブロックＸ）はサイズが関連データと厳密に一致するようにする。ステップ１２１８において、制御部２６は、もう一方のブロック（ブロックＹ）をフリーブロックマップ３２４に追加し、ステップ１２２０に進み、最初のブロックＸをフリーブロックマップ３２４から削除する。サブルーチンはステップ１２１０において、ブロックを割り当てたことの表示で完了する。
【００４９】
利用可能なブロックを解放するステップ１０２８のサブルーチンを図１３に示した。最初にステップ１３００において、制御部２６は関連ブロックＺを解放する命令を発行する。ステップ１３０２において、制御部２６はこのブロックＺをフリーブロックマップ３２４に追加し、ステップ１３０４において、制御部２６は記憶手段２２中のこのフリーブロックの直後のブロックを探して、このブロックをブロックＡとする。ステップ１３０６において、制御部２６は、ブロックＡがフリー（free）であるか問い合わせ、答えがＹＥＳであるとき、ステップ１３０８において、ブロックＡのサイズをフリーブロックＺのサイズに加えて、ブロックＡをフリーブロックＺとマージ（merge）する。制御部２６はステップ１３１０に進み、ブロックＡをフリーブロックマップ３２４とブロックマップ３２２から削除し、新しいフリーブロックはここでマージブロック（Ｚ′で示す）となる。制御部２６は次にステップ１３１２に進む。ステップ１３１０の問い合わせに対する答えがＮＯである場合、制御部２６はステップ１３１２に直接進む。ステップ１３１２において、制御部２６は記憶手段の元のフリーブロックＺの直前のブロックを探す。このブロックはマージブロックＺ′の直前のブロックでもあり、このブロックをＢと呼ぶ。制御部２６はステップ１３１４に進み、ブロックＢがフリーか問い合わせる。答えがＹＥＳであるとき、制御部２６はステップ１３１６に進み、フリーブロックＺ′のサイズをブロックＢのサイズに加えて、新しいマージブロックＢ′を作る。制御部２６はステップ１３１８に進み、フリーブロックマップ３２４とブロックマップ３２２からブロックＺ′を削除する。制御部２６は次にステップ１３２０に進む。ステップ１３１４の問い合わせに対する答えがＮＯであるとき、制御部２６は直接ステップ１３２０に進み、そのブロックを解放したことの表示を発行する。
【００５０】
ここで図１４を参照して、図１０のステップ１０２６のサブルーチンを説明する。このステップでは、マネージメントデータセットをキャッシュ２８から記憶手段２２に書き込み、制御部２６は最初に、ステップ１４００において書き込みデータセット命令を発する。制御部２６は、次にステップ１４０２に進み、記憶手段２２の最新（current）管理データセットであったものを、新たに前の管理データセットとする。制御部２６は、ステップ１４０４において、キャッシュ２８の最新（current）管理データセットを、新しい最新（current）管理データセットとして記憶手段２２に書き込む。これに続き、制御部２６は、ステップ１４０６において、新しい最新管理データセットの記憶手段２２中のオフセットの詳細事項を更新し、ステップ１４０８において、カウント値を１だけインクリメント（increment）し、最新管理データの現在のバージョンが１バージョン上がったことを示す。最後に、ステップ１４１０において、制御部２６は、記憶手段２２のヘッダ４０を更新し、ステップ１４１２において、管理データセット書き込み表示を発行する。
【００５１】
本発明は、記憶管理システムを提供する。このシステムは、いかなるタイプの記憶手段と使用してもよく、エラーを検出した場合に前の既知の状態へのフォールバック（fallback）を有するバージョンベースアドレスを使用し、さらに、記憶手段のサイズを減らすために、もはや必要ない記憶ロケーションを再要求するガーベージコレクションポリシーを使用する。このように、いつでも記憶手段はデータセットの２つのバージョン、管理データまたはプロセスデータを含み（ただし、実際には２つのプロセスデータセットが同じデータである場合、システムは一方のみを保持する）、チェックサム値がエラーが発生したことを示す場合、エラー検出手段により前のデータセットに戻ることができる。
【００５２】
本発明は、既に説明したように、相異なる複数のプロセス２０のそれぞれから単一の記憶手段２２のデータにアクセスし、管理する効率的かつセキュアなプロセスを提供する。本発明の有利性は、各プロセス２０が記憶手段２２への自分のアクセスを管理し、同時に、記憶手段２２への他のプロセス２０のアクセスに干渉せず、それでも追加的な記憶手段マネージャプロセスを必要としないことである。個々のプロセス２０は自分自身のデータ管理とデータのインテグリティを監視し、このための制御を販売されているパッケージに含めることができる。結果として、記憶マネージャプロセスがすでにあってもなくても、プロセス２０をネットワークで実施することができ、まだなくても、記憶マネージャプロセス（store  manager  process）を別途購入する必要はない。
【図面の簡単な説明】
【００５３】
【図１】従来の記憶管理システムのブロック図である。
【図２】本発明による記憶管理システムのブロック図である。
【図３】図２に示した、本発明を化体する記憶管理システムのブロック図である。
【図４】図３に示した記憶手段の内容を示す図である。
【図５】（ａ）、（ｂ）、（ｃ）は、図３の記憶管理部の基本ルーチンを表すフローチャートである。
【図６】図５（ａ）に示したルーチンのサブルーチンを示すフローチャートである。
【図７】図６に示したサブルーチン中のサブルーチンを示すフローチャートである。
【図８】図５（ａ）に示したルーチン中のサブルーチンを示すフローチャートである。
【図９】図５（ａ）に示したルーチン中の他のサブルーチンを示すフローチャートである。
【図１０】図５（ａ）に示したルーチン中の他のサブルーチンを示すフローチャートである。
【図１１】図１０に示したサブルーチン中のサブルーチンを示すフローチャートである。
【図１２】図１０に示したサブルーチン中の他のサブルーチンを示すフローチャートである。
【図１３】図１０に示したサブルーチン中の他のサブルーチンを示すフローチャートである。
【図１４】図１０に示したサブルーチン中の他のサブルーチンを示すフローチャートである。
【図１５】図５（ｂ）に示したルーチン中のサブルーチンを示すフローチャートである。
【図１６】図１３に示したサブルーチン中のサブルーチンを示すフローチャートである。
【図１７】図５（ｃ）に示したルーチン中のサブルーチンを示すフローチャートである。
【図１】
2008547089.tif 000003
【図２】
2008547089.tif 000004
【図３】
2008547089.tif 000005
【図４】
2008547089.tif 000006
【図５】
2008547089.tif 000007
【図６】
2008547089.tif 000008
【図７】
2008547089.tif 000009
【図８】
2008547089.tif 000010
【図９】
2008547089.tif 000011
【図１０】
2008547089.tif 000012
【図１１】
2008547089.tif 000013
【図１２】
2008547089.tif 000014
【図１３】
2008547089.tif 000015
【図１４】
2008547089.tif 000016
【図１５】
2008547089.tif 000017
【図１６】
2008547089.tif 000018
【図１７】
2008547089.tif 000019
【国際調査報告】
2008547089.tif 000020