(57)【要約】【課題】ファルシステムにオブジェクトを効率的に記憶する方法および装置を提供する。【解決手段】ファイルシステムによってファイルデータを階層的に記憶する解決方法を提供する。論理的に隣接するファイルデータの複数のバイトを、ストリームデータ構造に記憶する。関連するファイルデータを保持したこれらのストリームは、ディスク上の可変サイズオノデデータ構造に記憶される。可変サイズオノデデータ構造は、固定サイズバケットに記憶される。これらのバケットは可変サイズアレイに構成される。この結果、このファイルシステムは、可変サイズ記憶と固定サイズ記憶の組合せを提供し、ファイルデータを記憶するための非常に効率的な解決方法を提供する。更に、インデックスを構造の内部に設けることにより、オノデやストリームに迅速にアクセスすることが可能とされている。【選択図】図４
2008041108.tif 000002
【特許請求の範囲】
【請求項１】
メモリ空間を備えた第２の記憶装置を有するデータ処理システムにおいて、前記第２の記憶装置にファイルデータを記憶する方法が、
前記第２の記憶装置のメモリ空間の少なくとも一部を固定サイズデータ構造に論理的に区分けする段階と、
第１のサイズの論理的に関連するファイルデータの第１のセットを所定タイプの第１の可変サイズデータ構造に記憶する段階と、
論理的に関連するファイルデータの第１のセットが記憶された所定タイプの前記第１の可変サイズデータ構造を前記第２の記憶装置の固定サイズデータ構造の少なくとも１つに記憶する段階と、
を備えることを特徴とする方法。
【請求項２】
請求項１記載の方法において、更に、
第２のサイズの論理的に関連するファイルデータの第２のセットを所定タイプの第２の可変サイズデータ構造に記憶する段階と、
論理的に関連するファイルデータの第２のセットが記憶された所定タイプの前記第２の可変サイズデータ構造を、論理的に関連するファイルデータの第１のセットが記憶された前記固定サイズデータ構造に記憶する段階と、を備えることを特徴とする方法。
【請求項３】
請求項１記載の方法において、前記第２の記憶装置のメモリ空間の少なくとも一部を固定サイズデータ構造に論理的に区分けする段階は、更に、前記第２の記憶装置のメモリの少なくとも一部を固定サイズデータ構造の可変サイズアレイに論理的に区分けする段階を備える方法。
【請求項４】
請求項１記載の方法において、前記第２の記憶装置はディスク記憶装置であり、前記第２の記憶装置のメモリ空間の少なくとも一部を区分けする段階は、更に、前記ディスク記憶装置のメモリ空間の少なくとも一部を固定サイズデータ構造に論理的に区分けする段階を備える方法。
【請求項５】
請求項１記載の方法において、更に、所定タイプの第１の可変サイズデータ構造に関する適当な情報を前記第２の記憶装置に記憶する段階を備える方法。
【請求項６】
請求項５記載の方法において、更に、所定タイプの前記第１の可変サイズデータ構造に問い合わせを行って、そこに記憶された適当な情報を得る段階を備える方法。
【請求項７】
請求項１記載の方法において、更に、前記固定サイズデータ構造に記憶された所定タイプの第１の可変サイズデータ構造をユニークに識別する識別子を前記所定タイプの可変サイズデータ構造に記憶する段階を備える方法。
【請求項８】
内部メモリと、
第２記憶装置と、
前記第２記憶装置のメモリ空間の少なくとも一部を固定サイズデータ構造に論理的に区分けする手段と、
論理的に関連するファイルデータの第１のセットを所定タイプの第１の可変サイズデータ構造に記憶する手段と、
論理的に関連するファイルデータの第１のセットが記憶された前記第１の可変サイズデータ構造を、前記第２のメモリの前記固定サイズデータ構造の少なくとも１つに記憶する手段と、
を備えることを特徴とするデータ処理システム。
【請求項９】
請求項８記載のデータ処理システムにおいて、更に、
論理的に関連するファイルデータの第２のセットを所定タイプの第２の可変サイズデータ構造に記憶する手段と、
論理的に関連するファイルデータの前記第２のセットが記憶された所定タイプの前記第２の可変サイズデータ構造を、論理的に関連するファイルデータの第１のセットが記憶された前記固定サイズデータ構造に記憶する手段と、
を備えるデータ処理システム。
【請求項１０】
請求項８記載のデータ処理システムにおいて、前記第２の記憶装置はディスク記憶装置であるデータ処理システム。
【請求項１１】
請求項８記載のデータ処理システムにおいて、更に、所定タイプの前記第１の可変サイズデータ構造に関する情報を前記第２の記憶装置に記憶する手段を備えたデータ処理システム。
【請求項１２】
請求項１１記載のデータ処理システムにおいて、更に、所定タイプの前記第１の可変サイズデータ構造に問い合わせてそこに記憶された適当な情報を得る手段を備えたデータ処理システム。
【請求項１３】
第２の記憶装置を備えたデータ処理システムにおいて、
論理的に隣接するファイルデータのバイトを第１のタイプの可変サイズデータ構造に記憶する段階と、
関連するファイルデータが記憶された第１のタイプの前記可変サイズデータ構造を第２のタイプの可変サイズデータ構造に記憶する段階と、
前記第２のタイプの可変サイズデータ構造を前記第２の記憶装置の前記固定サイズデータ構造に記憶する段階と、
を備えることを特徴とする方法。
【請求項１４】
請求項１３記載の方法において、更に、
前記第２の記憶装置のメモリ空間を固定サイズ装置に論理的に区分けする段階と、
前記固定サイズデータ構造の１つにデータが記憶されたときに前記データが前記第２の記憶装置の対応する固定サイズ装置に記憶されるよう、前記固定サイズ装置の各々を前記固定サイズデータ構造の中の対応するものに関連付ける段階と、
を備える方法。
【請求項１５】
請求項１４記載の方法において、更に、前記第２の記憶装置のメモリ空間に前記固定サイズデータ構造のアレイを提供する段階を備え、前記第２のタイプの前記可変サイズデータ構造を前記第２の記憶装置の前記固定サイズデータ構造に記憶する段階は、更に、前記第２のタイプの前記可変サイズデータ構造を前記第２の記憶装置の前記固定サイズデータ構造のアレイに記憶する段階を備える方法。
【請求項１６】
請求項１３記載の方法において、論理的に隣接するファイルデータのバイトを第１のタイプの可変サイズデータ構造に記憶する前記段階は、更に、前記第１のタイプの前記可変サイズデータ構造に記憶された論理的に隣接するバイトを、前記第２のタイプの前記可変サイズデータ構造の同じものに保持された前記第１のタイプの前記可変サイズデータ構造の中からユニークに識別するために、前記第１のタイプの各データ構造に識別子を記憶する段階を備える方法。
【請求項１７】
請求項１３記載の方法において、前記第２の記憶装置はディスク記憶装置であり、前記第２のタイプの可変サイズデータ構造を前記第２の記憶装置の前記固定サイズデータ構造に記憶する前記段階は、更に、前記第２のタイプの前記可変サイズデータ構造を前記ディスク記憶装置の前記固定サイズデータ構造に記憶する段階を備えた方法。
【請求項１８】
請求項１３記載の方法において、更に、前記第２のタイプの前記可変サイズデータ構造の各々に関して前記第２の記憶装置に適当な情報を記憶する段階を備える方法。
【請求項１９】
請求項１８記載の方法において、更に、前記第２のタイプの前記可変サイズデータ構造の１つに問い合わせを行ってそこに含まれた適当な情報を得る段階を備える方法。
【請求項２０】
内部記憶装置と、
第２の記憶装置と、
論理的に隣接するファイルデータのバイトを第１のタイプの可変サイズデータ構造に記憶する手段と、
関連するファイルデータを保持する第１のタイプの可変サイズデータ構造のセットを第２のタイプの可変サイズデータ構造に記憶する手段と、
前記第２のタイプの前記可変サイズデータ構造を前記第２の記憶装置の前記固定サイズデータ構造に記憶する手段と、
を備えることを特徴とするデータ処理システム。
【請求項２１】
請求項２０記載のデータ処理システムにおいて、更に、
前記第２の記憶装置のメモリ空間を固定サイズ装置に論理的に区分けする手段と、
前記固定サイズデータ構造の１つにデータが記憶されたときに前記データが前記第２の記憶装置の対応する固定サイズ装置に記憶されるよう、前記固定サイズ装置の各々を前記固定サイズデータ構造の中の対応するものに関連付ける手段と、
を備えるデータ処理システム。
【請求項２２】
第２の記憶装置を備えたデータ処理システムにおいて、
論理的に隣接するファイルデータのバイトのセットを第１のタイプの可変サイズデータ構造の各々に記憶する段階と、
関連するファイルデータを記憶する第１のタイプの可変サイズデータ構造を前記第２の記憶装置の第２のタイプの可変サイズデータ構造に記憶する段階と、
前記第１のタイプの可変サイズデータ構造に対するＢ−ツリーインデックスを前記第２の記憶装置の前記第２のタイプの可変サイズデータ構造に記憶する段階と、
を備えることを特徴とする方法。
【請求項２３】
請求項２２記載の方法において、更に、Ｂ−ツリーインデックスをアクセスすることにより、前記第２の記憶装置の前記第２のタイプの可変サイズデータ構造において論理的に隣接するファイルデータのバイトの場所を発見する段階を備える方法。
【請求項２４】
請求項２２記載の方法において、前記第１のタイプの可変サイズデータ構造に対するＢ−ツリーインデックスを前記第２の記憶装置の前記第２のタイプの可変サイズデータ構造に記憶する前記段階は、更に、前記第１のタイプの前記可変サイズデータ構造に対するＢ−ツリーインデックスを、前記第１のタイプの可変サイズデータ構造として前記第２の記憶装置の前記第２のタイプの可変サイズデータ構造に記憶する段階を備える方法。
【請求項２５】
第２の記憶装置を備えたデータ処理システムにおいて、
論理的に隣接するファイルデータのバイトを第１のタイプの可変サイズデータ構造に記憶する段階と、
第２のタイプの可変サイズデータ構造を前記第２の記憶装置に記憶する段階であって、前記第２のタイプの可変サイズデータ構造は各々、関連するファイルデータを記憶する第１のタイプの可変サイズデータ構造のセットを記憶するような段階と、
前記第２のタイプの可変サイズデータ構造の各々において、前記第２のタイプの可変サイズデータ構造に記憶された前記第１のタイプの可変サイズデータ構造に対するインデックスを記憶する段階と、
を備えることを特徴とする方法。
【請求項２６】
第２の記憶装置を備えたデータ処理システムにおいて、前記第２の記憶装置は固定サイズバケットの１つのアレイを保持するメモリ空間を含んでおり、前記バケットのうちの１つはオブジェクトを保持しており、前記第２の記憶装置に付加的なメモリ空間をアロケートしてオブジェクトの増大する要求を満たす方法が、
オブジェクトを現在保持しているバケットが、オブジェクトの増大する要求を満たすのに十分な自由メモリを有しているかどうかを決定する段階と、
オブジェクトを現在保持しているバケットが十分な自由メモリ空間を有している場合には、そのオブジェクトに対するバケットに付加的な空間をアロケートしてオブジェクトの増大する要求を満たす段階と、
さもなければ、オブジェクトの増大する要求を満たすのに十分なメモリ空間を有するバケットを見つけだして、そのバケットにオブジェクトを移動させる段階と、
を備える方法。
【請求項２７】
請求項２６記載の方法において、オブジェクトの増大する要求を満たすのに十分なメモリ空間を有するバケットを見つけだす前記段階は、更に、オブジェクトの増大する要求を満たすのに十分なメモリ空間を有するバケットであって、前記第２の記憶装置においてオブジェクトを現在保持しているバケットに最も近接しているようなオブジェクトを見つけだすことを備える方法。
【請求項２８】
第２の記憶装置を備えたデータ処理システムにおいて、
前記第２の記憶装置の記憶空間の固定サイズバケットのアレイにファイルを記憶する段階と、ここで、記憶空間の前記固定サイズバケットの少なくとも１つは１つ若しくはそれ以上のファイルをそこに記憶しており、
アレイに記憶された複数のファイルの中からあるファイルを識別する識別子を各ファイルに提供する段階と、
ファイルに対する各識別子をそのファイルが記憶された固定サイズバケットにマップするマップを前記第２の記憶装置に記憶する段階と、
ファイルが記憶された固定サイズバケットの場所を発見するマップを使用し、且つ、固定サイズバケットを調査して所定の識別子を有するファイルの場所を発見することにより、所定の識別子を有するファイルの１つの場所をアレイにおいて発見する段階と、
を備えることを特徴とするデータ処理システム。
【請求項２９】
第２の記憶装置を備えたデータ処理システムにおいて、
前記第２の記憶装置の記憶空間の固定サイズバケットのアレイにファイルを記憶する段階であって、ここで各ファイルはそれに関連する識別子を有するようなものであり、
複数のエントリのマッピング構造を前記第２の記憶装置に記憶する段階と、ここで、前記エントリは他の識別子をアレイのバケットの１つにマップするものであり、
アロケートされていない前記第２の記憶装置の空間のセルの識別子の自由リストをマッピング構造に記憶する段階と、
バケットの識別子からバケットの場所を発見するマッピング構造を使用する段階と、
を備える方法。
【請求項３０】
請求項２９記載の方法において、更に、マッピング構造を用いて自由リストにおける識別子の場所を発見する段階を備える方法。
【請求項３１】
第２の記憶装置を有するデータ処理システムにおいて、
その各々がそれに関連する識別子を有するファイルを記憶するために前記第２の記憶装置に記憶空間の固定サイズバケットのアレイを提供する段階と、
自由リストのセル若しくはアレイのバケットのいずれかに識別子をマッピングするために前記第２の記憶装置に複数のエントリのマッピング構造を提供する段階と、
前記第２の記憶装置の空間のいづれかの自由セルの識別子を含んだ自由リストをマッピング構造に提供する段階と、
自由リストが少なくとも１つのセルに対する識別子を含んでいるかを決定する段階と、
自由リストが少なくとも１つのセルに対する識別子を含んでいる場合には、自由リストから新たなファイルにセルの所定の識別子を割り当て、且つこの新たなファイルをセルに記憶する段階と、を備えることを特徴とする方法。
【請求項３２】
請求項３１記載の方法において、更に、
自由リストがセルを含まない場合には、
新たな識別子を新たな自由セルにマップするマッピング構造に付加的なエントリを付加する段階を備える方法。
【請求項３３】
請求項３２記載の方法において、更に、
新たな自由リストの１つに関連する新たな識別子の１つを新たなファイルに割り当てる段階と、
新たなファイルに割り当てられた新たな識別子と関連する新たな自由セルに前記新たなファイルを記憶する段階と、
を備える方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、データ処理システムに関し、特に、ファイルシステムにおけるオブジェクトの効率的な記憶に関する。
【背景技術】
【０００２】
従来のオペレーティングシステムでは、ファイルに関する制御情報と共に、ファイルデータを記憶するための固定数のディスク空間のブロックが、各ファイルにアロケートされていた。これらのブロックは、迅速にアロケート若しくはデアロケートすることができるよう固定サイズとされている。ファイルおよびファイルデータに関する制御情報はしばしば可変サイズとされるが、これは少なくとも２つの問題を抱える。第１に、制御情報、及び／又は、ファイルデータがブロックを満たすほど大きくない場合に、ブロック内部のディスク空間が浪費されてしまうこと。第２に、制御情報、及び／又は、ファイルデータが単一のブロックに記憶されるにはあまりに大きすぎる場合に、それを複数のブロックに記憶しなければならず、データが記憶される場所を特定するために複数のポインタを保持しなければならないことである。このようなポインタを保持し且つ使用することは、しばしば極めて煩雑である。
【発明の開示】
【課題を解決するための手段】
【０００３】
本発明の第１の特徴によれば、メモリ空間を有する第２の記憶装置にファイルデータを記憶するために方法および装置が実行される。この方法を実行するためのデータ処理システムは、内部記憶装置と共に、第２の記憶装置を備える。第２の記憶装置のメモリ空間の少なくとも一部は、固定サイズのデータ構造に論理的に分割される。論理的に関連のあるファイルデータの第１のサイズの第１のセットが、所定タイプの可変サイズデータ構造に記憶される。論理的に関連のあるファイルデータの第１のセットを記憶する可変サイズデータ構造が、第２の記憶装置の少なくとも１つの固定サイズデータ構造に記憶される。論理的に関連のあるファイルデータの付加的なセットは、第２の記憶装置の同一の固定サイズデータ構造に記憶されてもよい。
【０００４】
本発明の他の特徴によれば、ファイルデータの論理的に隣接した複数のバイトは、第１のタイプの可変サイズデータ構造に記憶され、関連するファイルデータを記憶する第１のタイプの可変サイズデータ構造のセットは、第２のタイプの可変サイズデータ構造に記憶される。第２のタイプの可変サイズデータ構造は、第２の記憶装置の固定サイズデータ構造に記憶される。
【０００５】
本発明の更に他の特徴によれば、第２の記憶装置を有するデータ処理システムで方法が実行される。この方法では、ファイルデータの論理的に隣接した複数のバイトのセットが、第１のタイプの可変サイズデータ構造のそれぞれに記憶される。第１のタイプの可変サイズデータ構造の所定のものは、第２の記憶装置の第２のタイプの可変サイズデータ構造に記憶される。第１のタイプの可変サイズデータ構造に対するＢ−ツリーインデックスは、第２の記憶装置の第２のタイプの可変サイズデータ構造に記憶される。データ処理システムに保持された第２のタイプの可変サイズデータ構造の各々に対して、別のＢ−ツリーインデックスが保持されてもよい。
【０００６】
また、本発明の他の特徴によれば、第２の記憶装置を含むデータ処理システムで方法が実行される。第２の記憶装置は、固定サイズとされたバケット (bucket) のアイレを保持するメモリ空間を含む。アレイのバケットの中の１つがオブジェクトを保持する。この方法は、第２の記憶装置に付加的なメモリ空間をアロケートしてオブジェクトの増大する要求を満たす。第１に、オブジェクトを現時点で保持するバケットがオブジェクトの増大する要求を満たすのに十分な自由メモリ空間を有しているかどうかが判断される。バケットが十分な自由メモリ空間を有していれば、バケットの付加的な空間をオブジェクトにアロケートしてオブジェクトの増大する要求を満たす。そうでなければ、オブジェクトの増大する要求を満たすのに十分なメモリ空間を有するバケットが発見される。このオブジェクトはその後、発見された場所のバケットに移動される。
【０００７】
本発明の付加的な特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイに複数のファイルが記憶される。記憶空間の固定サイズバケットの少なくとも１つは、その中に記憶された１つ以上のファイルを有する。各ファイルに識別子を提供し、アレイに記憶されたファイルの中からあるファイルを識別する。また、第２の記憶装置にマップを記憶し、ファイルに対する各識別子をそれが記憶される固定サイズバケットにマップする。ファイルが記憶される固定サイズバケットの場所を発見するためにマップを使用することにより、またその後、所定の識別子を有するファイルの場所を発見するために固定サイズバケットを調査することにより、所定の識別子を有するファイルの中の１つの場所がアレイにおいて発見される。
【０００８】
本発明の他の特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイに複数のファイルが記憶される。各ファイルはそれに関連する識別子を有する。多数のエントリのマッピング構造が第２の記憶装置に記憶される。マッピング構造のエントリは、識別子の１つをアレイの複数バケットの中の１つにマップするような、少なくとも１つのエントリを含む。第２の記憶装置の空間の自由セルの識別子の自由リストがマッピング構造に記憶される。この自由リストはいまだにアロケートされていないセルの識別子を含む。マッピング構造は、バケットの識別子からバケットの場所を発見するために用いられる。更に、このマッピング構造は、自由セルに対する識別子から自由セルの場所を発見するためにも用いられ得る。
【０００９】
本発明の更に他の特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイは、ファイルを記憶するためにも提供される。各ファイルは、それに関連する識別子を有する。複数のエントリのマッピング構造が第２の記憶装置に提供される。第２の記憶装置のマッピング構造に自由リストが提供される。この自由リストは、第２の記憶装置の空間のいずれかの自由セルの識別子を含む。マッピング構造は、識別子を、セルリストのいづれかのセルに、若しくはアレイのいずれかのバケットにマップする。自由リストが少なくとも１つのセルの識別子を含むかどうかの決定がなされる。自由リストが少なくとも１つのセルに対する識別子を含んでいれば、自由リストの複数のセルの中の１つの所定の識別子が新たなファイルに記憶され、この新たなファイルはそのセルに記憶される。自由リストが識別子を含まなければ、新たな識別子を関連する新たな自由セルにマップするようなマッピング構造にエントリを付加することができる。新たな自由セルの１つに関連する新たな識別子の１つを新たなファイルに割り当て、この新たなファイルを新たな自由セルに記憶することもできる。
【発明を実施するための最良の形態】
【００１０】
本発明の好ましい実施例は、ファイルデータをディスク上に記憶するのに十分な技術を提供する。この技術を以下に述べる。
図１は、本発明の好ましい実施例を実行するためのデータ処理システム１０のブロック図である。このデータ処理システム１０は、中央処理装置（ＣＰＵ）１２、メモリ１４、ディスク記憶装置１６を含む。更に、データ処理システム１０は、キーボード１８、マウス２０、ビデオ表示装置２２を含む。メモリ１４は、オペレーティングシステム２４のコピーを保持する。オペレーティングシステム２４は、以下に詳述するファイルシステム管理サービスを提供する。ここに述べられたデータ処理システムは単一のプロセッサシステムであるが、分散システムのようなマルチプロセッサシステムで本発明を実行することも可能であることは当業者には明らかであろう。
【００１１】
更に、本発明の好ましい実施例はオペレーティングシステムの一部として記述されているが、本発明を代替的に、グラフィックユーザインタフェースや、オペレーティングシステムから分離された他のコードタイプで実行することも可能であることは、当業者には明らかであろう。
【００１２】
オペレーティングシステム２４のファイルシステム管理サービスは、ファイルデータをディスク記憶装置１６のディスク上に記憶するために応答する。好ましい実施例のオペレーティングシステム２４は、オブジェクト指向オペレーティングシステムである。このように、オペレーティングシステム２４はオブジェクトの一般概念を支持する。
【００１３】
ディスク記憶装置１６のディスク上で最も小さな記憶単位は、「ストリーム」である。ストリームは、論理的に隣接した、ランダムアクセス可能な、ファイルデータの複数のバイトの集合である。ストリーム記述子の適当なフォーマットが、これと同日に出願され共通の譲受人に譲渡された同時継続中の特許出願No.         号、 "Storage of File Data on Disk in Multiple Representations" に記述されている。この同時出願の開示は本明細書に組み入れられている。
【００１４】
各ストリームは、それに関連したストリーム記述子２６を有する。ストリーム記述子２６はストリームを記述し、ストリーム内部に保持されたデータにアクセスするための手段を提供する。図２に示されているように、ストリーム記述子２６は、少なくとも３つのフィールド、即ち、サイズフィールド２８、タイプフィールド３０、記述フィールド３２を有する。サイズフィールド２８は、ストリームのバイト数を特定する値を保持する。タイプフィールド３０は、記述子２６によって記述されたストリームのタイプを保持する。最後に、記述フィールド３２は、ストリームの記述を保持する。記述フィールド３２に保持された記述は、ストリームデータの直接の表示であってもよいし、代わりにストリームのデータを保持するメモリ空間の拡張を指示しているものであってもよい。
【００１５】
本発明の好ましい実施例は、図３に示すようなフィールド記述子３４にストリームに関する情報を記憶する。フィールド記述子３４は、ストリームＩＤを保持するストリームＩＤフィールド３６を含む。ストリームＩＤは、オノデ（onode)（オノデは以下でより詳細に記述する）内部のストリームを唯一つに識別するような、４バイト長の識別番号である。フィールド記述子３４は、更に、フラグビットを保持するフラグフィールドを含む。フィールド記述子３４の最後のフィールドは、ストリームに対するストリーム記述子２６である。
【００１６】
ストリームは、関連する機能に従って「オノデ」にグループ分けされる。オノデはオブジェクトの論理概念に対応し、一般的には、ファイル、ディレクトリ、若しくはサブディレクトリを構成する全てのストリームを保持する。各オノデは、それが含む複数のストリームの可変サイズ集合を記述することを要する情報を含む。
【００１７】
図４は、オノデ４０のフォーマットを記述する図である。各オノデは、関連する機能性のストリームを保持する。各オノデ４０は、以下のフィールド、即ち、長さフィールド４２、作業ＩＤフィールド４４、フラグフィールド４６、クラスＩＤフィールド４８、および、（図３に示されているような）フィールド記述子３４のアイレを保持するフィールド５０を含む。長さフィールド４２は、オノデの長さを特定する値を保持し、一方、作業ＩＤフィールド４４は、以下に詳細に述べるように、作業ＩＤマッピングアレイ７４（図７，図８）中へのインデックスを保持する。作業ＩＤは４バイト長である。フラグフィールド４６（図４）はフラグフィールドを保持し、クラスＩＤフィールド４８は、オノデのためのクラスＩＤを保持する。フィールド５０は、パックされたフィールド記述子のアレイを保持し、オノデ４を用いて保持された各ストリームに対するフィールド記述子３４を含む。フィールド５０のフィールド記述子のアレイに含まれるストリームの番号は変更することができる。更に、フィールド５０のフィールド記述子のアレイの各ストリームの長さも変更することができる。故に、オノデ４０は、可変サイズ構造である。オノデ４０の可変サイズ特性は、ディスク記憶装置１６のディスク上のアロケーションユニットにおける内部分裂を最少とすることに役立つ。
【００１８】
オノデ４０に関するあるデータは、オノデに直接的には導入されない。その代わりに、このデータは、もしそれが少しでもオノデに関するものであれば、図５に示すように別のストリームに記憶される。ストリーム５２は、それに関連するオノデ４０（図４）に関する状態情報の多数の異なるタイプを保持する。状態情報は、フィールド５６に保持されたオノデ４０が作成された時間を特定する時間スタンプを含む。フィールド５８は、オノデ４０が変更された最後の時間を特定する時間スタンプを保持する。同様に、フィールド６０は、オノデ４０がアクセスされた最後の時間を特定する時間スタンプを保持する。フィールド６２は、オノデ４０のサイズを特定する値を保持し、フィールド６４は、オノデの所有者のためのセキュリティ記述子を保持する。ストリーム５２に保持された全ての情報が、関連するオノデ４０に保持されたファイルデータの管理に有用である。
【００１９】
状態情報の第２のストリーム５４も図５に示されている。このストリーム５４は３つのフィールド、６６、６８、７０を含む。フィールド６６は、現在のオノデの親オノデの作業ＩＤを保持する。特に、各オノデ４０は、データ処理システム１０の包括ネームスペースにおいて可視である。この包括ネームスペースは、ルートオノデ以外の各オノデは他のオノデの子供であるものとした論理ツリー構造である。フィールド６６は、親オノデの作業ＩＤを保持する。フィールド６８は、オノデ４０に対する普遍的且つユニークなＩＤ（ＵＵＩＤ）を保持する。このＵＵＩＤは、システムの包括ネームスペースにおけるエンティティの間でユニークである。また、フィールド７０は、オノデ４０のクラスを特定するクラスＩＤを保持する。各オノデ４０は、それに関連する独自のクラスを有する。特に、各オノデ４０は、特別のクラスのオブジェクト事例である。
【００２０】
状態情報の２つの付加的なストリーム５５を記憶することもできる。ストリー５５（存在するときは）は、その親に関連するオノデ４０のネームを保持し、ストリーム５７（存在するときは）は、そのオノデのための（セキュリティーで使用される）アクセス制御リストを保持する。
【００２１】
ストリーム５２、５４、５５、５７は、少なくとも２つの理由で別々に記憶される。第一に、この情報を記憶することは、オノデ４０の平均サイズを減少させることに役立つ。ストリーム５２、５４、５５、５７は、オノデ毎に記憶されるものではない。この結果、オノデの平均サイズは減少する。幾つかのオノデに対しては含まれていない情報をストリーム５２、５４、５５、５７に分離することは、便利な表示である。第二に、このデータを別々に記憶することにより、各オノデ４０からコードを検索するのに複雑なコードを必要とせずに、関連する情報のグループをプログラム的にアクセスすることが可能とされる。
【００２２】
オノデ（図４）は、オノデバケットアレイ（図６）に記憶される。オノデバケットアレイ７２は、固定サイズバケットのアイレに形成された可変サイズデータ構造である。バケットのサイズ（例えば４Ｋ）は、データ処理システム１０のアーキテクチャに依存するが、システム１０のページサイズに整合させることもできる。バケットには、図６に示す例のように、１〜Ｎまでの番号が付されている。アレイ７２の各バケットは、パックされたオノデ４０のセットを含む。図６の例において、バケット２はたった１つのオノデしか含まないが、バケット１は２つのオノデを含み、バケット３は３つのオノデを含む。
【００２３】
オノデバケットアレイ７２は、ファイルデータが移動され、消去され、若しくは挿入されたときにあちこちに移動させなければならないデータ量を最少にするために用いられる。ディスク空間のブロックのアロケーションおよびデアロケーションの粒（granularity)は固定される。言い換えれば、メモリブロックは固定サイズバケットにアロケートされ、デアロケートされる。また、ファイルデータを記憶するために可変サイズ構造を使用すると、アロケーションの粒は固定されず、アロケーションの粒は極端に大きなものとなり得る。同様に、バケットが大きいと、小型化するのに費やす時間が大きなものとなるだろう。
【００２４】
効率を図るため、オペレーティングシステム２４（図１）は、関連するオノデ４０（図４）を、アレイ７２（図６）の同じバケットに記憶し、若しくは、ディスク記憶装置１６のディスク上において互いに非常に近接しているバケットに記憶する。この記憶技術は、ディスク上のオノデを発見するシーク時間を最少にする。概して言えば、一般的にいっしょにアクセスされるファイルが同じバケットに配置されるのである。いっしょにアクセスされるファイルの例として、共通サブディレクトリ若しくはディレクトリ内のファイルが含まれる。
【００２５】
オノデバケットアレイ７２（図６）は、ストリームとしてアクセスされる。アレイ７２のバケット内部にあるオノデ４０（図４）の場所を見つけ出すには、そのオノデに対する作業ＩＤを調査する必要がある。本質的には、オノデ同士の間の全ての参照は作業ＩＤに基づく。作業ＩＤマッピングアレイ７４（図７）は、作業ＩＤからオノデバケットアレイ７２のバケット番号にマップする。特に、ある特別なオノデ４０の作業ＩＤは、作業ＩＤマッピングアレイ７４へのインデックスの働きをする。特定されたインデックスにおけるエントリは、そのオノデ４０を保持するバケット番号を識別する。例えば、図７に示されているように、作業ＩＤマッピングアレイ７４のエントリ７６、７８は、関連する作業ＩＤを有するオノデ４０がバケット１に保持されていることを特定するような値を保持する。
【００２６】
作業ＩＤマッピングアレイ７４はヘッダ７７を含む。このヘッダは、幾つかのスクラッチメモリ空間と自由リストのヘッドに対するポインタを含む。自由リストは、作業ＩＤマッピングアレイ７４中に向けられる。それは、ディスク記憶装置１６に対していまだにアロケートされていない作業ＩＤを含む。特に、ヘッダ７７のポインタは、自由リストにおける次の自由作業ＩＤの作業ＩＤを有するような作業ＩＤマッピングアレイのエントリ７９Ａを指し示す。この例において、エントリ７９Ａ、７９Ｂ、７９Ｃ、７９Ｄ、７９Ｄは、それぞれ、自由リストにおいて次に続く作業ＩＤに対する作業ＩＤを含む。自由リストの終了を表示する識別可能な値を備えた最後のエントリを含むこともできる。作業ＩＤは、作業ＩＤが自由リスト上であるか否かをエンコードする。特に、各作業ＩＤの高位ビットは、作業ＩＤがオノデバケットアレイ７２のアロケートされたバケットに対応するかどうか、若しくは、自由リストにおける次の自由エントリと対応するかどうかを特定する。この結果、図７に示されているように、作業ＩＤマッピングアレイ７４は、自由リストに対する作業ＩＤと共にオノデバケットアレイ７２のバケットのための作業ＩＤを保持するようなエントリを含むこともできる。
【００２７】
新たな作業ＩＤを作業ＩＤマッピングアレイ７４にアロケートするために、図８に示されたステップが実行される。第一に、自由リストはそれが空であるかどうかを決定するために調査される（ステップ１１０）。自由リストが空でなければ、自由リスト上の次の作業ＩＤが使用される（１１１）。しかしながら、自由リストが空であれば、新たなセルに関連する付加的な作業ＩＤを含むように作業ＩＤマッピングアレイ７４を増大する（ステップ１１２）。この時点で、自由リストはもはや空ではなく、自由リストの最初の作業ＩＤが使用される（ステップ１１６）。
【００２８】
オノデ４０内部に含まれるストリームにアクセスするため、各オノデは、フィールド記述子５０のアレイに保持されたストリームの間で記憶されているようなネームインデックス８０に対するストリーム記述子を含む。ネームインデックス８０は、オノデ４０内部に含まれるストリームに対してＢ−ツリーインデックスを保持する。あまり頻繁にはアクセスされないストリームの中の幾つかは、ネームインデックス８０に直接記憶されるが、より頻繁にアクセスが発生するストリームは、ネームインデックスストリームの外側のオノデに記憶される。ネームインデックス８０は、ストリームのストリームＩＤを、オノデ内部に保持されたストリームの場所を発見するためのキーとして使用する。図９は、そのようなネームインデックス８０の一例を示す。このネームインデックス８０に対するストリーム記述子は、２つのストリームを含むことができる。ストリーム８１は、ネームインデックス８０のルートページを記憶するためのものである。ストリーム８２は、ネームインデックス８０のなんらんかの付加的なページを記憶するためのものである。付加的なページが存在しなければ、ネームインデックスストリーム記述子にはストリーム８１だけが含まれる。
【００２９】
図１０は、ストリーム記述子８２によって記述されたストリームに保持されているオノデ４０のストリームに対するＢ−ツリーインデックス８３の一例である。各ストリームは、ストリームＩＤ３６に基づいてインデックスされる。ストリームＩＤは、オノデ４０に保持されたストリームの中からあるストリームをユニークに識別する。ストリームＩＤは、それによってＢ−ツリーインデックス８３においてデータがインデックスされるキー値を構成する。図１０のＢ−ツリーインデックス８３は、葉ページ８８と非葉ページ８４、８６を含む。非葉ページ８４は、Ｂ−ツリーインデックス８３のルートページである。
【００３０】
各葉ページ８８は、（キー値、データ）の対であるセットを含む。キー値は、その対に含まれたデータをインデックスするためのキーとして機能するようなストリームＩＤである。図１０の例において、各葉ページは、キー値とデータのそのような対を２つ含んでいる。葉ページ８８に提供されたキー値とデータの対の数は一般に２より大きい。
【００３１】
同様に、非葉ページ８６、８８も対を含むが、これらの対は、キー値とＢ−ツリーインデックス８３の他のページに対するポインタを含む。これらのポインタは、各ページ８４、８６、８８によって占有されたディスク空間のページを特定するページ番号である。故に、ノード８４、８６、８８は各々、ディスク空間のページに対応する。
【００３２】
Ｂ−ツリーインデックス８３により、ストリームＩＤをキー値として使用して、オノデ４０内部のストリームに迅速に且つ効率的にアクセスすることができる。オノデ上のキー値は、それらが２進サーチされるようにソートされている。
【００３３】
更に、バケットアレイ７２の内部でオノデ４０を容易に増大させるという最適化が図られている。図９は、どのような方法でオノデ４０を増大させるか（つまり、あるオノデに対して、そのメモリの必要性が増大したときに、付加的なメモリ空間をどのような方法でアロケートするか）を決定するために実行されるステップのフローチャートである。第１に、オノデを保持する現在のバケットのヘッダを調査して、バケットの自由空間の量を決定する（ステップ９２）。現在のバケットに、オノデをその付加的なメモリ要求とともに記憶するために利用可能な十分な自由空間が存在するかどうかの決定がなされる。現在のバケットに利用可能な十分なメモリが存在する場合には、必要ならばその空間は小型化されて（ステップ９６）、増大したオノデは現在のバケットに記憶される（ステップ９８）。しかしながら、増大したオノデを記憶するのに十分なだけの自由空間が現在のバケットには存在しない場合には、最近接バケット（つまり、現在のバケットに物理的に近接しているという点で最も近接したバケットであって、少なくとも半分は空であり、増大したオノデを記憶するのに十分な自由空間を含んでいる）を見つけ出すためにヒューリスティックが実行される（ステップ１００）。増大オノデはその後、このバケットに記憶される（ステップ１０２）。その後、このバケットを指示するように、作業ＩＤマッピングアレイ７４の対応するエントリが更新される（ステップ１０４）。
【００３４】
本発明をその好ましい実施例を参照して記述してきたが、当業者ならば、特許請求の範囲に定義された本発明から逸脱することなく、その詳細および形態について様々な変更を加えることができることは明らかであろう。
【図面の簡単な説明】
【００３５】
【図１】本発明の好ましい実施例を実行するために適当なデータ処理システムのブロック図。
【図２】本発明の好ましい実施例のためのストリーム記述子のフォーマットを示す図。
【図３】本発明の好ましい実施例のフィールド記述子のフォーマットを示す図。
【図４】本発明の好ましい実施例のオノデのフォーマットを示す図。
【図５】図４のオノデに関して適当な情報を保持するストリームを示す図。
【図６】本発明の好ましい実施例のバケットアレイの図。
【図７】本発明の好ましい実施例における作業ＩＤマッピングアレイとオノデバケットアレイを示す図。
【図８】新たな作業ＩＤをアロケートするために本発明の好ましい実施例によって実行されるステップを示したフローチャート。
【図９】本発明の好ましい実施例によるネームインデックスを示す図。
【図１０】図９のネームインデックスに記憶されたＢ−ツリーインデックスの一例を示す図。
【図１１】ディスク上に既に記憶されたオノデに付加的なメモリ空間をアロケートするため、本発明の好ましい実施例によって実行されるステップを示したフローチャート。
【図１】
2008041108.tif 000003
【図２】
2008041108.tif 000004
【図３】
2008041108.tif 000005
【図４】
2008041108.tif 000006
【図５】
2008041108.tif 000007
【図６】
2008041108.tif 000008
【図７】
2008041108.tif 000009
【図８】
2008041108.tif 000010
【図９】
2008041108.tif 000011
【図１０】
2008041108.tif 000012
【図１１】
2008041108.tif 000013
【手続補正書】
【提出日】平成19年9月18日(2007.9.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリ空間を有する二次記憶装置（１６）を備えたデータ処理システム（１０）で使用される方法であって、ファイルデータを前記二次記憶装置（１６）に記憶するための、前記方法において、
前記データ処理システム（１０）が、前記二次記憶装置（１６）のメモリ空間の少なくとも一部を複数の固定サイズデータ構造体（バケット１〜Ｎ）へ論理的に分割する段階と、
論理的に隣接したファイルデータのセットを可変サイズデータ構造体（４０）に記憶する段階と、
前記論理的に隣接したファイルデータのセットを前記可変サイズデータ構造体（４０）に保持された論理的に隣接したファイルデータの他のセットの間で唯一つに識別するため、前記データ処理システム（１０）が、前記論理的に隣接したファイルデータのセットに第１の識別子（３６）を記憶する段階と、
前記データ処理システム（１０）が、前記可変サイズデータ構造体（４０）の複数のエントリのＢツリーインデックス（８３）を前記二次記憶装置（１６）に記憶する段階であって、前記複数のエントリは前記論理的に隣接したファイルデータのセットを唯一つに識別する、前記段階と、
前記データ処理システム（１０）が、固定サイズデータ構造体（バケット１〜Ｎ）内の前記可変サイズデータ構造体（４０）を唯一つに識別する第２の識別子（４４）を前記可変サイズデータ構造体（４０）に記憶する段階と、
前記データ処理システム（１０）が、前記可変サイズデータ構造体（４０）を前記二次記憶装置（１６）の前記複数の固定サイズデータ構造体（バケット１〜Ｎ）のうちの少なくとも１つに記憶する段階と、
前記データ処理システム（１０）が、前記可変サイズデータ構造体（４０）を唯一つに識別する前記第２の識別子（４４）を含んでいる複数のエントリのマップ（７４）を前記二次記憶装置（１６）に記憶する段階と、
を備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法において、更に、
前記データ処理システム（１０）が、論理的に隣接したファイルデータの他のセットを他の可変サイズデータ構造体（４０）に記憶する段階と、
前記論理的に隣接したファイルデータの他のセットを前記他の可変サイズデータ構造体（４０）に保持された論理的に隣接したファイルデータの他のセットの間で唯一つに識別するため、前記データ処理システム（１０）が、前記論理的に隣接したファイルデータの他のセットに第１の識別子（３６）を記憶する段階と、
前記データ処理システム（１０）が、前記他の可変サイズデータ構造体（４０）の複数のエントリのＢツリーインデックス（８３）を前記二次記憶装置（１６）に記憶する段階であって、前記複数のエントリは前記論理的に隣接したファイルデータの他のセットを唯一つに識別する、前記段階と、
前記データ処理システム（１０）が、固定サイズデータ構造体（バケット１〜Ｎ）内の前記他の可変サイズデータ構造体（４０）を唯一つに識別する第２の識別子（４４）を前記他の可変サイズデータ構造体（４０）に記憶する段階と、
前記データ処理システム（１０）が、前記他の可変サイズデータ構造体（４０）を前記可変サイズデータ構造体（４０）が記憶された前記固定サイズデータ構造体（バケット１〜Ｎ）に記憶する段階と、
前記データ処理システム（１０）が、前記他の可変サイズデータ構造体（４０）を唯一つに識別する前記第２の識別子（４４）を前記マップ（７４）に記憶する段階と、
を備える方法。
【請求項３】
請求項１又は２に記載の方法において、前記二次記憶装置（１６）のメモリ空間の少なくとも一部を複数の固定サイズデータ構造体（バケット１〜Ｎ）へ論理的に分割する段階は、更に、
前記データ処理システム（１０）が、前記二次記憶装置（１６）のメモリ空間の少なくとも一部を前記複数の固定サイズデータ構造体（バケット１〜Ｎ）から成る可変サイズアレイ（７２）へ論理的に分割する段階を備える方法。
【請求項４】
請求項１又は２に記載の方法において、前記二次記憶装置（１６）はディスク記憶装置であり、前記二次記憶装置（１６）のメモリ空間の少なくとも一部を複数の固定サイズデータ構造体（バケット１〜Ｎ）へ論理的に分割する段階は、更に、
前記データ処理システム（１０）が、前記ディスク記憶装置（１６）のメモリ空間の少なくとも一部を複数の固定サイズデータ構造体（バケット１〜Ｎ）へ論理的に分割する段階を備える方法。
【請求項５】
請求項１乃至４のいずれかに記載の方法において、更に、前記データ処理システム（１０）が、前記可変サイズデータ構造体（４０）に関する特性情報（４２、４４、４６、４８、５０、５８、６０、６２、６４、６６、６８、７０）を前記二次記憶装置（１６）に記憶する段階を備える方法。
【請求項６】
請求項５に記載の方法において、更に、前記データ処理システム（１０）が、前記可変サイズデータ構造体に問い合わせを行って、そこに記憶された前記特性情報（４２、４４、４６、４８、５０、５８、６０、６２、６４、６６、６８、７０）を得る段階を備える方法。
【請求項７】
請求項１乃至６のいずれかに記載の方法において、前記可変サイズデータ構造体（４０）の複数のエントリのＢツリーインデックス（８３）を前記二次記憶装置（１６）に記憶する段階は、更に、
前記データ処理システム（１０）が、前記Ｂツリーインデックス（８３）を前記二次記憶装置（１６）に論理的に隣接したファイルデータのセット（８０、８１）として記憶する段階を備える方法。
【請求項８】
請求項１乃至７のいずれかに記載の方法において、更に、前記データ処理システム（１０）が、Ｂ−ツリーインデックス（８３）にアクセスすることによって、前記可変サイズデータ構造体（４０）の前記論理的に隣接したファイルデータのセットの、前記二次記憶装置（１６）における場所を発見する段階を備える方法。
【請求項９】
請求項１乃至８のいずれかに記載の方法において、更に、
前記可変サイズデータ構造体（４０）の増大する要求を満たすため、前記データ処理システム（１０）が、前記二次記憶装置（１６）において付加的なメモリ空間を割り当てる段階と、
前記可変サイズデータ構造体（４０）を現在記憶している前記固定サイズデータ構造体（バケット１〜Ｎ）が前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有しているかどうかを、前記データ処理システム（１０）が決定する段階と、
前記可変サイズデータ構造体（４０）を現在記憶している前記固定サイズデータ構造体（バケット１〜Ｎ）が前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有しているときは、前記可変サイズデータ構造体（４０）の増大する要求を満たすために、前記データ処理システム（１０）が前記固定サイズデータ構造体への付加的な空間を前記可変サイズデータ構造体（４０）へ割り当てる段階と、
前記可変サイズデータ構造体（４０）を現在記憶している前記固定サイズデータ構造体（バケット１〜Ｎ）が前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有していないときは、前記データ処理システム（１０）が、前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有する少なくとも１つの他の固定サイズデータ構造体（バケット１〜Ｎ）を見つけ出し、前記可変サイズデータ構造体（４０）を前記見つけ出した少なくとも１つの他の固定サイズデータ構造体（バケット１〜Ｎ）へ移動させる段階と、
を備える方法。
【請求項１０】
請求項９に記載の方法において、前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有する少なくとも１つの他の固定サイズデータ構造体（バケット１〜Ｎ）を見つけ出す段階は、更に、
前記可変サイズデータ構造体（４０）の増大する要求を満たすために十分な自由メモリ空間を有し、前記可変サイズデータ構造体（４０）を現在保持する前記固定サイズデータ構造体（４０）に前記二次記憶装置（１６）において最も近接している、少なくとも１つの他の固定サイズデータ構造体（バケット１〜Ｎ）を、前記データ処理システム（１０）が見つけ出すことを備える方法。
【請求項１１】
請求項１乃至１０のいずれかに記載の方法において、更に、
前記データ処理システム（１０）が、前記マップ（７４）を使用することにより所定の識別子（４４）を有する前記可変サイズデータ構造体（４０）の場所を発見して前記可変サイズデータ構造体（４０）が記憶された少なくとも１つの固定サイズデータ構造体（バケット１〜Ｎ）の場所を発見し、前記少なくとも１つの固定サイズデータ構造体（バケット１〜Ｎ）を調査して前記所定の識別子（４４）を有する前記可変サイズデータ構造体（４０）の場所を発見する段階を備える方法。
【請求項１２】
請求項１乃至１１のいずれかに記載の方法において、更に、
前記データ処理システム（１０）が、自由リストを前記マップ（７４）に記憶する段階であって、前記自由リストは割り当てられていない前記二次記憶装置（１６）中の空間のセルの識別子（４４）を含んでいる、前記段階と、
前記データ処理システム（１０）が、前記自由リストが少なくとも１つのセルに対する第２の識別子（４４）を含んでいるかを決定する段階と、
前記自由リストが少なくとも１つのセルに対する第２の識別子（４４）を含んでいる場合には、前記データ処理システム（１０）が、前記自由リストからのセルの所定の識別子（４４）を新たな可変サイズデータ構造体（４０）に割り当て、前記新たな可変サイズデータ構造体（４０）を前記セルに記憶する段階と、
を備える方法。
【請求項１３】
請求項１２に記載の方法において、更に、
前記自由リストがセルを含まない場合には、前記データ処理システム（１０）が、新たな自由セルに対する新たな識別子を含む付加的なエントリを前記マップ（７４）に付加する段階を備える方法。
【請求項１４】
請求項１３に記載の方法において、更に、
前記データ処理システム（１０）が、前記新たな自由セルの１つに関連する前記新たな識別子（４４）の１つを前記新たな可変サイズデータ構造体（４０）に割り当てる段階と、
前記データ処理システム（１０）が、前記新たな可変サイズデータ構造体（４０）に割り当てられた前記新たな識別子と関連する前記新たな自由セルに前記新たな可変サイズデータ構造体（４０）を記憶する段階と、
を備える方法。
【請求項１５】
請求項１２乃至１４のいずれかに記載の方法において、更に、前記データ処理システム（１０）が、前記マップ（７４）を用いて前記自由リストにおいて第２の識別子（４４）の場所を発見する段階を備える方法。
【請求項１６】
データ処理システム（１０）において、
内部メモリ（１４）と、
二次記憶装置（１６）と、
前記二次記憶装置（１６）のメモリ空間の少なくとも一部を複数の固定サイズデータ構造体（バケット１〜Ｎ）へ論理的に分割する手段と、
論理的に隣接したファイルデータのセットを可変サイズデータ構造体（４０）に記憶する手段と、
前記論理的に隣接したファイルデータのセットを前記可変サイズデータ構造体（４０）に保持された論理的に隣接したファイルデータの他のセットの間で唯一つに識別するため、前記論理的に隣接したファイルデータのセットに第１の識別子（３６）を記憶する手段と、
前記可変サイズデータ構造体（４０）の複数のエントリのＢツリーインデックス（８３）を前記二次記憶装置（１６）に記憶する手段であって、前記複数のエントリは前記論理的に隣接したファイルデータのセットを唯一つに識別する、前記手段と、
固定サイズデータ構造体（バケット１〜Ｎ）内の前記可変サイズデータ構造体（４０）を唯一つに識別する第２の識別子（４４）を前記可変サイズデータ構造体（４０）に記憶する手段と、
前記可変サイズデータ構造体（４０）を前記二次記憶装置（１６）の前記複数の固定サイズデータ構造体（バケット１〜Ｎ）のうちの少なくとも１つに記憶する手段と、
前記可変サイズデータ構造体（４０）を唯一つに識別する前記第２の識別子（４４）を含んでいる複数のエントリのマップ（７４）を前記二次記憶装置（１６）に記憶する手段と、
を備えることを特徴とするシステム。
【請求項１７】
請求項１６に記載のシステムにおいて、更に、
論理的に隣接したファイルデータの他のセットを他の可変サイズデータ構造体（４０）に記憶する手段と、
前記論理的に隣接したファイルデータの他のセットを前記他の可変サイズデータ構造体（４０）に保持された論理的に隣接したファイルデータの他のセットの間で唯一つに識別するため、前記論理的に隣接したファイルデータの他のセットに第１の識別子（３６）を記憶する手段と、
前記他の可変サイズデータ構造体（４０）の複数のエントリのＢツリーインデックス（８３）を前記二次記憶装置（１６）に記憶する手段であって、前記複数のエントリは前記論理的に隣接したファイルデータの他のセットを唯一つに識別する、前記手段と、
固定サイズデータ構造体（バケット１〜Ｎ）内の前記他の可変サイズデータ構造体（４０）を唯一つに識別する第２の識別子（４４）を前記他の可変サイズデータ構造体（４０）に記憶する手段と、
前記他の可変サイズデータ構造体（４０）を前記可変サイズデータ構造体（４０）が記憶された前記固定サイズデータ構造体（バケット１〜Ｎ）に記憶する手段と、
前記他の可変サイズデータ構造体（４０）を唯一つに識別する前記第２の識別子（４４）を前記マップ（７４）に記憶する手段と、
を備えるシステム。
【請求項１８】
請求項１６又は１７に記載のシステムにおいて、前記二次記憶装置（１６）はディスク記憶装置であるシステム。
【請求項１９】
請求項１６乃至１８のいずれかに記載のシステムにおいて、更に、前記可変サイズデータ構造体（４０）に関する特性情報（４２、４４、４６、４８、５０、５８、６０、６２、６４、６６、６８、７０）を前記二次記憶装置（１６）に記憶する手段を備えるシステム。
【請求項２０】
請求項１９に記載のシステムにおいて、更に、前記可変サイズデータ構造体に問い合わせを行って、そこに記憶された前記特性情報（４２、４４、４６、４８、５０、５８、６０、６２、６４、６６、６８、７０）を得る手段を備えるシステム。
【請求項２１】
データ処理システム（１０）によって請求項１乃至１５のいずれかに記載の方法を実行することができるコンピュータ実行可能な命令を備えるコンピュータ読み取り可能な媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、データ処理システムに関し、特に、ファイルシステムにおけるオブジェクトの効率的な記憶に関する。
【背景技術】
【０００２】
従来のオペレーティングシステムでは、ファイルに関する制御情報と共に、ファイルデータを記憶するための固定数のディスク空間のブロックが、各ファイルにアロケートされていた。これらのブロックは、迅速にアロケート若しくはデアロケートすることができるよう固定サイズとされている。ファイルおよびファイルデータに関する制御情報はしばしば可変サイズとされるが、これは少なくとも２つの問題を抱える。第１に、制御情報、及び／又は、ファイルデータがブロックを満たすほど大きくない場合に、ブロック内部のディスク空間が浪費されてしまうこと。第２に、制御情報、及び／又は、ファイルデータが単一のブロックに記憶されるにはあまりに大きすぎる場合に、それを複数のブロックに記憶しなければならず、データが記憶される場所を特定するために複数のポインタを保持しなければならないことである。このようなポインタを保持し且つ使用することは、しばしば極めて煩雑である。
【発明の開示】
【課題を解決するための手段】
【０００３】
本発明の第１の特徴によれば、メモリ空間を有する第２の記憶装置にファイルデータを記憶するために方法および装置が実行される。この方法を実行するためのデータ処理システムは、内部記憶装置と共に、第２の記憶装置を備える。第２の記憶装置のメモリ空間の少なくとも一部は、固定サイズのデータ構造に論理的に分割される。論理的に関連のあるファイルデータの第１のサイズの第１のセットが、所定タイプの可変サイズデータ構造に記憶される。論理的に関連のあるファイルデータの第１のセットを記憶する可変サイズデータ構造が、第２の記憶装置の少なくとも１つの固定サイズデータ構造に記憶される。論理的に関連のあるファイルデータの付加的なセットは、第２の記憶装置の同一の固定サイズデータ構造に記憶されてもよい。
【０００４】
本発明の他の特徴によれば、ファイルデータの論理的に隣接した複数のバイトは、第１のタイプの可変サイズデータ構造に記憶され、関連するファイルデータを記憶する第１のタイプの可変サイズデータ構造のセットは、第２のタイプの可変サイズデータ構造に記憶される。第２のタイプの可変サイズデータ構造は、第２の記憶装置の固定サイズデータ構造に記憶される。
【０００５】
本発明の更に他の特徴によれば、第２の記憶装置を有するデータ処理システムで方法が実行される。この方法では、ファイルデータの論理的に隣接した複数のバイトのセットが、第１のタイプの可変サイズデータ構造のそれぞれに記憶される。第１のタイプの可変サイズデータ構造の所定のものは、第２の記憶装置の第２のタイプの可変サイズデータ構造に記憶される。第１のタイプの可変サイズデータ構造に対するＢ−ツリーインデックスは、第２の記憶装置の第２のタイプの可変サイズデータ構造に記憶される。データ処理システムに保持された第２のタイプの可変サイズデータ構造の各々に対して、別のＢ−ツリーインデックスが保持されてもよい。
【０００６】
また、本発明の他の特徴によれば、第２の記憶装置を含むデータ処理システムで方法が実行される。第２の記憶装置は、固定サイズとされたバケット (bucket) のアレイを保持するメモリ空間を含む。アレイのバケットの中の１つがオブジェクトを保持する。この方法は、第２の記憶装置に付加的なメモリ空間をアロケートしてオブジェクトの増大する要求を満たす。第１に、オブジェクトを現時点で保持するバケットがオブジェクトの増大する要求を満たすのに十分な自由メモリ空間を有しているかどうかが判断される。バケットが十分な自由メモリ空間を有していれば、バケットの付加的な空間をオブジェクトにアロケートしてオブジェクトの増大する要求を満たす。そうでなければ、オブジェクトの増大する要求を満たすのに十分なメモリ空間を有するバケットが発見される。このオブジェクトはその後、発見された場所のバケットに移動される。
【０００７】
本発明の付加的な特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイに複数のファイルが記憶される。記憶空間の固定サイズバケットの少なくとも１つは、その中に記憶された１つ以上のファイルを有する。各ファイルに識別子を提供し、アレイに記憶されたファイルの中からあるファイルを識別する。また、第２の記憶装置にマップを記憶し、ファイルに対する各識別子をそれが記憶される固定サイズバケットにマップする。ファイルが記憶される固定サイズバケットの場所を発見するためにマップを使用することにより、またその後、所定の識別子を有するファイルの場所を発見するために固定サイズバケットを調査することにより、所定の識別子を有するファイルの中の１つの場所がアレイにおいて発見される。
【０００８】
本発明の他の特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイに複数のファイルが記憶される。各ファイルはそれに関連する識別子を有する。多数のエントリのマッピング構造が第２の記憶装置に記憶される。マッピング構造のエントリは、識別子の１つをアレイの複数バケットの中の１つにマップするような、少なくとも１つのエントリを含む。第２の記憶装置の空間の自由セルの識別子の自由リストがマッピング構造に記憶される。この自由リストはいまだにアロケートされていないセルの識別子を含む。マッピング構造は、バケットの識別子からバケットの場所を発見するために用いられる。更に、このマッピング構造は、自由セルに対する識別子から自由セルの場所を発見するためにも用いられ得る。
【０００９】
本発明の更に他の特徴によれば、第２の記憶装置の記憶空間の固定サイズバケットのアレイは、ファイルを記憶するためにも提供される。各ファイルは、それに関連する識別子を有する。複数のエントリのマッピング構造が第２の記憶装置に提供される。第２の記憶装置のマッピング構造に自由リストが提供される。この自由リストは、第２の記憶装置の空間のいずれかの自由セルの識別子を含む。マッピング構造は、識別子を、セルリストのいずれかのセルに、若しくはアレイのいずれかのバケットにマップする。自由リストが少なくとも１つのセルの識別子を含むかどうかの決定がなされる。自由リストが少なくとも１つのセルに対する識別子を含んでいれば、自由リストの複数のセルの中の１つの所定の識別子が新たなファイルに記憶され、この新たなファイルはそのセルに記憶される。自由リストが識別子を含まなければ、新たな識別子を関連する新たな自由セルにマップするようなマッピング構造にエントリを付加することができる。新たな自由セルの１つに関連する新たな識別子の１つを新たなファイルに割り当て、この新たなファイルを新たな自由セルに記憶することもできる。
【発明を実施するための最良の形態】
【００１０】
本発明の好ましい実施例は、ファイルデータをディスク上に記憶するのに十分な技術を提供する。この技術を以下に述べる。
図１は、本発明の好ましい実施例を実行するためのデータ処理システム１０のブロック図である。このデータ処理システム１０は、中央処理装置（ＣＰＵ）１２、メモリ１４、ディスク記憶装置（二次又は補助記憶装置）１６を含む。更に、データ処理システム１０は、キーボード１８、マウス２０、ビデオ表示装置２２を含む。メモリ１４は、オペレーティングシステム２４のコピーを保持する。オペレーティングシステム２４は、以下に詳述するファイルシステム管理サービスを提供する。ここに述べられたデータ処理システムは単一のプロセッサシステムであるが、分散システムのようなマルチプロセッサシステムで本発明を実行することも可能であることは当業者には明らかであろう。
【００１１】
更に、本発明の好ましい実施例はオペレーティングシステムの一部として記述されているが、本発明を代替的に、グラフィックユーザインタフェースや、オペレーティングシステムから分離された他のコードタイプで実行することも可能であることは、当業者には明らかであろう。
【００１２】
オペレーティングシステム２４のファイルシステム管理サービスは、ファイルデータをディスク記憶装置１６のディスク上に記憶するために応答する。好ましい実施例のオペレーティングシステム２４は、オブジェクト指向オペレーティングシステムである。このように、オペレーティングシステム２４はオブジェクトの一般概念を支持する。
【００１３】
ディスク記憶装置１６のディスク上で最も小さな記憶単位は、「ストリーム」である。ストリームは、論理的に隣接した、ランダムアクセス可能な、ファイルデータの複数のバイトの集合である。ストリーム記述子の適当なフォーマットが、これと同日に出願され共通の譲受人に譲渡された同時継続中の特許出願No.         号、 "Storage of File Data on Disk in Multiple Representations" に記述されている。この同時出願の開示は本明細書に組み入れられている。
【００１４】
各ストリームは、それに関連したストリーム記述子２６を有する。ストリーム記述子２６はストリームを記述し、ストリーム内部に保持されたデータにアクセスするための手段を提供する。図２に示されているように、ストリーム記述子２６は、少なくとも３つのフィールド、即ち、サイズフィールド２８、タイプフィールド３０、記述フィールド３２を有する。サイズフィールド２８は、ストリームのバイト数を特定する値を保持する。タイプフィールド３０は、記述子２６によって記述されたストリームのタイプを保持する。最後に、記述フィールド３２は、ストリームの記述を保持する。記述フィールド３２に保持された記述は、ストリームデータの直接の表示であってもよいし、代わりにストリームのデータを保持するメモリ空間の拡張を指示しているものであってもよい。
【００１５】
本発明の好ましい実施例は、図３に示すようなフィールド記述子３４にストリームに関する情報を記憶する。フィールド記述子３４は、ストリームＩＤを保持するストリームＩＤフィールド３６を含む。ストリームＩＤは、Ｏノード（onode)（Ｏノードは以下でより詳細に記述する）内部のストリームを唯一つに識別するような、４バイト長の識別番号である。フィールド記述子３４は、更に、フラグビットを保持するフラグフィールドを含む。フィールド記述子３４の最後のフィールドは、ストリームに対するストリーム記述子２６である。
【００１６】
ストリームは、関連する機能に従って「Ｏノード」にグループ分けされる。Ｏノードはオブジェクトの論理概念に対応し、一般的には、ファイル、ディレクトリ、若しくはサブディレクトリを構成する全てのストリームを保持する。各Ｏノードは、それが含む複数のストリームの可変サイズ集合を記述するのに必要な情報を含む。
【００１７】
図４は、Ｏノード４０のフォーマットを記述する図である。各Ｏノードは、関連する機能性のストリームを保持する。各Ｏノード４０は、以下のフィールド、即ち、長さフィールド４２、作業ＩＤフィールド４４、フラグフィールド４６、クラスＩＤフィールド４８、および、（図３に示されているような）フィールド記述子３４のアレイを保持するフィールド５０を含む。長さフィールド４２は、Ｏノードの長さを特定する値を保持し、一方、作業ＩＤフィールド４４は、以下に詳細に述べるように、作業ＩＤマッピングアレイ７４（図７，図８）中へのインデックスを保持する。作業ＩＤは４バイト長である。フラグフィールド４６（図４）はフラグフィールドを保持し、クラスＩＤフィールド４８は、ＯノードのためのクラスＩＤを保持する。フィールド５０は、パックされたフィールド記述子のアレイを保持し、Ｏノード４を用いて保持された各ストリームに対するフィールド記述子３４を含む。フィールド５０のフィールド記述子のアレイに含まれるストリームの番号は変更することができる。更に、フィールド５０のフィールド記述子のアレイの各ストリームの長さも変更することができる。故に、Ｏノード４０は、可変サイズ構造（構造体）である。Ｏノード４０の可変サイズ特性は、ディスク記憶装置１６のディスク上のアロケーションユニットにおける内部分裂を最少とすることに役立つ。
【００１８】
Ｏノード４０に関するあるデータは、Ｏノードに直接的には導入されない。その代わりに、このデータは、もしそれが少しでもＯノードに関するものであれば、図５に示すように別のストリームに記憶される。ストリーム５２は、それに関連するＯノード４０（図４）に関する状態情報の多数の異なるタイプを保持する。状態情報は、フィールド５６に保持されたＯノード４０が作成された時間を特定する時間スタンプを含む。フィールド５８は、Ｏノード４０が変更された最後の時間を特定する時間スタンプを保持する。同様に、フィールド６０は、Ｏノード４０がアクセスされた最後の時間を特定する時間スタンプを保持する。フィールド６２は、Ｏノード４０のサイズを特定する値を保持し、フィールド６４は、Ｏノードの所有者のためのセキュリティ記述子を保持する。ストリーム５２に保持された全ての情報が、関連するＯノード４０に保持されたファイルデータの管理に有用である。
【００１９】
状態情報の第２のストリーム５４も図５に示されている。このストリーム５４は３つのフィールド、６６、６８、７０を含む。フィールド６６は、現在のＯノードの親Ｏノードの作業ＩＤを保持する。特に、各Ｏノード４０は、データ処理システム１０の包括ネームスペースにおいて可視である。この包括ネームスペースは、ルートＯノード以外の各Ｏノードは他のＯノードの子供であるものとした論理ツリー構造である。フィールド６６は、親Ｏノードの作業ＩＤを保持する。フィールド６８は、Ｏノード４０に対する普遍的且つユニークなＩＤ（ＵＵＩＤ）を保持する。このＵＵＩＤは、システムの包括ネームスペースにおけるエンティティの間でユニークである。また、フィールド７０は、Ｏノード４０のクラスを特定するクラスＩＤを保持する。各Ｏノード４０は、それに関連する独自のクラスを有する。特に、各Ｏノード４０は、特別のクラスのオブジェクト事例である。
【００２０】
状態情報の２つの付加的なストリーム５５を記憶することもできる。ストリー５５（存在するときは）は、その親に関連するＯノード４０のネームを保持し、ストリーム５７（存在するときは）は、そのＯノードのための（セキュリティーで使用される）アクセス制御リストを保持する。
【００２１】
ストリーム５２、５４、５５、５７は、少なくとも２つの理由で別々に記憶される。第一に、この情報を記憶することは、Ｏノード４０の平均サイズを減少させることに役立つ。ストリーム５２、５４、５５、５７は、Ｏノード毎に記憶されるものではない。この結果、Ｏノードの平均サイズは減少する。幾つかのＯノードに対しては含まれていない情報をストリーム５２、５４、５５、５７に分離することは、便利な表示である。第二に、このデータを別々に記憶することにより、各Ｏノード４０からコードを検索するのに複雑なコードを必要とせずに、関連する情報のグループをプログラム的にアクセスすることが可能とされる。
【００２２】
Ｏノード（図４）は、Ｏノードバケットアレイ（図６）に記憶される。Ｏノードバケットアレイ７２は、固定サイズバケットのアイレに形成された可変サイズデータ構造である。バケットのサイズ（例えば４Ｋ）は、データ処理システム１０のアーキテクチャに依存するが、システム１０のページサイズに整合させることもできる。バケットには、図６に示す例のように、１〜Ｎまでの番号が付されている。アレイ７２の各バケットは、パックされたＯノード４０のセットを含む。図６の例において、バケット２はたった１つのＯノードしか含まないが、バケット１は２つのＯノードを含み、バケット３は３つのＯノードを含む。
【００２３】
Ｏノードバケットアレイ７２は、ファイルデータが移動され、消去され、若しくは挿入されたときにあちこちに移動させなければならないデータ量を最少にするために用いられる。ディスク空間のブロックのアロケーションおよびデアロケーションの粒（granularity)は固定される。言い換えれば、メモリブロックは固定サイズバケットにアロケートされ、デアロケートされる。また、ファイルデータを記憶するために可変サイズ構造を使用すると、アロケーションの粒は固定されず、アロケーションの粒は極端に大きなものとなり得る。同様に、バケットが大きいと、小型化するのに費やす時間が大きなものとなるだろう。
【００２４】
効率を図るため、オペレーティングシステム２４（図１）は、関連するＯノード４０（図４）を、アレイ７２（図６）の同じバケットに記憶し、若しくは、ディスク記憶装置１６のディスク上において互いに非常に近接しているバケットに記憶する。この記憶技術は、ディスク上のＯノードを発見するシーク時間を最少にする。概して言えば、一般的にいっしょにアクセスされるファイルが同じバケットに配置されるのである。いっしょにアクセスされるファイルの例として、共通サブディレクトリ若しくはディレクトリ内のファイルが含まれる。
【００２５】
Ｏノードバケットアレイ７２（図６）は、ストリームとしてアクセスされる。アレイ７２のバケット内部にあるＯノード４０（図４）の場所を見つけ出すには、そのＯノードに対する作業ＩＤを調査する必要がある。本質的には、Ｏノード同士の間の全ての参照は作業ＩＤに基づく。作業ＩＤマッピングアレイ７４（図７）は、作業ＩＤからＯノードバケットアレイ７２のバケット番号にマップする。特に、ある特別なＯノード４０の作業ＩＤは、作業ＩＤマッピングアレイ７４へのインデックスの働きをする。特定されたインデックスにおけるエントリは、そのＯノード４０を保持するバケット番号を識別する。例えば、図７に示されているように、作業ＩＤマッピングアレイ７４のエントリ７６、７８は、関連する作業ＩＤを有するＯノード４０がバケット１に保持されていることを特定するような値を保持する。
【００２６】
作業ＩＤマッピングアレイ７４はヘッダ７７を含む。このヘッダは、幾つかのスクラッチメモリ空間と自由リストのヘッドに対するポインタを含む。自由リストは、作業ＩＤマッピングアレイ７４中に向けられる。それは、ディスク記憶装置１６に対していまだにアロケートされていない作業ＩＤを含む。特に、ヘッダ７７のポインタは、自由リストにおける次の自由作業ＩＤの作業ＩＤを有するような作業ＩＤマッピングアレイのエントリ７９Ａを指し示す。この例において、エントリ７９Ａ、７９Ｂ、７９Ｃ、７９Ｄ、７９Ｄは、それぞれ、自由リストにおいて次に続く作業ＩＤに対する作業ＩＤを含む。自由リストの終了を表示する識別可能な値を備えた最後のエントリを含むこともできる。作業ＩＤは、作業ＩＤが自由リスト上であるか否かをエンコードする。特に、各作業ＩＤの高位ビットは、作業ＩＤがＯノードバケットアレイ７２のアロケートされたバケットに対応するかどうか、若しくは、自由リストにおける次の自由エントリと対応するかどうかを特定する。この結果、図７に示されているように、作業ＩＤマッピングアレイ７４は、自由リストに対する作業ＩＤと共にＯノードバケットアレイ７２のバケットのための作業ＩＤを保持するようなエントリを含むこともできる。
【００２７】
新たな作業ＩＤを作業ＩＤマッピングアレイ７４にアロケートするために、図８に示されたステップが実行される。第一に、自由リストはそれが空であるかどうかを決定するために調査される（ステップ１１０）。自由リストが空でなければ、自由リスト上の次の作業ＩＤが使用される（１１１）。しかしながら、自由リストが空であれば、新たなセルに関連する付加的な作業ＩＤを含むように作業ＩＤマッピングアレイ７４を増大する（ステップ１１２）。この時点で、自由リストはもはや空ではなく、自由リストの最初の作業ＩＤが使用される（ステップ１１６）。
【００２８】
Ｏノード４０内部に含まれるストリームにアクセスするため、各Ｏノードは、フィールド記述子５０のアレイに保持されたストリームの間で記憶されているようなネームインデックス８０に対するストリーム記述子を含む。ネームインデックス８０は、Ｏノード４０内部に含まれるストリームに対してＢ−ツリーインデックスを保持する。あまり頻繁にはアクセスされないストリームの中の幾つかは、ネームインデックス８０に直接記憶されるが、より頻繁にアクセスが発生するストリームは、ネームインデックスストリームの外側のＯノードに記憶される。ネームインデックス８０は、ストリームのストリームＩＤを、Ｏノード内部に保持されたストリームの場所を発見するためのキーとして使用する。図９は、そのようなネームインデックス８０の一例を示す。このネームインデックス８０に対するストリーム記述子は、２つのストリームを含むことができる。ストリーム８１は、ネームインデックス８０のルートページを記憶するためのものである。ストリーム８２は、ネームインデックス８０のなんらんかの付加的なページを記憶するためのものである。付加的なページが存在しなければ、ネームインデックスストリーム記述子にはストリーム８１だけが含まれる。
【００２９】
図１０は、ストリーム記述子８２によって記述されたストリームに保持されているＯノード４０のストリームに対するＢ−ツリーインデックス８３の一例である。各ストリームは、ストリームＩＤ３６に基づいてインデックスされる。ストリームＩＤは、Ｏノード４０に保持されたストリームの中からあるストリームをユニークに識別する。ストリームＩＤは、それによってＢ−ツリーインデックス８３においてデータがインデックスされるキー値を構成する。図１０のＢ−ツリーインデックス８３は、葉ページ８８と非葉ページ８４、８６を含む。非葉ページ８４は、Ｂ−ツリーインデックス８３のルートページである。
【００３０】
各葉ページ８８は、（キー値、データ）の対であるセットを含む。キー値は、その対に含まれたデータをインデックスするためのキーとして機能するようなストリームＩＤである。図１０の例において、各葉ページは、キー値とデータのそのような対を２つ含んでいる。葉ページ８８に提供されたキー値とデータの対の数は一般に２より大きい。
【００３１】
同様に、非葉ページ８６、８８も対を含むが、これらの対は、キー値とＢ−ツリーインデックス８３の他のページに対するポインタを含む。これらのポインタは、各ページ８４、８６、８８によって占有されたディスク空間のページを特定するページ番号である。故に、ノード８４、８６、８８は各々、ディスク空間のページに対応する。
【００３２】
Ｂ−ツリーインデックス８３により、ストリームＩＤをキー値として使用して、Ｏノード４０内部のストリームに迅速に且つ効率的にアクセスすることができる。Ｏノード上のキー値は、それらが２進サーチされるようにソートされている。
【００３３】
更に、バケットアレイ７２の内部でＯノード４０を容易に増大させるという最適化が図られている。図９は、どのような方法でＯノード４０を増大させるか（つまり、あるＯノードに対して、そのメモリの必要性が増大したときに、付加的なメモリ空間をどのような方法でアロケートするか）を決定するために実行されるステップのフローチャートである。第１に、Ｏノードを保持する現在のバケットのヘッダを調査して、バケットの自由空間の量を決定する（ステップ９２）。現在のバケットに、Ｏノードをその付加的なメモリ要求とともに記憶するために利用可能な十分な自由空間が存在するかどうかの決定がなされる。現在のバケットに利用可能な十分なメモリが存在する場合には、必要ならばその空間は小型化されて（ステップ９６）、増大したＯノードは現在のバケットに記憶される（ステップ９８）。しかしながら、増大したＯノードを記憶するのに十分なだけの自由空間が現在のバケットには存在しない場合には、最近接バケット（つまり、現在のバケットに物理的に近接しているという点で最も近接したバケットであって、少なくとも半分は空であり、増大したＯノードを記憶するのに十分な自由空間を含んでいる）を見つけ出すためにヒューリスティックが実行される（ステップ１００）。増大Ｏノードはその後、このバケットに記憶される（ステップ１０２）。その後、このバケットを指示するように、作業ＩＤマッピングアレイ７４の対応するエントリが更新される（ステップ１０４）。
【００３４】
本発明をその好ましい実施例を参照して記述してきたが、当業者ならば、特許請求の範囲に定義された本発明から逸脱することなく、その詳細および形態について様々な変更を加えることができることは明らかであろう。
【図面の簡単な説明】
【００３５】
【図１】本発明の好ましい実施例を実行するために適当なデータ処理システムのブロック図。
【図２】本発明の好ましい実施例のためのストリーム記述子のフォーマットを示す図。
【図３】本発明の好ましい実施例のフィールド記述子のフォーマットを示す図。
【図４】本発明の好ましい実施例のＯノードのフォーマットを示す図。
【図５】図４のＯノードに関して適当な情報を保持するストリームを示す図。
【図６】本発明の好ましい実施例のバケットアレイの図。
【図７】本発明の好ましい実施例における作業ＩＤマッピングアレイとＯノードバケットアレイを示す図。
【図８】新たな作業ＩＤをアロケートするために本発明の好ましい実施例によって実行されるステップを示したフローチャート。
【図９】本発明の好ましい実施例によるネームインデックスを示す図。
【図１０】図９のネームインデックスに記憶されたＢ−ツリーインデックスの一例を示す図。
【図１１】ディスク上に既に記憶されたＯノードに付加的なメモリ空間をアロケートするため、本発明の好ましい実施例によって実行されるステップを示したフローチャート。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2008041108.tif 000014
【図２】
2008041108.tif 000015
【図３】
2008041108.tif 000016
【図４】
2008041108.tif 000017
【図５】
2008041108.tif 000018
【図６】
2008041108.tif 000019
【図７】
2008041108.tif 000020
【図８】
2008041108.tif 000021
【図９】
2008041108.tif 000022
【図１０】
2008041108.tif 000023
【図１１】
2008041108.tif 000024