(57)【要約】【課題】  ガーベジコレクション機能を持った記憶管理システムにおいて、指示したデータを容易に、かつ、確実に破棄することができるようにする。【解決手段】  データＡ、Ｂと、このデータＡ、Ｂとのリンク構造が動的に変化するリンク元var1〜var5とを管理し、ガーベジコレクション機能を有する記憶管理システムを対象とする。リンク元var1〜var5により間接参照テーブルを参照する。この参照結果によりリンク元var1〜var5により参照されるべきデータＡ、Ｂを参照する。【選択図】  図３
2005234634.tif 000002
【特許請求の範囲】
【請求項１】
データと、このデータとのリンク構造が動的に変化するリンク元とを管理し、ガーベジコレクション機能を有する記憶管理システムにおいて、
上記リンク元により間接参照テーブルを参照し、
この参照結果により上記リンク元により参照されるべきデータを参照する
ようにしたデータ管理方法。
【請求項２】
請求項１に記載のデータ管理方法において、
上記間接参照テーブルの内容を変更して上記リンク元により参照されるべきデータを変更する
ようにしたデータ管理方法。
【請求項３】
請求項１あるいは請求項２に記載のデータ管理方法において、
上記データを管理する領域のうち、上記間接参照テーブルにより参照されていないデータの領域をガーベジコレクションにおける回収の対象とする
ようにしたデータ管理方法。
【請求項４】
データと、このデータとのリンク構造が動的に変化するリンク元とを管理し、ガーベジコレクション機能を有する記憶管理システムにおいて、
上記データのうちの必要なデータと、不必要なデータとを指定することにより、上記不必要なデータに対するすべての参照を、上記必要なデータに対する参照に変更する
ようにしたデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ管理方法に関する。
【背景技術】
【０００２】
データを管理する場合に、データとデータとをリンク付けすることによりデータ構造を表現することが行われている。また、リンクが動的に変化する管理も行われている。
【０００３】
さらに、どこからもリンクされていないデータを記憶している記憶領域を見つけ出し、その記憶領域を新たなデータの記憶領域として再利用する機能、すなわち、「ガーベジコレクション」と呼ばれる機能を持つシステムもあり、プログラマの記憶領域の管理の負担を軽減するために広く利用されている。例えば、Java(R)言語システムにはガーベジコレクションの機能がある。
【０００４】
このような記憶管理システムにおいては、他のデータからのリンクによる参照がまったくされなくなったデータは、その記憶領域がガーベジコレクションにより自動的に解放され、新たなデータのための記憶領域として再利用される。
【０００５】
なお、先行技術文献として例えば以下のものがある。
【特許文献１】特開平８−２８６９６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところが、上記のような記憶管理システムにおいて、データＡをデータＢに入れ換える場合、一般には、データＡを参照しているポインタ（ポインタ変数）が複数存在する可能性がある。このため、データＡを参照している複数のポインタをすべて把握しておき、そのすべてのポインタがデータＢを参照するようにポインタを更新するなどの処理が必要である。
【０００７】
例えば、図５Ａに示すように、データＡを３つのポインタ変数var1、var2、var3が参照し、データＢを２つのポインタ変数var4、var5が参照している場合に、データＡが不要となり、データＢだけを利用するようになったする。すると、図５Ｂに示すように、使用しているすべてのポインタ変数のリストを、１つ１つたどってデータＡを参照しているポインタ変数をすべて探し出し、そのポインタ変数をデータＢを参照するように更新する必要があり、そのためのルーチンが必要である。
【０００８】
しかし、プログラムの規模が大きくなった場合、あるいは元来はそのようにポインタ変数が管理されていないプログラムを流用する場合、上記のようなポインタ変数の管理は、一般に困難であり、現実的ではない。
【０００９】
また、Smalltalk(R)言語システムには、become:と呼ばれるプリミティブメソッドが提供されているが、このメソッドは２つのデータへの参照を交換する。そして、上記ようにデータを参照している変数は一般には複数ある。したがって、２つのデータのうちの一方のデータがまったく不要な場合でも、その２つのデータをそれぞれ参照している変数をすべて把握して再設定する必要があり、再設定をしないと、システムにそのデータへの参照が残ってしまい、ガーベジコレクションでそのデータの記憶領域が再利用されない可能性がある。
【００１０】
この発明は、以上のような問題点を解決しようとするものである。
【課題を解決するための手段】
【００１１】
この発明においては、
データと、このデータとのリンク構造が動的に変化するリンク元とを管理し、ガーベジコレクション機能を有する記憶管理システムにおいて、
上記リンク元により間接参照テーブルを参照し、
この参照結果により上記リンク元により参照されるべきデータを参照する
ようにしたデータ管理方法
とするものである。
【発明の効果】
【００１２】
この発明によれば、ガーベジコレクション機能を持った記憶管理システムにおいて、把握や管理が困難な複数の複雑な参照を持つデータが存在している場合でも、指示したデータを容易に、かつ、確実に破棄することができる。また、指示したデータのみを参照させて存続させることができ、データのユニーク性を持たせて管理することも容易に、かつ、確実に行うことができる。
【発明を実施するための最良の形態】
【００１３】
〔１〕  構成
図１は、この発明による記憶管理システムを適用できるコンピュータの一例を示す。そして、符号１１はＣＰＵを示し、このＣＰＵ１１には、システムバス１９を通じて半導体メモリなどの記憶装置１２が接続されるとともに、２次記憶装置１３が接続される。この場合、２次記憶装置１３は、ＣＤ±ＲＷ、ＤＶＤ±ＲＷ、ブルーレイなどの光ディスク、ハードディスクなどの磁気ディスク、ＭＯなどの光磁気ディスクのドライブなどである。
【００１４】
さらに、ＣＰＵ１１には、システムバス１９を通じて、キーボードやマウスなどの入力装置１４と、ディスプレイやプリンタなどの出力装置１５が接続される。また、システムバス１９は、イーサネット（登録商標）などのネットワーク１６にも接続される。
【００１５】
そして、記憶装置１２には、この発明による記憶管理システムで管理されるデータ、この発明による記憶管理システムのプログラムおよびガーベジコレクションのプログラムなどが置かれる。この場合、記憶管理システムのプログラムおよびガーベジコレクションのプログラムは、ＣＰＵ１１により実行されるものであるが、その記憶管理システムのプログラムの一部の一例を図２に示す。
【００１６】
さらに、記憶装置１２には、例えば図３Ａに示すように、記憶装置データ領域およびポインタ変数が配置される。この場合、記憶装置データ領域には、この記憶管理システムが管理するデータが用意される。また、ポインタ変数は、データを参照しているポインタ変数である。
【００１７】
なお、このポインタ変数は、記憶装置データ領域に置かれているデータ内部に置かれたデータであってもよい。また、この例においては、本来は、図５Ａに示すように、ポインタ変数var1、var2、var3がデータＡを参照し、ポインタ変数var4、var5を参照するものとする。
【００１８】
さらに、記憶装置１２には、間接参照テーブルが配置される。この間接参照テーブルは、ポインタ変数が参照するべきデータを間接的に指示するものである。すなわち、今の場合、データＡを参照するポインタ変数var1、var2、var3は、間接参照テーブルのエントリアドレス[A]を参照するものとされ、エントリアドレス[A]には、記憶装置データ領域のデータＡのエントリアドレスがセットされる。同様に、データＢを参照するポインタ変数var4、var5は、間接参照テーブルのエントリアドレス[B]を参照するものとされ、エントリアドレス[B]には、記憶装置データ領域のデータＢのエントリアドレスがセットされる。
【００１９】
なお、図３において、矢印はデータの参照関係を示す。このとき、間接参照テーブルは、この記憶管理システムが記憶することができるデータの数だけエントリアドレスを保持できる必要がある。
【００２０】
〔２〕  処理ないし動作
上述のような構成において、データＡが不要なので、そのデータＡをデータＢに置き換える指示があったとする。図４は、その指示の形式の一例を示し、図３Ａにおいて、ポインタ変数var1の参照しているデータＡを、ポインタ変数var4が参照しているデータＢに置き換えることを指示した場合である。
【００２１】
ただし、今の場合、ポインタ変数var1が参照しているデータと、ポインタ変数var2、var3が参照しているデータとは、ともにデータＡで同じなので、ポインタ変数var1の代わりにポインタ変数var2またはポインタ変数var3を指示しても、あるいは同様の理由により、ポインタ変数var4の代わりにポインタ変数var5を指示しても、結果は同じになる。
【００２２】
そして、データＡをデータＢに置き換える指示、すなわち、図４の指示を受け付けると、図３Ｂに示すように、間接参照テーブルのエントリアドレス[A]をエントリアドレス[B]に変更し、データＡの参照先をデータＢに変更する。
【００２３】
したがって、この記憶管理システムに存在するデータＡを参照するポインタ変数var1、var2、var3の参照が、すべてデータＢを参照するように変更されたことになる。また、データＢは、それまでデータＡを参照していたすべてのポインタ変数から参照されるようになるので、データＢだけがユニークな存在となるように変化をさせたことになる。この結果、データＡはこの記憶管理システムのどこからの参照もなくなるので、ガーベジコレクションによってデータＡの記憶領域の回収を行うことができる。
【００２４】
こうして、上述の記憶管理システムによれば、データＡを参照するポインタ変数の参照をすべてデータＢを参照するように変更することができるが、ガーベジコレクション機能を持った記憶管理システムにおいて、把握や管理が困難な複数の複雑な参照を持つデータが存在している場合においても、指示したデータを容易に、かつ、確実に破棄することができる。
【００２５】
また、指示したデータのみを参照させて存続させることができるので、データのユニーク性を持たせて管理することも容易に、かつ、確実に行うことができる。特に、永続性を持った大規模なデータを管理しなければならないようなデータベースシステムに、この発明を適用すれば、すべてのデータをスクラッチから再構築するような最悪の手段に陥ることなく、データの有効性やユニーク性を保ちつつ、データを管理して維持し続けることができる。
【００２６】
〔３〕  データの分散処理
〔３−１〕  システム構成
データを管理するシステムの代表的なものとしてデータベースシステムがあるが、ここでは、データベースシステムにおいて、複数の情報処理装置によりデータの分散処理を行う場合の一例について、図６により説明する。
【００２７】
図６に示す例においては、３台の情報処理装置１００〜３００がネットワーク４００を通じて互いに接続され、これらの間で分散処理を行う場合である。情報処理装置１００は、１つのメインプロセッサ１０１と、１つあるいは複数のサブプロセッサ、この例においては、３つのサブプロセッサ１１１〜１１３と、ＤＭＡコントローラ１２１と、ディスクコントローラ１２２とを有し、単一の集積回路に構成されている。
【００２８】
また、メインプロセッサ１０１およびサブプロセッサ１１１〜１１３は、それぞれローカルストレージ１３１を有している。そして、メインプロセッサ１０１は、サブプロセッサ１１１〜１１３によるプログラムあるいはデータの処理のスケジュール管理と、全般的な管理とを行う。サブプロセッサ１１１〜１１３は、メインプロセッサ１０１の制御にしたがって並列に、かつ、独立にプログラムあるいはデータの処理を実行する。
【００２９】
なお、メインプロセッサ１０１内でプログラムが動作する場合もある。また、メインプロセッサ１０１のプログラムが、サブプロセッサ１１１のプログラムと連携して動作する場合もある。
【００３０】
さらに、情報処理装置１００〜３００は、ネットワーク全体を通して当該情報処理装置を一意的に識別できる識別子が情報処理装置ＩＤとして割り当てられている。メインプロセッサ１０１およびサブプロセッサ１１１〜１１３も、同様に識別可能な識別子がメインプロセッサＩＤおよびサブプロセッサＩＤとして割り当てられている。
【００３１】
ＤＭＡコントローラ１２１は、メインメモリ１４１に格納されているプログラムあるいはデータへのアクセスを行う。なお、メインメモリ１４１は、情報処理装置１００の外部に接続されているもので、例えばＤＲＡＭとされている。
【００３２】
また、ディスクコントローラ１２２は、情報処理装置１００と接続されている外部記憶装置１４２へのアクセスを行う。外部記憶装置１４２には、固定ディスク（ハードディスク）、リムーバブルディスク、ＭＯ、ＣＤ±ＲＷ、ＤＶＤ±ＲＷなどの光ディスク、メモリディスクなどが想定され、ＳＲＡＭ、ＲＯＭなども含まれる。
【００３３】
そして、メインプロセッサ１０１、サブプロセッサ１１１〜１１３、ＤＭＡコントローラ１２１、ディスクコントローラ１２２はバス１０２によって接続されている。さらに、他の情報処理装置２００、３００も情報処理装置１００と同様に構成されているものであり、詳細は省略する。
【００３４】
〔３−２〕  データの不整合の回避
上述のように、サブプロセッサ１１１〜１１３は、独立にプログラムあるいはデータの処理を実行するが、もしも異なるサブプロセッサが同一メインメモリ１４１の同一領域に対して、同時に読み出しあるいは書き込みを行った場合には、データの不整合を生じる可能性がある。したがって、メインメモリ１４１にアクセスする場合には、ある手順が必要となるが、その手順について、図７により説明する。
【００３５】
図７Ａにおいて、メインメモリ１４１は、複数のアドレス指定可能な「メモリロケーション」から構成される。各メモリロケーションに対して、データの状態情報を格納するための「追加セグメント」が割り振られる。追加セグメントは、「Ｆ／Ｅビット」、「サブプロセッサＩＤ」、「ローカルストレージアドレス」（ＬＳアドレス）を含む。各メモリロケーションには「アクセスキー」も割り振られるが、これについては後述する。
【００３６】
そして、Ｆ／Ｅビットは、以下のように定義される。  
・Ｆ／Ｅビット＝“０”のとき
サブプロセッサ（１１１〜１１３）により読み出され、処理中あるいは空き状態であるため、最新データではない無効データである。読み出し不可だが、予約は可能であり、“１”になったときにあらかじめ読み出し予約情報として追加セグメントに書き込まれたサブプロセッサＩＤ、ローカルストレージアドレスへ読み出される。  
すなわち、複数のサブプロセッサによりデータを多段階に処理する必要がある場合、上記のように構成することにより、前段階の処理を行うサブプロセッサが、処理済みのデータをメインメモリ１４１の所定のアドレスへ書き込んだ直後に、ただちにそのデータが後段階の処理を行うサブプロセッサへ読み出されることになり、非常に好適である。また、書き込み可能であり、書き込み後、“１”になる。
【００３７】
・Ｆ／Ｅビット＝“１”のとき
サブプロセッサ（１１１〜１１３のどれか）により読み出されておらず、したがって、処理中ではない最新データである。読み出し可能であり、読み出し後、“０”になる。書き込み不可である。  
Ｆ／Ｅビットは、以上のように定義される。
【００３８】
図７Ｂに示すサブプロセッサ１１１のローカルストレージ１３１も、複数のアドレス指定可能なメモリロケーションから構成される。各メモリロケーションに対してはやはり、追加セグメントが割り振られる。追加セグメントは、メインメモリ１４１の追加セグメントの内容に加えてビジービットを含む。
【００３９】
メインメモリ１４１のデータをローカルストレージ１３１のメモリロケーションへ読み出すときには、対応するビジービットを“１”に設定し、予約する。ビジービットが“１”のメモリロケーションには他のデータは格納不可である。ローカルストレージ１３１のメモリロケーションへ読み出した後、ビジービットは“０”になり、任意の目的に使用可能になる。
【００４０】
さらに、図７Ａに示すように、情報処理装置１００のメインメモリ１４１には複数の「サンドボックス」が用意される。これらサンドボックスはメインメモリ１４１の領域を画定するものであり、各サンドボックスはサブプロセッサ１１１〜１１３に割り当てられ、排他的に使用可能とされる。すなわち、サブプロセッサ１１１〜１１３のそれぞれは、自身に割り当てられたサンドボックスを使用可能だが、前述の領域を超えてデータのアクセスを行えない。また、図７Ａに示すように、メインメモリ１４１は複数のメモリロケーションから構成されるが、サンドボックスはこれらのメモリロケーションの集合である。
【００４１】
さらに、メインメモリ１４１の排他制御を実現するために、図８に示すようなキー管理テーブルが用意される。このキー管理テーブルは、ＳＲＡＭのような比較的高速のメモリに用意され、ＤＭＡコントローラ１２１と関連付けられる。キー管理テーブルの各エントリには、サブプロセッサ１１１〜１１３を識別する「サブプロセッサＩＤ」、「サブプロセッサキー」および「キーマスク」が含まれる。なお、サブプロセッサ１１１〜１１３の場合には、Ｎ＝２である。
【００４２】
ここで、サブプロセッサ１１１〜１１３のうちの任意のサブプロセッサがメインメモリ１４１を使用するときのプロセスを図７および図８を用いて説明する。サブプロセッサはＤＭＡコントローラ１２１へ、読み出しあるいは書き込みコマンドを出力する。このコマンドには、そのサブプロセッサ自身のサブプロセッサＩＤと、使用要求対象先であるメインメモリ１４１のアドレスとが含まれる。ＤＭＡコントローラ１２１は、このコマンドを実行する前にキー管理テーブルを参照し、使用要求元であるサブプロセッサのサブプロセッサキーを調べる。
【００４３】
次いで、ＤＭＡコントローラ１２１は、調べたサブプロセッサキーと、サブプロセッサ１１１の使用要求先である図７に示されるメインメモリ１４１のメモリロケーションに割り振られたアクセスキーとを比較する。２つのキーが一致した場合のみ、前述のコマンドを実行する。
【００４４】
また、図８に示すキーマスクの使用方法として、キーマスクの任意のビットが“１”になることにより、関連付けられたサブプロセッサキーの対応するビットが“０”あるいは“１”になることができる。
【００４５】
例えば、サブプロセッサキーが“１０１０”であるとする。通常このサブプロセッサキーによって“１０１０”のアクセスキーを持つサンドボックスへのアクセスだけが可能になる。しかし、このサブプロセッサキーと関連付けられたキーマスクが“０００１”に設定されている場合、このサブプロセッサキーを用いて“１０１０”あるいは“１０１１”のいずれかのアクセスキーを持つサンドボックスへのアクセスが可能となる。以上のようにしてサンドボックスの排他性を実現する。
【００４６】
すなわち、前述の複数のサブプロセッサ１１１〜１１３によりデータを多段階に処理する必要がある場合、上述のように構成することにより、前段階の処理を行うサブプロセッサと、後段階の処理を行うサブプロセッサだけがメインメモリ１４１の所定のアドレスへアクセスでき、したがって、データの保護が可能となる。
【００４７】
例えば、以下のように使用することが考えられる。まず、情報処理装置１００の起動直後は、キーマスクの値はすべてゼロである。メインプロセッサ１０１のプログラムが実行され、サブプロセッサ１１１〜１１３のプログラムと連携動作するものとする。
【００４８】
第１のサブプロセッサ１１１により出力された処理結果データをいったんメインメモリ１４１に格納し、第２のサブプロセッサ１１２に入力する場合には、メインメモリ１４１の該当する領域は、どちらのサブプロセッサからもアクセスできる必要がある。
【００４９】
そのような場合、メインプロセッサ１０１のプログラムは、キーマスクの値を適切に変更し、メインメモリ１４１に複数のサブプロセッサからアクセスできる領域を設けて、サブプロセッサ１１１、１１２による多段階的な処理を可能にする。
【００５０】
より具体的には、例えば情報処理装置２００からのデータ→情報処理装置１００の第１のサブプロセッサ１１１による処理→第１のメインメモリ領域→第２のサブプロセッサ１１２による処理→第２のメインメモリ領域、という手順で多段階処理が行われる場合、
第１のサブプロセッサ１１１のサブプロセッサキー＝“０１００”
第１のメインメモリ領域のアクセスキー＝“０１００”
第２のサブプロセッサ１１２のサブプロセッサキー＝“０１０１”
第２のメインメモリ領域のアクセスキー＝“０１０１”
のような設定のままだと、第２のサブプロセッサ１１２は第１のメインメモリ領域にアクセスすることができない。
【００５１】
そこで、第２のサブプロセッサ１１２のキーマスクを“０００１”にすることにより、第２のサブプロセッサ１１２による第１のメインメモリ領域へのアクセスを可能にすることができる。
【００５２】
〔３−３〕  分散処理の手順
ここでは、図６のシステムにより分散処理を行う手順について説明する。ネットワーク上の情報処理装置１００〜３００の間では、ソフトウェアセルが伝送される。ある情報処理装置は、コマンド、プログラムおよびデータを含むソフトウェアセルを生成し、ネットワーク４００を通じて他の情報処理装置に送信することにより処理を分散できる。
【００５３】
ソフトウェアセルは、例えば図９に示すように構成される。すなわち、「送信元ＩＤ」には、ソフトウェアセルの送信元である情報処理装置のネットワークアドレスや情報処理装置ＩＤ、メインプロセッサＩＤ、サブプロセッサＩＤが含まれる。「送信先ＩＤ」および「応答先ＩＤ」には、ソフトウェアセルの送信先である情報処理装置およびソフトウェアセルの実行結果の応答先である情報処理装置について同じ情報が含まれる。
【００５４】
「セルインターフェイス」には、ソフトウェアセルの利用に必要な情報が含まれ、「グローバルＩＤ」、「必要なサブプロセッサ」、「サンドボックスサイズ」、「前回のソフトウェアセルＩＤ」から構成される。グローバルＩＤは、ネットワーク全体を通してソフトウェアセルを一意的に識別できるものであり、送信元ＩＤおよびソフトウェアセルの作成あるいは送信の日付と時刻に基づいて作成される。また、必要なサブプロセッサによって、ソフトウェアセルの実行に必要な最低数のサブプロセッサが与えられる。
【００５５】
さらに、サンドボックスサイズによって、ソフトウェアセルの実行に必要なメインメモリ１４１内およびサブプロセッサ１１１〜１１３のローカルストレージ１３１のメモリ量が与えられる。前回のソフトウェアセルＩＤによって、ストリーミングデータなどのシーケンシャルな実行を要求する１グループのソフトウェアセルの前回のソフトウェアセルの識別子が提供される。
【００５６】
また、ソフトウェアセルにおいて、「実行セクション」が、「ＤＭＡコマンド」、「プログラム」、「データ」から構成される。ＤＭＡコマンドには、プログラムの起動に必要な一連のＤＭＡコマンドが含まれ、プログラムには、サブプロセッサによって実行されるサブプロセッサプログラムが含まれる。また、データとは、これらのサブプロセッサプログラムを含むプログラムによって処理されるデータである。
【００５７】
さらに、ＤＭＡコマンドには、「ロードコマンド」、「キックコマンド」、「ステータスコマンド」、「ステータス返信コマンド」、「機能プログラム実行コマンド」がある。
【００５８】
ロードコマンドは、メインメモリ１４１の情報を、サブプロセッサのローカルストレージへロードするコマンドである。このため、ロードコマンドは、ロードコマンド本体の他に、「メインメモリアドレス」、「サブプロセッサＩＤ」、「ローカルストレージアドレス」（ＬＳアドレス）を含む。
【００５９】
なお、メインアドレスは、情報のロード元であるメインメモリ１４１の所定領域のアドレスを示す。サブプロセッサＩＤおよびローカルストレージアドレスは、情報のロード先であるサブプロセッサの識別子およびローカルストレージ１３１のアドレスを示す。
【００６０】
キックコマンドは、プログラムの実行を開始するコマンドであり、キックコマンド本体の他に「サブプロセッサＩＤ」と、「プログラムカウンタ」とを有する。なお、サブプロセッサＩＤは、キックする対象サブプロセッサを識別し、プログラムカウンタは、プログラムの実行用プログラムカウンタのためのアドレスを与える。
【００６１】
ステータスコマンドは、送信先ＩＤに示される情報処理装置の現在の状態（装置情報）を要求するコマンドであり、ステータス返信コマンドは、後述するとおりである。
【００６２】
また、機能プログラム実行コマンドは、マスタがスレーブに対して機能プログラムの実行を要求するコマンドである。機能プログラム実行コマンドを受信したスレーブは、後述する「機能プログラムＩＤ」によって、起動すべき機能プログラムを識別する。なお、機能プログラムについては後述するが、例えば図６および図１２に示す情報処理装置１００（および２００、３００）のメインメモリ１４１が記憶するソフトウェアの構成図において、機能プログラムのカテゴリに属するプログラムである。機能プログラムはメインメモリ１４１にロードされ、メインプロセッサ１０１により実行される。
【００６３】
そして、ステータス返信コマンドは、ステータスコマンドを受信した情報処理装置が、自身の装置情報を当該ステータスコマンドに含まれる応答先ＩＤに示される情報処理装置へ応答するコマンドである。ステータス返信コマンドは、実行セクションのデータ領域に装置情報を格納するが、そのときのデータ領域の構造の一例を図１０に示す。
【００６４】
この図１０を用いて、ＤＭＡコマンドがステータス返信コマンドである場合におけるソフトウェアセルのデータ領域の構造について説明する。
【００６５】
「情報処理装置ＩＤ」は、自身の装置情報を応答する情報処理装置を識別するための識別子であり、電源投入時にメインプロセッサ１０１によって、電源投入時の日付、時刻、情報処理装置のネットワークアドレス、サブプロセッサの数などに基づいて生成される。「情報処理装置種別ＩＤ」には、情報処理装置の特徴を表す値が含まれる。この情報処理装置の特徴としては、例えば、ハードディスクレコーダー、ＰＤＡ、テレビなどといった商品を表す場合もあれば、画像処理、映像記録再生などといった機能を表す場合もある。
【００６６】
「ＭＳステータス」は、情報処理装置が、マスタあるいはスレーブのどちらで動作しているかを表し、“０”のときにはマスタとして動作し、“１”のときにはスレーブとして動作していることを表す。
【００６７】
「メインプロセッサ動作周波数」はメインプロセッサ１０１の動作周波数を表す。「メインプロセッサ使用率」はメインプロセッサ１０１で現在動作しているすべてのプログラムが、メインプロセッサ１０１を使用している割合を表す。「サブプロセッサ数」は、情報処理装置が有するサブプロセッサの数を表す。「サブプロセッサＩＤ」は、情報処理装置におけるサブプロセッサを識別するための識別子である。
【００６８】
「サブプロセッサステータス」はサブプロセッサの状態を表すものであり、unused、reserved、busyなどの状態がある。unusedは、当該サブプロセッサが未使用の場合であり。reservedは、現在は未使用であるが、予約されている場合、busyは使用中であることを示す。
【００６９】
「サブプロセッサ使用率」は、当該サブプロセッサで動作しているプログラムが、そのサブプロセッサを使用している割合を表す。ステータスがbusyの場合には、サブプロセッサ使用率は現在の使用率を示し、reservedの場合には、後に使用されるときの使用率を示す。そして、サブプロセッサＩＤ、サブプロセッサステータス、サブプロセッサ使用率は、これらを１組とし、サブプロセッサ数だけ存在する。
【００７０】
「メインメモリ総容量」および「メインメモリ使用量」は、情報処理装置に接続されているメインメモリ１４１の総容量および現在使用中の容量を表す。
【００７１】
「外部記憶装置数」は、情報処理装置に接続されている外部記憶装置１４２の数を表し、「外部記憶装置ＩＤ」は、情報処理装置に接続されている外部記憶装置１４２を一意的に識別する情報を表す。「外部記憶装置種別ＩＤ」には、対応する外部記憶装置１４２の種類を表す情報が含まれる。この外部記憶装置１４２の種類としては、前述のものが想定される。「外部記憶装置総容量」および「外部記憶装置使用量」は、外部記憶装置ＩＤにより識別される外部記憶装置１４２の総容量および現在使用中の容量を表す。
【００７２】
外部記憶装置ＩＤ、外部記憶装置種別ＩＤ、外部記憶装置総容量、外部記憶装置使用量は、これらを１組とし、外部記憶装置１４２の数だけ存在する。すなわち、１つの情報処理装置に複数の外部記憶装置が接続されている場合であっても、それぞれの外部記憶装置には異なる外部記憶装置ＩＤが割り当てられ、また、外部記憶装置種別ＩＤ、外部記憶装置総容量、外部記憶装置使用量も個別に管理されることになる。
【００７３】
〔３−４〕  ソフトウェアセルの生成および実行
ここでは、ソフトウェアセルを生成し、実行するまでのプロセスについて説明する。情報処理装置１００〜３００のうちのある情報処理装置のメインプロセッサ１０１はソフトウェアセルを生成し、ネットワーク４００を通じて他の情報処理装置へ送信する。送信元である情報処理装置、送信先である情報処理装置および応答先である情報処理装置は、前述の送信元ＩＤ、送信先ＩＤおよび応答先ＩＤにより識別される。
【００７４】
ソフトウェアセルを受信した他の情報処理装置のメインプロセッサ１０１は、メインメモリ１４１にそのソフトウェアセルを格納する。メインプロセッサ１０１はソフトウェアセルを評価し、それに含まれるＤＭＡコマンドを処理する。
【００７５】
具体的には、メインプロセッサ１０１は、まず、ロードコマンドを実行する。すると、ロードコマンドに含まれるメインメモリ１４１のメインメモリアドレスから、同様にロードコマンドに含まれるサブプロセッサＩＤと、ローカルストレージアドレスに対応するサブプロセッサのローカルストレージ１３１の所定領域へ情報がロードされる。ここで言う情報として、受信したソフトウェアセルに含まれるサブプロセッサプログラムあるいはデータがあるが、その他のデータなどであってもよい。
【００７６】
次に、メインプロセッサ１０１は、キックコマンドを、このキックコマンドに含まれるサブプロセッサＩＤに対応するサブプロセッサ１１１へ、同様にキックコマンドに含まれるプログラムカウンタとともに出力する。サブプロセッサ１１１はキックコマンドおよびプログラムカウンタにしたがってサブプロセッサプログラムを実行する。そして、その実行結果をメインメモリ１４１に格納し、その後、実行完了したことをメインプロセッサ１０１へ通知する。
【００７７】
また、メインメモリ１４１において実行される機能プログラムなどのメインメモリ用プログラムを、ソフトウェアセルを用いて他の情報処理装置へ送信することも考えられる。その場合には、サブプロセッサ１１１プログラムの代わりにメインメモリ１４１用プログラムを含むロードコマンドを送信することになる。
【００７８】
他の情報処理装置のメインメモリ１４１へ送信したメインメモリ用プログラムを実行するときには、例えば、メインプロセッサＩＤ、メインメモリアドレス、メインメモリ用プログラムを識別するための識別子、プログラムカウンタを含み、ＤＭＡコマンドが機能プログラム実行コマンドであるソフトウェアセルを同様に他の情報処理装置へ送信する。
【００７９】
このようにしてソフトウェアセルを使用することにより、ソフトウェアセルの送信元である情報処理装置は、送信先である他の情報処理装置をユーザが操作する必要なく、サブプロセッサプログラムあるいはメインメモリ用プログラムを他の情報処理装置へ送信し、そのサブプロセッサプログラムを他の情報処理装置のサブプロセッサへロードさせ、そのサブプロセッサプログラムあるいはメインメモリ用プログラムを、他の情報処理装置により実行させることができる。
【００８０】
以上のように、情報処理装置は、自身が機能プログラムまたはサブプロセッサプログラムを有していない場合には、ネットワークに接続された他の情報処理装置からそれらのプログラムを取得できる。さらに、各サブプロセッサ間においては、ＤＭＡ方式によりデータ転送を行うとともに、サンドボックスを採用することにより、１つの情報処理装置内でデータを多段階に処理する必要がある場合でも、高速、かつ、高セキュリティに処理を実行することができる。
【００８１】
〔３−５〕  処理例
ここでは、ネットワーク４００に接続されている複数の情報処理装置、例えば図１１に示すように、３台の情報処理装置１００〜３００が仮想的な１台の情報処理装置として動作するための前提処理として、情報処理装置の電源投入後の処理を説明する。
【００８２】
図１２は、情報処理装置１００〜３００のうちの任意の情報処理装置、例えば情報処理装置１００のメインメモリ１４１が記憶するソフトウェアの構成を示すものである。各プログラムは機能あるいは特徴によってカテゴライズされている。また、これらのプログラムは情報処理装置１００の電源投入前には、情報処理装置１００に接続されている外部記憶装置１４２に格納されている。
【００８３】
電源を投入すると、メインプロセッサ１０１は、デバイスドライバのカテゴリに属する各プログラムおよび制御プログラムのカテゴリに属する各プログラムをメインメモリ１４１にロードする。各プログラムをメインメモリ１４１にロードする手順は、以下のとおりである。
【００８４】
まず、メインプロセッサ１０１は、ディスクコントローラ１２２に対して読み出し命令を実行することにより外部記憶装置１４２からプログラムを読み出す。そして、ＤＭＡコントローラ１２１への書き込み命令を実行することにより、その読み出したプログラムをメインメモリ１４１にロードする。なお、機能プログラムのカテゴリに属する各プログラムについては、必要なときに必要なものだけをロードしてもよく、他のカテゴリに属する各プログラムと同様に、電源投入後にロードしてもよい。
【００８５】
ここで、機能プログラムは、ネットワークに接続されたすべての情報処理装置の外部記録装置に記録されている必要はなく、どれか１つの情報処理装置の外部記録装置に記録されていれば、上述の方法により他の情報処理装置から機能プログラムをロードすることができるので、結果的に図１１の仮想的な１台の情報処理装置として機能プログラムを実行できる。
【００８６】
さらに機能プログラムには、機能プログラムごとに一意な識別子が機能プログラムＩＤとして割り当てられている。機能プログラムＩＤは、日付や時刻、情報処理装置ＩＤなどから機能プログラムの作成の段階で決定される。
【００８７】
メインプロセッサ１０１は、自身が動作する情報処理装置に関する装置情報を格納するための領域をメインメモリ１４１に確保し、その装置情報を自装置の装置情報テーブルとして記録する。ここでの装置情報とは、図１０に示される情報処理装置ＩＤ以下の情報である。
【００８８】
そして、メインプロセッサ１０１は、メインメモリ１４１にロードされたマスタ／スレーブマネージャを実行する。マスタ／スレーブマネージャは処理が終了すると、終了通知をメインプロセッサ１０１へ送る。メインプロセッサ１０１はマスタ／スレーブマネージャから終了通知を受け取ると、次に、能力交換プログラムを実行する。マスタ／スレーブマネージャおよび能力交換プログラムは、情報処理装置１００の電源が切断されるまで動作する常駐プログラムである。
【００８９】
マスタ／スレーブマネージャは、自身が動作する情報処理装置１００がネットワーク４００に接続されていることを検知すると、同一ネットワークに接続されている他の情報処理装置２００、３００の存在を確認する。マスタ／スレーブマネージャは、もしもネットワーク４００に他の情報処理装置が存在しないことを確認したときには、前述の自装置の装置情報テーブルにおけるＭＳステータスを“０”に設定する。ネットワークに他の情報処理装置が存在することを確認したときには、ＭＳステータスを“０”以外、例えば“１”に設定する。
【００９０】
また、マスタ／スレーブマネージャは、常にネットワーク４００の状況を確認し、ネットワーク４００に新たに情報処理装置が接続されたことや、ネットワーク４００に接続されている情報処理装置の電源が切断されたこと、あるいはネットワーク４００から情報処理装置が切り離されたことを監視し、ネットワークの接続状態に変化があると、その情報を能力交換プログラムに通知する。
【００９１】
マスタ／スレーブマネージャが同一ネットワークに接続されている他の情報処理装置の存在を確認するには、例えば次のようにすればよい。すなわち、各情報処理装置内のマスタ／スレーブマネージャは、送信先ＩＤとしてネットワークに接続された他のすべての情報処理装置に対して定期的に存在確認要求を送信する。存在確認要求を受信した各情報処理装置は、存在確認要求の送信元に対して自身の存在することを通知するための返信を行う。ネットワークから切り離された情報処理装置からは当然のことながら、返信が行われないことになる。このようにしてネットワークに接続されているすべての情報処理装置の存在を、互いに把握することができる。
【００９２】
能力交換プログラムは、自身が動作する情報処理装置がマスタである場合、ネットワーク４００に接続されている他の情報処理装置に関する装置情報を取得する。装置情報の取得は、前述したように、ＤＭＡコマンドがステータスコマンドであるソフトウェアセルを生成・送信し、その後ＤＭＡコマンドがステータス返信コマンドであり、データとして他の情報処理装置に関する装置情報を含むソフトウェアセルを受信することで可能である。
【００９３】
能力交換プログラムは、前述の自装置の装置情報テーブルと同様に、取得した他のすべての情報処理装置に関する装置情報を格納するための領域をメインメモリ１４１に確保し、当該情報を他装置の装置情報テーブルとして記録する。すなわち、マスタのメインメモリ１４１には、ネットワーク４００に接続されている自身を含むすべての情報処理装置の装置情報テーブルが記録される。
【００９４】
一方、能力交換プログラムが動作する情報処理装置がスレーブである場合、ネットワーク４００に接続されているマスタの情報処理装置および自身以外のすべてのスレーブの情報処理装置に関する装置情報を取得する。そして装置情報に含まれる情報処理装置ＩＤおよびＭＳステータスをメインメモリ１４１に記録する。すなわち、スレーブには、自装置に関するすべての装置情報が装置情報テーブルとして記録されるとともに、ネットワーク４００に接続された自身以外のすべての情報処理装置について、その情報処理装置ＩＤおよびＭＳステータスが装置情報テーブルとして記録されることになる。
【００９５】
また、能力交換プログラムは、ネットワーク４００に新たに情報処理装置が接続されたことを示すネットワーク状態の変化通知をマスタ／スレーブマネージャから受信すると、その情報処理装置に関する装置情報を取得する。同様にネットワーク４００から情報処理装置が切り離された、あるいは電源が切断されたというネットワーク状態の変化通知を受信すると、当該装置の装置情報テーブルをメインメモリ１４１から削除する。
【００９６】
〔３−６〕  マスタおよびスレーブの制御フロー
ネットワーク４００に接続されている複数の情報処理装置を仮想的な１台の情報処理装置として動作させるために、マスタの情報処理装置（以下「マスタ」と呼ぶ）が、ユーザの操作およびスレーブとなる情報処理装置（以下「スレーブ」と呼ぶ）の動作状況を把握する必要がある。
【００９７】
図１３は、ネットワーク４００に接続されている３台の情報処理装置１００〜３００が、仮想的な１台の情報処理装置として動作する様子を示すものである。この例においては、情報処理装置１００がマスタとして動作し、情報処理装置２００および情報処理装置３００がスレーブとして動作し、ユーザが情報処理装置２００を操作すると、この操作に応じた処理を情報処理装置３００が実行する場合である。また、図１４は、その場合のフローチャートを示す。
【００９８】
ユーザが情報処理装置２００を操作すると、その操作された情報処理装置がマスタあるいはスレーブに関わらず、その操作情報は常にマスタに送信される。マスタにおけるメインプロセッサ１０１は、当該操作情報に従い、実行する機能プログラムを選択する。このとき、必要ならば、前述の方法にしたがい外部記憶装置１４２からメインメモリ１４１へ機能プログラムをロードする。実行時に機能プログラムは、自身が実行されるときに必要なメインプロセッサ１０１、サブプロセッサ１１１、メインメモリ１４１、外部記憶装置１４２に関する情報をメインプロセッサ１０１に通知する。ここでの情報とは、図１０に示される情報処理装置ＩＤ以下の情報である。
【００９９】
機能プログラムがこれらの情報をメインプロセッサへ通知する方法としては、機能プログラムは自身が実行される実行要求の他に、情報通知要求にも対応している。メインプロセッサは機能プログラムへ当該情報通知要求を発行することにより、図１０に示される情報処理装置ＩＤ以下の情報を取得することができる。
【０１００】
メインプロセッサ１０１は、メインメモリ１４１に記録されている前述の自装置あるいは他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能なスレーブを選択する。マスタは、選択されたスレーブへ機能プログラムの実行を要求する。このとき、マスタは、前述の機能プログラムの実行に必要な情報等に基づき、自身のメインメモリ１４１に記録された選択されたスレーブに関する装置情報テーブルを更新する。
【０１０１】
機能プログラムの実行を要求されたスレーブのメインプロセッサ１０１は、機能プログラムを実行する。その場合にも、必要ならばスレーブのメインプロセッサ１０１は、前述の方法にしたがい外部記憶装置１４２からメインメモリ１４１へ機能プログラムをロードする。
【０１０２】
ここで、機能プログラムの実行を要求されたスレーブと接続された外部記憶装置１４２に必要な機能プログラムが記録されていない場合には、他の情報処理装置１００が前述のメインメモリ用プログラムとして当該機能プログラムを機能プログラムの実行を要求されたスレーブへ送信してもよい。さらにメインメモリ用プログラムと同様に、サブプロセッサプログラムも必要ならば、ソフトウェアセルを用いることにより他の情報処理装置１００へ送信して、この情報処理装置１００のサブプロセッサ１１１へロードさせ、サブプロセッサプログラムを他の情報処理装置１００により実行させることができる。
【０１０３】
そして、機能プログラムの処理終了後、終了通知をマスタに送信する。マスタは終了通知を受信することにより、機能プログラムを実行したスレーブに関する装置情報テーブルを更新する。
【０１０４】
また、マスタのメインプロセッサ１０１は、自装置あるいは他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能な情報処理装置１００として自身を選択する場合もあり得る。その場合には、マスタが機能プログラムを実行する。その際にはスレーブのメインメモリ１４１に記録されたマスタに関する装置情報テーブルが、マスタの動作状況に応じて更新されることになる。
【０１０５】
このようにして、ユーザは、複数の情報処理装置のうちの１台の情報処理装置だけを操作することにより、他の情報処理装置を操作しなくても、複数の情報処理装置を仮想的な１台の情報処理装置として動作させることができる。
【０１０６】
〔４〕  まとめ
上述の記憶管理システムによれば、ガーベジコレクション機能を持った記憶管理システムにおいて、把握や管理が困難な複数の複雑な参照を持つデータが存在している場合でも、指示したデータを容易に、かつ、確実に破棄することができる。
【０１０７】
また、指示したデータのみを参照させて存続させることができるので、データのユニーク性を持たせて管理することも容易に、かつ、確実に行うことができる。特に、永続性を持った大規模なデータを管理しなければならないようなデータベースシステムにおいて、すべてのデータをスクラッチから再構築するような最悪の手段に陥ることなく、データの有効性やユニーク性を保ちつつ、データを管理して維持し続けることができる。
【０１０８】
なお、上述において、図４の指示は、記憶管理システムに対する指示として実行されるが、システムのアプリケーションプログラムから呼び出されるような記憶管理システムの関数機能として利用可能であってもよい。
【０１０９】
また、上述においては、記憶装置データ領域、ポインタ変数および間接参照テーブルが、図１の記憶装置１２に置かれているとしたが、２次記憶装置１３に置かれていてもよい。その場合には、データ参照の方法として、セクタ番号、シリンダ番号、セクタ内オフセットなどをエントリアドレスとすればよい。
【０１１０】
〔略語の一覧〕
ＣＤ        ：Compact Disc
ＣＤ±ＲＷ  ：CD +ReWritable, CD ReWritable
ＣＰＵ      ：Central Processing Unit
ＤＭＡ      ：Direct Memory Access
ＤＲＡＭ    ：Dynamic RAM
ＤＶＤ±ＲＷ：DVD +ReWritable, DVD ReWritable
ＩＤ        ：IDentification
ＭＯ        ：Magneto-Optical disk
ＲＡＭ      ：Random Access Memory
ＲＯＭ      ：Read Only Memory
ＳＲＡＭ    ：Static RAM
【図面の簡単な説明】
【０１１１】
【図１】この発明の一形態を示す系統図である。
【図２】この発明の一形態を示すフローチャートである。
【図３】この発明における処理の状態を示す図である。
【図４】指示形式の一形態を示す図である。
【図５】この発明を説明するための図である。
【図６】コンピュータシステムの一例を示す系統図である。
【図７】図６のシステムを説明するための図である。
【図８】図６のシステムを説明するための図である。
【図９】図６のシステムを説明するための図である。
【図１０】図６のシステムを説明するための図である。
【図１１】仮想情報処理装置を説明するための図である。
【図１２】情報処理装置のソフトウェア構成の一例を示す図である。
【図１３】図１１の装置を説明するための図である。
【図１４】図１１の装置を説明するための図である。
【符号の説明】
【０１１２】
１１…ＣＰＵ、１２…記憶装置、１３…２次記憶装置、１４…入力装置、１５…出力装置、１６…ネットワーク
【図１】
2005234634.tif 000003
【図２】
2005234634.tif 000004
【図３】
2005234634.tif 000005
【図４】
2005234634.tif 000006
【図５】
2005234634.tif 000007
【図６】
2005234634.tif 000008
【図７】
2005234634.tif 000009
【図８】
2005234634.tif 000010
【図９】
2005234634.tif 000011
【図１０】
2005234634.tif 000012
【図１１】
2005234634.tif 000013
【図１２】
2005234634.tif 000014
【図１３】
2005234634.tif 000015
【図１４】
2005234634.tif 000016