(57)【要約】【課題】  ファイルシステムなど、階層状の名前空間を表すＢツリー中の連続キーを、推定時間効率Ｏ（ｌｏｇＮ）で名前変更し、ここでＮはＢツリーのノードの数である効率的な方法を提供する。【解決手段】  名前を変更される連続キーはすべて、最初に元のＢツリーから削除されて、トリムＢツリーを形成し、削除されたノードは、別個の一時的な抽出Ｂツリーに格納される。抽出Ｂツリー中のノードは次いで、名前を変更され、名前を変更された抽出Ｂツリーは、トリムＢツリーに挿入されて、名前を変更されたキーを含む最終的なＢツリーを形成する。【選択図】  図３
2005302038.tif 000002
【特許請求の範囲】
【請求項１】
複数のキーを格納している元のＢツリー中で、ある範囲の連続キーの値を変更する方法であって、
前記元のＢツリーから前記範囲の連続キーを削除するステップであって、前記範囲の連続キーの前記削除は、前記元のＢツリーをトリムツリーに変換するステップと、
前記Ｂツリーから削除された前記範囲の連続キーを格納して、抽出ツリーを形成するステップと、
前記抽出ツリーの前記キーの前記値を変更して、修正された抽出ツリーを形成するステップと、
前記修正された抽出ツリーを前記トリムツリーに挿入して、最終的なＢツリーを形成するステップとを備えることを特徴とする方法。
【請求項２】
前記元のＢツリーは、階層状の名前空間を表すことを特徴とする請求項１に記載の方法。
【請求項３】
前記元のＢツリーは、ファイルシステムの階層状の名前空間を表し、前記範囲の連続キーは、前記ファイルシステムのディレクトリに属し、前記範囲の連続キーの前記値を変更する前記ステップは、名前を変更される前記ディレクトリに関連することを特徴とする請求項２に記載の方法。
【請求項４】
前記元のＢツリー中の各キーは、前記ディレクトリの名前を変更する前記ステップ以前の、前記ファイルシステムのファイルまたはディレクトリに対するパス名を含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記挿入するステップに先立って、前記トリムツリーを平衡させるステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記挿入するステップは、前記最終的なＢツリーを平衡させるステップを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記変更するステップは、前記抽出ツリーのルートノードの接頭辞フィールドを変更するステップを含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記修正された抽出ツリーを前記トリムツリーに挿入する前記ステップは、厳密な挿入を伴うことを特徴とする請求項１に記載の方法。
【請求項９】
複数のキーを格納している元のＢツリー中で、ある範囲の連続キーの値を変更するステップを実施するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記ステップは、
前記元のＢツリーから前記範囲の連続キーを削除するステップであって、前記範囲の連続キーの前記削除は、前記元のＢツリーをトリムツリーに変換するステップと、
前記Ｂツリーから削除された前記範囲の連続キーを格納して、抽出ツリーを形成するステップと、
前記抽出ツリーの前記キーの前記値を変更して、修正された抽出ツリーを形成するステップと、
前記修正された抽出ツリーを前記トリムツリーに挿入して、最終的なＢツリーを形成するステップとを備えることを特徴とするコンピュータ可読媒体。
【請求項１０】
前記元のＢツリーは、階層状の名前空間を表すことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記元のＢツリーは、ファイルシステムの階層状の名前空間を表し、前記範囲の連続キーは、前記ファイルシステムのディレクトリに属し、前記範囲の連続キーの前記値を変更する前記ステップは、名前を変更される前記ディレクトリに関連することを特徴とする請求項１０に記載のコンピュータ可読媒体。
【請求項１２】
前記元のＢツリー中の各キーは、前記ディレクトリの名前を変更する前記ステップ以前の、前記ファイルシステムのファイルまたはディレクトリに対するパス名を含むことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記挿入するステップに先立って、前記トリムツリーおよび抽出ツリーを平衡させるステップを実施するさらなるコンピュータ実行可能命令を有することを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１４】
前記挿入するステップは、前記最終的なＢツリーを平衡させるステップを含むことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１５】
前記変更するステップは、前記抽出ツリーのルートノードの接頭辞フィールドを変更するステップを含むことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１６】
前記修正された抽出ツリーを前記トリムツリーに挿入する前記ステップは、厳密な挿入を伴うことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１７】
ファイルシステム内のディレクトリの名前変更に関連して、前記ファイルシステムを表すＢツリーを修正する方法であって、
前記Ｂツリーから、名前変更される前記ディレクトリのキーを削除するステップであって、前記ディレクトリの前記キーの前記削除は、前記Ｂツリーをトリムツリーに変換するステップと、
前記Ｂツリーから削除された前記ディレクトリの前記キーを、抽出ツリーに格納するステップと、
前記抽出ツリーの前記キーの前記値を変更して、前記ディレクトリの新しい名前を反映させるステップと、
前記キーの値が修正された前記抽出ツリーを前記トリムツリーに挿入して、最終的なＢツリーを形成するステップとを含むことを特徴とする方法。
【請求項１８】
前記Ｂツリー中の各キーは、前記ファイルシステムのファイルまたはディレクトリに対するパス名を含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記挿入するステップに先立って、前記トリムツリーを平衡させるステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２０】
前記挿入するステップは、前記最終的なＢツリーを平衡させるステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２１】
前記抽出ツリーの前記キーの前記値を変更する前記ステップは、前記抽出ツリーのルートノードの接頭辞フィールドを変更するステップを含むことを特徴とする請求項１７に記載の方法。
【請求項２２】
ファイルシステム内のディレクトリの名前変更に関連して、前記ファイルシステムを表すＢツリーを修正するステップを実施するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記ステップは、
前記Ｂツリーから、名前を変更される前記ディレクトリのキーを削除するステップであって、前記ディレクトリの前記キーの前記削除は、前記Ｂツリーをトリムツリーに変換するステップと、
前記Ｂツリーから削除された前記ディレクトリの前記キーを、抽出ツリーに格納するステップと、
前記抽出ツリーの前記キーの前記値を変更して、前記ディレクトリの新しい名前を反映させるステップと、
前記キーの値が修正された前記抽出ツリーを前記トリムツリーに挿入して、最終的なＢツリーを形成するステップとを備えることを特徴とするコンピュータ可読媒体。
【請求項２３】
前記Ｂツリー中の各キーは、前記ファイルシステムのファイルまたはディレクトリに対するパス名を含むことを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記挿入するステップに先立って、前記トリムツリーおよび抽出ツリーを平衡させるステップを実施するコンピュータ実行可能命令を有することを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２５】
前記挿入するステップは、前記最終的なＢツリーを平衡させるステップを含むことを特徴とする請求項２２に記載のコンピュータ可読媒体。
【請求項２６】
前記抽出ツリーの前記キーの前記値を変更する前記ステップは、前記抽出ツリーのルートノードの接頭辞フィールドを変更するステップを含むことを特徴とする請求項２２に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、データを格納し組織化するコンピュータデータ構造に属し、より詳細には、階層状の名前空間を表すＢツリーデータ構造に格納されているキーに対する名前変更操作に属する。
【背景技術】
【０００２】
Ｂツリーとは、特にデータレコードがハードドライブなどの比較的遅い記憶媒体に格納されている場合、効率的なデータ取出しのために、データレコードの組織化用に設計された特殊な多分木データ構造である。Ｂツリー中の各ノードは、対応するデータレコード、およびそのノードの子ノードへのポインタを識別する多数のキーを格納する。ノードが格納し得るキーの数は、Ｂツリーの「オーダー」に依存する。オーダーがＫのＢツリーにおいて、各ノードは、Ｋから２Ｋ個のキーを含むべきである。より大きいＫを使うと、Ｂツリーは、所与の１組のデータレコードに対して、高さ（すなわち、深さ）をより小さくすることができ、そうすることによって、所望のデータレコードを配置するのに必要とされ得るディスクアクセス回数を減らすことができる。
【０００３】
Ｂツリーデータ構造は、様々なタイプのデータの組織化に使うことができる。たとえば、Ｂツリー中のキーとして名前が格納される階層状の名前空間に対して、Ｂツリーを使うことができる。一例として、ファイルシステムのメタデータを格納するＢツリーの使用が提案されている。この適用例において、Ｂツリーのキーは、各ファイルまたはディレクトリの完全パス名である。このようなデータ構造に対して、ほとんどのファイルシステム操作を効率的に実施することができる。それにも関わらず、重大な例外が、名前変更操作であった。ファイルシステムのディレクトリ名が変更されるとき、そのディレクトリ内のファイルおよびサブディレクトリに対応するＢツリー中のノードすべてに対するキーは、それに応じて変更されなければならない。単純に名前変更操作を実施すると、名前を変更されるディレクトリ内のすべてのファイルまたはサブディレクトリに影響を与えることになり、非常に効率が悪くなり得る。従来の手法を用いた名前変更操作は非効率的だったので、Ｂツリーデータ構造は、ファイルシステムの管理に適さないと見なされていた。
【発明の開示】
【課題を解決するための手段】
【０００４】
上記のことを鑑みて、本発明は、Ｂツリー中の連続キーの名前変更操作に関連して、階層状の名前空間を表すＢツリーを修正する方法を提供する。本発明によると、階層状の名前空間を表すＢツリーに格納されている１組の連続キーの名前が変更されるとき、名前を変更されるキーがすべて、元のＢツリーから削除され、別個の一時的な「抽出ツリー」に格納される。削除により、元のＢツリーは、「トリム（ｔｒｉｍｍｅｄ）ツリー」となる。抽出ツリー中のキーは次いで、名前を変更され、名前を変更された抽出ツリーは、トリムツリーに挿入されて、名前を変更されたキーを有する、階層状の名前空間を表す最終的なＢツリーを形成する。本発明の方法は非常に効率がよく、推定時間計算量はＯ（ｌｏｇＮ）であり、ＮはＢツリー中のノードの数である。階層状の名前空間の例は、ファイルシステムであり、名前変更操作は、ファイルシステム内のディレクトリ名を変更することであり、ディレクトリ中のファイルおよびサブディレクトリの名前の修正を含む。本発明の方法の効率性により、Ｂツリーデータ構造を用いた、ファイルシステムのメタデータの格納が実行可能性の高いものとなる。
【０００５】
本発明の追加の特徴および利点が、添付の図面を参照して進められる、例示的な実施形態の以下の詳細な説明から明らかになるであろう。
【０００６】
添付の特許請求の範囲により本発明の特徴を具体的に定義するが、本発明、ならびにその利点は、以下の詳細な説明を添付の図面と併せ読むことによって最もよく理解されよう。
【発明を実施するための最良の形態】
【０００７】
ファイルシステムなど、階層状の名前空間を表すＢツリー中の１組の連続キーの名前変更を反映するようにＢツリーを修正する方法およびシステムを、特定の実施形態を参照して説明する。本明細書に記載する方法およびシステムは例示に過ぎず、本発明の精神および範囲から逸脱することなく変形形態も可能であることが、当業者には容易に理解されよう。
【０００８】
本発明は、以下の詳細な説明を添付の図面と併せ読むと、より完全に理解されよう。本説明では、同じ番号は、本発明の様々な実施形態において同様の要素を指す。適切なコンピューティング環境において実施されるものとして、本発明を示す。そうすることが必要なわけではないが、パーソナルコンピュータによって実行される、プロシージャなどのコンピュータ実行可能命令という一般的な状況において、本発明を説明する。概して、プロシージャは、特定のタスクを実施しまたは特定の抽象データタイプを実装するプログラムモジュール、ルーチン、関数、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、本発明は、可搬型デバイス、マルチプロセッサシステム、およびマイクロプロセッサベースのまたはプログラム可能な家電製品などを含む他のコンピュータシステム構成を用いて実施できることが当業者には理解されよう。本発明は、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクを実施する分散型コンピューティング環境でも実施することができる。分散型コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートメモリ記憶装置両方に配置することができる。コンピュータシステムという用語は、分散型コンピューティング環境において見ることができるような、コンピュータからなるシステムを指すのに使うことができる。
【０００９】
図１は、本発明を実施することができる、適切なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に対するどのような限定を示唆することも意図していない。コンピューティング環境１００は、例示的な動作環境１００に示すどのコンポーネントまたはその組合せに関するどのような依存も要件も有していると解釈されるべきではない。少なくとも本発明の一実施形態は、例示的な動作環境１００に示す各コンポーネントを含むが、本発明の、より典型的な別の実施形態では、必須でない一部または全部のコンポーネント、たとえば、ネットワーク通信に必要とされるもの以外の入力／出力デバイスは含まない。
【００１０】
図１を参照すると、本発明を実施する例示的なシステムは、汎用コンピューティングデバイスを、コンピュータ１１０の形で含む。コンピュータ１１０のコンポーネントは、処理装置１２０と、システムメモリ１３０と、システムメモリなど様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１とを含むことができるが、それに限定されない。システムバス１２１は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスなどいくつかのタイプのバス構造のいずれでもよい。
【００１１】
コンピュータ１１０は通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスすることができるとともに揮発性媒体および不揮発性媒体、取外し可能媒体および固定式媒体両方を含む、使用可能などの媒体でもよい。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含み得る。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するためのどの方法でも技術でも実施される揮発性媒体および不揮発性媒体、取外し可能媒体および固定式媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは、所望の情報を格納するのに使うことができるとともにコンピュータ１１０によってアクセスすることができる他のどの媒体も含むが、それに限定されない。通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、変調されたデータ信号、たとえば搬送波や他の移送機構として具体化し、どの情報配信媒体も含む。「変調されたデータ信号」という用語は、信号内に情報を符号化するようにその特性の１つまたは複数が設定または変更された信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、ならびに音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。上記のどの組合せも、やはりコンピュータ可読媒体の範囲に含まれる。
【００１２】
システムメモリ１３０は、コンピュータ記憶媒体を、ＲＯＭ（読出し専用メモリ）１３１およびＲＡＭ（ランダムアクセスメモリ）１３２など、揮発性および／または不揮発性メモリの形で含む。限定ではなく例として、図１では、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００１３】
コンピュータ１１０は、他の取外し可能および固定式、揮発性および不揮発性コンピュータ記憶媒体も含み得る。単なる例として、図１では、固定式不揮発性磁気媒体からの読出しまたはそこへの書込みを行うハードディスクドライブ１４１、取外し可能な不揮発性磁気ディスク１５２からの読出しまたはそこへの書込みを行う磁気ディスクドライブ１５１、および、ＣＤＲＯＭなど取外し可能な不揮発性光ディスク１５６からの読出しまたはそこへの書込みを行う光ディスクドライブ１５５を図示する。例示的な動作環境で使うことができる、他のコンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどを含むが、それに限定されない。ハードディスクドライブ１４１は通常、インターフェース１４０などの固定式メモリインターフェースによって、システムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インターフェース１５０などの取外し可能メモリインターフェースによって、システムバス１２１に接続される。コンピュータシステムは、それ以外のタイプの取外し可能不揮発性記憶デバイス用のインターフェースを含み得る。たとえば、コンピュータは、ＵＳＢフラッシュドライブ（ＵＦＤ）１５４を受け付けることができるＵＳＢポート１５３も、ＳＤメモリカード１５８を受け付けることができるＳＤカードスロット１５７も備えることができる。他のタイプの取外し可能記憶媒体も、本発明の実装に使うことができる。
【００１４】
上述し、かつ図１に示すドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１１０のための他のデータの格納を可能にする。図１では、たとえば、ハードディスクドライブ１４１を、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして図示してある。こうしたコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じでも、異なってもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、少なくとも異なるものであることを示すために、ここでは異なる番号を与えてある。ユーザは、タブレット、あるいは電子デジタイザ１６４、マイクロホン１６３、キーボード１６２、一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス１６１などの入力デバイスを介して、コマンドおよび情報をコンピュータ１１０に入力することができる。こうしたおよび他の入力デバイスはしばしば、システムバスに結合されるユーザ入力インターフェース１６０を介して処理装置１２０に接続されるが、パラレルポート、ゲームポート、ＵＳＢ（ユニバーサルシリアルバス）など、他のインターフェースおよびバス構造によって接続することもできる。モニタ１９１または他のタイプの表示デバイスも、ビデオインターフェース１９０などのインターフェースによってシステムバス１２１に接続される。モニタ１９１は、タッチスクリーンパネルなどと統合することもできる。モニタおよび／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータでのように、コンピューティングデバイス１１０が組み込まれているハウジングに物理的に結合できることに留意されたい。さらに、コンピューティングデバイス１１０などのコンピュータは、出力周辺インターフェース１９４などを介して接続することができるスピーカ１９７およびプリンタ１９６など、他の周辺出力デバイスも含み得る。
【００１５】
コンピュータ１１０は好ましくは、リモートコンピュータ１８０など、１つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク接続された環境において動作し、または動作するように適合可能である。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ピアデバイス、または他のネットワークノードでよく、通常、コンピュータ１１０に関連して上述した要素の一部または全部を含むが、図１にはメモリ記憶装置１８１のみを示してある。図１に示す論理接続は、ＬＡＮ１７１およびＷＡＮ１７３を含むが、他のネットワークを含むこともできる。たとえば、本発明において、コンピュータ１１０は、データがそこから移行されているソースマシンを含むことができ、リモートコンピュータ１８０は、宛先マシンを含むことができる。ただし、ソースおよび宛先マシンは、ネットワークまたはそれ以外のものによって最初から接続される必要はなく、データは、ソースプラットフォームによる書込み、および宛先プラットフォームまたはプラットフォーム群による読出しが可能などの媒体によっても移行することができることに留意されたい。たとえば、このような媒体の非限定的な一例が、メモリ「キー」またはメモリ「スティック」と呼ばれることもあるポータブルフラッシュメモリ媒体である。他の非限定的な例を後で挙げる。
【００１６】
ＬＡＮ環境において使われる場合、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続可能である。コンピュータ１１０は、モデム１７２、または、ＷＡＮ１７３を介して通信を確立する他の手段も含む。モデム１７２は、内部にあっても外部にあってもよく、ユーザ入力インターフェース１６０または他の適切な機構によってシステムバス１２１に接続することができる。ネットワーク接続された環境では、コンピュータ１１０に関連して図示したプログラムモジュールまたはその一部は、リモートメモリ記憶装置に格納することができる。限定ではなく例として、図１では、リモートアプリケーションプログラム１８５を、メモリ装置１８１に常駐するものとして示す。図示したネットワーク接続は例示であり、コンピュータ間の通信リンクを確立する他の手段も使うことができることが理解されよう。
【００１７】
図２に移ると、本発明は、名前空間の名前がＢツリーのノードでキーとして格納される、階層状の名前空間を表すＢツリーデータ構造において、連続キーの名前を変更する効率的な方法を対象とする。本明細書で使用する「連続キー」という用語は、所与のキー値の範囲内である、Ｂツリー中のすべてのキーを意味する。こうしたキーは、キーの値に基づいて順番通りにＢツリーに格納されるが、キーが格納されるノードは、Ｂツリーの異なるレベルにあり得る。階層状の名前空間は、コンピュータ科学においてあらゆる所に存在する。階層状の名前空間の例は、たとえば、インターネット上でコンピュータの名称を探すドメインネームシステム（ＤＮＳ）、ならびに企業ネットワーク上でエンティティの名前および属性を格納するのに使われるアクティブディレクトリなどを含む。アクティブディレクトリは、マイクロソフトコーポレーションの製品である。以下の説明において、階層状の名前空間はファイルシステムの名前空間であり、名前変更操作がファイルシステムのディレクトリ名を変更する実施形態に関連して、本発明を説明する。名前変更操作において、修正される連続キーの組は、ディレクトリ内でのファイルおよびサブディレクトリの名前を表す。ただし、本発明の方法は、ファイルシステムの名前変更に限定されず、階層状の名前空間を表すどのＢツリー構造中の連続キーの名前も変更する広い適用範囲において使用できることが理解されよう。
【００１８】
図２に示すように、Ｂツリー２００は、ルートノード２１０、１つまたは複数の中間レベルのノード２２０、および多数のリーフノード２３０を有するツリー構造でつながっている多数のノードをもつ。Ｂツリーは、Ｋという「オーダー」を有し、Ｋは、１または２以上であり得る整数である。数２Ｋは、各ノードがもち得る子ノードの最大数である。キーは、ファイルのキーシーケンス順を指すことができるように、たとえばアルファベット順という自然な順序をもつ。
【００１９】
本発明の一実施形態において、Ｂツリーは、ファイルシステムにおけるディレクトリおよびファイルのメタデータを格納するのに使われて、ディレクトリおよびファイルが迅速に位置決めされアクセスされることを可能にする。Ｂツリーのキーは、ファイルシステムの対応するファイルおよびサブディレクトリのフルパス名である。たとえば、Ｂツリー中のあるノードのキーは、Ａ／ＭｙＤｏｃｕｍｅｎｔｓ／Ｌｅｔｔｅｒｓ／Ｌｅｔｔｅｒ１とすることができ、ここでＬｅｔｔｅｒ１は、Ｌｅｔｔｅｒｓというディレクトリ内のファイルであり、Ｌｅｔｔｅｒｓは、ＭｙＤｏｃｕｍｅｎｔｓというディレクトリにあり、ＭｙＤｏｃｕｍｅｎｔｓは、ディレクトリＡにある。各ファイル取出しのためのディスクアクセス数を最少にするようにツリーを最適化するために、Ｂツリーは、Ｂツリー中の各ノードがＮ個のキーおよびＮ＋１個のポインタをもつように「平衡（ｂａｌａｎｃｅｄ）」しており、ＮはＫから２Ｋの間である。各ノードのポインタおよびキーは、ｐ０ｖ１ｐ１ｖ２ｐ２．．．ｖＮｐＮの形で配列され、ここでｐｉはｉ番目のポインタであり、ｖｉは、ノードのｉ番目のキーである。各ポインタは、（ノードがリーフノードである場合を除いて）独自のキーおよびポインタをもち得る子ノードをポイントする。ファイルシステムのディレクトリレベルは、ファイルシステムのディレクトリパスを格納するＢツリーのノードレベルに対応しなくてよいことに留意されたい。
【００２０】
Ｂツリーによって表されるファイルシステム内のディレクトリ名が変更されると、ディレクトリのパス名ならびにそのディレクトリ内のサブディレクトリおよびファイルがすべて変更される。この場合、名前を変更されるべきディレクトリのファイルおよびサブディレクトリすべての名前は、Ｂツリー中の１組の連続キーを形成するが、キーは、ツリー構造の異なるレベルのノードに格納することができる。ディレクトリ名を変更した結果、新しいパス名用に多数の新しいキーが作成される。Ｂツリーから、古いパス名用の既存のキーを除去しなければならず、Ｂツリー中の適切な位置に新しいキーを追加しなければならない。本発明は、１組の連続キーの名前を変更するＢツリーの修正を、推定時間計算量Ｏ（ｌｏｇＮ）で効率的に実施させる機構を提供し、ＮはＢツリー中のノードの総数である。
【００２１】
Ｂツリー中の連続キーの名前を変更する、本発明の方法の概念を、ファイルシステムがＢツリーで表され、名前変更操作がファイルシステム内のディレクトリ名の変更を伴う、図３〜５に示す実施形態を参照して説明する。図３において、Ｂツリー（Ｔで示す）は、ファイルシステム内のディレクトリ名が変更される前のファイルシステムを表す。ディレクトリ名を変更することによって作成された新しいキーを含むように元のＢツリーＴを修正するプロセスは、元のＢツリーからの、２つの一時的なデータ構造の生成を伴う。２つの一時的なデータ構造は、従来の意味でのＢツリーとほぼ同じだが、全く同じではない、ツリーと類似した構造である。具体的には、１つの一時ツリー（Ｔ’で示す）が、元のＢツリーＴから名前変更されるディレクトリのファイルおよびサブディレクトリ用のキーをすべて削除することによって生成される。この一時ツリーＴ’は、「トリムツリー」と呼ばれる。図３において、元のＢツリーから削除されるキーを含むノードの部分は、説明のために分けて示して（ｈａｓｈｅｄ）ある。元のＢツリーＴから削除されたこうしたキーは、「抽出ツリー」と呼ばれる第２のツリーデータ構造（Ｓで示す）に格納される。
【００２２】
トリムツリーＴ’および抽出ツリーＳは両方とも、過少（ｕｎｄｅｒ−ｆｕｌｌ）、すなわち、ノードがそれぞれ、少なくともＫ個のキーをもつことができないので、Ｂツリーの正規の定義を満たすことができない。本発明の目的のために、オーダーがＫの「過少Ｂツリー」が、Ｋ個より少ないキーをノードが含み得るという点を除いてオーダーがＫのＢツリーの条件をすべて満たすデータ構造として定義される。したがって、トリムツリーＴ’および抽出ツリーＳは、過少Ｂツリーとすることができる。ＢツリーＴを修正するプロセスで生成される一時ツリーＴ’およびＳは、プロセスのどこかの時点では過少でも過剰（ｏｖｅｒ−ｆｕｌｌ）でさえもよいということを理解した上で、「Ｂツリー」と呼ばれる。
【００２３】
ここで図４を参照すると、トリムツリーＴ’および抽出ツリーＳが構築された後、抽出ツリーＳ中のキーは、ディレクトリ名の変更を反映するように修正される。キー修正の結果、Ｓ’で示す、修正された抽出ツリーが生じる。Ｓ’中の各キーは、名前を変更されたディレクトリの、対応するファイルまたはサブディレクトリの新しいパス名である。修正された抽出ツリーＳ’は次いで、トリムツリーＴ’に挿入される。キーの値が変更されているので、ツリーＳ’のキーが挿入されるべきトリムツリー中の場所は、元のツリーからキーが削除された場所とは異なることが理解されよう。ここで、トリムツリーＴ’にツリーＳ’を挿入した結果生じる最終的なＢツリーＴ”は、ディレクトリ名が変更された後のファイルシステムを表す。
【００２４】
次に、本発明の実施形態の命名プロセスを、たとえば図５を参照して高度な概念レベルで要約する。説明しやすくするために、「Ｙ」という名前のディレクトリが、「Ｚ」に名前変更されるものと仮定する。Ｂツリーの修正は、最初に、「Ｙ／」で始まるすべてのキーをＢツリーＴから除去する。この例では、ディレクトリコンポーネントは、特殊文字「／」で区切られると仮定する。ディレクトリのキーを除去すると、元のＢツリーＴは、過少であり得る新しいＢツリーＴ’になり、除去されたキーは、過少であり得る別の新しいＢツリーＳに格納される（ステップ５１０）。抽出ツリーＳ中のキーは次いで、「Ｙ／」ではなく「Ｚ／」という接頭辞をもつように変更される。その結果、過少であり得るＢツリーＳ’が生じる（ステップ５２０）。その後、修正された抽出ツリーＳ’がトリムツリーＴ’に挿入されて、名前を変更されたディレクトリをもつファイルシステムを表す、新しいＢツリーＴ”を形成する（ステップ５３０）。図５のこうした３つのステップをそれぞれ、後でより詳細に述べる。
【００２５】
次に、図６を参照して削除操作を詳しく説明する。最初に、ディレクトリＹの名前変更は、以下の範囲クエリを満たすすべてのキーνに影響を与えることに留意されたい。
【００２６】
「Ｙ／」≦ν≦「Ｙ／∞」      （１）
上式で、記号「∞」は、キーの作成に使われる英数字記号の組の中のすべての文字より大きくなるように定義された特殊文字である。（１）の範囲クエリを満たすキーがすべて、元のＢツリーＴから削除され、新しいツリーＳ中に置かれる。
【００２７】
Ｂツリー中での名前変更を扱う、コンピュータプログラムによって実施される削除プロセスは概して、以下のように説明することができる。名前変更プログラムは、元のＢツリーＴを下り、範囲クエリを満たすキーを探し、たとえばレベルＬで、このようなキーを含むノードを見つけると止まる（ステップ６１０）。プログラムは、このノードにある、範囲内に収まるキーすべておよびキーの間のポインタを除去し、新しいノード、すなわちＳにおいてレベルＬとなるように定義される、抽出ツリーＳのルートノードに配置する（ステップ６２０）。プログラムは次いで、ツリーＴ中の現在のノードから、２つの別個のパスに沿ってツリーＴを下る。第１のパスは「Ｙ／」に続き、第２のパスは「Ｙ／∞」に続く。訪れたすべてのノードで、そのノードにある範囲内キーがすべて削除され、キーが除去されたＴの同じレベルにある、ツリーＳの新しいノードに置かれる。新しいノードの親は、Ｔ中のパスを下る際にツリーＳ中の直前のレベルで作成されたノードである（ステップ６３０）。プログラムは、２つのパスそれぞれに沿ってリーフノードに到達するまで継続する。その時点で、プログラムは、２つの一時ツリーＴ’およびＳ中のすべての過少および過剰ノードを調整する（ステップ６４０）。
【００２８】
一実施形態で実装される、削除操作の詳細なステップを次に説明する。範囲内キーを含む最上位ノードを見つけるために、プログラムは、変数ｃｕｒｒｅｎｔＮｏｄｅをＴのルートに設定する。ｃｕｒｒｅｎｔＮｏｄｅの内容は、ｐ０ｖ１ｐ１ｖ２ｐ２．．．ｖｋｐｋと示すことができる。これは、ｃｕｒｒｅｎｔＮｏｄｅとして識別されるノードがｋ個のキーｖ１、ｖ２、．．．、ｖｋを含み、そのノードのｋ＋１個の子ポインタがｐ０、ｐ１、ｐ２、．．．、ｐｋであることを意味する。ポインタｐｉに従うことによって得られるノードは、ｆ（ｐｉ）と示される。ｃｕｒｒｅｎｔＮｏｄｅ中のどのキーも（１）の範囲クエリを満たさない場合、プログラムは、ｖｉ＜「Ｙ／」＜「Ｙ／∞」＜ｖｉ＋１となるようなｉを見つけ、ｃｕｒｒｅｎｔＮｏｄｅ＝ｆ（ｐｉ）と設定する。プログラムは次いで、ｃｕｒｒｅｎｔＬｅｖｅｌをｃｕｒｒｅｎｔＮｏｄｅの高さに設定する。高さは、高さが１である、Ｂツリーのリーフからカウントされる。  
【００２９】
プログラムは、元のＢツリーＴにおいて範囲クエリを満たすキーを含むノードを見つけると、抽出ツリーＳのルートノードを作成する。そのようなノードを見つけるために、プログラムは、ｖｉ＜「Ｙ／」≦ｖｉ＋１となるようなｉ、およびｖｊ＜「Ｙ／∞」＜ｖｊ＋１となるようなｊを見つける。プログラムは次いで、ｃｕｒｒｅｎｔＮｏｄｅの内容を
ｐ０ｖ１ｐ１ｖ２ｐ２．．．ｐｉ−１ｖｉｐｉｖｊ＋ｉｐｊ＋ｌ．．．ｖｋｐｋ      （２）
となるように設定することによって、ｃｕｒｒｅｎｔＮｏｄｅから範囲内キーを削除する。ｃｕｒｒｅｎｔＮｏｄｅは、そのキーのいくつかが除去された結果、過少になり得ることに留意されたい。この問題は、後で説明するように、後のステップで対処される。
【００３０】
プログラムは次いで、新しい（過少であり得る）ＢツリーＳの新しいノードＳｒｏｏｔＮｏｄｅを作成し、このノードに、ｃｕｒｒｅｎｔＮｏｄｅから削除されたキーおよびポインタからなる、以下の内容を与える。
【００３１】
ｖｉ＋１ｐｉ＋１．．．ｐｊ−１ｖｊ      （３）
この組合せは、最初および最後の子ポインタが欠けているので、まだ有効なＢツリーノードではないことに留意されたい。こうした２つのポインタは、最初の子ポインタを新規作成ノード、すなわちＳｌｅｆｔＮｏｄｅのアドレスに設定し、最後の子ポインタを別の新規作成ノード、すなわちＳｒｉｇｈｔＮｏｄｅのアドレスに設定することによって追加される。ＳｒｏｏｔＮｏｄｅは過少であり得るが、構成によってＳは過少Ｂツリーでよいので、それに対するアクションは行われないことに留意されたい。また、ｃｕｒｒｅｎｔＮｏｄｅの元の内容全体が、ｐｊを除いて（２）または（３）のどちらかに保存されており、この保存は意図的である。現時点で親のないノードｆ（ｐｊ）は、後のステップで救済され、ｆ（ｐｉ）とマージされる。
【００３２】
名前変更プログラムは次いで、ＢツリーＴの範囲内ノードの左および右側の境界を下り、Ｔ中で見つかった範囲内キーをツリーＳに転送する。その目的のために、プログラムは、ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅ＝ｆ（ｐｉ）と設定し、ｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅ＝ｆ（ｐｊ）と設定する。プログラムはさらに、ｃｕｒｒｅｎｔＬｅｖｅｌ＝ｃｕｒｒｅｎｔＬｅｖｅｌ−１と設定する。ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅの内容は、ｑ０ｕ１ｑ１ｕ２．．．ｕｌｑｌで示され、ｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅの内容は、ｒ０ｗ１ｒ１ｗ２．．．ｗｍｒｍで示される。ｃｕｒｒｅｎｔＬｅｖｅｌ≧１である間、プログラムは、ｕｉ＜「Ｙ／」≦ｕｉ＋１となるようなｉを見つけ、ｗｊ≦「Ｙ／∞」＜ｗｊ＋１となるようなｊを見つける。プログラムは次いで、ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅおよびｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅから範囲内キーを削除し、ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅの内容を
ｑ０ｕ１ｑ１ｕ２ｑ２．．．ｑｉ−１ｕｉｑｉｗｒ＋１ｒｊ＋１．．．ｗｋｒｋ      （４）
となるように設定することによって、残りのすべてのキーをｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅに転送する。ｃｕｒｒｅｎｔＬｅｖｅｌ＝１の場合、プログラムはリーフノードの所におり、子ポインタすべてが（４）から省かれる。ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅは、２つの欠乏したノードをマージした結果なので、現時点で過剰または過少であり得るが、この時点では、この平衡していないという問題に対処する対策はとられないことに留意されたい。
【００３３】
プログラムは次いで、ＳｌｅｆｔＮｏｄｅの内容を
ｕｉ＋１ｑｉ＋１．．．ｑｌ−１ｕｌ      （５）
となるように設定することによって、ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅから削除された範囲内キーをＳｌｅｆｔＮｏｄｅに転送する。この組合せは、最初の子ポインタをもたないので、まだ有効なＢツリーノードではない。このことは、ｎｅｗＳｌｅｆｔＮｏｄｅと呼ばれる新しいノードを作成し、最初の子ポインタをそのアドレスに設定することによって調整される。プログラムはまた、ＳｒｉｇｈｔＮｏｄｅの内容を
ｒ０ｗ１ｒ１ｗ２．．．ｒｊ−１ｗｊ      （６）
となるように設定することによって、ｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅから削除された範囲内キーをＳｒｉｇｈｔＮｏｄｅに転送する。この組合せは、最後の子ポインタをもたないので、まだ有効なＢツリーノードではない。このことは、ｎｅｗＳｒｉｇｈｔＮｏｄｅと呼ばれる新しいノードを作成し、最後の子ポインタをそのアドレスに設定することによって調整される。やはり、ＳｒｉｇｈｔＮｏｄｅは過少であり得るが、Ｓは構成によって過少となることが認められているので、それに対するアクションはとられない。ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅおよびｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅのすべてのポインタおよびキーは、ｒｊを除いて厳密に式（４）、（５）、および（６）の１つとして現れることに留意されたい。これは、意図したものである。すなわち、親のないノードｆ（ｒｊ）は、次の反復において式（４）を生成するステップで、ｆ（ｑｉ）とマージされる。プログラムは次いで、ｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅ用の記憶域を割振り解除（ｄｅ−ａｌｌｏｃａｔｅ）する。というのは、このノードのキーはすべて、他の所に格納されており、このノードをポイントしているものはないからである。ｃｕｒｒｅｎｔＬｅｖｅｌ＞１の場合、プログラムは、ｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅ＝ｆ（ｑｉ）、ｃｕｒｒｅｎｔＲｉｇｈｔＮｏｄｅ＝ｆ（ｒｊ）、およびｃｕｒｒｅｎｔＬｅｖｅｌ＝ｃｕｒｒｅｎｔＬｅｖｅｌ−１と設定することによって、下のレベルに降りていく。プログラムは次いで、Ｗｈｉｌｅループが終わるまで、上記のステップを繰り返す。
【００３４】
このとき、プログラムは、すべての過少および過剰ノードを上述したように調整する。調整のために、プログラムは、ツリーをそれぞれｃｕｒｒｅｎｔＬｅｆｔＮｏｄｅから上に戻り、必要に応じて標準Ｂツリーの分割またはマージ操作を適用する。このプロセスにおいて、プログラムは、適正サイズのノードに到達しても、その上位ノードが過少または過剰であるかもしれないので、停止しない。
【００３５】
２つの中間ツリーＴ’およびＳが生成された後、プログラムは、変更されたディレクトリ名を反映するように、抽出ツリーＳ中のキーの名前を変更する。上述したように、操作の全体としての目標は、ディレクトリ「Ｙ」を「Ｚ」に名前変更することである。上述した詳細なステップは、図５に示す方針のステップ１を実施するためである。すなわち、「Ｙ／」で始まるキーをすべて、元のＢツリーＴから削除し、削除したキーを、過少であり得るＢツリーＳに配置する。高水準方針のステップ２は、「Ｙ／」ではなく「Ｚ／」で始まるようにＳのキーを変えて、新しいツリーＳ’を得ることである。
【００３６】
好ましい実施形態では、Ｓ中のキーの修正は、キーに共通接頭辞を格納しないＢツリーを使うことによって、非常に簡単に行われる。このような配置の場合、各ノードは、ノード中のキーすべての共通接頭辞を含む別個のフィールドをもち、キーは、異なる接尾辞のみを格納する。接頭辞フィールドは、親ノードに格納されている接頭辞を含まないので、所与のキーの添字用の、キーの完全な値は、キーの配置のために、ツリーのルートから開始して、訪れたすべてのノードの接頭辞を連結することによって得られることに留意されたい。このようなＢツリーは、接頭辞Ｂツリーと呼ばれる。ツリーＳが接頭辞ツリーの場合、キーが「Ｙ／」ではなく「Ｚ／」で始まるようにキー全体を変えることは非常に簡単である。というのは、ツリーＳのルートノードの接頭辞フィールドは元々、「Ｙ／」で始まらなければならないので、所望の新しいツリーＳ’は、ルートノードの接頭辞フィールドを「Ｚ／」に単に変更するだけで得ることができるからである。
【００３７】
次に、ツリーＴ’にツリーＳ’を挿入するステップに移ると、本発明で使用する適切な概念は、「厳密な挿入（ｓｔｒｉｃｔ  ｉｎｓｅｒｔｉｏｎ）」である。ＢツリーＢへのＢツリーＡの挿入は、Ａのキーがすべて、厳密にＢの中の２つの連続キーの間にある場合、厳密である。ディレクトリ名を変更する場合、Ｔ’へのＳ’の挿入は厳密である。というのは、元のＢツリーＴは、ディレクトリ名の変更によって作成された連続キーの範囲内であるキーを含むべきでなく、含む場合は、（既存のパス名と衝突するので）名前変更が不当であり、認められるべきでないからである。後で説明するように、Ｔ’へのＳ’の挿入の厳密性により、挿入操作が大幅に容易になる。
【００３８】
ツリーＴ’へのツリーＳ’の挿入は、図７を参照して以下のように簡潔に述べることができる。Ｓ’の高さをＬとする。挿入を実施するために、プログラムは最初に、ツリーＴ’中で、ツリーＳ’のルートが挿入されるべきノードを見つける（ステップ７１０）。ノードを見つけるために、プログラムは、Ｓ’からキーの１つを挿入しようとするかのようにツリーＴ’を下っていくが、高さＬのノードに達すると停止する。この点に関して、挿入は厳密であり、どの選択をしても同じパスにつながるので、Ｓ’からキーのどれをプログラムが選ぶかは問題ではない。プログラムは次いで、到達したノードに、Ｓ’のルートノードのキーをすべて挿入する（ステップ７２０）。このノードから、プログラムは、Ｓ’からキーの１つを挿入しようとするかのようにツリーＴ’を下り続ける。この点に関して、プログラムは、左端のパスおよび右端のパスという異なる２つのパスに沿ってツリーＳ’を下っていき、Ｔ’の同じ高さの適切なノードから適切なキーをペーストする（ステップ７３０）。各レベルで、プログラムは、Ｔ’ノード、左側のＳ’ノード、および右側のＳ’ノードという３つのノードに働きかける。Ｔ’中のノードにあるキーは、Ｓ’のキーより小さい「スモール」キー、およびＳ’のキーより大きい「ラージ」キーという２つのカテゴリに分けられる。こうした３つのノードにあるキーは、以下のように入れ替えられる。Ｔ’ノードが削除され、Ｔ’ノードのスモールキーが左側のＳ’ノードに挿入され、Ｔ’ノードのラージキーが右側のＳ’ノードに挿入される。この入替は、ツリーのリーフに及ぶ各レベルで行われ、リーフの所で挿入が完了する。入替に関わるノードの多くは、過剰または過少である可能性があり、その場合、ツリーは平衡していない。ＢツリーＳ’のキーがすべて、ＢツリーＴ’の適正ノードに挿入された後、マージされたツリーの過剰および／または過少ノードは、標準Ｂツリー操作を用いて容易に調整される（ステップ７４０）。
【００３９】
一実装形態における、挿入を実施する詳細なステップを次に説明する。プログラムは、ｃｕｒｒｅｎｔＮｏｄｅをＴ’のルートに、ｃｕｒｒｅｎｔＬｅｖｅｌをＴ’の高さに、ＬをＳ’の高さに設定することにより開始する。ｃｕｒｒｅｎｔＮｏｄｅの内容は、ｐ０ｖ１ｐ１ｖ２ｐ２．．．ｖＫｐｋと示される。ｃｕｒｒｅｎｔＬｅｖｅｌ＞Ｌの間、プログラムは、ｖｉ＜「Ｚ／」＜「Ｚ／∞」＜ｖｉ＋１となるようなｉを見つける。プログラムは次いで、ｃｕｒｒｅｎｔＮｏｄｅ＝ｆ（ｐｉ）、およびｃｕｒｒｅｎｔＬｅｖｅｌ＝ｃｕｒｒｅｎｔＬｅｖｅｌ−１と設定する。
【００４０】
プログラムは次いで、Ｓ’のルートノードをＴ’に挿入する。ルートノードＳ’のＳ’の内容は、ｑ０ｕ１ｑ１ｕ２．．．ｕ１ｑ１と示される。プログラムは最初に、ｖｉ＜「Ｚ／」＜「Ｚ／∞」＜ｖｉ＋１となるようなｉを見つけ、次いで、現在のノードの内容を
ｐ０ｖ１ｐ１．．．ｐｉ−１ｖｉｑ０ｕ１ｑ１ｕ２．．．ｕｌｑｌｖｉ＋１Ｐｒ＋１．．．ｖｋｐｋ  （７）
となるように設定することによって、Ｓ’のルートノードからのキーを現在のノードに挿入する。（７）において、ポインタｐｉには親がないが、ポインタｐｉがポイントするノードの内容は、後のステップで救済される。やはり、ｃｕｒｒｅｎｔＮｏｄｅは過剰になり得るが、後のステップで対処される。
【００４１】
プログラムは次いで、Ｓ’の左端および右端ノードを下っていき、Ｔ’の同じ高さの適切なノードから適切なキーをペーストする。これは、以下のステップによって遂行される。最初に、プログラムは、ＳｌｅｆｔＮｏｄｅ＝ｆ（ｑ０）、ＳｒｉｇｈｔＮｏｄｅ＝ｆ（ｑｌ）、およびｃｕｒｒｅｎｔＮｏｄｅ＝ｆ（ｐｉ）と設定することによって、両方のツリーの中を１レベル下っていく。ここで、ＳｌｅｆｔＮｏｄｅの内容はｑ０ｕ１ｑ１ｕ２．．．ｕｌｑｌで示され、ＳｒｉｇｈｔＮｏｄｅの内容はｒ０ｗ１ｒ１ｗ２．．．ｗｍｒｍで示される。プログラムは次いで、ｃｕｒｒｅｎｔＮｏｄｅがリーフノードとなるまで、以下の３つのステップを繰り返す。最初に、プログラムは、ｖｉ＜「Ｚ」＜「Ｚ／∞」＜ｖｉ＋１となるようなｉを見つける。キーｖ１、．．．、ｖｉはスモールキーと呼ばれ、キーｖｉ＋１、．．．、ｖｋはラージキーと呼ばれる。プログラムは、ＳｌｅｆｔＮｏｄｅの内容を
ｐ０ｖ１．．．ｐｉ−１ｖｉｑ０ｕ１ｑ１ｕ２．．．ｕｌｑｌ      （８）
となるように設定することによって、ＳｌｅｆｔＮｏｄｅにスモールキーを挿入する。プログラムは次いで、ＳｒｉｇｈｔＮｏｄｅの内容を
ｒ０ｗ１ｒ１ｗ２．．．ｗｍｒｍｖｊ＋１ｐｊ＋１．．．ｖｋｐｋ      （９）
となるように設定することによって、ＳｒｉｇｈｔＮｏｄｅにラージキーを挿入する。プログラムが既にリーフノードの所にある場合、（８）および（９）中のポインタは省かれる。こうしたステップにおいて、ｐｉは（８）および（９）に現れないので、親をもたない。それにも関わらず、親をもたないｐｉの内容は、（８）および（９）の式を生成するステップを次回繰り返す際に救済される。
【００４２】
プログラムは次いで、ｃｕｒｒｅｎｔＮｏｄｅ用の記憶域を割振り解除する。というのは、このノードのキーはすべて、他の所に格納されており、このノードを指しているノードはないからである。プログラムは、ＳｌｅｆｔＮｏｄｅ＝ｆ（ｑ０）、ＳｒｉｇｈｔＮｏｄｅ＝ｆ（ｒｍ）、およびｃｕｒｒｅｎｔＮｏｄｅをｆ（ｐｉ）と設定することによって、Ｔ’およびＳ’両方のツリーを同じレベルで下り続ける。プログラムは次いで、リーフノードに到達するまでＷｈｉｌｅループを繰り返す。
【００４３】
Ｔ’ツリーおよびＳ’ツリーがマージされた後、ＳｌｅｆｔＮｏｄｅ、ＳｒｉｇｈｔＮｏｄｅ、およびその上位ノードは、過剰または過少である場合がある。マージしたツリーＴ”を平衡させるために、プログラムは、ＳｌｅｆｔＮｏｄｅから開始してツリーを上がっていき、必要な場合は各ノードを分割またはマージする。プログラムは次いで、ＳｒｉｇｈｔＮｏｄｅから開始して同様にツリーを上がっていく。ツリーＴ”が適切に平衡された後、ディレクトリ名の変更に応答したファイルシステムのＢツリー修正プロセスが完了する。
【００４４】
Ｂツリー中のディレクトリ名を変更する操作を実施する、新しく効率的な方法を本明細書で開示したことが理解されよう。本発明の原理を適用することができる多くの可能な実施形態を検討したが、図面に関連して本明細書において説明した実施形態は、例示のみを意図しており、本発明の範囲を限定するものととられるべきではないことを理解されたい。たとえば、本発明の精神から逸脱することなく、例示された実施形態を、構成および細部において変更し得ることが当業者には理解されよう。本発明は、ソフトウェアモジュールまたはコンポーネントによって説明したが、ハードウェアコンポーネントで同等に置き換えることができることが当業者には理解されよう。したがって、本明細書に記載した本発明は、このようなすべての実施形態が添付の請求項およびその均等の範囲内であり得ることを企図している。
【図面の簡単な説明】
【００４５】
【図１】本発明による、階層状の名前空間を表すＢツリー中の連続キーの名前を変更する方法を実施する、コンピューティングデバイスの例示的なアーキテクチャを示す簡略化した概略図である。
【図２】名前を変更されるディレクトリのノードを有するファイルシステムに対して、本発明の実施形態で使用するＢツリーを示す概略図である。
【図３】本発明の実施形態の方法において、名前を変更されるディレクトリのキーを削除することによって、元のＢツリーからの、２つの中間ツリー構造の生成を示す概略図である。
【図４】本発明の実施形態の方法で形成される２つの中間ツリー構造からの、最終的なＢツリーの構成を示す概略図である。
【図５】Ｂツリーデータ構造のディレクトリ名を変更する、本発明の実施形態の方法の高水準ステップを示すフロー図である。
【図６】図３の２つの中間ツリーを作成する削除操作を示すフロー図である。
【図７】図４の最終的なＢツリーを作成するＢツリー挿入操作を示すフロー図である。
【符号の説明】
【００４６】
１２０  処理装置
１２１  システムバス
１３０  システムメモリ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  固定式不揮発性メモリインターフェース
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  取外し可能不揮発性メモリインターフェース
１５３  ＵＳＢポート
１５４  ＵＳＢフラッシュドライブ
１５７  ＳＤカードスロット
１５８  ＳＤカード
１６０  ユーザ入力インターフェース
１６１  マウス
１６２  キーボード
１７０  ネットワークインターフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８５  リモートアプリケーションプログラム
１９０  ビデオインターフェース
１９５  出力周辺インターフェース
１９６  プリンタ
１９７  スピーカ
【図１】
2005302038.tif 000003
【図２】
2005302038.tif 000004
【図３】
2005302038.tif 000005
【図４】
2005302038.tif 000006
【図５】
2005302038.tif 000007
【図６】
2005302038.tif 000008
【図７】
2005302038.tif 000009
【外国語明細書】
2005302038000001.pdf