(57)【特許請求の範囲】
【請求項１】
間接的なスロットを使用し、且つ、該間接的なスロットへのポインタ又はロードされた被参照オブジェクトへのポインタのいずれかを含むようになっているスマートポインタを使用する参照側オブジェクトに、被参照オブジェクトへの持続性ポインタをスウィズリングするためのメモリを有するコンピュータシステムにおける方法であって、
参照側オブジェクトをメモリにロードし、
参照側オブジェクトをロードするステップに応じて、
持続性ポインタを参照側オブジェクトから間接的なスロットにコピーし、
参照側オブジェクトにある持続性ポインタを間接的なスロットへのポインタを包含するスマートポインタで置換し、
スマートポインタをデリファレンスするための試みを検出し、
この検出ステップに応じて、
間接的なスロットにストアされた持続性ポインタを使用して、前記被参照オブジェクトをメモリにロードし、
間接的なスロットにおける持続性ポインタを、ロードされた被参照オブジェクトへの直接的なポインタで置換し、
スマートポインタにおける間接的なスロットへのポインタを、ロードされた被参照オブジェクトへの直接的なポインタで置換し、
ロードされた被参照オブジェクトへのポインタをデリファレンスする、
ステップを有する方法。
【請求項２】
スマートポインタをデリファレンスするための第２の試みを検出し、
前記検出ステップに応じて、スマートポインタに包含されたロードされた被参照オブジェクトへの直接的なポインタをデリファレンスする、
ステップを更に有する、請求項１に記載の方法。
【請求項３】
ロードされた被参照オブジェクトへの直接的なポインタを包含する１又はそれ以上の追加のスマートポインタが生成されている請求項１の方法であって、
ロードされた被参照オブジェクトをアイドル状態にするための要求を受信し、
前記受信ステップに応じて、ロードされた被参照オブジェクトへのポインタを包含する各スマートポインタについて、ロードされた被参照オブジェクトへの直接的なポインタを間接的なスロットへのポインタで置換する、
ステップを更に有する、請求項１に記載の方法。
【請求項４】
ロードされた被参照オブジェクトへの直接的なポインタを間接的なスロットへのポインタで置換するステップの後で、
スマートポインタをデリファレンスするための第２の試みを検出し、
スマートポインタをデリファレンスするための第２の試みを検出するステップに応じて、
間接的なスロットへのポインタとスマートポインタとを、間接的なスロット内にストアしてあるロードされた被参照オブジェクトへの直接的なポインタで置換し、そして、
ロードされた被参照オブジェクトへの直接的なポインタをデリファレンスする、
ステップを更に有する請求項３に記載の方法。
【請求項５】
追加のスマートポインタを使用して、１又はそれ以上の追加の被参照オブジェクトをメモリにロードするステップを更に有し、ロードされた被参照オブジェクトへの直接的なポインタを包含する１又はそれ以上の追加のスマートポインタが生成されている請求項１の方法であって、
識別された複数のロードされた被参照オブジェクトをアイドル状態にさせるための要求を受信し、
前記受信ステップに応じて、識別されたロードされた被参照オブジェクトのうちの１つへの直接的なポインタを包含するスマートポインタの各々について、識別されたロードされた被参照オブジェクトへの直接的なポインタを、識別されたロードされた被参照オブジェクトに関する間接的なスロットへのポインタで置換する、
ステップを更に含む、請求項１に記載の方法。
【請求項６】
スマートポインタのグループにおける不要部分の整理を実行するための請求項１に記載の方法であって、
ロードされたオブジェクトへの直接的なポインタを包含するスマートポインタのグループにおけるスマートポインタを識別し、
各識別されたスマートポインタに関して、
スマートポインタにおける直接的なポインタが指し示す同じロードされたオブジェクトへの直接的なポインタを包含する間接的なスロットを識別し、
スマートポインタにおける直接的なポインタを、識別された間接的なスロットへのポインタで置換する、ステップを更に有する、
請求項１に記載の方法。
【請求項７】
メモリを再生するための要求に応じて、
いかなるスマートポインタにおけるいかなる直接的なポインタによっても指し示されていないオブジェクトを識別し、そして、
各識別されたオブジェクトに関して、
識別されたオブジェクトへの直接的なポインタを包含する間接的なスロットを識別し、
識別されたオブジェクトをアンロードし、
識別された間接的なスロットにおける直接的なポインタを、識別されたオブジェクトをリロードするのに使用することができるリローディング識別子で置換する、
ステップを更に有する、請求項１に記載の方法。
【請求項８】
メモリを再生するための要求に応じて、
いかなるスマートポインタにも包含されていないオブジェクトへの直接的なポインタを包含する間接的なスロットを識別し、
各識別された間接的なスロットに関して、
間接的なスロットにおける直接的なポインタによって指し示されたオブジェクトをアンローディングし、
間接的なスロットにおける直接的なポインタを、アンロードされたオブジェクトをリロードするのに使用することができるリローディング識別子で置換する、ステップを更に含む、請求項１に記載の方法。
【請求項９】
スマートポインタのグループで不要部分の整理を実行し、
ロードされたオブジェクトの選択されたグループのうちの１つへの直接的なポインタを包含するスマートポインタのグループにおいてスマートポインタを識別し、
各識別されたスマートポインタに関して、
直接的なポインタ及びスマートポインタが指し示す同じロードされたオブジェクトへの直接的なポインタを包含する間接的なスロットを識別し、
スマートオブジェクトにおける直接的なポインタを、識別された間接的なスロットへのポインタで置換する、
ステップを更に有する、請求項１に記載の方法。
【請求項１０】
メインメモリにストアされ、且つ、被参照オブジェクトへのメインメモリポインタを包含する間接的なスロットを使用して１又はそれ以上のスマートポインタによって参照される被参照オブジェクトをアイドリングするための請求項１に記載の方法であって、
スマートポインタが、被参照オブジェクトへの直接的なポインタを包含しないことを保証することによって、被参照オブジェクトをアイドル状態にさせるための要求を受信し、
前記受信ステップに応じて、被参照オブジェクトを参照する各スマートポインタに関して、間接的なスロットへのポインタをスマートポインタにストアする、
ステップを更に有する、請求項１に記載の方法。
【請求項１１】
スマートポインタをデリファレンスする試みを受信し、
前記受信ステップに応じて、
スマートポインタにおける間接的なスロットへのポインタを、被参照オブジェクトへのポインタで置換し、
ロードされた被参照オブジェクトへのポインタをデリファレンスする、
ステップを更に有する、請求項１０に記載の方法。
【請求項１２】
ストアする前記ステップの後、メインメモリから、被参照オブジェクトをアンロードするための要求を受信し、
被参照オブジェクトをアンロードする要求を受信するステップに応じて、
間接的なスロットに包含された被参照オブジェクトへのメインメモリポインタを、被参照オブジェクトをリロードするのに使用することができる持続性ポインタで置換し、
被参照オブジェクトをアンローディングする、
ステップを更に有する、請求項１０に記載の方法。
【請求項１３】
スマートポインタをデリファレンスする試みを受信し、
前記受信ステップに応じて、
間接的なスロットにストアされた持続性ポインタを使用して、被参照オブジェクトをメインメモリにロードし、
間接的なスロットにおける持続性ポインタを、ロードされた被参照オブジェクトへのポインタで置換し、
スマートポインタにおける間接的なスロットへのポインタを、ロードされた被参照オブジェクトへのポインタで置換し、
ロードされた被参照オブジェクトへのポインタをデリファレンスする、
ステップを更に有する、請求項１２に記載の方法。
【請求項１４】
ストアするステップの後、被参照オブジェクトを新しいメモリ位置に再位置づけする要求を受信し、
被参照オブジェクトをアンロードするための要求を受信するステップに応じて、
被参照オブジェクトを新しいメモリ位置に移動させるために間接的なスロットにおけるポインタを使用し、
間接的なスロットに包含された被参照オブジェクトへのメインメモリポインタを、新しいメモリ位置へのメインメモリポインタで置換する、
ステップを更に有する、請求項１０に記載の方法。
【請求項１５】
移動及び置換ステップの後、スマートポインタでデリファレンスオペレーションの呼び出しを検出し、
前記検出ステップに応じて、
スマートポインタにおける間接的なスロットへのポインタを、間接的なスロットにおける新しいメモリ位置へのポインタで置換し、
新しいメモリ位置へのポインタをデリファレンスする、
ステップを更に有する、請求項１４に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト参照の分野に関し、特に、最適化オブジェクト参照の分野に関する。
【０００２】
【従来の技術】
ＣＡＤ／ＣＡＭアプリケーションのような、幾つかのコンピュータアプリケーションは典型的には、単一のコンピュータシステムを使用して、若しくは、多数の接続されたコンピュータシステムを使用して、大幅な時間にわたってデータオブジェクトの大きなセット（「objects 」）を構築し、維持し、アクセスし、修正する。かかるオブジェクトにとってオブジェクトセットの他のオブジェクトを参照することは一般的である。かかるアプリケーションは、これらのオブジェクトを維持するために持続的なオブジェクトシステムをしばしば使用し、それらをどんな接続されたコンピュータシステムにもアクセスできるようにさせ且つ修正することができるようにする。持続性オブジェクトシステムは、データベース又はファイルシステムのようなオブジェクトサーバに不揮発性の仕方で持続性オブジェクトをストアすることによって、持続性オブジェクトの継続的な使用可能性を保証しながら、コンピュータシステムにおけるプログラムの実行によりアクセスされ且つ操作されるべきコンピュータシステムのメインメモリに持続性オブジェクトを移動させることができる。
【０００３】
コンピュータシステムにおいて実行中のプログラムが、そのメインメモリにおけるオブジェクトに対するアクセス及び修正を終えるとき、持続性オブジェクトシステムは、オブジェクトをオブジェクトサーバに転送し、該オブジェクトを不揮発性の仕方でストアする。転送されたオブジェクトは、オブジェクトセット内の他のオブジェクトに対する参照を含むことができる。転送の時点においては、これらの参照は、一般的に、被参照オブジェクトがロードされている同じコンピュータシステムのメインメモリ内のアドレスについてのポインタを各々有する。かかる参照は、ポインタによって反映されていないコンピュータシステムの識別と、コンピュータシステムのメインメモリの特定のコンテンツとに依存するものであり、これらは、プログラムが転送されたオブジェクトを次回にオブジェクトサーバから転送するときには完全に異なったものとなり得る。オブジェクトサーバが、別のコンピュータシステムのプログラムに対してメインメモリポインタを含む形態のオブジェクトを後で提供するならば、オブジェクトのメインメモリポインタは無効となる。それゆえ、オブジェクトをオブジェクトサーバに転送するプロセスの部分として、持続性オブジェクトシステムは、「パッシベーション」と呼ばれるプロセスを実施する。パッシベーションは、該当するコンピュータシステムのメインメモリ内の、被参照オブジェクトを探索するのに使用されるパッシベーションされたオブジェクトでのメインメモリポインタの参照を、オブジェクトサーバ内の被参照オブジェクトを探索するための持続性オブジェクトシステムが使用する持続性ポインタによって置き換えることを含む。（持続性ポインタはまた、「オブジェクト識別子」（ＯＩＤｓ）と呼ばれ、汎用一意性識別子（ＧＵＩＤ）データ構造を使用して表わし得る。）こういう方法で、持続性ポインタを有するメインメモリポインタを置き換えることは、メインメモリポインタを「アンスウィズリング（unswizzling ）」すると呼ばれる。
【０００４】
プログラムが、持続性オブジェクトシステムを後で使用して、オブジェクトサーバに転送されたオブジェクトにアクセスしたり、該オブジェクトを修正したりするときには、持続性オブジェクトシステムは、オブジェクトをオブジェクトサーバから、プログラムが「デパッシベーション」プロセスを実行し、完遂しているコンピュータシステムのメインメモリに転送する。デパッシベーションは、プログラムが、持続性ポインタによって参照された被参照オブジェクトにアクセスし、該オブジェクトを修正するためにプログラムによって一般的に使用することができない転送されたオブジェクトにおける持続性ポインタを、被参照オブジェクトにアクセスし、該オブジェクトを修正するために使用することができるメインメモリポインタによって、置換することを含む。このようにメインメモリポインタを備えた持続性ポインタを置換することは、持続性ポインタを「スウィズリング」すると呼ばれる。
【０００５】
在来のスウィズリング技術は、各々が著しい不利益を有する３つの範疇に分類分けされる。ハードウェアスウィズリングは、被参照オブジェクトに対するメインメモリポインタが保護されていないオブジェクトを使用するプログラムによって解かれるとき、被参照オブジェクトをロードするために、存在する仮想メモリ管理システムのページングシステムを使用する。仮想メモリマネージャは、実際のメインメモリより大きいメインメモリアドレス空間を固定長のページに分ける。メインメモリ空間におけるいくらかのページはメインメモリに実際に表わされているが、他は「ページアウト」である。プログラムが、ポインタをページアウトされたページにデリファレンスするのを試みるとき、その試みは「ページフォルト」と呼ばれるハードウェア割り込みを生成する。ページフォルトは、（殆どの場合、別のページをページアウトすることにより）メインメモリにおけるフォルトページのためのメモリ空間を見つけ、フォルトページをディスクからメインメモリにロードし、フォルトページをページ・インとマークし、デリファレンスオペレーションを続けさせることによって、フォルトページを「ページ・イン」する割り込みサービスルーチンによって処理される。
【０００６】
ハードウェアスウィズリング技術によれば、保護されていないオブジェクトがロードされたとき、各持続性ポインタは、ページアウトとマークされた「ゴーストページ」へのメインメモリポインタにより置換される。プログラムがメインメモリポインタをゴーストページに対してデリファレンスするように試みたとき、ページフォルトが生成され、修正されたページフォルト割り込み処理ルーチンは、被参照オブジェクトをその持続性ポインタを使用してオブジェクトサーバからロードし、ページ・インされたものとしてゴーストページをマークし、デリファレンスオペレーションを続けさせる。次いで、メインメモリポインタをデリファレンスする試みが更なる遅延なしに続けられる。ハードウェアスウィズリングは、被参照オブジェクトが実際にアクセスされるまでロードされないという利点を有する。ハードウェアスウィズリングはまた、２つの重要な欠点を有している。即ち、(1) ページフォルト及びページングはあるプロセッサにおいておおよそ２０００命令を実行するのと同じだけ要する高価な処理である。(2) 仮想メモリ管理システムによって使用される固定されたページサイズは可変サイズオブジェクトをストアするのに不適切であり、それにより、ロードされたオブジェクトより大きなメインメモリのセクションをロードされたオブジェクトに充てられるようにし、割り当てられたページのサイズを超えるように時間をかけてそのサイズに成長するオブジェクトを収容することができない。
【０００７】
間接的ソフトウェアスウィズリングは、保護されていないオブジェクトにおけるポインタと被参照オブジェクトとの間に間接のレベルを提供するための「常駐オブジェクト記述子」と呼ばれる記憶場所を使用する。保護されていないオブジェクトがロードされた後、保護されていないオブジェクトにおける各持続性ポインタは、常駐オブジェクト記述子に移動され、常駐オブジェクト記述子に対するポインタと置き換えられる。最初に常駐オブジェクト記述子に対するポインタにデリファレンスすることにより、被参照オブジェクトをロードすることができ、メインメモリポインタをオブジェクト記述子におけるロードされた被参照オブジェクトにストアする。次いで、常駐オブジェクト記述子におけるロードされた被参照オブジェクトに対するメインメモリポインタは、被参照オブジェクトへのアクセスを提供するようにデリファレンスされる。常駐オブジェクト記述子に対するポインタが続いてデリファレンスされたとき、常駐オブジェクト記述子におけるロードされた被参照オブジェクトに対するメインメモリポインタは、被参照オブジェクトにアクセスするのに使用される。ハードウェアスウィズリングと同様に、間接的ソフトウェアスウィズリングは、被参照オブジェクトが実際にアクセスされるまで、ロードされないという利点を有する。更に、被参照オブジェクトは、保護されていないオブジェクトにストアされた常駐オブジェクト記述子に対するポインタを無効にすることなくアンロードされ得るか若しくは再配置され得る。しかし、間接的ソフトウェアスウィズリングはまた、著しい欠点を有する。即ち、プログラムが、被参照オブジェクトにアクセスする度に要求される２つのメインメモリポインタ（初めに保護されていないオブジェクト、２番目に常駐オブジェクト記述子）へのデリファレンスは、単一のメインメインメモリポインタをデリファレンスするコストの２倍かかり、若しくは、あるプロセッサにおける９０命令を実行するのと同じだけの時間を必要とする。
【０００８】
直接的ソフトウェアスウィズリングは、各持続性ポインタを被参照オブジェクトに対して直接にメインメモリポインタと置換する。このアプローチは間接的なソフトウェアスウィズリングによって受ける２重間接の余分な時間コストを克服するが、それは、保護されていないオブジェクトにストアされた直接的なメインメモリポインタを無効にする被参照オブジェクトをアンロードするか若しくは再配置するという欠点を有する。このことにより、保護されていないオブジェクトによってリファレンスされているオブジェクトからメモリを再配置又は再生するための努力をすることが困難若しくは不可能である。
在来のスウィズリング技術の欠点であったとしても、スウィズリング技術が被参照オブジェクトをアンロード及び再配置することを容易にする低い時間コストを有しているならば、著しく有用であろう。
【０００９】
【課題を解決するための手段】
本発明は、被参照オブジェクトへのアクセスを管理するために３状態リファレンスを使用する。本発明による好ましい実施形態では、持続性ポインタスウィズリング機能（「本機能」）は、被参照オブジェクトをオブジェクトサーバから得るのに使用できる持続性ポインタを、スマートポインタで置換する。スマートポインタは、被参照オブジェクトがロードされているメインメモリの位置を直接指し示し得るか、若しくは、間接的なスロットを介して、被参照オブジェクトを直接指し示し得る。スマートポインタが初めにデリファレンスされたとき、スマートポインタは間接的なスロットへのポインタを包含する。この点で、間接的なスロットの持続性ポインタは、被参照オブジェクトをオブジェクトサーバからメインメモリ内へロードするのに使用される。被参照オブジェクトがロードされた後、ロードされたオブジェクトへのポインタは、間接的なスロットとスマートポインタとの両方にストアされる。スマートポインタが続いてデリファレンスされたとき、それは、間接的なスロットを使用しないで被参照オブジェクトへ直接アクセスするように直接デリファレンスされた、ロードされたオブジェクトへの直接的なポインタを含む。
【００１０】
ロードされた被参照オブジェクトを「アイドル状態」にするために、本機能は、スマートポインタにおける直接的なポインタを間接的なスロットへのポインタで置換する。ロードされた被参照オブジェクトがアイドル状態にあるとき、本機能は、間接的なスロットにおけるポインタを単に適応することによって、スマートポインタを無効にすることなくメインメモリにそれを再配置し得る。被参照オブジェクトがアイドル状態にあるとき、本機能はまた、被参照オブジェクトをメインメモリから除去し得る。本機能が、被参照オブジェクトをメインメモリから除去するとき、それは間接的なスロットにおける被参照オブジェクトに関する持続性ポインタをストアするので、スマートポインタの引き続きのデリファレンスによって、被参照オブジェクトをリロードさせる。本機能のこれらの特徴は、使用されていないメモリを再生するための不要部分の整理スキームで用いられるのが好ましく、被参照オブジェクトは、最近使用されていないときアイドル状態にされ、メインメモリから除去できる状態になる。
【００１１】
【発明の実施の形態】
本発明は、被参照オブジェクトへのアクセスを管理するための３状態リファレンスを使用する。本発明によれば、持続性ポインタスウィズリング機能（「本機能」）は、参照側オブジェクトにおいて、アンロードされた被参照オブジェクトに対する持続性ポインタを被参照オブジェクトに対するスマートポインタと置換する。
好ましい実施形態では、参照側オブジェクトがロードされたとき、本機能は、持続性ポインタを参照側オブジェクトから間接的なスロットのテーブルにおける間接的なスロットに最初に移動させ、これが持続性ポインタであることを示す指示と一緒にストアする。本機能はまた、この点で、参照側オブジェクトにおける持続性ポインタを、間接的なスロットに対するポインタを含み且つ被参照オブジェクトに対する直接的なポインタを含まないことを指示するスマートポインタと置換する。間接的なスロットに対するポインタを包含するスマートポインタは、被参照オブジェクトのための「間接的なリファレンス」と言われる。
【００１２】
参照側オブジェクトのスマートポインタが後でデリファレンスされるとき、デリファレンスオペレーションは、スマートポインタに包含されるポインタが被参照オブジェクトに対する直接的なポインタでないということを判断し、中央データ構造の持続性ポインタにアクセスするために該ポインタを使用する。次いで、本機能は、被参照オブジェクトを都合の良いアドレスでメインメモリにロードするために持続性ポインタを使用する。本機能は、被参照オブジェクトに対する直接的なポインタであることを指示して、参照側オブジェクトにおける参照と間接的なスロットとの両方に、このアドレスをストアする。被参照オブジェクトへの次のアクセスは、被参照オブジェクトをリロードすること無く又はスロットテーブルにアクセスすること無く、参照側オブジェクトにストアされた直接的なポインタを直接使用することによって迅速に進む。別の参照側オブジェクトが同じ被参照オブジェクトに対するリファレンスを含む場合、これらの参照は、第１の参照側オブジェクトの被参照オブジェクトに対するリファレンスと同様に、同じ間接的なスロットへのポインタと置換される。間接的なスロットに対するこれら他のポインタがデリファレンスされるとき、本機能は、ロードされた被参照オブジェクトへの直接的なポインタを包含する間接的なスロットを求め、被参照オブジェクトをリロードすること無くロードされた被参照オブジェクトに直接アクセスするように、直接的なポインタを他の参照側オブジェクトにコピーする。
【００１３】
被参照オブジェクトの使用が終わるとき、本発明は好ましくは、被参照オブジェクトに対してオブジェクトをリファレンスするときにいかなる直接的なポインタを中央データ構造スロットへのポインタで置換することによって、被参照オブジェクトを直接参照するように被参照オブジェクトを直接参照するいかなるスマートポインタを変換する。このことにより被参照オブジェクトを、参照側オブジェクトにおけるいかなるスマートポインタを更新する必要なしに、中央データ構造スロットにおけるポインタを単に更新することによって必要なときにプライマリメモリに後で再配置することができる。また、被参照オブジェクトは、それらに対するリファレンスのどれもが直接的でないときに、安全に自由になりうる。被参照オブジェクトは、被参照オブジェクトの別のユーザによるリクエストに応じてその被参照オブジェクトを排他的に使用するように自由にされることができ、若しくは、イニシアティブに応じて使用されていないオブジェクトによって占有されたメモリの部分を再生するように自由にされ得る。
【００１４】
図１は、本機能が好ましく作動する汎用コンピュータシステムのハイレベルブロック図である。この図はコンピュータシステム１００にアクセスするオブジェクトを示す。コンピュータシステム１００にアクセスするオブジェクトは、中央演算装置（ＣＰＵ）１１０と、入力／出力デバイス１２０と、メインメモリ１３０とを有する。入力／出力デバイス１２０の間には、ハードディスクドライブのような記憶装置１２１がある。入力／出力デバイス１２０はまた、コンピュータシステムにアクセスするオブジェクトが他のコンピュータシステムとデータを交換することができるネットワークコネクション１２２を含む。入力／出力デバイス１２０は、ＣＤ−ＲＯＭのようなコンピュータ読取可能媒体で提供される本機能を含むソフトウェア製品をインストールするのに使用することができるリムーバブルメディアドライブ１２３を更に含む。メインメモリ１３０は、オブジェクトのセットを持続的に保持するための持続性オブジェクトシステム１３１を包含する。スウィズリング機能１３２は、持続性オブジェクトシステム１３１に含まれており、ＣＰＵ１１０で実行される。メインメモリ１３０は、スマートポインタ１３４を包含する保護されていないオブジェクト１３３を更に含む。保護されていないオブジェクト１３３はまた、参照側オブジェクトとしてここで議論する。メインメモリ１３０は、間接的なスロット１３６、並びに、他の間接的なスロット（図示せず）で構成されているスロットテーブル１３５を更に有する。スロットテーブルは、メモリマネージャによって利用されるハンドルテーブルに対応するのが好ましい。所定の時間では、メインメモリ１３０は、被参照オブジェクト１３７並びに他の被参照オブジェクト（図示せず）を更に含む。
【００１５】
図１はまた、コンピュータシステム１００にアクセスするオブジェクトのネットワークコネクション１２２が、オブジェクトサーバコンピュータシステム１５０のネットワークコネクション１５２に接続されていることも示す。オブジェクトサーバコンピュータシステム１５０は、不揮発性の仕方で持続性オブジェクトのセットをストアすることによって、持続性オブジェクトのセットを保持するオブジェクトサーバ１５３を含む。オブジェクトサーバ１５３は、持続性オブジェクトをオブジェクトサーバの中及び外に転送するように、持続性オブジェクトシステムの他のパスからのリクエストに応答する。オブジェクトサーバコンピュータシステム１５０はまた、オブジェクトサーバ１５３によって使用されているプロセッサ１５１を含む。本機能が好ましくは、上述したように構成されたコンピュータシステムで実行されるけれども、当業者は、異なる構成を有するコンピュータシステムで実行され得ることも認識するであろう。例えば、コンピュータシステムは図１に示した機能の全てを包含していなくても良く、或いは、図１に示されていない機能を包含しても良い。更に、オブジェクトサーバ１５３は、オブジェクトサーバコンピュータシステム１５０の代わりにコンピュータシステム１００にアクセスするオブジェクトに配置され得る。
【００１６】
図２は、持続性オブジェクトをロードし且つ保護しないように、好ましくは本機能によって行われるステップを示す。本機能は、アプリケーションからの直接的なリクエストに応じて持続性オブジェクトをロードし且つ保護しないようにしうる。以下で議論するように、本機能はまた、持続性オブジェクトへのスマートポインタをデリファレンスするように、アプリケーションによる試みに応じて持続性オブジェクトをロードし且つ保護しないようにし得る。ステップ２０１では、本機能は、オブジェクトサーバ１５３（図１）からオブジェクトを得、オブジェクトをメインメモリ１３０にストアするために、持続性オブジェクトに関する持続性ポインタを使用する。ステップ２０１でロードされたオブジェクトは、他の持続性オブジェクトへの１又はそれ以上のポインタを含み得る。他のオブジェクトへのかかるポインタは一般的には、ステップ２０１でロードされたオブジェクトの早期パッシベーションの結果、持続性ポインタによって被参照オブジェクトをオブジェクトサーバから得るのに使用され得る持続性ポインタである。ステップ２０３はまた、間接的なスロットのポインタが、被参照オブジェクトへの持続性ポインタであり、デ被参照オブジェクトに直接的なメインメモリポインタではない、間接的なスロットに指示をストアするのが好ましい。
【００１７】
図３は、ステップ２０１を実行した結果を示すメモリダイアグラムである。図３は、メインメモリ３３０並びにメインメモリのコンテンツの部分を示す。メインメモリには、ステップ２０１でロードされた参照側オブジェクト３３３とスロットテーブル３３５が示されている。スロットテーブルは、スロット３３６、３４１、３４２、、３４３及び３４４を含む多数のスロットを含む。ステップ２０１でロードされたとき、参照側オブジェクト３３３は１つの持続性ポインタ３７１を含む。
図２に戻ると、ステップ２０２乃至２０５では、本機能はロードされたオブジェクトを保護しない。本機能は、ロードされたオブジェクトに包含される各持続性ポインタに関してステップ２０２乃至２０５をループする。ステップ２０３では、本機能は、持続性ポインタをスロットテーブルの空の間接的なスロットにコピーすることにより持続性ポインタによって被参照オブジェクトにスロットテーブル１３５（図１）の間接的スロットを割り当てる。
【００１８】
図４は、ステップ２０３及び２０４を実行した結果を示すメモリダイアグラムである。持続性ポインタ３７１（図３）が参照側オブジェクト３３３から、ステップ２０２によってスロットテーブル４３５の空のスロット４３６にコピーされていることが図４から分かる。しかしながら、スロットテーブルの間接的なスロットが被参照オブジェクトに既に割り当てられているならば、本機能は２０３において別の間接的なスロットを被参照オブジェクトに割り当てないのが好ましい。本機能は好ましくは、スロットテーブルのスロットが、被参照オブジェクトの持続性ポインタからそれらの被参照オブジェクトに割り当てられたスロットテーブルのスロットにマップするスロットテーブルにインデックスを保持することによって被参照オブジェクトに既に割り当てられているかどうかを判断する。このインデックスは、スロットテーブルと別であってよく、またはスロットテーブルに直接統合され得る。インデックスが、スロットテーブルの間接的なスロットが被参照オブジェクトに既に割り当てられていることを指示し、且つ、本機能がスロットテーブルのスロットを被参照オブジェクトに割り当てるとき、本機能はまた、被参照オブジェクトの持続性ポインタから割り当てられたスロットにマッピングすることを含むようにこのインデックスを更新するのが好ましい。
【００１９】
ステップ２０４では、本機能は、被参照オブジェクトに関する間接的なスロットへのポインタを含むスマートポインタで、ロードされたオブジェクトの持続性ポインタを置換する。ステップ２０４の一部では、本機能は、持続性ポインタをスマートポインタで置換し、スマートポインタによって包含されたポインタが、被参照オブジェクトを直接指し示すのではなく、間接的なスロットを指し示すスマートポインタに指示をストアする。ステップ２０４では、本機能が参照側オブジェクト３３３（図３）の持続性ポインタ３７１をスマートポインタ４３４で置換することが図４から分かる。スマートポインタ４３４は、スロット４３６へのポインタ、並びに、スマートポインタによって包含されたポインタ４６１が、被参照オブジェクトを直接指し示すのではなく、スロットを指し示す指示（「１」）４６２とを含む。アプリケーションが、保護されていないオブジェクトを操作するようにするメインメモリポインタの長さをスマートポインタの長さと同じにさせるために、本機能は、使用されていないビット位置のビットとしてこの指示を、間接的なスロットへのポインタにストアするのが好ましい。メモリバイト整列要求のために、間接的なスロットへのポインタの１又はそれ以上の最小有効ビットは使用されておらず、他のオブジェクトに対するポインタの最小有効ビットと同じくらいである。それゆえ、本機能は、スマートポインタに包含されたメインメモリソータの最小有効ビットのスマートポインタに指示をストアするのが好ましい。指示がまた、多くの他の方法で有利にストアされ得ることは、当業者には明らかであろう。ステップ２０５では、本機能は、次の持続性ポインタをロードされたオブジェクトで処理するために、ステップ２０２に戻ってループする。ステップ２０５の後、これらのステップは終了する。本機能が、図２に示したようにオブジェクトをロードし且つ保護しない後に、オブジェクトがロードされたアプリケーションはメインメモリのオブジェクトにアクセスすることができ、特に、スマートポインタ４３４（図４）としてオブジェクトに発生するスマートポインタをデリファレンスし得る。
【００２０】
図５は、アプリケーションプログラムによってスマートポインタをデリファレンスすることの試みに応じて本機能によって実行されるのが好ましいステップを示す流れ図である。これらのステップは好ましくは、スマートポインタが各々インスタンスであるクラスに関するデリファレンスオペレータの実施として定義される。Ｃ++プログラミング言語では、テンプレートが、これらのステップを包含するようにスマートポインタに関するデリファレンスオペレータを定義するのに使用され得る。
ステップ５０１では、値「１」をもったスマートポインタのビットワイズＡＮＤが１に等しいならば（即ち、スマートポインタが、被参照オブジェクトへの直接的なポインタではなくスロットへのポインタを含むことを示し、スマートポインタの最小有効ビットが「１」であるならば）、次いで、本機能はステップ５０３に続き、そうでなければ、スマートポインタに包含されたポインタが、被参照オブジェクトへの直接的なポインタであることを示し、このビットワイズＡＮＤの結果は「０」となり、本機能はステップ５０２に続く。ステップ５０２では、本機能は、オペレータをデリファレンスする標準ポインタを使用してスマートポインタにストアされた直接的なポインタをデリファレンスすることによって被参照オブジェクトを戻す。ステップ５０３では、本機能はスマートポインタの最小有効ビットを０から１に変更させる。ステップ５０４では、値「１」が「１」に等しい間、スロットのポインタのビットワイズＡＮＤがスロットポインタによって指し示されているならば（即ち、スロットのポインタが、被参照オブジェクトへの直接的なポインタではなく持続性ポインタであることを示し、最小有効ビットが「１」に等しいならば）、次いで、本機能はステップ５０７に続き、そうでなければ、スロットのポインタの最小有効ビットは「０」であり、スロットのポインタは、被参照オブジェクトへの直接的なポインタであり、本機能はステップ５０５へ続く。ステップ５０５では、本機能は、スマートポインタによって指し示されたスロットからスマートポインタに直接的なポインタをコピーする。ステップ５０６では、本機能は、オペレータをデリファレンスする標準ポインタを使用してスマートポインタにストアされた直接的なポインタをデリファレンスすることによって被参照オブジェクトを戻す。ステップ５０７では、本機能は、スマートポインタによって指し示されたスロットのポインタの最小有効ビットの「１」を「０」に変更する。ステップ５０８では、本機能は、スマートポインタによって指し示されたスロットに包含された持続性ポインタを使用してオブジェクトサーバから、被参照オブジェクトを得るために持続性オブジェクトシステムをコールする。ステップ５０８では、本機能は更に、スロットポインタによって指し示されたスロットに、ロードされた被参照オブジェクトへの直接的なポインタをストアする。ステップ５０８の後、本機能は、スマートポインタに対する、被参照オブジェクトへの直接的なポインタをコピーするため、且つ、被参照オブジェクトを戻すためにステップ５０５に続く。
【００２１】
図６は、図５に示したステップ実行した結果を示すメモリダイアグラムである。本機能がステップ５０８により、被参照オブジェクト６３７をロードした図４と、図６を比較することにより見出すことができる。ロードされた被参照オブジェクト６３７は好ましくは、被参照オブジェクトのスロットをスロットテーブルに配置するために、持続性ポインタから間接的なスロットにマップするスロットテーブルインデックスと関連して使用することができる、持続性ポインタ６３８自身を包含する。本機能は、被参照オブジェクト６３７への直接的なポインタをスロットポインタ６３４に、且つ、スマートポインタ６３４によって以前に指し示されたスロット６３６に更にストアしている。更に、被参照オブジェクト６３７の配置に関するバイト整列リクエストのために、これらのポインタが、被参照オブジェクトへの直接的なポインタであることを示し、スマートポインタ６３４とスロット６３６との両方の最小有効ビットは「０」である。
【００２２】
図５に示したデリファレンスオペレーションがスマートポインタに関して実施された後に、続いてデリファレンスオペレーションは早く進む。スマートポインタの最小有効ビットが「０」であるので、本機能は、スマートポインタ６３４の直接的なポインタ６６１によって指し示された参照側オブジェクト６３７を返すために、ステップ５０１及び５０２を単に実行する。この短くなったプロセスはメインメモリへの単一のアクセスのみを含むので、参照側オブジェクトへのポインタが別のポインタを介して常に間接的である在来の間接的なソフトウェアスウィズリング技術よりも２倍速い。
ある場合では、被参照オブジェクトはメモリから必ずアンロードされる。例は、ひょっとしたら、別のコンピュータシステムの別のアプリケーションが、正しいアクセスでオブジェクトをロードするのに必要な場合を含む。別の例は、オブジェクトによって占有されたメモリが別の目的のために使用され得る場合である。これらの状況では、本機能は、アプリケーションによって保留され、且つ、他のロードされた保護されていないオブジェクトにストアされたオブジェクトへのいかなるスマートポインタをも無効にしない方法でアンロードするためにオブジェクトを準備することができる。
【００２３】
図７は、アンロードするためのオブジェクトを準備するために、本機能によって実施されるのが好ましいステップを示す。本機能はまた、メインメモリ内の別のアドレスへの再配置に関するオブジェクトを準備するために、これらのステップを実行するのが好ましい。アンローディング又は再配置する前にオブジェクトを準備することは、オブジェクトの「アイドリング」として知られている。これらのステップは好ましくは、オブジェクトに割り当てられた間接的なスロットを識別することによってアンローディングするため準備するように、オブジェクトを識別する。ステップ７０１乃至７０３では、本機能は、アイドル状態であるオブジェクトへの直接的なポインタを包含する各スマートポインタを介してループし、該スマートポインタは、識別されたスロットにストアされたアイドル状態であるオブジェクトを介して直接的なポインタと同じ値を有する。好ましい実施形態では、ステップ７０１は、アイドル状態であるオブジェクトに割り当てられた間接的なスロットに関連したスマートポインタのリストをトラバースすることを含む。この実施形態は比較的低い時間コストを有するが、各間接的なスロットに関連したスマートポインタのリストを維持することを要求する。変形実施形態では、ステップ７０１は、メインメモリに作られている全てのスマートポインタのリストをトラバースすることを含む。かかる変形実施形態は、比較的大きな時間コストを有するという欠点を有するけれども、ストレージと、各間接的なスロットに関するスマートポインタのリストを保持することの処理要求とを回避するという利点を有する。ステップ７０２では、アイドル状態であるオブジェクトへの直接的なポインタを包含する各スマートポインタに関して、本機能は、スマートポインタの識別されたスロットへのポインタを直接的なポインタの適所にストアする。ステップ７０２の部分として、本機能はまた、スマートポインタがいま、被参照オブジェクトへの直接的なポインタではなく間接的なスロットへのポインタを含むことを指示するように、スマートポインタの最小有効ビットを「１」に変更する。ステップ７０３では、本機能は、アイドル状態であるオブジェクトへの直接的なポインタを包含する次のスマートポインタを処理するためにステップ７０１へ戻してループする。かかる各スマートポインタが処理された後、これらのステップは終了する。これらのステップの終了で、アイドル状態にされたオブジェクトへの直接的なポインタを包含するメインメモリにスマートポインタはない。むしろ、アイドル状態にされたオブジェクトを参照する各スマートポインタは、間接的なスロットを介する。
【００２４】
図８は、図７に示したステップを実行した結果を示すメモリダイアグラムである。本機能が、スマートポインタ６３４（図６）の直接的なポインタ６６１を、被参照オブジェクトに関するスロット８３６へのポインタで置換する図６と図８を比較することによって見出すことができる。本機能は更に、スマートポインタの最小有効ビットを「１」に変更し、スマートポインタが、被参照オブジェクトへの直接的なポインタではなく、間接的なスロットへのポインタを包含することを含む。
図９は、オブジェクトをアンロードするために本機能によって実施されるのが好ましいステップを示す流れ図である。ステップ９０１では、本機能は、図７に示したようにアンロードされているオブジェクトに対して設計された間接的なスロットをアイドル状態にさせる。ステップ９０２では、本機能は、アンロードされているオブジェクトによって占有されたメインメモリの部分を割り当て解除させる。ステップ９０３では、本機能は、アンロードされているオブジェクトに対して割り当てられた間接的なスロットにおける直接的なポインタを、アンロードされているオブジェクトへの持続性ポインタで置換する。次いで、これらのステップは終了する。アンロードされたオブジェクトへのスマートポインタが後でデリファレンスされるならば、本機能は、アンロードされたオブジェクトをオブジェクトサーバから再検索するために、間接的なスロットにストアされた持続性ポインタを使用する。
【００２５】
本機能が、オブジェクトをアンロードするために図９に示したステップを実行した後、メインメモリは図４に示された状態に戻される。すなわち、スマートポインタ４３４は、アンロードされたオブジェクトに割り当てあられた間接的なスロット４３６へのポインタ４６１を含む。間接的なスロット４３６は、本機能が被参照オブジェクトをリロードするのに使用することができる、被参照オブジェクトへの持続性ポインタを包含するスマートポインタ４６１は後でデリファレンスされる。
本機能はまた、メインメモリにロードされテいる間、被参照オブジェクトの再配置を行う。図１０は、オブジェクトをメインメモリに再配置するために本機能によって実行されるのが好ましいステップを示す流れ図である。ステップ１００１では、本機能は、図７に示したように再配置されているオブジェクトに割り当てられたスロットをアイドル状態にさせる。ステップ１００２では、本機能は、被参照オブジェクトをメインメモリの別の場所にコピーすることにより、且つ、被参照オブジェクトをフリープールに元々包含しているメモリを戻すことにより、被参照オブジェクトをメインメモリに再配置させる。ステップ１００３では、本機能は、被参照オブジェクトがステップ１００２で移動された新しい位置への直接的なポインタを、再配置されたオブジェクトに割り当てられたスロットにストアさせる。次いで、これらのステップは終了する。
【００２６】
本機能は、スロットポインタによってリファレンスされた全てのオブジェクトをアイドル状態にさせる処理を、何回も実行するのが好ましい。この処理は「大規模アイドリング」と呼ばれ、大規模なアイドリングから長い時間が過ぎた後に依然としてアイドル状態にあるスロットは、大規模アイドリング処理が実行されてからの間にデリファレンスされなかったスマートポインタに対応するものであるから、この処理は、本機能が頻繁にデリファレンスされていないスマートポインタを追跡するのを可能にする。
図１１は、大規模アイドリング処理を実行するために本機能によって実行されるのが好ましいステップを示す流れ図である。ステップ１１０１乃至１１０４では、本機能は、存在している各スマートポインタを介してループする。このループは好ましくは、スマートポインタが作り出されたとき又は壊れたとき、更新されている存在しているスマートポインタのリストをトラバースすることを含む。ステップ１１０２では、スマートポインタが、その最小有効ビットによって指示されているとき、被参照オブジェクトへの直接的なポインタを含むならば、次いで、本機能はステップ１１０３に進み、そうでなければ、本機能はステップ１１０４に進む。ステップ１１０３では、本機能は、「１」に変更されたその最小有効ビットを持った被参照オブジェクトに割り当てられたスロットのアドレス含む、被参照オブジェクトへの間接的なポインタを、スマートポインタにストアする。ステップ１１０４では、本機能は、次のスマートポインタを処理するためにステップ１１０１に戻ってループする。スマートポインタが残っていないとき、これらのステップは終了する。
【００２７】
あるプログラミング環境は、不要部分の整理と呼ばれる機構を提供し、それは即ち使用されていないデータ構造を識別し且つ割り当て解除するように、定期的に実行される処理である。多くのかかるプログラミング環境では、不要部分整理機構は、用いられている知られたオブジェクトに包含されたポインタが、用いられている知られたデータ構造を介して直接的又は間接的にアクセスされうる各データ構造にアクセスするために、再帰的にデリファレンスされることに応じて、「到達可能性アルゴリズム」を使用して実施される。どんな残りのデータ構造も、現在使用されていないと思われ、割り当て解除される。この形の不要部分の整理が採用されているプログラミング環境では、図１１に示されたステップを実行するのではなく、不要部分整理処理の部分としてポインタを再帰的にデリファレンスする間に出会う各スマートポインタをアイドリングすることによって、大規模アイドリングプロセスを実行するのが好ましい。このことにより、本機能は、図１１に示したステップによって利用される存在しているスマートポインタのリストを維持するコストを避けることができる。
【００２８】
アクセスされていないロードされた被参照オブジェクトによって占有されたメインメモリの部分を再生するために、本機能は、大規模アイドリングオペレーションを実行した後に、所定の時間にフラッシュオペレーションを実行するのが好ましい。フラッシュオペレーションでは、大規模アイドリングがよく考えられて使用されておらず、且つ、アンロードされているので、ある時間の後に依然としてアイドル状態にあるオブジェクトがパスされる。図１２は、フラッシュオペレーションを実行するために、本機能によって実行されるのが好ましいステップを示す流れ図である。ステップ１２０１乃至１２０３では、本機能は、用いられている各スマートポインタを介してループする。ステップ１２０２では、スロットが割り当てられた被参照オブジェクトへの直接的なポインタを含むスマートポインタがないことを意味し、スロットが依然としてアイドル状態であるならば、次いで、本機能は、スロットが割り当てられたオブジェクトをアンロードするためにステップ１２０４に続く。ステップ１２０２が１２０４にいった後、本機能は、次ぎに使用されるスロットを処理するためのステップ１２０１へ戻るようにループするためにステップ１２０３へ続く。使用されているスロットが残っていないとき、これらのステップは終了する。
【００２９】
本発明が好ましい実施形態を参照して示され且つ説明されているけれども、正式及び詳細な種々の変更又は修正が本発明の範囲から逸脱することなしになされることは当業者には理解されるであろう。例えば、不要部分の整理及びフラッシュオペレーションは、使用されていない被参照オブジェクトのアンローディングにおいて各々生じる種々の異なる仕方で実行され得る。例えば、本機能は、それらの最後のアイドリングの時間によってストアされたオブジェクトのリストを保持することができ、最も早く最後のアイドル状態になったオブジェクトを定期的にアンロードする。また、スマートポインタ及び間接的なスロットは、それらが、ポインタの最小有効ビットに「０」としてストアされているより、被参照オブジェクトへの直接的なポインタを含んでいるかどうかという他の指示を使用し得る。例えば、本機能は、ポインタから分離したフラグとしてこれらの指示をストアし得る。
【図面の簡単な説明】
【図１】本機能が好ましく作動する汎用コンピュータシステムのハイレベルブロック図である。
【図２】持続性オブジェクトをロードし且つデパッシベーションするための本機能によって実施されるのが好ましいステップを示す流れ図である。
【図３】ステップ２０１の実行結果を示すメモリダイアグラムである。
【図４】ステップ２０３及び２０４の実行結果を示すメモリダイアグラムである。
【図５】スマートポインタをデリファレンスするためのアプリケーションプログラムによる試みに応じた使用率によって実行されるのが好ましいステップを示す流れ図である。
【図６】図５に示したステップの実行結果を示すメモリダイアグラムである。
【図７】アンロードに関するオブジェクトを準備するために本機能によって実行されるのが好ましいステップを示す。
【図８】図７に示したステップの実行結果を示すメモリダイアグラムである。
【図９】オブジェクトをアンロードするために本機能によって実行されるのが好ましいステップを示す流れ図である。
【図１０】メインメモリにおけるオブジェクトを再配置するために本機能によって実行されるのが好ましいステップを示す流れ図である。
【図１１】大規模アイドリングプロセスを実行するために本機能によって実行されるのが好ましいステップを示す流れ図である。
【図１２】フラッシュ操作を実行するために本機能によって実行されるのが好ましいステップを示す流れ図である。
【符号の説明】
１００  オブジェクトアクセスコンピュータシステム
１１０  ＣＰＵ（中央処理装置）
１２０  入力／出力デバイス
１２１  記憶装置
１２２  ネットワーク接続
１２３  リムーバブル媒体ドライブ
１３０  メインメモリ
１３１  持続性オブジェクトシステム
１３２  スウィズリング機能
１３３  保護されていないオブジェクト
１３４  スマートポインタ
１３５  スロットテーブル
１３６  間接的なスロット
１３７  被参照オブジェクト
１５０  オブジェクトサーバコンピュータシステム
１５１  プロセッサ
１５２  ネットワーク接続
１５３  オブジェクトサーバ
３３０  メインメモリ
３３３  参照側オブジェクト
３３５  スロットテーブル
３７１  持続性ポインタ
４３０  メインメモリ
４３５  スロットテーブル
４６１  スマートポインタ
６３０  メインメモリ
６３３  参照側オブジェクト
６３５  スロットテーブル
６３７  被参照オブジェクト
６３８  持続性ポインタ
６６１  スマートポインタ
８３０  メインメモリ
８３３  参照側オブジェクト
８３５  スロットテーブル
８３７  被参照オブジェクト
８３８  持続性ポインタ
８６１  スマートポインタ
【図１】
0004176857.tif 000002
【図２】
0004176857.tif 000003
【図３】
0004176857.tif 000004
【図４】
0004176857.tif 000005
【図５】
0004176857.tif 000006
【図６】
0004176857.tif 000007
【図７】
0004176857.tif 000008
【図８】
0004176857.tif 000009
【図９】
0004176857.tif 000010
【図１０】
0004176857.tif 000011
【図１１】
0004176857.tif 000012
【図１２】
0004176857.tif 000013