区画管理装置、区画管理方法及びプログラム
【課題】記憶装置の容量によらず柔軟に領域を区画し管理することが可能であり、また区画にファイルを割り付けるに当たって、効率的な手法により、領域を有効活用することのできる技術を提供する。
【解決手段】記憶装置の区画のサイズを互いに異なる2のべき乗の和で表して、和を構成する各2のべき乗のサイズの領域を主区域としたとき、各主区域を2分の1ずつ順次分割したサイズの各サイズの区域に区分けし、主区域を含む各サイズの区域のそれぞれのファイルの割付状態を示す割付情報を格納する割付表を生成する。各区域の割付情報を識別する区分番号は、区画を包含する2のべき乗サイズの仮想区域に基づいて割り振る。割付表に格納された割付情報に基づいて区画を管理する。
【解決手段】記憶装置の区画のサイズを互いに異なる2のべき乗の和で表して、和を構成する各2のべき乗のサイズの領域を主区域としたとき、各主区域を2分の1ずつ順次分割したサイズの各サイズの区域に区分けし、主区域を含む各サイズの区域のそれぞれのファイルの割付状態を示す割付情報を格納する割付表を生成する。各区域の割付情報を識別する区分番号は、区画を包含する2のべき乗サイズの仮想区域に基づいて割り振る。割付表に格納された割付情報に基づいて区画を管理する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記憶装置の区画を管理する、区画管理装置、区画管理方法及びプログラムに関する。
【背景技術】
【0002】
従来から、ハードディスク等の記憶装置に記憶するデータを管理するための方式として、例えばFAT(File Allocation Tables)やNTFS(NT File System)等のファイルシステムが採用されている。
【0003】
図1Aは、従来から採用されているハードディスク等の外部記憶装置における区画割付を説明する図である。
図1Aに示すように、例えば外部記憶装置306の記憶領域は、図示しないディスクアロケータ等のユーティリティプログラムにより4つの区画1〜4(191,192,193,194)が割り付けられ、それぞれあるファイルシステムに割り当てられている。区画の先頭には区画の管理データを格納した区画管理テーブル195aを備えたマスターブートレコード195が配置されている。図1Aに区画番号3についての区画情報196が例示されているように、区画管理テーブル195aは、区画番号196a、開始位置196b、区画サイズ196cのエントリを含んでいる。区画番号196aには、区画を識別する区画番号が格納されており、図示の例では3である。開始位置には、区画の先頭アドレスの情報が格納されており、図示の例ではその内容は省略している。区画サイズ196cには、区画の割当単位領域の個数が格納されており、図示の例では52である。
【0004】
各区画におけるファイルに対するディスクの割付管理は、それぞれの区画が割り当てられたファイルシステム特有の割付方法に依存するため煩雑であった。例えば、FATによれば、割付を行ったブロックを示すリンクリストをファイルごとに保持している。また、NTFSによれば、ファイルごとに割付を行ったブロックの開始位置及び連続するブロック数についての情報を保持している。
これらのファイルシステムにおける割付管理の問題を解決するために、例えば、下記特許文献1に開示されているバディシステムに関する技術が提案されている。バディシステムによれば、領域を2kからなるサイズごとに分割して割付の管理を行う。仮想記憶方式を使用していないメモリ管理システムでのメモリ領域の割り付けでは、基本的なバディシステムが採用されている。
【0005】
図1Bは、バディシステムの割付原理を説明する図である。図1Bに示すのは、サイズが23=8の割当領域490とそれに対応するツリー構造体580と、ツリー構造体580のノードに対応する領域が使用中であるかを示すビットマップ400である。割当領域490は、例えば図1Aに例示した区画1〜4等である。
ツリー構造体580は、割当領域490を2分の1のサイズに順次割当単位のサイズまで分割して得られる領域の関係を階層的にモデル化したものである。割当単位のサイズの領域の階層をレベル1とすると、図に示す例では、ルートノードのレベルは4となる。
【0006】
ツリー構造体580のルートノード480は、点線の矢印で示すように、分割前の割当領域490全体の領域(レベル4の領域)に対応し、ノード内に記載された“8”は、対応する割当領域490のサイズに相当する。また、括弧内の数字は、同一レベル内の領域を識別するレベル内番号である。
【0007】
ルートノード480にリンク540で接続されたノード440と、ルートノード480にリンク541で接続されたノード441は割当領域490を2分割した領域(レベル3の領域)に対応する。それぞれの領域のサイズは図に示すように4である。
ノード440の下位には、リンク520で接続されたサイズ2のノード420と、リンク521で接続されたサイズ2のノード421が存在する。同様に、ノード441の下位には、リンク522で接続されたサイズ2のノード422と、リンク523で接続されたサイズ2のノード423が存在する。これら4つのノードはレベル2の領域に対応する。
【0008】
ノード420の下位には、リンク510で接続されたサイズ1のノード410と、リンク511で接続されたサイズ1のノード411が存在する。同様に、ノード421の下位には、リンク512で接続されたサイズ1のノード412と、リンク513で接続されたサイズ1のノード413が存在し、ノード422の下位には、リンク514で接続されたサイズ1のノード414と、リンク515で接続されたサイズ1のノード415が存在し、ノード423の下位には、リンク516で接続されたサイズ1のノード416と、リンク517で接続されたサイズ1のノード417が存在する。これら8つのノードはレベル1の領域に対応する。
ルートノード480以外のノードは親ノードの対応する領域を2分割した領域の1つに対応したものとなっている。したがって、各レベルの領域のサイズの総和は、割当領域490のサイズに一致する。
【0009】
図1Bに示すビットマップ400は、点線の矢印で示すように、ツリー構造体580の各ノードに対応したビット値を持つものである。ビットマップ400の、符号408で示すレベル4のレベル内番号409で示すビット位置のビット値は、レベル4の領域が使用中であるかを示すものであり、符号404で示すレベル3のレベル内番号0、1のビット値は、該当する領域が使用中であるかを示している。同様に、符号402で示すレベル2のレベル内番号0〜3はレベル2の各領域が使用中であるかを示し、符号401で示すレベル1のレベル内番号0〜7はレベル1の各領域が使用中であるかを示している。
【0010】
図1Bに示す例では、レベル4のレベル内番号0、レベル3のレベル内番号0、レベル2のレベル内番号0、レベル1のレベル内番号0にビット“1”が立っており、そのビット位置に対応する領域全体を新たに使用することはできないことを示している。つまり、レベル1のレベル内番号0にその状態を示すように、ノード410に対応するサイズ1の領域が使用中であるので、その領域を含むより大きいサイズの領域をそのまま使用することはできないことを示している。
【0011】
上述のバディシステムによれば、ある大きさのファイル及びメモリ領域を割り付けるとき、その大きさと等しいかそれを超える2kからなるサイズの領域の中から空き領域を探して割り付け、解放するときもそのサイズの空き領域群に戻せばよいので、ファイル及びメモリ領域の割り付けと解放及び領域の管理が容易である。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開平7−28693号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかしながら、上記のバディシステムによれば、2のべき乗単位で領域を割り付けることから、例えば2.1GBのファイルを割り付けるとき、4GBの領域が必要となり、ファイル割付後のブロックには、データの書き込まれていない領域が生じるにも関わらず、従来のファイルシステムにおいてはその領域に対して更にファイルを追加することができず、領域を有効に使用することができなかった。
また、例えば記憶装置全体の記憶容量が127GBであったとしても、記憶領域を要求する要求元に対して割り付ける物理的あるいは論理的な領域である区画について、最大でも64GBの区画として管理せざるを得なかった。
すなわち、バディシステムによれば、2のべき乗単位で領域を割り付けることからファイル及びメモリ領域の割り付けと解放及び領域の管理が容易ではあるが、2のべき乗サイズの領域から2のべき乗サイズではない領域を取得した場合の残りの領域の管理、及び2のべき乗サイズではない領域から2のべき乗サイズの領域を取得した場合の残りの領域の管理がなされていないため、領域を有効活用できないという課題がある。
【0014】
そこで本発明は、2のべき乗サイズの領域から2のべき乗サイズではない領域を取得した場合でも、2のべき乗サイズではない領域から2のべき乗サイズの領域を取得した場合でも、残りの領域を管理することが可能であり、また領域管理手段が領域にファイル及びメモリ領域を割り付けるに当たって、効率的な手法により、領域を有効活用することのできる技術を提供することを目的とする。
【課題を解決するための手段】
【0015】
本発明の一つの態様によれば、区画のサイズを取得し、区画のサイズを互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表したとき該和を構成する各2のべき乗のサイズの領域を主区域としてそのサイズの順に区画に連続的に割り付けることで区画を区分けし、主区域を2分の1ずつ順次分割したサイズの各サイズの領域である区域と主区域に対応して、各サイズの区域と主区域のそれぞれのファイル割り付け状態を示す割付情報を格納する多層区分割付表を生成し、多層区分割付表に格納された割付情報に基づいて区域のファイルへの割付を管理する。
そして、上記割付と多層区分割付表によるファイルの割付管理を実現するために、上記サイズを取得した実体的な区画を含む最小の2のべき乗と区画の割当単位のサイズの積のサイズを有する仮想的な区画である仮想区画を仮想的に取得し、この仮想区画をバディシステムのように2分の1のサイズに順次区分けし、実体的な区画に対応する各サイズの区域と主区域のそれぞれのファイル割り付け状態を示す割付情報を格納する多層区分割付表を生成する。
【0016】
そして、区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、多層区分割付表は、区域の割付情報を、区域の区分レベル順、同一区分レベルにおいては区域の区画内の配置順で格納し、割付情報の格納順にしたがって割付情報が該当する区域を識別するための識別番号である区分番号を割り振り、該区分番号を用いて区域の割付を管理する。
そして、多層区分割付表は、仮想区画から区分けを始めたことにより生じる実際には区画として存在しない領域に対応する区域の割付情報は持たないものとする。
【0017】
また、本発明の別の態様によれば、割付要求されたファイルのサイズが区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって割付要求サイズより大きいサイズの一次割付区域を探索し、一次割付区域を、区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、二次割付区域のそれぞれの区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する多層区分割付表の割付状態に空候補状態を設定する。
【発明の効果】
【0018】
本発明によれば、区画を2のべき乗サイズの組合せで管理するので任意のサイズの区画を効率的に無駄なく有効に管理することが可能であり、区画を区分した各サイズの区域で割付管理を行うことから、連続する領域に無駄なくファイルの割付がなされることとなるため、領域の有効活用を図ることができる。
【図面の簡単な説明】
【0019】
【図1A】外部記憶装置における区画割付を説明する図である。
【図1B】バディシステムの割付原理を説明する図である。
【図2A】本発明の一実施形態における区画管理の概念を説明する図である。
【図2B】本発明の一実施形態におけるアロケーションシステムのソフトウェア及びハードウェア環境例を説明する図である。
【図2C】本発明の一実施形態におけるハードウェア構成例を説明する図である。
【図3】本発明の一実施形態における区画サイズに対応した区画の初期化状態例を説明する図である。
【図4A】本発明の一実施形態における区画を初期化する前段の処理フロー例を説明する図である。
【図4B】本発明の一実施形態における区画を初期化する後段の処理フロー例を説明する図である。
【図4C】本発明の一実施形態における多層区分割付表を区分レベル毎に初期化する処理フロー例を説明する図である。
【図5】区域の割付を行う処理全体の概略の処理フローを説明する図である。
【図6】割付要求区分レベルの空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【図7A】割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【図7B】割付要求区分レベルに空区域がある場合における区域探索を具体例により説明する図である。
【図7C】割付要求区分レベルに空区域がない場合における区域探索を具体例により説明する図である。
【図8A】仮割付区域を多層区分し、一次割付区域を得る処理フロー例を説明する図である。
【図8B】仮割付区域を多層区分し、一次割付区域を得る処理を具体例により説明する図である。
【図9】割付要求区分レベルの空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。
【図10A】割付要求区分レベルのサイズを含む空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。
【図10B】割付状態が空候補の仮割付区域を多層区域に区分し、一次割付区域を得る処理フロー例を説明する図である。
【図11A】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る前段の処理フロー例を説明する図である。
【図11B】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る後段の処理フロー例を説明する図である。
【図11C】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る処理を、具体例により説明する図である。
【図12】割付区域を解放し、空区域の連結を試みる処理全体の概略の処理フロー例を説明する図である。
【図13】区分番号により多層区分管理表を検索し、区分番号に対応する区分レベルを求める処理フロー例を説明する図である。
【図14A】一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理フロー例を説明する図である。
【図14B】一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理を、具体例により、説明する図である。
【図15】割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュする処理フロー例を説明する図である。
【図16】区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。
【図17A】一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理フロー例を説明する図である。
【図17B】一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理を、具体例により、説明する図である。
【図17C】区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。
【図18A】本発明の一実施形態における区画管理装置の機能ブロック構成例を説明する図である。
【図18B】本発明の一実施形態における区域割付手段の機能ブロック構成例を説明する図である。
【図18C】本発明の一実施形態における区域解放手段の機能ブロック構成例を説明する図である。
【発明を実施するための形態】
【0020】
以下、本発明の好適な実施の形態について、図面を参照して詳細に説明する。
図2Aは、本発明の一実施形態における区画管理の概念を説明する図である。図2Aを参照して本発明の一実施形態における区画管理の概念を説明するとともに、本発明の区画管理に関する若干の用語の定義を行う。
【0021】
最初に、あらためて区画の定義を行う。本発明において「区画」とは、図1Aを参照して説明したように、予め割り当てられた領域であり、最初に割り当てられる領域である。本発明においては、区画は取得済みであることを前提とする。区画は、本発明においては、記憶領域を要求する要求元に対して割り当てられた物理的あるいは論理的な領域であり、要求元及び割付を実行する主体にはファイルシステムであるとかディスクアロケータであるというような制限はない。また、本発明における区画は、外部記憶装置の記憶領域に限らず、例えば後に図2Cを参照して説明するデータ格納装置308に含まれる各種記憶装置の予め割り当てられた領域とすることができる。
【0022】
さらにあらためて、本発明でいうメモリ領域の定義を行う。メモリ領域は、区画の領域の割付を要求する要求元から要求され、区画管理装置により要求元に対して割り付けられる区画内の領域である。要求元がファイルシステムであれば、ファイルシステムに割り付けられたメモリ領域はファイルシステムによって、ファイルの格納領域として使われることになる。以下の説明においては、要求元としてファイルシステムを例にあげて説明するので、ファイルを割り付けるという表現や、ファイル及びメモリ領域の割付のような表現を用いる。
【0023】
「区域」とは、割り当てられた、あるいは割り付けられた領域である。区画は予め割り当てられた領域であるから、区域の1つであり、区域のうちの特定のものである。
区域を、2のべき乗と割当単位領域の積のサイズを有する複数の区域に分割することを「多層区分」という。また、多層区分された区域を「多層区域」という。なお、以下の説明においては、割当単位領域についての言及は省略し、領域のサイズについて、単に2のn乗のサイズ等の表記を用いる場合がある。また、表記の簡略化のため、例えば図1Aの例示の区画番号196aに格納された値3を区画番号196aと呼ぶように、記憶領域に格納されたあるいは設定された値をその記憶領域の名前で呼ぶことがある。
【0024】
以下、区域についての用語とそれに対応する区画についての用語を対比しながら定義する。
「区分」とは、領域を割り当てる、あるいは領域を分割して割り当てることであり、「割付」ということもある。領域は、区域または区画である。特に、区画のサイズを互いに異なる2のべき乗の和で表したとき該和を構成する各2のべき乗のサイズの領域をそのサイズの順に区画に連続的に割り付けることで区画を区分けすることを「主区分」という。また、主区分により割り付けられた区域を「主区域」という。主区分は、本発明においては、区画に対する初期割付である。以下の説明では、主区域は領域の先頭からサイズの大きいものから順に割り付けられるものとしているが、それとは逆順に、サイズの小さいものから順に割り付けるものとしても本願発明を実施可能であることは、後の説明から当業者には明らかである。
【0025】
図2Aの例示では、区画690は全体のサイズが11であり、サイズが23=8の主区域698、サイズが21=2の主区域692、及びサイズが20=1の主区域691に区分されている。いいかえれば、主区域698、692、691が区画690に初期割付されている。
区分または主区分による区域または主区域の割付サイズである2のべき乗の指数を「区分レベル」という。図2Aに示す主区域698、692、691のそれぞれの区分レベルは3,1,0である。
上記定義された用語により説明すると、本発明の原理である区画管理方法は、区画を、区画の割当単位領域を互いに異なる2のべき乗個割り当てた区域に連続的に区分し、区域を連続的に割り付けたものとして管理する。
【0026】
本発明においては、区画を包含する最小の2のべき乗であるサイズの仮想区画を仮想的に取得する。この仮想区画の仮想的取得を、仮想割付ということがある。図2Aの点線の矢印7160aで示すように、サイズが11の区画690を包含するサイズが16の仮想区画690aが仮想割付される。仮想区画690aの割付が仮想的であることを表すために、仮想区画690aは点線の矩形の枠で表現されている。
そして図に示すように、仮想区画690aには、サイズが16の主区域6916が仮想的に初期割付されている。主区域6916も仮想的に割りつけられたものであるから、ノード6160は、仮想区画690aと同様に、点線の矩形の枠で表現されている。
【0027】
また、図2Aには、上記主区域6916を仮想的に割り付ける主区分に対応するノード6160をルートノードとするツリー構造体790と、ツリー構造体790のノードに対応する割付状態をビットマップに縮退した区域の割付状態を示す割付ビットマップ600が記述されている。
ルートノード6160は、点線の矢印7160で示すように、区分レベル4の主区域6916全体を割り付ける主区分(以下、主区分7160ということがある。)に対応する。ツリーの構造は、図1Bに記載されたツリー構造体580の構造と2分木ツリーであるという点で同様なものである。
【0028】
ルートノード6160内に記載された“16”は、対応する主区域6916のサイズに相当する。また、括弧内の数字は、仮想区画690aを各区分レベルの区域毎に多層区分する個々の区分(区分ユニットということがある。)を識別する区分番号である。最大のサイズの主区域6916に対応する主区分7160の区分番号は1である。なお、以下においては、区分番号について、その区分番号で識別される区分により区分された区域の区分番号ということがある。すなわち、主区分7160の区分番号という表現に変えて、主区域6916の区分番号ということがある。また、ある区分番号の区分ユニットにより区分された区域を、その区分番号の区域ということがある。
【0029】
ルートノード6160にリンク780で接続されたノード680と、ルートノード6160にリンク781で接続されたノード681は、主区域6916を2分割して区分レベル3、サイズが8の区域を割り付ける区分に対応する。それぞれの区分番号は1つ上位の区分レベル4のノードに対応する区分番号の末尾である1に続く2と3である。
ノード680の下位には、リンク740で接続されたサイズ4のノード640と、リンク741で接続されたサイズ4のノード641が存在する。同様に、ノード681の下位には、リンク742で接続されたサイズ4のノード642と、リンク743で接続されたサイズ4のノード643が存在する。これら4つのノードは区分レベル2の区域の区分に対応する。また、これら4つのノードに対応する区分番号は、1つ上位の区分レベルである区分レベル3のノードに対応する区分番号の末尾の番号である3に続く4〜7である。
【0030】
ノード640の下位には、リンク720で接続されたサイズ2のノード620と、リンク721で接続されたサイズ2のノード621が存在する。同様に、ノード641の下位には、リンク722で接続されたサイズ2のノード622と、リンク723で接続されたサイズ2のノード623が存在する。また、ノード642の下位には、リンク724で接続されたサイズ2のノード624と、リンク725で接続されたサイズ2のノード625が存在する。さらに、ノード643の下位には、リンク726で接続されたサイズ2のノード626と、リンク727で接続されたサイズ2のノード627が存在する。これら8つのノードは区分レベル1の区域の区分に対応する。また、これら8つのノードに対応する区分番号は、1つ上位の区分レベルである区分レベル2のノードに対応する区分番号の末尾の番号である7に続く8〜15である。
【0031】
ノード620の下位には、リンク710で接続されたサイズ1のノード610と、リンク711で接続されたサイズ1のノード611が存在する。同様に、ノード621の下位には、リンク712で接続されたサイズ1のノード612と、リンク713で接続されたサイズ1のノード613が存在し、ノード622の下位には、リンク714で接続されたサイズ1のノード614と、リンク715で接続されたサイズ1のノード615が存在し、ノード623の下位には、リンク716で接続されたサイズ1のノード616と、リンク717で接続されたサイズ1のノード617が存在する。さらに、ノード624の下位にはリンク718で接続されたサイズ1のノード618と、リンク719で接続されたサイズ1のノード619が存在し、ノード625の下位には、リンク720で接続されたサイズ1のノード6110と、リンク721で接続されたサイズ1のノード6111が存在し、ノード626の下位には、リンク722で接続されたサイズ1のノード6112と、リンク723で接続されたサイズ1のノード6113が存在し、ノード626の下位には、リンク724で接続されたサイズ1のノード6114と、リンク725で接続されたサイズ1のノード6115が存在する。
これら16のノードは区分レベル0の区域の区分に対応する。また、これら16のノードに対応する区分番号は、1つ上位の区分レベルである区分レベル1のノードに対応する区分番号の末尾の番号である15に続く、16〜31である。
【0032】
ツリー構造体790のうち、ルートノード6160と同様に仮想的に割り付けられた区域に相当するノード681、ノード642、ノード643、ノード625、ノード626、ノード627、ノード6111、ノード6112、ノード6113、ノード6114、ノード6115は、ルートノード6160と同様に、点線の矩形の枠で表現されている。
また、主区域698、主区域692及び主区域691にそれぞれ対応するノード680、ノード624及びノード6110は、太線の矩形の枠で表現されている。
【0033】
次に、本発明の一実施の形態による区分番号の性質について説明する。
まず、記憶管理の対象となる区画のサイズが与えられると、そのサイズに応じて仮想区画が行われ、仮想区画に対して区分レベル毎に多層区分が行われる。図2Aの例では、サイズが11の区画690が与えられると、サイズが16の仮想区画690aが仮想的に取得され、仮想区画690aに対応したツリー構造体790を生成することができる。そして、ツリー構造体の最上位の区分レベルのノードから下位のノードに向かって、同一区分レベル内では左側を若番として、図2Aに示すように一意に区分番号を付与することができる。
【0034】
そして、区分レベル毎の区分番号を管理することにより、区分番号が与えられると、その区分番号で識別される区分ユニットによって区分けされた区域のサイズである区分レベルを求めることができ、さらに、その区分レベルでの先頭の区分番号と当該区分番号との差に基づいて、前記区分ユニットによる割付対象となる区域の区画上の位置を求めることができる。
【0035】
図2Aに示すビットマップ600は、点線の矢印で示すように、ツリー構造体780の各ノードに対応する割付状態をビットマップに縮退したビット値を持つものである。図2Aの例示では、各ノードに2ビットの値が対応している。ビットマップ600のビット値については後に詳細に説明する。ここでは、図2Aの例示について、以下に簡単に説明する。
【0036】
割付ビットマップ600のビット値は、各区分番号を有するノードに対応する区域の初期割付終了時の割付状態を表している。符号6016で示す区分レベル4のビット位置であって、区分番号609の値が1であるビット位置のビット値11は、区分番号1の区分による区域は仮想的に割り付けられた区域(以下、仮想区域ということがある。)であることを示すものである。なお、仮想区域は管理する必要がないので、後の説明では、仮想区域の管理情報は持たないものとし、仮想区域以外の区域(以下、単に区域ということがある。また、実体区域ということがある。)の状態の管理情報として、ビット値11により、使用中を表している。
符号608で示す区分レベル3のビット位置であって、区分番号609の値が2であるビット位置のビット値00は、区分番号2の区分による区域が空であるのを示すものである。また、符号608で示す区分レベル3のビット位置であって、区分番号609の値が3であるビット位置のビット値11は、該当する区域が仮想区域であるのを示すものである。同様に、符号604で示す区分レベル2のビット位置であって、区分番号4、5のビット値10は、該当する区域の割付状態が保留であることを示している。
符号604で示す区分レベル2のビット位置であって、区分番号6、7のビット値11は、該当する区域が仮想区域であることを示している。
符号602で示す区分レベル1の区分番号8〜11をビット位置とするビット値は、該当する区域の割付状態が保留であり、区分番号12をビット位置とするビット値は、該当する区域の割付状態が空であることを示している。また、区分番号13〜15をビット位置とするビット値は、該当する区域が仮想区域であることを示している。
符号601で示す区分レベル0の区分番号16〜25をビット位置とするビット値は、該当する区域の割付状態が保留であり、区分番号26をビット位置とするビット値は、該当する区域の割付状態が空であることを示している。また、区分番号27〜31をビット位置とするビット値は、該当する区域が仮想区域であることを示している。
【0037】
割付状態の空と保留の区別は、割付要求のサイズの空領域を割り付けるときの優先順位に関係する。つまり、実質的に空状態の領域であっても、割付状態が空のものから使用されるようにする。この詳細については、後に説明する。
【0038】
図2Bは、本発明の一実施形態に係るアロケーションシステムのソフトウェア及びハードウェア環境例を説明する図である。アロケーションシステム100は初期化部101と多層区分管理部102から構成される。初期化及び多層区分管理については、後に詳細に説明する。
【0039】
初期化部101は、例えばディスクアロケータあるいはファイルシステムの初期化部のような初期化プログラム201からの区画サイズを含む初期化要求を受け付け、データ格納装置308を構成する、例えば主記憶装置305、外部記憶装置306、通信装置を介してアクセスする遠方の記憶装置307等(以下、単に記憶装置ということがある。)に割り当てられている区画の多層区分管理情報の初期化を行う。
【0040】
多層区分管理部102は、ファイルシステム202からの割付要求サイズを含む区域の割付要求により、多層区分管理情報の書込を行うことで区画の区分、すなわち区域の分割割付を実行し、書き込んだ多層区分管理情報を読み出して割付区分番号を含む割付結果をファイルシステム202に返す。
【0041】
ファイルシステム202は、アプリケーションプログラム/OSなどのファイルを利用するシステム200からのファイル操作要求を受け付け、そのファイル操作要求がファイルへの区域の割付を要するものであれば、上述のアロケーションシステム100の多層区分管理部102に割付要求サイズを含む割付要求を行って割付結果を受け取り、割付区分番号としてアロケーションシステム100の多層区分管理部から返された区分番号を指定してファイル操作システム203に対してファイルの操作要求を行う。ファイル操作システム203は指定された区分番号により多層区分管理部102から割り付けられた区域のアドレスを取得して記憶装置に格納されたファイルに対するファイル操作としてのデータの書込あるいはデータの読出を実行して操作結果をファイルシステム202に返す。ファイルシステム202はファイル操作システム203から返された操作結果をアプリケーションプログラム/OSなどのファイルを利用するシステム200にファイル操作応答として返す。
【0042】
ファイルシステム202及びファイル操作システム203が既存のものであっても、本発明によるアロケーションシステム100とのインターフェースを調整することにより、本発明によるアロケーションシステム100が使用可能である。また、アプリケーションプログラム/OSなどのファイルを利用するシステム200はいうに及ばず、初期化プログラム201も同様に既存のものを適用可能である。したがって、これらのプログラム、システムについての説明は省略する。
【0043】
図2Cは、本発明の一実施形態におけるハードウェア構成例を説明する図である。
本発明の一実施形態による記憶装置の区画管理及びファイルへの区域の割付及び解放処理は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。データ格納装置308については、後に説明する区分レベルごとの区域を多層的に管理する多層区分管理表309と区分ごとの割付状態を保持する多層区分割付表310及び管理対象である区画311を含む。図2Cに示すように、データ格納装置308は、主記憶装置305または外部記憶装置306、あるいはそれらの組み合わせで実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
【0044】
すなわち、主記憶装置305をデータ処理装置301内のものとすることもできるし、多層区分割付表310及び多層区分管理表309は主記憶装置305に持ち、区画311は外部記憶装置306に割り当てられるのが多くの場合と考えられるが、区画が、主記憶装置305に割り当てられる場合でも本発明が適用可能であることは、後の説明から明らかである。
図2Cの例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。そして、以下の説明においては、一時記憶領域に格納されるあるいは設定されるデータの名前でその一時記憶領域の名前とすることがあり、逆に、一時記憶領域の名前により、その一時記憶領域の格納されるあるいは設定されるデータの名前とすることがある。
【0045】
次に、図3、図4A〜図4Cを参照して、本発明の一実施形態における多層区分管理情報の初期化について説明する。なお、多層区分管理情報の初期化を区画の初期化と表記する場合もある。
【0046】
図3は、区画サイズに対応した区画の初期化状態例を示す説明図である。
先に図2Bの説明において述べたように、区画の初期化は、ファイルシステムに区画が割りつけられたのち、初期化プログラムからのその区画の区画サイズを含む初期化要求を受け付けることにより、アロケーションシステムの初期化部により行われる。図3に示す区画サイズ120には、そのファイルシステムに割り付けられ、区画311の初期化要求に含まれる区画サイズ“52”が2進数の形式で表示されており、52=25+24+22であるから、2ビット目、4ビット目及び5ビット目が“1”である。
【0047】
この初期化プログラムから受信された区画サイズに応じて区画構成主区分表130が作成される。区画構成主区分表130は、その添字0〜7で示すように区分レベルに対応する1ビットからなるエントリから構成されており、図3の例示では、区分レベル0から区画構成主区分表の最上位の区分レベル7に対応する8つのエントリを有している。矢印122,124及び125で示すように、区画サイズを2進数形式で表示したときのビット値に応じて、対応する区分レベルのエントリのビット値が設定されている。
【0048】
図3に示す区画311には、区画構成主区分表130からの矢印135、134及び132により対応関係が示されているように、区画構成主区分表130のビット値が“1”であるエントリに対応する区分レベルのサイズの主区域185、184及び182が初期割付されている。
また、区画311を包含する最小の2のべき乗のサイズの仮想区画311aが仮想的に取得され、仮想区画311aには、区分レベル6の区域が仮想的に割り付けられる。そして、図3には示していないが、図2Aに記載されている主区域6916と同様に仮想区域311a全体に区分レベル6の主区域が仮想的に割り付けられている。
なお、主区域に対応する区分レベルを主区分レベルということもある。すなわち, 区画構成主区分表130は、ビット値1で主区分レベルを表示するものと言える。
【0049】
多層区分管理表309は、図3に示すように、主区分番号管理表309a、末尾番号管理表309b、及び最上位区分レベル管理表309cを含む。主区分番号管理表309aと末尾番号管理表309bは、その添字0〜7で示すように、区画構成主区分表130と同様に区分レベルに対応するエントリから構成されている。主区分番号管理表309aのエントリは主区分番号114で構成され、末尾番号管理表309bのエントリは、末尾番号116で構成される。各エントリの値は、区画構成主区分表130の値に基づいて、初期化処理において設定される。最上位区分レベル管理表309cには、仮想区画311aのサイズに相当する区分レベルである最上位区分レベル115が設定される。図3に示す例では、仮想区画311aのサイズに相当する6が設定されている。
【0050】
主区分番号114には、区画311内の領域の割付状態を管理する多層区分割付表310が、ある区分レベルの主区分に対応するエントリを有するとき、その区分レベルのエントリにその主区分に対応する区分番号を格納し、ある区分レベルでは多層区分割付表310が主区分に対応するエントリを有さないとき、その区分レベルのエントリに無意の区分番号として“−1”を格納する。図3の例では、主区分番号114の各エントリの値は、上位の区分レベルから、−1,−1,2,6,−1,28,−1,−1である。
なお、先に図2Aに示すビットマップ600の説明において述べたことから理解されるように、多層区分割付表には仮想区域に対応するエントリは設けられておらず、実体区域に対応するエントリだけが設けられている。
【0051】
末尾番号116は、多層区分割付表310の各エントリに一意に対応付けられた区分番号のうち各区分レベルの区分割付表の末尾のエントリに対応付けられた区分番号であり、図3に例示された末尾番号116の各エントリの値は、上位の区分レベルから、−1,−1,2,6,13,28,57,115である。これらの値の設定については、後に図4A〜図4Cを参照して詳細に説明する。
【0052】
多層区分割付表310は、先に述べたとおり区画311内の領域の割付状態を管理するためのものである。図2Aに示す割付ビットマップ600と類似のものであり、区分番号は割付ビットマップ600と同様に仮想区域を含めて番号付けされているが、状態管理情報を保持するエントリである割付状態170は、仮想区域に対しては設けられていない。多層区分割付表310は、初期化処理において、多層区分管理表309の値に基づいて生成され、初期設定される。
【0053】
多層区分割付表310は、図の点線の矢印140〜145に示すように、最下位の区分レベルから区画構成主区分表130のビット値が1である最上位の区分レベルまでの各区分レベルに対応した区分割付表160〜165から構成されている。
各区分割付表のエントリは、そのエントリに該当する区分番号の区域の2ビットの割付状態170で構成されている。割付状態のビット値“00”、“01”、“10”、“11”は、それぞれ各区分番号の区域の「空」、「空候補」、「保留」、「使用中」の状態に対応する。これらの状態の意味は後に詳細に説明をするが、割付状態170に2ビットを用いることにより、「空候補」を識別することが可能となり、記憶領域を一層無駄なく利用することができる。
【0054】
また、区分割付表160〜165の各エントリは、図3の矢印175、174、172に示すように主区分、すなわち主区域に対応するものと、1つ上位の区分レベルの区域を2つに分割する区分、すなわち1つ上位の区分レベルの区域を2つに分割した区域に対応するものとがある。
【0055】
多層区分割付表310の各エントリには、最上位区分レベル管理表309cに設定された最上位区分レベルである区分レベル6の仮想的な区域からその区分レベル6の仮想的な区域を順次2分割して得られる区分レベル0の区域の末尾の区域まで順次付された1からの連続番号のうち、実体区域に付された番号である区分番号171を対応付けることができる。末尾番号管理表309bの末尾番号116は、該当する区分レベルにおける区分番号の末尾番号である。
【0056】
先に図2Aを参照して説明したことから理解されるように、区画サイズ、すなわち区画構成主区分表が与えられると、実体区域に対する多層区分割付表の構成は一意に決定し、区分番号で識別される区分ユニットにより区分けされる区域の区画内の位置とサイズも一意に決定される。
多層区分割付表310の初期状態においては、矢印175、174、172に示すように、主区域と対応するエントリの割付状態170には空を表示する“00”が、その他のエントリの割付状態には保留を表示する“10”が初期設定される。したがって、割付状態が空の区域についてみると、区画311には、主区域185、184、182が分割割付されており、多層区分割付表310で管理される区域のうちで空の区域を設定するという意味で、区画311は初期割付される。多層区分割付表310の初期設定については、後に図4A〜図4Cを参照して詳細に説明する。
【0057】
なお、上述の区分番号171の番号の付与方法は単なる例示であり、後述のファイルの割付管理が可能なものであれば、例えば先頭の番号を1ではなく0とする、番号の付与順を逆順にする等、種々変形が可能であることは、当業者にとって自明である。
以上説明したとおり、本発明によれば、ファイルシステムに割り当てられた区画311は、多層区分割付表310を用いて、同一の領域を区分レベルに応じた割付状態170により、多層的に管理される。
【0058】
多層区分割付表310を用いた区域の割付は、割付要求のサイズに応じて、ある区分レベルの空区域あるいは異なる区分レベルの連続した空区域の区分番号を多層区分割付表の探索により取得し、その区分番号を使用中にすることにより行われる。空区域がない場合は、空候補の区域を探索する。
図2Bに示すように、ファイルの割付要求をしたファイルシステムには使用中とした区分番号が割付区分番号としてアロケーションシステムから返される。ファイル操作システムはこの区分番号を指定したファイル操作要求を受けると多層区分管理部からこの区分番号の区域のアドレス情報を受信する。多層区分管理部は区分番号により多層区分管理表309を探索し、区分番号に対応する区域の区分レベルとレベル内番号を取得し、それによりファイルに割り付けられた区域の区画内の位置とサイズを知ることができる。これらの処理については後に詳細に説明する。
【0059】
次に、図4A、図4B及び図4Cを参照して区画を初期化する処理を説明する。ここで区画を初期化する処理は、具体的には例えば図3に示す多層区分管理表309と多層区分割付表310の値を初期設定する処理である。以下では、例として多層区分管理表309と多層区分割付表310を参照して説明する。
【0060】
図4Aは、区画を初期化する前段の処理フロー例を説明する図である。
図4Aに示すように、まず、ステップS401で、区画の初期化を要求するプログラムから受け取った区画サイズから、区画サイズを2進数形式で表示したときのビット値に応じて区分レベルのエントリのビット値が設定された区画構成主区分表を作成する。そして、ステップS402で、主区分レベルに区画構成主区分表の最上位の区分レベルを設定し、ステップS404に進む。
【0061】
図3に示す例では、区画構成主区分表130が作成され、その最上位の区分レベルは7であるので、主区分レベルには7が設定される。上述のステップS402における、区画構成主区分表の最上位の区分レベルが設定される主区分レベルは、先に述べた図示しない一時的記憶領域の1つの例である。
【0062】
ステップS404では、主区分レベルの指す区画構成主区分表のビット値を取り出し、ステップS405で、その取り出したビット値が有意、すなわち値1であるか判定する。
上記取り出したビット値が1でなければステップS406に分岐し、主区分レベルの指す主区分番号管理表に値“−1”を設定し、次にステップS407で、主区分レベルの指す末尾番号管理表に値“−1”を設定し、ステップS408で、主区分レベルを1つ減らしてステップS404に戻る。
上記ステップS404〜ステップS408のループ処理を、ステップS405で初めて区画構成主区分表のビット値が有意であると判定されるまで繰り返す。図3に示す例では、主区分レベルが5に設定されるまでは区画構成主区分表のビット値は0であるから、このループ処理により、主区分番号管理表309aと末尾番号管理表309bの区分レベル7と区分レベル6にはともに値“−1”が設定される。
【0063】
一方、上記取り出したビット値が1であれば、ステップS408aに進み、区画構成主区分表に設定されたビット値が1のエントリは1つ、すなわち区画構成主区分表はシングルビット構成であるか判定し、シングルビット構成であれば、ステップS408bで、最上位区分レベルに、主区分レベルを設定して図4Bに示すステップS409に進み、シングルビット構成でなければ、すなわちマルチビット構成であれば、ステップS408cで、最上位区分レベルに、主区分レベルに1を加えた値を設定して、図4Bに示すステップS409に進む。図3の例示においては、マルチビット構成であり、最初に区画構成主区分表のビット値が1になる主区分レベルが5であることから、最上位区分レベルには6が設定される。この最上位区分の設定は、仮想区画を取得し、そこに仮想的に主区域を割り付けることに相当する。
【0064】
図4Bは、区画を初期化する後段の処理フロー例を説明する図である。
ステップS409では、先頭番号に、最上位区分レベルより主区分レベルを減じた値を指数とする2のべき乗数を設定し、ステップS410で、区分数に値“1”を設定してステップS411に進む。上述のステップS409の先頭番号及びステップS410の区分数も、先に述べた図示しない一時的記憶領域の例である。それぞれ、データの名前を一時的記憶領域の名前としている。図3の例示では、先頭番号には2の(6−5)乗である2が設定される。
ステップS411では、主区分番号に、先頭番号に区分数を加えて1を減じた値を設定する。図3の例示では、ステップS411の最初の処理においては、先頭番号にはステップS409の処理により2が設定され、区分数にはステップS410の処理により1が設定されているので、主区分番号には2が設定される。
【0065】
次にステップS412において、主区分レベルの指す主区分番号管理表に、主区分番号を設定する。図3の例示におけるステップS412の最初の処理では、主区分番号管理表309aの区分レベル5に2が設定される。
【0066】
次にステップS414に進み、主区分レベルの指す区分レベルの多層区分割付表の割付状態を初期化する。ステップS414の処理の詳細は、後に図4Cを参照して説明する。
【0067】
次にステップS416において、主区分レベルは最下位の区分レベルか判定し、最下位の区分レベルであれば処理を終了し、最下位の区分レベルでなければステップS417に分岐する。
ステップS417では、主区分レベルを1つ減らし、ステップS418で、先頭番号を2倍にし、ステップS419で区分数を2倍にしてステップS420に進む。
【0068】
ステップS420では、主区分レベルの指す区分レベルの区画構成主区分表のビット値を取り出し、ステップS421で、その取り出したビット値が有意、すなわち値1であるか判定する。ステップS420で取り出した主区分レベルの指す区画構成主区分表のビット値が有意でなければステップS422に分岐して主区分番号に値“−1”を設定してステップS412に戻り、有意であれば、ステップS423に分岐して、区分数に1を加えてステップS411に戻る。
上記ステップS411〜ステップS423のループ処理を、ステップS416で主区分レベルは最下位の区分レベルであると判定されるまで繰り返す。その際、主区分レベルの指す区分レベルの区画構成主区分表のビットが無為ビット、すなわちそのビット値が“0”であれば、上述のとおり、その区分レベルの主区分番号には値“−1”を設定する。
【0069】
図3に示す例では、主区分番号管理表309aの区分レベル4には、ステップS418の最初の処理において先頭番号に4が設定され、区分数は、ステップS419で2、ステップS423で3とされることから、ステップS411において6が設定される。また、主区分番号管理表309aの区分レベル3には、ステップS422の処理において、−1が設定される。以下同様に、主区分番号管理表309aの区分レベル2、1、0には、それぞれ28、−1、−1が設定される。
【0070】
図4Cは、本発明の一実施形態における、多層区分割付表を区分レベル毎に初期化する処理フロー例を説明する図であり、図4Bに示すステップS414の処理の詳細を説明する図である。図4Cに例示する処理フローにより、多層区分割付表を構成する最下位の区分レベルから区画構成主区分表のビット値が1である最上位の区分レベルまでの各区分レベルに対応した区分割付表を初期化する。図3の例では、区分割付表160〜165それぞれの値を図示した値に設定する処理である。図4Bに示すステップS411〜ステップS423のループ処理を実行する毎に、区分割付表165から区分割付表160までの区分割付表の初期化が行われ、多層区分割付表310の初期化が完了する。
【0071】
図4Cに示すように、ステップS431で区分番号に先頭番号を設定し、ステップS432で末尾番号に先頭番号に区分数を加えて1を減じた値を設定する。さらにステップS433において、主区分レベルの指す末尾番号管理表に、末尾番号を設定し、ステップS434に進む。
ステップS431及びステップS432での先頭番号は、図4Bに示すステップS409あるいはステップS418で設定されたものである。また、ステップS432での区分数は、図4Bに示すステップS410もしくはステップS419あるいはステップS423で設定されたものである。
図3の例示では、ステップS431〜ステップS433の処理が実行されるときの主区分レベルは5であり、区分番号には図4Bに示すステップS409で設定された2が設定され、末尾番号には、先頭番号である2に図4Bに示すステップS410で設定された区分数である1を加え、そこから1を減じた2が設定される。
【0072】
ステップS434では、区分番号と末尾番号は等しいか判定する。区分番号と末尾番号が等しくなければ、ステップS435で、区分番号の指す多層区分割付表の割付状態に保留を設定し、ステップS436で、区分番号を1つ増やしてステップS434に戻り、区分番号と末尾番号は等しいかの判定を繰り返す。このステップS434〜ステップS436のループ処理は、処理中の区分レベルに対応した区分割付表の先頭の区分番号から末尾番号の1つ前の区分番号まで、区分番号の指す区分割付表の割付状態に保留を設定する処理である。
【0073】
一方、ステップS434において、区分番号と末尾番号は等しいと判定されると、ステップS437に進み、主区分番号は値“−1”であるか判定する。ここでの主区分番号は、図4Bに示すステップS411あるいはステップS422で設定されたものである。
【0074】
ステップS437で、主区分番号は値“−1”であると判定されると、ステップS438で区分番号の指す多層区分割付表の割付状態に保留を設定して処理を終了し、ステップS437で、主区分番号は値“−1”ではないと判定されると、ステップS439で区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。
このステップS438とステップS439の処理は、処理中の区分レベルに対応した区分割付表の末尾の区分番号の割付状態を設定する処理である。図3に例示するように、主区域に対応する区分ユニットの区分番号は、その主区域の区分レベルに対応する区分番号の末尾であり、その末尾の区分番号の区分割付表の割付状態は、区分番号2、6、28の割付状態に見られるように“00”、すなわち空である。そのほかの多層区分割付表の割付状態は、全て“10”、すなわち保留である。
【0075】
以上詳細に説明した区画の初期化において、区域の割付状態に「空」のほかに「保留」を導入したのは、連続した大きな空の区域の確保を容易にするためである。例えば図3の例で、ファイルシステムからサイズが16の区域の割付を要求された場合、空状態の区域である主区域の中から主区域184、すなわち区分番号6の区域を選択することができる。もし、保留という割付状態がないと、区分番号4、5の区域も空となり、すると、将来サイズが16より大きい区域の割付要求が発生する場合に連続する区域を割り付けられるように、区分番号4、5、6の中から区分番号6の区域を選択する手段が区域を有効に利用するために必要になる。しかしその手段は割付状態に「保留」を導入するよりも複雑になる。
【0076】
なお、本実施の形態においては、「保留」という状態を導入し、それを2ビットの値“10”で表すが、上述の説明のとおり、区域の割付状態を保留に設定するのはその区域を割付の対象から除くためである。したがって、上述のステップS438において、区分番号の指す多層区分割付表の割付状態に、その区分番号の区域への割付を行わないことを示す空以外の状態を設定することもできる。
【0077】
次に、図5〜図11Cを参照して、本発明の一実施形態における多層区分管理情報を用いた区域の割付について説明する。先に図2Bの説明において述べたように、区域の割付は、区画の初期化の後、ファイルシステムからの割付要求サイズを含む割付要求を受け付けることにより、アロケーションシステムの多層区分管理部により行われる。
【0078】
図5は、区域の割付を行う処理全体の概略の処理フロー例を説明する図である。
まず、ステップS501で、割付要求サイズを設定し、ステップS502で、割付要求区分レベルとして、割付要求サイズを内包する最小の2のべき乗サイズの指数を設定する。例えば、割付要求サイズが11(2進数表示で“01011”)であれば、割付要求区分レベルは、16(2進数で「10000」)=24の指数である4が設定される。また割付要求サイズが2のべき乗である8であれば、その指数である3が設定される。
【0079】
次にステップS503で、多層区分割付表を参照して、割付要求区分レベルの区域のうち、その区域の割付状態が「空」である空区域を探索し、空区域の区分番号を取得する。ステップS503の処理の詳細については、後に図6を参照して説明する。
【0080】
ステップS504で、空状態の区域の区分番号を取得することができたかを判定し、取得できた場合はステップS507に進み、取得できなかった場合はステップS505に進む。
ステップS505では、多層区分割付表を参照して割付要求区分レベルの区域のうち割付状態が「空候補」である空候補区域を探索し、空候補区域の区分番号を取得する。ステップS505の処理の詳細については、後に図9を参照して説明する。
ステップS506で、空候補状態の区域を取得することができたか否かを判定し、取得できた場合はステップS507に移行し、取得できなかった場合は取得失敗として区域割付処理を終了する。
【0081】
ステップS507では、ステップS503の処理で取得した区分番号の区分レベルに対応する区域のサイズがステップS501で設定した割付要求サイズより大きいか判定する。割付要求サイズが2のべき乗と等しくない、すなわち2進数形式で表示したとき有意のビット位置が複数(この場合の割付要求をマルチビット要求といい、一方、割付要求が2のべき乗に等しいとき、シングルビット要求ということがある。)であれば、取得される区域のサイズは割付要求サイズより大きい。したがって、ステップS507の判定は、割付要求がマルチビット要求であるかシングルビット要求であるかを判定するものである。
【0082】
ステップS507での判定がシングルビット要求であればステップS509に進み、ステップS507での判定がマルチビット要求であればステップS508に分岐する。ステップS508では、取得した区分番号に対応する一次割付区域を多層区域に区分し、割付要求区分の二次割付区域を得てステップS509に進む。なお、二次割付で得られる領域は、複数の区域からなる多層区域であるが、以下ではその領域を二次割付区域という。
ステップS508の処理の詳細については、後に図11A〜図11Cを参照して説明する。また、一次割付及び二次割付についても後に詳細に説明する。
【0083】
ステップS509では、割付結果として、割付区分番号に一次割付された割付区域の区分番号を設定し、処理を終了する。ここで設定された割付区分番号が、図2Aに示すように、割付結果としてファイルシステムに返される。アロケーションシステムの多層区分管理部は、ファイルシステムに割り付けられた区画の先頭位置から、割付要求されてファイルに割り付けた領域の先頭位置までの相対アドレスを、そのファイルに対応する割付区分番号を用いて多層区分管理表から求めることができる。
【0084】
次に、図5のステップS503、ステップS505及びステップS508の処理の詳細を説明する。
図6は、図5のステップS503の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルの空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【0085】
図に示すように、ステップS601で、多層区分割付表より、割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する。本発明の一実施形態の多層区分管理によれば、割付要求区分レベルの空区域を見つけだすことができない場合でも、割付区分レベルより大きい区分レベルの空区域が存在すればそれを見つけることができる。例えば図3に示す例において、割付要求区分レベルが3の場合、区分レベル3の区分割付表163に示すとおり、区分レベル3の区域には空はない。しかし、区分レベル2には区分番号6の空区域が存在し、この区分番号6を取得する。このように、割付区分レベルより大きい区分レベルの空区域を割り付けることを、仮割付ということがある。ステップS601の詳細については、後に図7A〜図7Cを参照して説明する。
【0086】
次にステップS602で、ステップS601の処理において区分番号は取得できたか判定し、取得できていなければ取得失敗を返して処理を終了し、取得できていればステップS603に進む。
ステップS603では、ステップS601の処理で取得した区分番号に係る区分レベル(取得した区分レベル)と割付要求区分レベルが等しいか判定する。この判定は、仮割付が行われたか否かの判定に相当する。取得した区分レベルと割付要求区分レベルが等しければ、取得成功を返して処理を終了し、取得した区分レベルと割付要求区分レベルが等しくない、すなわち仮割付が行われた場合はステップS604に分岐する。
【0087】
ステップS604では、仮割付された仮割付区域を多層区域に区分し、割付要求区分レベルの区分番号の一次割付区域を得る。すなわち、一次割付として割付要求区分レベルのサイズの区域を取得し、その区分番号を取得して、取得成功を返して処理を終了する。ステップS604の詳細は、後に図8A及び図8Bを参照して説明する。
【0088】
図7Aは、図6のステップS601の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【0089】
図に示すようにステップS701において、区分レベルに、割付要求区分レベルを設定する。ここで割付要求区分レベルの値は、図5のステップS502で設定されたものである。
次に、ステップS702において、先頭番号に、最上位区分レベルより区分レベルを減じた値を指数とする2のべき乗数を設定し、該先頭番号を、ステップS703aで、区分番号に設定する。そして、ステップS703bで、末尾番号管理表より、現在処理中である区分レベルが指す末尾番号を取り出す。
【0090】
次にステップS704で、区分番号に設定された値の指す多層区分割付表の割付状態を読み出す。そして、ステップS705で、読み出した割付状態は空であるかを判定する。ステップS705の判定において、割付状態が空であると判定されると、ステップS710に進む。
【0091】
一方、ステップS705の判定において、割付状態は空ではないと判定されると、ステップS706に分岐する。そして、ステップS706で、区分番号とステップS703bで取り出した末尾番号とが等しいかを判定する。区分番号と末尾番号とが等しくない場合は、ステップS707に分岐し、区分番号を1加算してステップS704に戻る。以降は同一区分レベル内において区分番号を1ずつ加算してゆき、空状態の区域を検索していく。
【0092】
ステップS706において、区分番号と末尾番号が等しいと判定されると、ステップS708に進み、区分レベルは、区画構成主区分表の有意ビットが存在する最上位の区分レベルかを判定する。この判定は、ステップS702で設定された先頭番号が1あるいは2であるかを判定することにより、行うことができる。ステップS702で設定された先頭番号が1あるいは2である場合、区画構成主区分表がシングルビット構成であってもマルチビット構成であっても、有意ビットが存在する最上位の区分レベルまでの空状態の区域の探索は終了しているので、取得失敗を返して処理を終了する。
ステップS708において区分レベルが有意ビットが存在する最上位の区分レベルでないと判定された場合(区分レベルが有意ビットが存在する最上位の区分レベルよりも下位の区分レベルである場合)は、ステップS709に進み、区分レベルを1加算し、ステップS709aに進んで、先頭番号に、先頭番号を2で割った商を設定してステップS703aに戻る。
【0093】
ステップS702に戻ると、上記の処理を繰り返し、1つずつ上位の区分レベルについての多層区分割付表の割付状態を探索していく。探索の結果空状態の区域が得られたときは、ステップS710に進む。
【0094】
ステップS710では、区分番号に設定された値の指す多層区分割付表の割付状態を使用中に設定して処理を終了する。図7Aの処理結果としては、一時記憶領域である区分番号と区分レベルにそれぞれ設定された値と取得成功あるいは取得失敗を示すデータが探索結果として出力される。
【0095】
図7B及び図7Cは、図3に示す多層区分管理表310を参照して図7Aに示す空区域の探索処理を具体例により説明する図である。
図7Bに示す例は割付要求がマルチビット要求であって割付要求区分レベルで空区域が探索される例である。図に示すように、割付要求サイズ220の1ビット目(区分レベル1)と3ビット目(区分レベル3)にビット値1が設定されている。したがって、割付要求区分レベル234には、点線の矢印224で示すように、区分レベル3の上位の区分レベル4が設定されている。ここまでの設定は、図5のステップS501とステップS502の処理で行われる。
【0096】
次に図の実線の矢印で示す区分レベル4の割付要求240により、多層区分割付表310の、符号164aを付した割付前の区分レベル4の区分割付表の空探索244が行われる。図の例では区分番号171が4と5の割付状態が“11”で使用中であり、区分番号が6の割付状態が“00”で空である。したがって、図の実線の矢印で示すように空区域の取得274aが行われ、符号164bを付した割付後の区分レベル4の区分割付表に示すように、区分番号171が6の割付状態に“11”が設定され、使用中であることが表示される。その結果、図の矢印274に対応を示すように、区画311には、区分レベルが4で区分番号は6の区域が一次割付区域280として割り付けられる。
上述の一次割付区域280の割付は、図7Aに示すステップS704〜ステップS707のループ処理とステップS710の処理により実行される。
【0097】
次に図7Cに示す例により割付要求がシングルビット要求であって割付要求区分レベルでは空区域が探索できない場合を説明する。図7Cには割付要求サイズ220は記載していないが、点線の矢印で示す割付要求241aが割付要求区分レベル1のものであるから、割付要求は1ビット目のみが1のシングルビット要求である。
【0098】
割付要求区分レベルでは空区域が探索できない場合は、図7Aに示すフローでは、ステップS706でステップS708に分岐し、ステップS709を経由してステップS702の戻るループ処理を、上位の区分レベルにおいて空区域を見つけるまで繰り返すことになる。
【0099】
この繰り返し処理に対応するのが、図7Cに示す、下位の区分レベル(図7Cにおいては区分レベル1)から順次上位の区分レベルの区分割付表を参照していき、探索した区分レベル内に空状態の区域がない場合に更に上位の区分レベルを探索していく処理である。区分レベル1から順に各区分レベルの区域について先頭番号から順に空状態を探索してゆく。
【0100】
まず、図の点線の矢印241aで示す割付要求区分レベルである区分レベル1の空区域の探索が要求され、多層区分割付表310のうち、区分レベル1の区分割付表161の割付状態を区分番号の昇順に先頭番号である区分番号32から末尾番号である区分番号57まで空状態を探索(図7Cの矢印241b参照)してゆく。
【0101】
図に示す例においては、区分番号が末尾番号である57の区域まで探索しても空状態の区域がないので、図の点線の矢印242aで示す区分レベルを1加算した上位区分である区分レベル2の空区域の探索が要求される。そして、区分レベル2の区分割付表162の割付状態を区分番号の昇順に先頭番号である区分番号16から末尾番号である区分番号28まで空状態を探索(図7Cの矢印242b参照)してゆく。
【0102】
区分番号が末尾番号である28の区域まで探索しても空状態の区域がないので、区分レベルを1加算して上位区分である区分レベル3の空状態の探索が要求される(図7Cの矢印243a参照)。同様に区分レベル3の区分割付表163についても先頭番号である区分番号8の区域から末尾番号である区分番号13の区域までの割付状態を順次探索(図7Cの矢印243b参照)してゆくが、空区域が得られないため、区分レベルを1加算して上位区分である区分レベル4の空区域探索が要求される(図7Cの244a参照)。
【0103】
図7Cの例示では、符号164aを付した割付前の区分レベル4の区分割付表の空区域の探索(図7Cの244b参照)の結果、区分番号が5の区域が、割付状態が“00”の空区域として得られ、図7Cの矢印で示す空取得244cに対応を示すように、符号164bを付した割付後の区分レベル4の区分割付表の区分番号5の割付状態が、使用中を表示する“11”に変更される。すなわち、矢印244dで示すように、区分番号5の区域が仮割付され、仮割付区域280aとして得られる。
【0104】
なお、空区域の探索処理については、上記の区分番号を昇順に探索する方法に限定されるものではなく、任意の探索アルゴリズムを採用してもよい。
以上図7A〜図7Cを参照して説明した処理により、一次割付領域あるいは仮割付領域が得られる。
【0105】
図8Aは、図6のステップS604の処理の詳細を説明するものであり、ステップS601の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を得る処理フロー例を説明する図である。
【0106】
先ず、ステップS804において、区分レベルに、取得した区分レベルよりも1つ減じた値を設定してステップS808に進む。
ステップS808では、区分番号に、区分番号を2倍した値を設定する。ステップS808の最初の処理が始まるときの区分番号は、図7Aに示すステップS710において割付状態を使用中に設定した多層区分割付表のエントリを指す区分番号である。次にステップS809で、対の区分番号に、区分番号に1を加算して得られる値を設定する。例えば、ある区分レベルにおける区分番号が「10」である区域を2分割した1つ下位の区分レベルにおける区域の区分番号は「20」及び「21」となる。
【0107】
次にステップS810で、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS811で、対の区分番号が指す多層区分割付表の割付状態に空を設定してステップS812に進む。
【0108】
ステップS812では、区分レベルは割付要求区分レベルよりも大きいかを判定し、大きければステップS813に分岐して区分レベルに設定された値を1つ減らしてステップS808に戻る。判定結果が大きくない、すなわち区分レベルは割付要求区分レベルと等しければ、処理を終了する。
【0109】
図8Aに示す処理は、仮割付が行われたことを前提としていることから、取得した区分レベルは割付要求区分より大きい。そして区分レベルを1つずつ減らしながらステップS808からステップS813のループ処理を繰り返すことから、ステップS812で区分レベルが割付要求区分レベルよりも大きくないと判定されるのは、区分レベルが割付要求区分レベルと等しくなったときである。
【0110】
以上の処理により、仮割付された区域を多層区分し、一次割付された区域が得られる。上記ステップS804の処理とステップS808〜ステップS813のループ処理は、仮割付された区域からスタートして、区域を1つ下位の区分レベルの2つの区域の対に分割し、若番側の区域の割付状態に使用中を、老番側の区域の割付状態に空を設定するものである。
【0111】
本発明の一実施形態によれば、取得した仮割付区域の全体を使用中とすることなく、割付要求区分レベルの区域を仮割付区域の区分番号の若番側に一次割付し、残りの連続領域を空と設定するので、領域を効率的に利用することができる。なお、一次割付を区分番号の若番側とすることに限らず、老番側とすることも可能であることは当業者に明らかである。
【0112】
図8Bは、図3に示す多層区分管理表310を参照して、図8Aに示す仮割付区域を多層区分して一次割付区域を得る処理を、具体例により説明する図である。
図8Bに示す例は、図7Cに例示するものと同様に、割付要求がシングルビット要求のものであり、図7Cに示す仮割付区域280aから一次割付区域を取得するものである。
【0113】
図8Bには、符号280aで一次割付前の割付状態である仮割付区域(区分番号5)が示されている。仮割付区域280aからの矢印241で示す、仮割付区域の区分レベル4から区分レベル1までの関係する各区域の区分を要求する多層区分要求により、符号164bを付した区分レベル4の区分割付表から処理が開始される。区分割付表164bには、図7Cに示すものと同じ割付状態が格納されている。
【0114】
割付状態が仮割付により使用中に設定された、区分レベル4の区分割付表164bの区分番号171の値が5のエントリからの矢印274aに示す区分要求により、区分レベル3の区分割付表163における区分番号10の区分ユニットの区分けによる区域(以下、「区分番号10の区域」のように表記する。)の割付状態に使用中“11”が設定され、区分番号10の区分ユニットと区分対293aを構成する区分番号11の区分ユニットの区分けによる区域(以下、「区分番号10の区域と区分対293aを構成する区分番号11の区域」のように表記する。)の割付状態に空“00”が設定される。この設定処理は、区分レベル3における図8AのステップS808〜ステップS811の処理で実行される。最初の区分番号は5であり、ステップS808で区分番号にはそれを2倍した10が設定される。また対の区分番号として11が得られる。
【0115】
以下同様に、使用中の区分番号10のエントリに対応して矢印273aに示す区分要求により、区分レベル2の区分割付表162における区分番号20の区域の割付状態に使用中“11”が設定され、区分番号20の区域と区分対292aを構成する区分番号21の割付状態に空“00”が設定される。
一方、区分番号11の割付状態は空に設定されたことから、矢印273bで対応を示すように、符号280bを付した一次割付後の仮割付区域に、空状態の区分番号11の区域283bが割り付けられる。
【0116】
次に使用中の区分番号20のエントリに対応して矢印272aに示す区分要求により、区分レベル1の区分割付表161における区分番号40の区域の割付状態に使用中“11”が設定され、区分番号40の区域と区分対291aを構成する区分番号41の割付状態に空“00”が設定される。そして、区分番号21の割付状態は空に設定されたことから、矢印272bで対応を示すように、一次割付後の仮割付区域280bに、空状態の区分番号21の区域282bが割り付けられる。
【0117】
多層区分要求は区分レベル1までであるから、矢印271aと矢印271bでそれぞれ対応を示すように、一次割付後の仮割付区域280bに、区分番号40の区域281aが使用中として一次割付され、区分番号41の区域281bが空として割り付けられる。
【0118】
上述の多層区分により、一次割付後の仮割付区域280bは、図に示すような使用中の一次割付領域281aと空である区域281b、282b、283bからなる、一次割付領域281aに隣接する隣接多層区域290bに分割される。
【0119】
図9は、図5のステップS505の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルの空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。空候補は、後に図11A〜図11Cを参照して説明する、マルチビット要求における一次割付領域を分割して二次割付を行ったときの残りの隣接多層区域を構成する区域の割付状態として設定される。
【0120】
空候補区域の探索は空区域の探索と同様に行われ、空候補区域探索の図9に示すフローは、図6に示す空区域探索のフローに対応するものであり、図9のステップS901〜ステップS904は、図6に示すステップS601〜ステップS604において、空区域を空候補区域と読み替えたものであるので、説明を省略する。
【0121】
また、図9のステップS901の処理の詳細を説明する図10Aは、多層区分割付表より、割付要求区分レベルのサイズ以上の空候補区域を探索し、空候補区域の区分番号を取得する処理フローを説明する図であり、図7Aに示す、多層区分割付表より、割付要求区分レベルのサイズ以上の空区域を探索し、空区域の区分番号を取得する処理フローを説明する図に対応する。図10AのステップS1001〜ステップS1010は、図7Aのステップ705において割付状態は空か判定しているのに対して、ステップS1005で割付状態は空候補か判定しているところで異なるだけであるので、図10Aについての説明も省略する。
【0122】
また同じく、図9のステップS904の処理の詳細を説明する図10Bは、ステップS901の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を取得する処理フローを説明する図であり、図8Aに示す、図6のステップS601の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を取得する処理フローを説明する図に対応する。図10BのステップS1024〜ステップS1033は、図8Aのステップ811において、対の区分番号が指す多層区分割付表の割付状態に空を設定しているのに対して、ステップS1031で対の区分番号が指す多層区分割付表の割付状態に空候補を設定しているところで異なるだけであるので、図10Bについての説明も省略する。
【0123】
次に、図11A〜図11Cを参照して、図5のステップS508の処理を詳細に説明する。
図11Aは、取得した区分番号の一次割付区域を多層区域に区分し、割付要求区分の二次割付区域を得る前段の処理フローを説明する図である。
【0124】
まず、ステップS1103で、区分番号として、取得した一次割付区域の区分番号を2倍した値を設定する。図7Bの例示では、取得した一次割付区域の区分番号が6であるので、このステップS1103の処理により、区分番号として12が設定される。
【0125】
次にステップS1104で、一次割付区域を分割するために、割付要求サイズから、割付要求サイズを2進数表示したビット値からなる割付構成区分表を作成する。そしてステップS1105で、分割区分レベルとして、取得区分レベルから1減算した値を設定する。図7Bの例示では、取得した一次割付区域の区分レベルが4であるので、このステップS1105の処理により、分割区分レベルとして3が設定される。
【0126】
次にステップS1106で、最小分割区分レベルとして、割付構成区分表のうちビット値が1であるビット位置で且つ下位0ビット目から見て最も下位のビット位置を設定し、図11BのステップS1110に進む。例えば割付要求サイズが図7Bに示すものであって割付構成区分表のビット値が“1010”であるときは、ビット位置1が最小分割区分レベルに設定される。
【0127】
図11Bは、取得した区分番号の一次割付区域を多層区分に分割し、割付要求区分の二次割付区域を得る後段の処理フローを説明する図である。
ステップS1110では、対の区分番号に、区分番号に1を加えた値を設定する。
【0128】
次にステップS1111で、分割区分レベルの指す割付構成区分表からビット値を取り出し、ステップS1112で、取り出したビット値が1であるかを判定する。
ステップS1112において、取り出したビット値が1でない(0である)と判定された場合は、ステップS1113に分岐し、取り出したビット値が1であると判定された場合は、ステップS1115に進む。
【0129】
ステップS1113では、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1114で、対の区分番号の指す多層区分割付表の割付状態に空候補を設定してステップS1119に進む。
一方、ステップS1115では、分割区分レベルはステップS1106で設定した最小分割区分レベルであるかを判定する。分割区分レベルと最小分割区分レベルとが等しくない場合は、ステップS1116に分岐し、等しい場合はステップS1121に進む。
【0130】
ステップS1116では、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1117で、対の区分番号の指す多層区分割付表の割付状態に使用中を設定する。次にステップS1118で、区分番号に1を加算し、ステップS1119に進む。
ステップS1119では、区分番号を2倍にし、ステップS1120に進み、分割区分レベルを1つ減らしてステップS1110に戻る。
【0131】
ステップS1115において分割区分レベルが最小分割区分レベルと等しいと判定されてステップS1121に進むと、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1122で、対の区分番号の指す多層区分割付表の割付状態に空候補を設定して処理を終了する。
【0132】
図11Cは、図3に示す多層区分割付表310を参照して、図11A及び図11Bに示す一次割付区域を多層区分し、割付要求区分の二次割付区域を得る処理を、具体例により説明する図である。図11Cに例示するものは、割付要求サイズ220に設定された値及び一次割付区域を区分番号6の一次割付区域280としていることから、図7Bに例示した一次割付に引き続き二次割付を行うものである。
【0133】
図7Bに示すものと同じく、割付要求サイズを2進数表示した割付要求サイズ220の1ビット目と3ビット目のビット値が1である。割付構成区分表230は、その下に0〜5で示すように区分レベルに対応する1ビットからなるエントリから構成されており、図11Cの例示では、区分レベル0から最上位の区分レベル5に対応する6つのエントリを有している。図の点線の矢印223、221で対応を示すように、割付要求サイズを2進数形式で表示したときのビット値に応じて、対応する区分レベルのエントリのビット値が設定されている。ここまでの設定は、図5のステップS501と図11AのステップS1104の処理で行われる。
【0134】
上述の割付構成区分表230のビット値に基づいて、二次割付が実行される。一次割付区域280からの矢印244で示す一次割付区域の最小分割区分レベルである区分レベル1までの多層区分要求により、符号164bを付した取得区分レベルである区分レベル4の区分割付表から多層区分が開始される。区分割付表164bには、図7Bに示すものと同じ割付状態が格納されている。
【0135】
区分レベル4の区分番号6の区域の区分要求274cについては、点線の矢印233で対応を示すように、割付構成区分表230の、区分レベル4より1を減じた区分レベル3に対応するビット値が1であることから、図11BのステップS1116とステップS1117の処理により、区分レベル3の区域であって区分番号6の区域と同一の領域を占める1組の区域に対応する区分対293bである、区分レベル3の区分割付表163における区分番号12と区分番号13の双方の区分ユニットの割付状態に使用中を示す“11”を設定する。
【0136】
図11BのステップS1117に続くステップS1118の処理により区分番号が1つ増えることから、次には区分レベル3の区分番号13の区域が区分要求273dの対象となる。点線の矢印232で対応を示すように割付構成区分表230の区分レベル2に対応するビット値が0であることから、図11BのステップS1113とステップS1114の処理により、区分レベル2の区域であって区分番号13の区域と同一の領域を占める1組の区域に対応する区分対292bである、区分レベル2の区分割付表162における区分番号26の割付状態に使用中を示す“11”を設定し、区分番号27の割付状態に空候補を示す“01”を設定する。
【0137】
次には区分レベル2の区分番号26の区域が区分要求272cの対象となる。点線の矢印231で対応を示すように割付構成区分表230の区分レベル1に対応するビット値が1であり、かつ区分レベル1が最小分割区分レベルであることから、図11BのステップS1121とステップS1122の処理により、区分レベル1の区域であって区分番号26の区域と同一の領域を占める1組の区域に対応する区分対291bである、区分レベル1の区分割付表161における区分番号52の割付状態に使用中を示す“11”を設定し、区分番号53の割付状態に空候補を示す“01”を設定する。
【0138】
以上で二次割付に伴う多層区分割付表310の更新が完了する。この多層区分割付表310の更新により、一次割付区域280は、二次割付後の一次割付区域280cに示すように多層区分される。矢印273cで対応を示すように、区分レベル3の区分番号12の区域283cが使用中として割り付けられ、それに連続して、矢印271cで対応を示すように区分レベル1の区分番号52の区域281cが使用中として割り付けられて多層区域として二次割付区域290cが割り付けられる。一方、矢印272dで対応を示すように、区分レベル2の区分番号27の区域282dが空候補として割り付けられ、それに連続して、矢印271dで対応を示すように区分レベル1の区分番号53の区域281dが空候補として割り付けられ、併せて隣接多層区域290dとして割り付けられる。二次割付区域290cでは、区域が区分レベルの降順で割り付けられ、隣接多層区域290dでは、区域が二次割付区域とは逆順である区分レベルの昇順で割り付けられる。
【0139】
二次割付を行った場合でも、割付区分番号として一次割付で取得した区分番号がファイルシステムに返されるが、上記説明から明らかなとおり、一次割付で取得した区分番号(上記例では6)の区域の先頭位置と、二次割付を行った二次割付区域の先頭位置は同一であることから、ファイル操作システムからの区分番号を指定した割付領域のアドレス問い合わせに対応することができる。
なお、上述の説明では、二次割付を区分番号の若番側から行っているが、先に仮割付後の一次割付について述べたように、区分番号の老番側から行うことができることは、当業者に明らかである。
【0140】
次に、図12〜図17Cを参照して、本発明の一実施形態における割付区域の解放について説明する。区域の割付と同様に、ファイルの削除などによる区域の解放処理もアロケーションシステムの多層区分管理部により行われる。
【0141】
図12は、割付区域を解放し、空区域の連結を試みる処理全体の概略の処理フロー例を説明する図である。図12に示す割付区域の解放処理と空区域の連結により、解放した割付区域を含む区域の割付状態を設定し直して、その区域を再割り付けすることが可能となる。
【0142】
図に示すように、ステップS1201において、区分番号に割付区域番号を設定する。この割付区域番号は、解放の対象となる区域がファイルに割り付けられたときにファイルシステムに返されたものであり、ファイルシステムからの割付区域の解放要求に含ませることができる。また、そのとき併せて割付要求サイズを含ませることもできる。
【0143】
次に、ステップS1202で、設定した区分番号により多層区分管理表を検索して、その区分番号に対応する区分レベルを求める。テップS1202の処理の詳細については、後に図13を参照して説明する。
次にステップS1203に進み、ステップS1202の処理で区分レベルが求められたかを判定し、求められなかった場合は、処理を終了する。求められた場合は、ステップS1204に進む。
【0144】
ステップS1204では、解放区分レベルに、ステップS1202の処理で求められた区分レベルを設定し、ステップS1205において、連結要求と名付ける一時的記憶領域に、空区域の連結を試みるフラグとしてありを初期設定する。
【0145】
次に、ステップS1206において、区分番号の指す一次割付区域内に含まれる区域の解放と空区域の連結を試みる。元の割付要求がシングルビット要求であれば、ステップS1201で設定された区分番号の割付状態に空を設定すればステップS1206の処理は終了する。元の割付要求がマルチビット要求であれば、二次割付が行われており、二次割付領域の解放が行われるだけでなく、隣接多層区域の空候補区域と解放された区域とを連結して上位区分レベルの区域の割付状態を空とすることが試みられる。ステップS1206の処理の詳細は、後に図14A、図14Bを参照して説明する。
【0146】
次にステップS1207において、連結要求はありか判定する。ありでなければ処理を終了し、ありであれば、ステップS1208において、区分番号の指す一次割付区域と隣接する隣接区域とを連結して上位の区域の割付状態を空とすることが試みられる。後の説明から明らかになるが、連結要求がありでステップS1208に進むのは、ステップS1206の処理で、一次割付区域が解放された場合である。ステップS1208の処理の詳細は、後に図17A、図17B及び図17Cを参照して説明する。
ステップS1208の処理が終了すると図12に示す処理は終了する。
【0147】
図13は、図12のステップS1202の処理の詳細を説明するものであり、区分番号により多層区分管理表を検索し、その区分番号に対応する区分レベルを求める処理フロー例を説明する図である。
【0148】
先ず、ステップS1301で、最上位区分レベル管理表より、最上位区分レベルを取り出す。そしてステップS1302で、最上位区分レベルの指す主区分番号管理表の主区分番号は有意か判定する。この判定は、区画構成主区分表がシングルビット構成かマルチビット構成かを判定することに相当するものである。
【0149】
ステップS1302の判定結果が否定的なもの、すなわち、区画構成主区分表がマルチビット構成であれば、ステップS1303で、区分レベルに最上位区分レベルから1を減じた値を設定してステップS1305に進む。一方、肯定的なものであれば、ステップS1304で、区分レベルに最上位区分レベルを設定してステップS1305に進む。
ステップS1305では、先頭番号に、最上位区分レベルより区分レベルを減じた値を指数とする2のべき乗数を設定する。
【0150】
次に、ステップS1306で、末尾番号管理表より、区分レベルの指す末尾番号を取り出し、ステップS1307で、区分番号は、ステップS1305で設定した先頭番号とステップS1306で取り出した末尾番号の範囲内か判定する。この判定が肯定的な場合は区分レベルありとして区分レベルを返して処理を終了する。否定的な場合は、ステップS1308に進む。
【0151】
ステップS1308では、区分レベルは最下位の区分レベルか判定する。区分レベルが最下位の区分レベルであれば、該当する区分レベルなしとして処理を終了する。区分レベルが最下位の区分レベルでなければ、ステップS1309aに進み、先頭番号を2倍にし、ステップS1309で区分レベルを1つ減らしてステップS1306に戻る。
【0152】
上記のステップS1306〜ステップS1309のループ処理を区分レベルを1つずつ減らしながら繰り返し、ある区分レベルのステップS1307の判定において、区分番号がステップS1305で設定した先頭番号あるいはステップS1309aで設定した先頭番号とステップS1306で取り出した末尾番号の範囲内となったときの区分レベルが、区分番号の指す区分ユニットに係る区分レベルである。区分レベルが最下位の区分レベルになっても、区分番号がステップS1305で設定した先頭番号あるいはステップS1309aで設定した先頭番号とステップS1306で取り出した末尾番号の範囲内とならないときは、区分番号は不当なものであり、該当する区分レベルは存在しないことが分かる。
【0153】
次に図14A、図14Bを参照して、図12のステップS1206の処理の詳細を説明する。
図14Aは、区分番号の指す一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理フロー例を説明する図である。
【0154】
まずステップS1401において、割付要求サイズより、割付構成区分表を作成する。割付要求サイズは、先に述べたように区域の解放要求をしたファイルシステムの解放要求に含まれるものとすることができる。割付構成区分表は、図11Aに示すステップS1104の処理と同様に作成する。図11Aに示すものはマルチビット要求の割付要求についてのものであるが、シングルビット要求の場合ではビット値が1のビット位置が1か所の割付構成区分表が構成されることは明らかである。
【0155】
次にステップS1402において、最小区分レベルに、割付構成区分表の下位0ビット目から見た最初のビット1が立つビット位置を設定する。
ステップS1405では、割付構成区分表により、割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュし、ステップS1407に進む。ここで、分割割付状況とは、割付区域を分割割付した区域の区分レベル、区分番号、解放表示である。区分レベルの指す割付構成区分表のビット値が1のときに、解放表示はありとされ、ビット値が0のとき、なしとされる。ステップS1405の処理の詳細については、後に図15を参照して説明する。
【0156】
ステップS1407においては、分割割付状況スタックをポップして、区分レベル、区分番号、解放表示を読み出す。
次にステップS1409において、該読み出した区分レベルは解放区分レベルであるか判定し、区分レベルが解放区分レベルであればステップS1416に分岐し、解放区分レベルでなければステップS1411に進む。なお、元の割付要求がシングルビット要求であれば、最初のステップS1409の判定処理でステップS1416に分岐することになる。
【0157】
ステップS1411では、ステップS1407で読み出した解放表示はありを示しているか判定する。解放表示がありであればステップS1413に進み、解放表示がありでなければステップS1412に進む。
ステップS1412では、連結要求はありか判定する。ありであればステップS1413に進み、ありでなければステップS1407に戻る。
【0158】
ステップS1413では、区分番号の指す区分対の解放を試み、ステップS1407に戻る。ステップS1413の処理の詳細は、後に図16を参照して説明する。
上述のステップ1409の判定で区分レベルは解放区分レベルと等しいと判定されて分岐するステップS1416以降の処理は、解放区分レベルの区域の解放処理である。
【0159】
ステップS1416では、連結要求はありか判定し、ありでなければ処理を終了し、ありであれば、ステップS1417において、区分番号の指す多層区分割付表の割付状態を空として処理を終了する。すなわち、マルチビット要求の場合でも、連結要求がありであれば、二次割付区域と隣接多層区域からなる一次割付区域についての割付状態は、ステップS1417の処理により空に設定される。
【0160】
図14Bは、図3に示す多層区分割付表310を参照して、図14A及び後記図16に示す一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理を、具体例により、説明する図である。
図14Bに示す例は、図11Cに例示するものと同様なマルチビット要求で二次割付された二次割付区域を解放し、隣接区域と連結して上位区分レベルの区域の割付状態に空を設定するものである。したがって、割付要求サイズ220と割付構成区分表230に設定された値は図11Cに示すものと同じである。
図14Bに示す二次割付後の一次割付区域280cは、二次割付区域を解放し連結する前の割付状態のものであり、図11Cに示す二次割付後の一次割付区域280cの空候補であった区分番号27の区域282dが使用中となっている。区分番号53の区域281dの割付状態は空候補のままである。
【0161】
解放と連結の処理は、割付構成区分表230のビット値を参照しながら、最小区分レベルである区分レベル1から上位の区分レベルへと順次行われていく。
まず、最小区分レベルである区分レベル1においては、割付構成区分表230の対応するビット値は1(点線の矢印231aで対応を示す)である。すなわち、解放表示はありなので、図14AのステップS1413、すなわち図16に示す処理が実行される。区分レベル1の解放要求の矢印251aが示すように、区域281cの解放が保障されていることと、符号161cを付した解放前の区分レベル1の区分割付表の、区分番号171の値が52の区域と対をなす区分番号53の区域の割付状態が空候補であることから、後に説明する図16のステップS1605での判定が肯定的なものとなり、区分番号52の区域と区分番号53の区域からなる区分レベル1の区分対291cの上位の区分レベルの区域の割付状態に空を設定する連結要求(矢印241cに示す)がありとされ、符号161dを付した解放後の区分レベル1の区分割付表に示すように、区分番号52及び対の区分番号53の割付状態には保留が設定される。上位区分レベルの区域の空が設定されるとき、その区域に包含される下位の区分レベルの区域の割付状態に保留を設定することは、図3に示す多層区分割付表310の初期設定の場合と同様である。
【0162】
区分レベル2においては、割付構成区分表230の対応するビット値は0(点線の矢印232aで対応を示す)であり、連結要求241cがありなので矢印241dに示すように上位の区分の区域である、符号162cを付した解放前の区分レベル2の区分割付表の区分番号26の区域の解放要求がされる。区分番号26の区域と区分対292cを構成する区分番号27の区域は使用中なので、図16のステップS1605での判定が否定的なものとなり、矢印242cで示すように、区分番号26の区域のみ解放され、区分対292cの割付状態は、符号162dを付した解放後の区分レベル2の区分割付表に示すように空と使用中になる。また、連結要求はなしとなる。したがって、点線の矢印242dに示すように区分対292cの上位の区域であり、符号163cを付した解放前の区分レベル3の区分割付表に示すように割付状態が使用中の区分番号13の区域は解放されない。
【0163】
次に区分レベル3においては、割付構成区分表230の対応するビット値は1(点線の矢印233aで対応を示す)であり、区分レベル3の解放要求の矢印253aが示すように、区域283cが解放される。しかし、先に述べたように、割付状態が使用中の区分番号13の区域は解放されず使用中である。したがって、矢印243cで示すように、区分番号13の区域と区分対293cを構成する区分番号12の区域のみ解放され、区分対293cの割付状態は、符号163dを付した解放後の区分レベル3の区分割付表に示すように空と使用中になる。また、連結要求はなしとなるので、点線の矢印244dに示すように区分対293cの上位の区域であり、符号164を付した解放前の区分レベル4の区分割付表に示すように割付状態が使用中の区分番号6の区域は解放されず、割付状態は使用中のままである。
【0164】
以上の区域の解放と連結の処理により、二次割付区域を解放した後の割付状態の一次割付区域280dは、矢印273e、272e及び点線の矢印272fで多層区分割付表310の割付状態との対応を示すように、区分番号が12で空の区域283cと区分番号が26で空の区域282c、及び区分番号が27で使用中の区域282dに区分される。
【0165】
図15は、図14AのステップS1405の処理の詳細を説明するものであり、割付構成区分表により、割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュする処理フロー例を説明する図である。
【0166】
まず、ステップS1501で、区分レベルに、図12に示すステップS1204で設定した解放区分レベルを設定し、ステップS1502に進む。
【0167】
ステップS1502では、割付構成区分表より区分レベルの指すビット値を解放表示として取り出す。ビット値が1であれば解放表示ありとし、ビット値が0であれば解放表示なしとする。
そして、ステップS1502aにおいて、割付区域内の分割割付状況として、区分レベル、区分番号、解放表示を分割割付状況スタックにプッシュする。
【0168】
次にステップS1504に進み、区分レベルは最小区分レベルに等しいか判定する。区分レベルが最小区分レベルよりも大きいと判定されると、ステップS1504aに分岐して解放表示はありか判定し、解放表示がありでなければステップS1506に進み、解放表示がありであれば、ステップS1505で、区分番号に1を加えてステップS1506に進む。
ステップS1506では、区分番号を2倍にし、ステップS1507で区分レベルを1つ減らしてステップS1502に戻る。
【0169】
上述のステップS1502〜ステップS1507のループ処理を、ステップS1504において区分レベルが最小区分レベルと等しいと判定されるまで繰り返す。ステップS1504において区分レベルが最小区分レベルと等しいと判定されると、処理を終了する。
【0170】
図14Bの例示では、区分番号に6、区分レベルに4が初期設定されており、割付構成区分表の区分レベル4の指すビット値は0であるから、最初に分割割付状況スタックにプッシュされる区分レベル、区分番号、解放表示は、それぞれ4、6、0(解放表示なし)である。
【0171】
区分レベル4の処理では、解放表示はなしなので、区分番号は6×2=12に更新され、区分レベルは3に更新される。また、割付構成区分表の区分レベル3の指すビット値は1である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、3、12、1(解放表示あり)がプッシュされる。
【0172】
区分レベル3の処理では、解放表示はありなので区分番号は(12+1)×2=26に更新され、区分レベルは2に更新される。また、割付構成区分表の区分レベル2の指すビット値は0である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、2、26、0(解放表示なし)がプッシュされる。
【0173】
区分レベル2の処理では、解放表示はなしなので区分番号は26×2=52に更新され、区分レベルは最小区分レベルである1に更新される。また、割付構成区分表の区分レベル1の指すビット値は1である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、1、52、1(解放表示あり)がプッシュされる。
【0174】
図14Bに示す例は、マルチビット要求で割り付けられた領域を解放するものである。シングルビット要求で割り付けられた領域を解放するのであれば、解放区分レベルと最小区分レベルは等しく、分割割付状況スタックにプッシュされる区分レベル、区分番号、解放表示は1組だけであり、解放表示はありである。
【0175】
上述の分割割付状況スタックにプッシュされた分割割付状況としての区分レベル、区分番号、解放表示と、図12のステップS1205で「あり」に初期設定され、後記図16に示す処理により更新される連結要求により、図14Bに例示する割付区域の解放が行われる。
【0176】
図16は、図14AのステップS1413の処理の詳細を説明するものであり、区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。図14Aに示す処理フローのとおり、図16に示す処理ステップは、分割割付状況スタックを順次ポップすることにより、最小区分レベルから解放区分レベルの1つ下位の区分レベルまでの区分レベル毎に実行される。
【0177】
図に示すとおり、まずステップS1602で、対の区分番号に、区分番号に値1を加算した値を設定してステップS1604に進み、対の区分番号の指す多層区分割付表の割付状態を読み出し、ステップS1605で、読み出した割付状態が空または空候補であるか判定する。読み出した割付状態が空または空候補であれば、ステップS1606に進み、読み出した割付状態が空でも空候補でもなければ、ステップS1609に分岐する。
【0178】
ステップS1606では、区分番号の指す多層区分割付表の割付状態に保留を設定し、ステップS1607で、対の区分番号の指す多層区分割付表の割付状態に保留を設定する。次にステップS1608で連結要求にありを設定して処理を終了する。これらのステップS1606〜S1608の処理は、図14Bの例示では、矢印241cで示す連結要求ありの処理に対応する。
【0179】
一方、ステップS1609に分岐した場合は、区分番号の指す多層区分割付表の割付状態に空を設定し、ステップS1610で、連結要求になしを設定して処理を終了する。この処理は、図14Bの例示では、矢印242c、243cで示す自区域のみ解放の処理に対応する。
【0180】
次に図17A、図17B及び図17Cを参照して、図12のステップS1208の処理の詳細を説明する。
図17Aは、一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理フロー例を説明する図である。
【0181】
図に示すように、ステップS1701で、区分レベルに解放区分レベルを設定し、ステップS1703で、区分番号に割付区分番号を設定してステップS1704に進む。
ステップS1704では、主区分番号管理表より、区分レベルの指す主区分番号を取り出し、ステップS1705に進む。
ステップS1705では、区分番号と主区分番号が等しいか判定する。等しければステップS1710に分岐し、等しくなければステップS1706に進む。
ステップS1706では、区分番号の指す区分対の解放を試みる。ステップS1706の処理の詳細は、後に図17Cを参照して説明する。
【0182】
次にステップS1707に進み、連結要求はありか判定する。連結要求がありでなければ、図16のステップS1605において、対の区分番号の割付状態は空でも空候補でもないと判定されたことを意味するから、区域の連結処理を終了し、連結要求がありであれば、ステップS1708以降の処理に分岐して上位の区分レベルの区域の連結処理を試みる。
【0183】
ステップS1708では、区分レベルを1つ上位のものとし、ステップS1709に進んで、区分番号に、区分番号を値2で割った商を設定し、ステップS1704に戻る。なお、ステップS1708では、区分番号は、ステップS1706での処理により、偶数となっている。
【0184】
ステップS1705で、区分番号と主区分番号が等しいと判定された場合に分岐するステップS1710では、区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。区分番号と主区分番号が等しい場合は、図3の例示から明らかなようにその区分番号と対をなす区分番号の区域は存在しないことから、ステップS1710では、区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。
【0185】
図17Bは、図3に示す多層区分割付表310を参照して、図17A及び後記図17Cに示す一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理を、具体例により、説明する図である。なお、以下の説明では、一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを、単に、連結ということがある。
【0186】
図17Bに示す例は、図8Bに例示するものと同様なシングルビット要求で一次割付された区域が解放されたので隣接区域と連結して上位区分レベルの区域の割付状態に空を設定するものである。
図17Bには、解放された一次割付区域を連結する前の割付状態の多層区域として、図8Bに示す一次割付後の仮割付区域280bの使用中であった区分番号40の区域が解放され、空であった区分番号11の区域283bが使用中となっている多層区域280eが例示されている。区分番号41の区域281bと区分番号21の区域282bの割付状態は空のままである。
【0187】
連結処理は、解放区分レベルである区分レベル1から、連結処理がそれ以上不可能になる上位の区分レベルへと順次行われていく。すなわち、解放された区分番号40の区域281aに順次隣接した区域であって使用中でない区域を連結していく。
【0188】
まず、図12に示すステップS1207の判定が肯定的であったことから、解放された区域281aに対して、矢印240eに示す連結要求が行われ、解放区分レベルである区分レベル1の処理が行われる。符号161eを付した区分レベル1の区分割付表の、区分番号171の値が40の区域と対をなす区分番号41の区域の割付状態が空であることから、区分番号40の区域と区分番号41の区域からなる区分対291dの上位の区分レベルの区域の割付状態に空を設定する連結要求(矢印241eに示す)がありとされ、符号161fを付した区分レベル1の区分割付表に示すように、区分番号40及び対の区分番号41の割付状態には保留が設定される。図14Bの説明においても述べたように、上位区分レベルの区域の空が設定されるとき、その区域に包含される下位の区分レベルの区域の割付状態に保留を設定することは、図3に示す多層区分割付表310の初期設定の場合と同様である。
【0189】
区分レベル2においては、連結要求がありなので矢印241fに示すように上位の区分の区域である、符号162eを付した連結前の区分レベル2の区分割付表の区分番号20の区域の解放要求がされる。区分番号20の区域と区分対292dを構成する区分番号21の区域は空なので、矢印242eで示すように連結要求がありとされ、符号162fを付した連結後の区分レベル2の区分割付表に示すように、区分番号20及び対の区分番号21の割付状態には保留が設定される。
【0190】
次に区分レベル3においては、連結要求がありなので矢印242fに示すように上位の区分の区域である、符号163eを付した連結前の区分レベル2の区分割付表の区分番号10の区域の解放要求がされる。区分番号10の区域と区分対293dを構成する区分番号11の区域は使用中なので、矢印243eで示すように区分番号10の区域の割付状態のみが空に設定され、区分対293dの割付状態は、符号163fを付した連結後の区分レベル3の区分割付表に示す空と使用中となる。
そして、連結要求はなしであるので、点線の矢印243fで示すように、上位の区域であり、区分レベル4の区分割付表164に示すように割付状態が使用中である区分番号5の区域は解放されずに割付状態は使用中のままである。
【0191】
以上の区域の解放と連結の処理により、一次割付区域を隣接する空区域と連結した後の割付状態の多層区域280fは、矢印273e及び点線の矢印272fで多層区分割付表310の割付状態との対応を示すように、区分番号が10で空の区域283e及び区分番号が11で使用中の区域283fに区分される。
【0192】
図17Cは、図17AのステップS1706の処理の詳細を説明するものであり、区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。ここで、区分番号の指す区分対とは、区分番号で識別される区分ユニットの属する区分対という意味であり、後ほど説明するように、その区分番号は若番の方とは限らない。別の言い方をすれば、その区分番号が偶数とは限らない。
図17Aに示す処理フローのとおり、図17Cに示す処理ステップは解放区分レベルから上位の区分レベルの方向に区分レベル毎に実行され、空領域を連結して上位の区分レベルの領域の解放が試みられる。
【0193】
図に示すとおり、まずステップS1711で、区分番号は偶数かを判定する。図17Cに示す処理フローは、図16に示すものと類似するものであるが、先に述べたように、図17A、つまり図12のステップS1208の処理においては、区分番号が偶数とは限らない。それは、解放され、空状態となった一次割付区域に対応する区分番号は、偶数の場合もあれば、奇数の場合もあるからである。例えば、図17Bに示す使用中の区域283fが一次割付区域であって、それが空となったときには、その区分番号は11であり、奇数である。
【0194】
区分番号が偶数である場合はステップS1712で、対の区分番号に、区分番号に値1を加算した値を設定してステップS1714に進み、奇数である場合はステップS1713で、対の区分番号に、区分番号から1を減じた値を設定してステップS1714に進む。
【0195】
ステップS1714では、対の区分番号の指す多層区分割付表の割付状態を読み出し、ステップS1715で、読み出した割付状態が空または空候補であるか判定する。読み出した割付状態が空または空候補であれば、ステップS1716に進み、読み出した割付状態が空でも空候補でもなければ、ステップS1719に分岐する。
【0196】
ステップS1716では、区分番号の指す多層区分割付表の割付状態を保留に設定し、ステップS1717で、対の区分番号の指す多層区分割付表の割付状態に保留を設定する。次にステップS1718で連結要求にありを設定して処理を終了する。これらのステップS1716〜S1718の処理は、図17Bの例示では、矢印241e、242eで示す連結要求の処理に対応する。
【0197】
一方、ステップS1719に分岐した場合は、区分番号の指す多層区分割付表の割付状態を空に設定し、ステップS1720で、連結要求になしを設定して処理を終了する。こちらの処理は、図17Bの例示では、矢印243eで示す自区域のみ解放の処理に対応する。
【0198】
なお、本発明の区画管理方法を例えば図2Cに例示するデータ処理装置301のようなコンピュータに実行させるプログラムにより、本発明に係る区画管理装置をコンピュータ上に構築可能なことは明らかである。
そこで、本発明の区画管理装置に関する、機能ブロック構成例について以下に説明する。
【0199】
図18Aは、本発明の一実施形態における区画管理装置の機能ブロック構成例を説明する図である。
図に示すように、区画管理装置800は、大きく分けて、初期化部810と多層区分管理部840から構成される。初期化部810と多層区分管理部840は、図2Bに例示するアロケーションシステム(初期化部)101とアロケーションシステム(多層区分管理部)102に相当する。
なお、図18Aの例示では、同一の区画管理装置800に初期化部810と多層区分管理部840が包含されているが、外部記憶装置の区画管理を考えれば、初期化を行う区画管理装置と、初期化された多層区分割付表を用いて多層区分管理を行う区画管理装置が別の装置でも本発明を実施可能なことは、当業者に明らかである。
【0200】
初期化部810は、区画のサイズを取得する区画サイズ取得手段820と多層区分割付表生成手段830を含む。多層区分割付表生成手段830は、区画のサイズを互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表したとき、該和を構成する各2のべき乗と区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの大きさ順に区画を分割することで該区画を区分けし、各主区域を2分の1ずつ分割して順次区画の割当単位のサイズまで各サイズの区域に区分けし、主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成し、初期化する。また、多層区分割付表生成手段830は、区画を包含する2のべき乗サイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗のサイズの区域により、仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、該仮想的に区分けされた仮想区域を識別するための区分番号を該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の仮想区画内の配置順で割り振る。この多層区分割付表生成手段830の機能は、図4A〜図4Cを参照して説明した処理フロー例により実現可能である。
【0201】
多層区分管理部840は、ファイルまたはメモリ領域の空区域への割付を行う区域割付手段850とファイルまたはメモリ領域の割付から割付区域を解放する区域解放手段860を含む。
【0202】
図18Bは、本発明の一実施形態における区域割付手段の機能ブロック構成例を説明する図である。図に示すように、区域割付手段850は、割付要求を受け付ける割付要求受付手段851、空区域探索手段852、二次割付手段853、割付区分番号出力手段を含み、空区域探索手段852は、仮割付手段857を含む。
【0203】
区域割付手段850の機能は、図5を参照して説明した処理フロー例により実現可能である。
空区域探索手段852は、割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表され、区分レベルの異なる区域のサイズの和である場合、その区分レベルの最大のものより1つ大きい区分レベルの空区域であって割付要求サイズより大きいサイズの一次割付区域を探索し、割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、その割付要求サイズの空区域を一次割付区域として探索する。空区域探索手段852の機能は、図6、図9に例示する処理フローに対応する。
【0204】
空区域探索手段852のうち仮割付手段857は、一次割付区域の区分レベルで空区域を探索できなかった場合に、多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域を仮割付区域として前記多層区分割付表の割付状態を使用中とするとともに、仮割付区域を一次割付区域と残りの領域であって区分レベルの小さいものから順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、一次割付区域内の区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する多層区分割付表の割付状態に空状態を設定する。仮割付手段857の機能は、図7Aと図8A、図10Aと図10Bに例示する処理フローに対応する。
【0205】
二次割付手段853は、一次割付区域のサイズが割付要求サイズより大きい場合、一次割付区域を、区分レベルの大きいものから順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって区分レベルの小さいものから順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、二次割付区域のそれぞれの区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する前記多層区分割付表の割付状態に空候補状態を設定する。二次割付手段853の機能は、図11A、図11Bに例示する処理フローに対応する。
【0206】
図18Cは、本発明の一実施形態における区域解放手段の機能ブロック構成例を説明する図である。図に示すように、区域解放手段860は、解放要求を受け付ける解放要求受付手段851、一次割付区域内の区域の解放を試みる一次割付区域内解放手段862、一次割付区域の区分レベルより大きい区分レベルの区域の解放を試みる上位区域解放手段863を含む。
【0207】
区域解放手段860の機能は図12に例示する処理フロー例に対応する。
一次割付区域内解放手段862は、解放要求に含まれるサイズである解放要求サイズが、区分レベルの異なる区域の和である場合、隣接多層区域内の最小の区域の区分番号を求めてその区分番号の指す多層区分割付表から割付状態を読み出し、読み出した割付状態が空または空候補の状態であれば、二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する多層区分割付表の割付状態に保留を設定するとともに1つ上位の区分レベルの区域の解放を試み、隣接多層区域内の最小の区域の割付状態が使用中であれば、二次割付区域内の最小の区域の割付状態を空の状態とする。一次割付区域内解放手段862の機能は、図14Aに例示する処理フローに対応する。
【0208】
上位区域解放手段863は、一次割付区域が解放され、その区分番号の指す多層区分割付表の割付状態が空の状態になったとき、一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を一次割付区域としたときの他方の区域の割付状態を多層区分割付表より読み出し、他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する多層区分割付表の割付状態に保留を設定するとともに上位の区分レベルの区域の解放を試み、他方の区域の割付状態が使用中であれば、一方の区域の割付状態を空の状態とする。上位区域解放手段863の機能は、図17Aに例示する処理フローに対応する。
【0209】
以上本発明を実施するための形態について詳細に説明したが、本発明の実施形態は上記に限ることなく種々の変形が可能であることは当業者に明らかである。以上に説明した本発明の実施の形態による区画管理方法、及びその均等物は、それらをコンピュータに実行させるプログラムにより実現可能であることも明らかである。したがって、上記プログラム、及び上記プログラムを記憶したコンピュータ読み取り可能な記憶媒体も、本発明の実施の形態に含まれる。また、本発明の区画管理方法によりその区画が管理される記憶装置は、本発明の実施の形態に含まれる。そして、記憶装置が、記憶媒体駆動装置と記憶媒体からなる場合には、本発明の区画管理方法によりその区画が管理される記憶媒体も本発明の実施の形態に含まれる。以上説明したように、本発明によれば、記憶容量によらず記憶装置を有効にかつ効率的に管理することができる。また、各区分レベルの区域を多層区分割付表及び多層区分管理表を用いて多層的に管理することにより、連続する領域にファイル割付を行うことが可能となる。
【技術分野】
【0001】
本発明は、記憶装置の区画を管理する、区画管理装置、区画管理方法及びプログラムに関する。
【背景技術】
【0002】
従来から、ハードディスク等の記憶装置に記憶するデータを管理するための方式として、例えばFAT(File Allocation Tables)やNTFS(NT File System)等のファイルシステムが採用されている。
【0003】
図1Aは、従来から採用されているハードディスク等の外部記憶装置における区画割付を説明する図である。
図1Aに示すように、例えば外部記憶装置306の記憶領域は、図示しないディスクアロケータ等のユーティリティプログラムにより4つの区画1〜4(191,192,193,194)が割り付けられ、それぞれあるファイルシステムに割り当てられている。区画の先頭には区画の管理データを格納した区画管理テーブル195aを備えたマスターブートレコード195が配置されている。図1Aに区画番号3についての区画情報196が例示されているように、区画管理テーブル195aは、区画番号196a、開始位置196b、区画サイズ196cのエントリを含んでいる。区画番号196aには、区画を識別する区画番号が格納されており、図示の例では3である。開始位置には、区画の先頭アドレスの情報が格納されており、図示の例ではその内容は省略している。区画サイズ196cには、区画の割当単位領域の個数が格納されており、図示の例では52である。
【0004】
各区画におけるファイルに対するディスクの割付管理は、それぞれの区画が割り当てられたファイルシステム特有の割付方法に依存するため煩雑であった。例えば、FATによれば、割付を行ったブロックを示すリンクリストをファイルごとに保持している。また、NTFSによれば、ファイルごとに割付を行ったブロックの開始位置及び連続するブロック数についての情報を保持している。
これらのファイルシステムにおける割付管理の問題を解決するために、例えば、下記特許文献1に開示されているバディシステムに関する技術が提案されている。バディシステムによれば、領域を2kからなるサイズごとに分割して割付の管理を行う。仮想記憶方式を使用していないメモリ管理システムでのメモリ領域の割り付けでは、基本的なバディシステムが採用されている。
【0005】
図1Bは、バディシステムの割付原理を説明する図である。図1Bに示すのは、サイズが23=8の割当領域490とそれに対応するツリー構造体580と、ツリー構造体580のノードに対応する領域が使用中であるかを示すビットマップ400である。割当領域490は、例えば図1Aに例示した区画1〜4等である。
ツリー構造体580は、割当領域490を2分の1のサイズに順次割当単位のサイズまで分割して得られる領域の関係を階層的にモデル化したものである。割当単位のサイズの領域の階層をレベル1とすると、図に示す例では、ルートノードのレベルは4となる。
【0006】
ツリー構造体580のルートノード480は、点線の矢印で示すように、分割前の割当領域490全体の領域(レベル4の領域)に対応し、ノード内に記載された“8”は、対応する割当領域490のサイズに相当する。また、括弧内の数字は、同一レベル内の領域を識別するレベル内番号である。
【0007】
ルートノード480にリンク540で接続されたノード440と、ルートノード480にリンク541で接続されたノード441は割当領域490を2分割した領域(レベル3の領域)に対応する。それぞれの領域のサイズは図に示すように4である。
ノード440の下位には、リンク520で接続されたサイズ2のノード420と、リンク521で接続されたサイズ2のノード421が存在する。同様に、ノード441の下位には、リンク522で接続されたサイズ2のノード422と、リンク523で接続されたサイズ2のノード423が存在する。これら4つのノードはレベル2の領域に対応する。
【0008】
ノード420の下位には、リンク510で接続されたサイズ1のノード410と、リンク511で接続されたサイズ1のノード411が存在する。同様に、ノード421の下位には、リンク512で接続されたサイズ1のノード412と、リンク513で接続されたサイズ1のノード413が存在し、ノード422の下位には、リンク514で接続されたサイズ1のノード414と、リンク515で接続されたサイズ1のノード415が存在し、ノード423の下位には、リンク516で接続されたサイズ1のノード416と、リンク517で接続されたサイズ1のノード417が存在する。これら8つのノードはレベル1の領域に対応する。
ルートノード480以外のノードは親ノードの対応する領域を2分割した領域の1つに対応したものとなっている。したがって、各レベルの領域のサイズの総和は、割当領域490のサイズに一致する。
【0009】
図1Bに示すビットマップ400は、点線の矢印で示すように、ツリー構造体580の各ノードに対応したビット値を持つものである。ビットマップ400の、符号408で示すレベル4のレベル内番号409で示すビット位置のビット値は、レベル4の領域が使用中であるかを示すものであり、符号404で示すレベル3のレベル内番号0、1のビット値は、該当する領域が使用中であるかを示している。同様に、符号402で示すレベル2のレベル内番号0〜3はレベル2の各領域が使用中であるかを示し、符号401で示すレベル1のレベル内番号0〜7はレベル1の各領域が使用中であるかを示している。
【0010】
図1Bに示す例では、レベル4のレベル内番号0、レベル3のレベル内番号0、レベル2のレベル内番号0、レベル1のレベル内番号0にビット“1”が立っており、そのビット位置に対応する領域全体を新たに使用することはできないことを示している。つまり、レベル1のレベル内番号0にその状態を示すように、ノード410に対応するサイズ1の領域が使用中であるので、その領域を含むより大きいサイズの領域をそのまま使用することはできないことを示している。
【0011】
上述のバディシステムによれば、ある大きさのファイル及びメモリ領域を割り付けるとき、その大きさと等しいかそれを超える2kからなるサイズの領域の中から空き領域を探して割り付け、解放するときもそのサイズの空き領域群に戻せばよいので、ファイル及びメモリ領域の割り付けと解放及び領域の管理が容易である。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開平7−28693号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
しかしながら、上記のバディシステムによれば、2のべき乗単位で領域を割り付けることから、例えば2.1GBのファイルを割り付けるとき、4GBの領域が必要となり、ファイル割付後のブロックには、データの書き込まれていない領域が生じるにも関わらず、従来のファイルシステムにおいてはその領域に対して更にファイルを追加することができず、領域を有効に使用することができなかった。
また、例えば記憶装置全体の記憶容量が127GBであったとしても、記憶領域を要求する要求元に対して割り付ける物理的あるいは論理的な領域である区画について、最大でも64GBの区画として管理せざるを得なかった。
すなわち、バディシステムによれば、2のべき乗単位で領域を割り付けることからファイル及びメモリ領域の割り付けと解放及び領域の管理が容易ではあるが、2のべき乗サイズの領域から2のべき乗サイズではない領域を取得した場合の残りの領域の管理、及び2のべき乗サイズではない領域から2のべき乗サイズの領域を取得した場合の残りの領域の管理がなされていないため、領域を有効活用できないという課題がある。
【0014】
そこで本発明は、2のべき乗サイズの領域から2のべき乗サイズではない領域を取得した場合でも、2のべき乗サイズではない領域から2のべき乗サイズの領域を取得した場合でも、残りの領域を管理することが可能であり、また領域管理手段が領域にファイル及びメモリ領域を割り付けるに当たって、効率的な手法により、領域を有効活用することのできる技術を提供することを目的とする。
【課題を解決するための手段】
【0015】
本発明の一つの態様によれば、区画のサイズを取得し、区画のサイズを互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表したとき該和を構成する各2のべき乗のサイズの領域を主区域としてそのサイズの順に区画に連続的に割り付けることで区画を区分けし、主区域を2分の1ずつ順次分割したサイズの各サイズの領域である区域と主区域に対応して、各サイズの区域と主区域のそれぞれのファイル割り付け状態を示す割付情報を格納する多層区分割付表を生成し、多層区分割付表に格納された割付情報に基づいて区域のファイルへの割付を管理する。
そして、上記割付と多層区分割付表によるファイルの割付管理を実現するために、上記サイズを取得した実体的な区画を含む最小の2のべき乗と区画の割当単位のサイズの積のサイズを有する仮想的な区画である仮想区画を仮想的に取得し、この仮想区画をバディシステムのように2分の1のサイズに順次区分けし、実体的な区画に対応する各サイズの区域と主区域のそれぞれのファイル割り付け状態を示す割付情報を格納する多層区分割付表を生成する。
【0016】
そして、区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、多層区分割付表は、区域の割付情報を、区域の区分レベル順、同一区分レベルにおいては区域の区画内の配置順で格納し、割付情報の格納順にしたがって割付情報が該当する区域を識別するための識別番号である区分番号を割り振り、該区分番号を用いて区域の割付を管理する。
そして、多層区分割付表は、仮想区画から区分けを始めたことにより生じる実際には区画として存在しない領域に対応する区域の割付情報は持たないものとする。
【0017】
また、本発明の別の態様によれば、割付要求されたファイルのサイズが区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって割付要求サイズより大きいサイズの一次割付区域を探索し、一次割付区域を、区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、二次割付区域のそれぞれの区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する多層区分割付表の割付状態に空候補状態を設定する。
【発明の効果】
【0018】
本発明によれば、区画を2のべき乗サイズの組合せで管理するので任意のサイズの区画を効率的に無駄なく有効に管理することが可能であり、区画を区分した各サイズの区域で割付管理を行うことから、連続する領域に無駄なくファイルの割付がなされることとなるため、領域の有効活用を図ることができる。
【図面の簡単な説明】
【0019】
【図1A】外部記憶装置における区画割付を説明する図である。
【図1B】バディシステムの割付原理を説明する図である。
【図2A】本発明の一実施形態における区画管理の概念を説明する図である。
【図2B】本発明の一実施形態におけるアロケーションシステムのソフトウェア及びハードウェア環境例を説明する図である。
【図2C】本発明の一実施形態におけるハードウェア構成例を説明する図である。
【図3】本発明の一実施形態における区画サイズに対応した区画の初期化状態例を説明する図である。
【図4A】本発明の一実施形態における区画を初期化する前段の処理フロー例を説明する図である。
【図4B】本発明の一実施形態における区画を初期化する後段の処理フロー例を説明する図である。
【図4C】本発明の一実施形態における多層区分割付表を区分レベル毎に初期化する処理フロー例を説明する図である。
【図5】区域の割付を行う処理全体の概略の処理フローを説明する図である。
【図6】割付要求区分レベルの空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【図7A】割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【図7B】割付要求区分レベルに空区域がある場合における区域探索を具体例により説明する図である。
【図7C】割付要求区分レベルに空区域がない場合における区域探索を具体例により説明する図である。
【図8A】仮割付区域を多層区分し、一次割付区域を得る処理フロー例を説明する図である。
【図8B】仮割付区域を多層区分し、一次割付区域を得る処理を具体例により説明する図である。
【図9】割付要求区分レベルの空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。
【図10A】割付要求区分レベルのサイズを含む空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。
【図10B】割付状態が空候補の仮割付区域を多層区域に区分し、一次割付区域を得る処理フロー例を説明する図である。
【図11A】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る前段の処理フロー例を説明する図である。
【図11B】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る後段の処理フロー例を説明する図である。
【図11C】一次割付区域を多層区分し、割付要求区分の二次割付区域を得る処理を、具体例により説明する図である。
【図12】割付区域を解放し、空区域の連結を試みる処理全体の概略の処理フロー例を説明する図である。
【図13】区分番号により多層区分管理表を検索し、区分番号に対応する区分レベルを求める処理フロー例を説明する図である。
【図14A】一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理フロー例を説明する図である。
【図14B】一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理を、具体例により、説明する図である。
【図15】割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュする処理フロー例を説明する図である。
【図16】区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。
【図17A】一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理フロー例を説明する図である。
【図17B】一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理を、具体例により、説明する図である。
【図17C】区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。
【図18A】本発明の一実施形態における区画管理装置の機能ブロック構成例を説明する図である。
【図18B】本発明の一実施形態における区域割付手段の機能ブロック構成例を説明する図である。
【図18C】本発明の一実施形態における区域解放手段の機能ブロック構成例を説明する図である。
【発明を実施するための形態】
【0020】
以下、本発明の好適な実施の形態について、図面を参照して詳細に説明する。
図2Aは、本発明の一実施形態における区画管理の概念を説明する図である。図2Aを参照して本発明の一実施形態における区画管理の概念を説明するとともに、本発明の区画管理に関する若干の用語の定義を行う。
【0021】
最初に、あらためて区画の定義を行う。本発明において「区画」とは、図1Aを参照して説明したように、予め割り当てられた領域であり、最初に割り当てられる領域である。本発明においては、区画は取得済みであることを前提とする。区画は、本発明においては、記憶領域を要求する要求元に対して割り当てられた物理的あるいは論理的な領域であり、要求元及び割付を実行する主体にはファイルシステムであるとかディスクアロケータであるというような制限はない。また、本発明における区画は、外部記憶装置の記憶領域に限らず、例えば後に図2Cを参照して説明するデータ格納装置308に含まれる各種記憶装置の予め割り当てられた領域とすることができる。
【0022】
さらにあらためて、本発明でいうメモリ領域の定義を行う。メモリ領域は、区画の領域の割付を要求する要求元から要求され、区画管理装置により要求元に対して割り付けられる区画内の領域である。要求元がファイルシステムであれば、ファイルシステムに割り付けられたメモリ領域はファイルシステムによって、ファイルの格納領域として使われることになる。以下の説明においては、要求元としてファイルシステムを例にあげて説明するので、ファイルを割り付けるという表現や、ファイル及びメモリ領域の割付のような表現を用いる。
【0023】
「区域」とは、割り当てられた、あるいは割り付けられた領域である。区画は予め割り当てられた領域であるから、区域の1つであり、区域のうちの特定のものである。
区域を、2のべき乗と割当単位領域の積のサイズを有する複数の区域に分割することを「多層区分」という。また、多層区分された区域を「多層区域」という。なお、以下の説明においては、割当単位領域についての言及は省略し、領域のサイズについて、単に2のn乗のサイズ等の表記を用いる場合がある。また、表記の簡略化のため、例えば図1Aの例示の区画番号196aに格納された値3を区画番号196aと呼ぶように、記憶領域に格納されたあるいは設定された値をその記憶領域の名前で呼ぶことがある。
【0024】
以下、区域についての用語とそれに対応する区画についての用語を対比しながら定義する。
「区分」とは、領域を割り当てる、あるいは領域を分割して割り当てることであり、「割付」ということもある。領域は、区域または区画である。特に、区画のサイズを互いに異なる2のべき乗の和で表したとき該和を構成する各2のべき乗のサイズの領域をそのサイズの順に区画に連続的に割り付けることで区画を区分けすることを「主区分」という。また、主区分により割り付けられた区域を「主区域」という。主区分は、本発明においては、区画に対する初期割付である。以下の説明では、主区域は領域の先頭からサイズの大きいものから順に割り付けられるものとしているが、それとは逆順に、サイズの小さいものから順に割り付けるものとしても本願発明を実施可能であることは、後の説明から当業者には明らかである。
【0025】
図2Aの例示では、区画690は全体のサイズが11であり、サイズが23=8の主区域698、サイズが21=2の主区域692、及びサイズが20=1の主区域691に区分されている。いいかえれば、主区域698、692、691が区画690に初期割付されている。
区分または主区分による区域または主区域の割付サイズである2のべき乗の指数を「区分レベル」という。図2Aに示す主区域698、692、691のそれぞれの区分レベルは3,1,0である。
上記定義された用語により説明すると、本発明の原理である区画管理方法は、区画を、区画の割当単位領域を互いに異なる2のべき乗個割り当てた区域に連続的に区分し、区域を連続的に割り付けたものとして管理する。
【0026】
本発明においては、区画を包含する最小の2のべき乗であるサイズの仮想区画を仮想的に取得する。この仮想区画の仮想的取得を、仮想割付ということがある。図2Aの点線の矢印7160aで示すように、サイズが11の区画690を包含するサイズが16の仮想区画690aが仮想割付される。仮想区画690aの割付が仮想的であることを表すために、仮想区画690aは点線の矩形の枠で表現されている。
そして図に示すように、仮想区画690aには、サイズが16の主区域6916が仮想的に初期割付されている。主区域6916も仮想的に割りつけられたものであるから、ノード6160は、仮想区画690aと同様に、点線の矩形の枠で表現されている。
【0027】
また、図2Aには、上記主区域6916を仮想的に割り付ける主区分に対応するノード6160をルートノードとするツリー構造体790と、ツリー構造体790のノードに対応する割付状態をビットマップに縮退した区域の割付状態を示す割付ビットマップ600が記述されている。
ルートノード6160は、点線の矢印7160で示すように、区分レベル4の主区域6916全体を割り付ける主区分(以下、主区分7160ということがある。)に対応する。ツリーの構造は、図1Bに記載されたツリー構造体580の構造と2分木ツリーであるという点で同様なものである。
【0028】
ルートノード6160内に記載された“16”は、対応する主区域6916のサイズに相当する。また、括弧内の数字は、仮想区画690aを各区分レベルの区域毎に多層区分する個々の区分(区分ユニットということがある。)を識別する区分番号である。最大のサイズの主区域6916に対応する主区分7160の区分番号は1である。なお、以下においては、区分番号について、その区分番号で識別される区分により区分された区域の区分番号ということがある。すなわち、主区分7160の区分番号という表現に変えて、主区域6916の区分番号ということがある。また、ある区分番号の区分ユニットにより区分された区域を、その区分番号の区域ということがある。
【0029】
ルートノード6160にリンク780で接続されたノード680と、ルートノード6160にリンク781で接続されたノード681は、主区域6916を2分割して区分レベル3、サイズが8の区域を割り付ける区分に対応する。それぞれの区分番号は1つ上位の区分レベル4のノードに対応する区分番号の末尾である1に続く2と3である。
ノード680の下位には、リンク740で接続されたサイズ4のノード640と、リンク741で接続されたサイズ4のノード641が存在する。同様に、ノード681の下位には、リンク742で接続されたサイズ4のノード642と、リンク743で接続されたサイズ4のノード643が存在する。これら4つのノードは区分レベル2の区域の区分に対応する。また、これら4つのノードに対応する区分番号は、1つ上位の区分レベルである区分レベル3のノードに対応する区分番号の末尾の番号である3に続く4〜7である。
【0030】
ノード640の下位には、リンク720で接続されたサイズ2のノード620と、リンク721で接続されたサイズ2のノード621が存在する。同様に、ノード641の下位には、リンク722で接続されたサイズ2のノード622と、リンク723で接続されたサイズ2のノード623が存在する。また、ノード642の下位には、リンク724で接続されたサイズ2のノード624と、リンク725で接続されたサイズ2のノード625が存在する。さらに、ノード643の下位には、リンク726で接続されたサイズ2のノード626と、リンク727で接続されたサイズ2のノード627が存在する。これら8つのノードは区分レベル1の区域の区分に対応する。また、これら8つのノードに対応する区分番号は、1つ上位の区分レベルである区分レベル2のノードに対応する区分番号の末尾の番号である7に続く8〜15である。
【0031】
ノード620の下位には、リンク710で接続されたサイズ1のノード610と、リンク711で接続されたサイズ1のノード611が存在する。同様に、ノード621の下位には、リンク712で接続されたサイズ1のノード612と、リンク713で接続されたサイズ1のノード613が存在し、ノード622の下位には、リンク714で接続されたサイズ1のノード614と、リンク715で接続されたサイズ1のノード615が存在し、ノード623の下位には、リンク716で接続されたサイズ1のノード616と、リンク717で接続されたサイズ1のノード617が存在する。さらに、ノード624の下位にはリンク718で接続されたサイズ1のノード618と、リンク719で接続されたサイズ1のノード619が存在し、ノード625の下位には、リンク720で接続されたサイズ1のノード6110と、リンク721で接続されたサイズ1のノード6111が存在し、ノード626の下位には、リンク722で接続されたサイズ1のノード6112と、リンク723で接続されたサイズ1のノード6113が存在し、ノード626の下位には、リンク724で接続されたサイズ1のノード6114と、リンク725で接続されたサイズ1のノード6115が存在する。
これら16のノードは区分レベル0の区域の区分に対応する。また、これら16のノードに対応する区分番号は、1つ上位の区分レベルである区分レベル1のノードに対応する区分番号の末尾の番号である15に続く、16〜31である。
【0032】
ツリー構造体790のうち、ルートノード6160と同様に仮想的に割り付けられた区域に相当するノード681、ノード642、ノード643、ノード625、ノード626、ノード627、ノード6111、ノード6112、ノード6113、ノード6114、ノード6115は、ルートノード6160と同様に、点線の矩形の枠で表現されている。
また、主区域698、主区域692及び主区域691にそれぞれ対応するノード680、ノード624及びノード6110は、太線の矩形の枠で表現されている。
【0033】
次に、本発明の一実施の形態による区分番号の性質について説明する。
まず、記憶管理の対象となる区画のサイズが与えられると、そのサイズに応じて仮想区画が行われ、仮想区画に対して区分レベル毎に多層区分が行われる。図2Aの例では、サイズが11の区画690が与えられると、サイズが16の仮想区画690aが仮想的に取得され、仮想区画690aに対応したツリー構造体790を生成することができる。そして、ツリー構造体の最上位の区分レベルのノードから下位のノードに向かって、同一区分レベル内では左側を若番として、図2Aに示すように一意に区分番号を付与することができる。
【0034】
そして、区分レベル毎の区分番号を管理することにより、区分番号が与えられると、その区分番号で識別される区分ユニットによって区分けされた区域のサイズである区分レベルを求めることができ、さらに、その区分レベルでの先頭の区分番号と当該区分番号との差に基づいて、前記区分ユニットによる割付対象となる区域の区画上の位置を求めることができる。
【0035】
図2Aに示すビットマップ600は、点線の矢印で示すように、ツリー構造体780の各ノードに対応する割付状態をビットマップに縮退したビット値を持つものである。図2Aの例示では、各ノードに2ビットの値が対応している。ビットマップ600のビット値については後に詳細に説明する。ここでは、図2Aの例示について、以下に簡単に説明する。
【0036】
割付ビットマップ600のビット値は、各区分番号を有するノードに対応する区域の初期割付終了時の割付状態を表している。符号6016で示す区分レベル4のビット位置であって、区分番号609の値が1であるビット位置のビット値11は、区分番号1の区分による区域は仮想的に割り付けられた区域(以下、仮想区域ということがある。)であることを示すものである。なお、仮想区域は管理する必要がないので、後の説明では、仮想区域の管理情報は持たないものとし、仮想区域以外の区域(以下、単に区域ということがある。また、実体区域ということがある。)の状態の管理情報として、ビット値11により、使用中を表している。
符号608で示す区分レベル3のビット位置であって、区分番号609の値が2であるビット位置のビット値00は、区分番号2の区分による区域が空であるのを示すものである。また、符号608で示す区分レベル3のビット位置であって、区分番号609の値が3であるビット位置のビット値11は、該当する区域が仮想区域であるのを示すものである。同様に、符号604で示す区分レベル2のビット位置であって、区分番号4、5のビット値10は、該当する区域の割付状態が保留であることを示している。
符号604で示す区分レベル2のビット位置であって、区分番号6、7のビット値11は、該当する区域が仮想区域であることを示している。
符号602で示す区分レベル1の区分番号8〜11をビット位置とするビット値は、該当する区域の割付状態が保留であり、区分番号12をビット位置とするビット値は、該当する区域の割付状態が空であることを示している。また、区分番号13〜15をビット位置とするビット値は、該当する区域が仮想区域であることを示している。
符号601で示す区分レベル0の区分番号16〜25をビット位置とするビット値は、該当する区域の割付状態が保留であり、区分番号26をビット位置とするビット値は、該当する区域の割付状態が空であることを示している。また、区分番号27〜31をビット位置とするビット値は、該当する区域が仮想区域であることを示している。
【0037】
割付状態の空と保留の区別は、割付要求のサイズの空領域を割り付けるときの優先順位に関係する。つまり、実質的に空状態の領域であっても、割付状態が空のものから使用されるようにする。この詳細については、後に説明する。
【0038】
図2Bは、本発明の一実施形態に係るアロケーションシステムのソフトウェア及びハードウェア環境例を説明する図である。アロケーションシステム100は初期化部101と多層区分管理部102から構成される。初期化及び多層区分管理については、後に詳細に説明する。
【0039】
初期化部101は、例えばディスクアロケータあるいはファイルシステムの初期化部のような初期化プログラム201からの区画サイズを含む初期化要求を受け付け、データ格納装置308を構成する、例えば主記憶装置305、外部記憶装置306、通信装置を介してアクセスする遠方の記憶装置307等(以下、単に記憶装置ということがある。)に割り当てられている区画の多層区分管理情報の初期化を行う。
【0040】
多層区分管理部102は、ファイルシステム202からの割付要求サイズを含む区域の割付要求により、多層区分管理情報の書込を行うことで区画の区分、すなわち区域の分割割付を実行し、書き込んだ多層区分管理情報を読み出して割付区分番号を含む割付結果をファイルシステム202に返す。
【0041】
ファイルシステム202は、アプリケーションプログラム/OSなどのファイルを利用するシステム200からのファイル操作要求を受け付け、そのファイル操作要求がファイルへの区域の割付を要するものであれば、上述のアロケーションシステム100の多層区分管理部102に割付要求サイズを含む割付要求を行って割付結果を受け取り、割付区分番号としてアロケーションシステム100の多層区分管理部から返された区分番号を指定してファイル操作システム203に対してファイルの操作要求を行う。ファイル操作システム203は指定された区分番号により多層区分管理部102から割り付けられた区域のアドレスを取得して記憶装置に格納されたファイルに対するファイル操作としてのデータの書込あるいはデータの読出を実行して操作結果をファイルシステム202に返す。ファイルシステム202はファイル操作システム203から返された操作結果をアプリケーションプログラム/OSなどのファイルを利用するシステム200にファイル操作応答として返す。
【0042】
ファイルシステム202及びファイル操作システム203が既存のものであっても、本発明によるアロケーションシステム100とのインターフェースを調整することにより、本発明によるアロケーションシステム100が使用可能である。また、アプリケーションプログラム/OSなどのファイルを利用するシステム200はいうに及ばず、初期化プログラム201も同様に既存のものを適用可能である。したがって、これらのプログラム、システムについての説明は省略する。
【0043】
図2Cは、本発明の一実施形態におけるハードウェア構成例を説明する図である。
本発明の一実施形態による記憶装置の区画管理及びファイルへの区域の割付及び解放処理は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。データ格納装置308については、後に説明する区分レベルごとの区域を多層的に管理する多層区分管理表309と区分ごとの割付状態を保持する多層区分割付表310及び管理対象である区画311を含む。図2Cに示すように、データ格納装置308は、主記憶装置305または外部記憶装置306、あるいはそれらの組み合わせで実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
【0044】
すなわち、主記憶装置305をデータ処理装置301内のものとすることもできるし、多層区分割付表310及び多層区分管理表309は主記憶装置305に持ち、区画311は外部記憶装置306に割り当てられるのが多くの場合と考えられるが、区画が、主記憶装置305に割り当てられる場合でも本発明が適用可能であることは、後の説明から明らかである。
図2Cの例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。そして、以下の説明においては、一時記憶領域に格納されるあるいは設定されるデータの名前でその一時記憶領域の名前とすることがあり、逆に、一時記憶領域の名前により、その一時記憶領域の格納されるあるいは設定されるデータの名前とすることがある。
【0045】
次に、図3、図4A〜図4Cを参照して、本発明の一実施形態における多層区分管理情報の初期化について説明する。なお、多層区分管理情報の初期化を区画の初期化と表記する場合もある。
【0046】
図3は、区画サイズに対応した区画の初期化状態例を示す説明図である。
先に図2Bの説明において述べたように、区画の初期化は、ファイルシステムに区画が割りつけられたのち、初期化プログラムからのその区画の区画サイズを含む初期化要求を受け付けることにより、アロケーションシステムの初期化部により行われる。図3に示す区画サイズ120には、そのファイルシステムに割り付けられ、区画311の初期化要求に含まれる区画サイズ“52”が2進数の形式で表示されており、52=25+24+22であるから、2ビット目、4ビット目及び5ビット目が“1”である。
【0047】
この初期化プログラムから受信された区画サイズに応じて区画構成主区分表130が作成される。区画構成主区分表130は、その添字0〜7で示すように区分レベルに対応する1ビットからなるエントリから構成されており、図3の例示では、区分レベル0から区画構成主区分表の最上位の区分レベル7に対応する8つのエントリを有している。矢印122,124及び125で示すように、区画サイズを2進数形式で表示したときのビット値に応じて、対応する区分レベルのエントリのビット値が設定されている。
【0048】
図3に示す区画311には、区画構成主区分表130からの矢印135、134及び132により対応関係が示されているように、区画構成主区分表130のビット値が“1”であるエントリに対応する区分レベルのサイズの主区域185、184及び182が初期割付されている。
また、区画311を包含する最小の2のべき乗のサイズの仮想区画311aが仮想的に取得され、仮想区画311aには、区分レベル6の区域が仮想的に割り付けられる。そして、図3には示していないが、図2Aに記載されている主区域6916と同様に仮想区域311a全体に区分レベル6の主区域が仮想的に割り付けられている。
なお、主区域に対応する区分レベルを主区分レベルということもある。すなわち, 区画構成主区分表130は、ビット値1で主区分レベルを表示するものと言える。
【0049】
多層区分管理表309は、図3に示すように、主区分番号管理表309a、末尾番号管理表309b、及び最上位区分レベル管理表309cを含む。主区分番号管理表309aと末尾番号管理表309bは、その添字0〜7で示すように、区画構成主区分表130と同様に区分レベルに対応するエントリから構成されている。主区分番号管理表309aのエントリは主区分番号114で構成され、末尾番号管理表309bのエントリは、末尾番号116で構成される。各エントリの値は、区画構成主区分表130の値に基づいて、初期化処理において設定される。最上位区分レベル管理表309cには、仮想区画311aのサイズに相当する区分レベルである最上位区分レベル115が設定される。図3に示す例では、仮想区画311aのサイズに相当する6が設定されている。
【0050】
主区分番号114には、区画311内の領域の割付状態を管理する多層区分割付表310が、ある区分レベルの主区分に対応するエントリを有するとき、その区分レベルのエントリにその主区分に対応する区分番号を格納し、ある区分レベルでは多層区分割付表310が主区分に対応するエントリを有さないとき、その区分レベルのエントリに無意の区分番号として“−1”を格納する。図3の例では、主区分番号114の各エントリの値は、上位の区分レベルから、−1,−1,2,6,−1,28,−1,−1である。
なお、先に図2Aに示すビットマップ600の説明において述べたことから理解されるように、多層区分割付表には仮想区域に対応するエントリは設けられておらず、実体区域に対応するエントリだけが設けられている。
【0051】
末尾番号116は、多層区分割付表310の各エントリに一意に対応付けられた区分番号のうち各区分レベルの区分割付表の末尾のエントリに対応付けられた区分番号であり、図3に例示された末尾番号116の各エントリの値は、上位の区分レベルから、−1,−1,2,6,13,28,57,115である。これらの値の設定については、後に図4A〜図4Cを参照して詳細に説明する。
【0052】
多層区分割付表310は、先に述べたとおり区画311内の領域の割付状態を管理するためのものである。図2Aに示す割付ビットマップ600と類似のものであり、区分番号は割付ビットマップ600と同様に仮想区域を含めて番号付けされているが、状態管理情報を保持するエントリである割付状態170は、仮想区域に対しては設けられていない。多層区分割付表310は、初期化処理において、多層区分管理表309の値に基づいて生成され、初期設定される。
【0053】
多層区分割付表310は、図の点線の矢印140〜145に示すように、最下位の区分レベルから区画構成主区分表130のビット値が1である最上位の区分レベルまでの各区分レベルに対応した区分割付表160〜165から構成されている。
各区分割付表のエントリは、そのエントリに該当する区分番号の区域の2ビットの割付状態170で構成されている。割付状態のビット値“00”、“01”、“10”、“11”は、それぞれ各区分番号の区域の「空」、「空候補」、「保留」、「使用中」の状態に対応する。これらの状態の意味は後に詳細に説明をするが、割付状態170に2ビットを用いることにより、「空候補」を識別することが可能となり、記憶領域を一層無駄なく利用することができる。
【0054】
また、区分割付表160〜165の各エントリは、図3の矢印175、174、172に示すように主区分、すなわち主区域に対応するものと、1つ上位の区分レベルの区域を2つに分割する区分、すなわち1つ上位の区分レベルの区域を2つに分割した区域に対応するものとがある。
【0055】
多層区分割付表310の各エントリには、最上位区分レベル管理表309cに設定された最上位区分レベルである区分レベル6の仮想的な区域からその区分レベル6の仮想的な区域を順次2分割して得られる区分レベル0の区域の末尾の区域まで順次付された1からの連続番号のうち、実体区域に付された番号である区分番号171を対応付けることができる。末尾番号管理表309bの末尾番号116は、該当する区分レベルにおける区分番号の末尾番号である。
【0056】
先に図2Aを参照して説明したことから理解されるように、区画サイズ、すなわち区画構成主区分表が与えられると、実体区域に対する多層区分割付表の構成は一意に決定し、区分番号で識別される区分ユニットにより区分けされる区域の区画内の位置とサイズも一意に決定される。
多層区分割付表310の初期状態においては、矢印175、174、172に示すように、主区域と対応するエントリの割付状態170には空を表示する“00”が、その他のエントリの割付状態には保留を表示する“10”が初期設定される。したがって、割付状態が空の区域についてみると、区画311には、主区域185、184、182が分割割付されており、多層区分割付表310で管理される区域のうちで空の区域を設定するという意味で、区画311は初期割付される。多層区分割付表310の初期設定については、後に図4A〜図4Cを参照して詳細に説明する。
【0057】
なお、上述の区分番号171の番号の付与方法は単なる例示であり、後述のファイルの割付管理が可能なものであれば、例えば先頭の番号を1ではなく0とする、番号の付与順を逆順にする等、種々変形が可能であることは、当業者にとって自明である。
以上説明したとおり、本発明によれば、ファイルシステムに割り当てられた区画311は、多層区分割付表310を用いて、同一の領域を区分レベルに応じた割付状態170により、多層的に管理される。
【0058】
多層区分割付表310を用いた区域の割付は、割付要求のサイズに応じて、ある区分レベルの空区域あるいは異なる区分レベルの連続した空区域の区分番号を多層区分割付表の探索により取得し、その区分番号を使用中にすることにより行われる。空区域がない場合は、空候補の区域を探索する。
図2Bに示すように、ファイルの割付要求をしたファイルシステムには使用中とした区分番号が割付区分番号としてアロケーションシステムから返される。ファイル操作システムはこの区分番号を指定したファイル操作要求を受けると多層区分管理部からこの区分番号の区域のアドレス情報を受信する。多層区分管理部は区分番号により多層区分管理表309を探索し、区分番号に対応する区域の区分レベルとレベル内番号を取得し、それによりファイルに割り付けられた区域の区画内の位置とサイズを知ることができる。これらの処理については後に詳細に説明する。
【0059】
次に、図4A、図4B及び図4Cを参照して区画を初期化する処理を説明する。ここで区画を初期化する処理は、具体的には例えば図3に示す多層区分管理表309と多層区分割付表310の値を初期設定する処理である。以下では、例として多層区分管理表309と多層区分割付表310を参照して説明する。
【0060】
図4Aは、区画を初期化する前段の処理フロー例を説明する図である。
図4Aに示すように、まず、ステップS401で、区画の初期化を要求するプログラムから受け取った区画サイズから、区画サイズを2進数形式で表示したときのビット値に応じて区分レベルのエントリのビット値が設定された区画構成主区分表を作成する。そして、ステップS402で、主区分レベルに区画構成主区分表の最上位の区分レベルを設定し、ステップS404に進む。
【0061】
図3に示す例では、区画構成主区分表130が作成され、その最上位の区分レベルは7であるので、主区分レベルには7が設定される。上述のステップS402における、区画構成主区分表の最上位の区分レベルが設定される主区分レベルは、先に述べた図示しない一時的記憶領域の1つの例である。
【0062】
ステップS404では、主区分レベルの指す区画構成主区分表のビット値を取り出し、ステップS405で、その取り出したビット値が有意、すなわち値1であるか判定する。
上記取り出したビット値が1でなければステップS406に分岐し、主区分レベルの指す主区分番号管理表に値“−1”を設定し、次にステップS407で、主区分レベルの指す末尾番号管理表に値“−1”を設定し、ステップS408で、主区分レベルを1つ減らしてステップS404に戻る。
上記ステップS404〜ステップS408のループ処理を、ステップS405で初めて区画構成主区分表のビット値が有意であると判定されるまで繰り返す。図3に示す例では、主区分レベルが5に設定されるまでは区画構成主区分表のビット値は0であるから、このループ処理により、主区分番号管理表309aと末尾番号管理表309bの区分レベル7と区分レベル6にはともに値“−1”が設定される。
【0063】
一方、上記取り出したビット値が1であれば、ステップS408aに進み、区画構成主区分表に設定されたビット値が1のエントリは1つ、すなわち区画構成主区分表はシングルビット構成であるか判定し、シングルビット構成であれば、ステップS408bで、最上位区分レベルに、主区分レベルを設定して図4Bに示すステップS409に進み、シングルビット構成でなければ、すなわちマルチビット構成であれば、ステップS408cで、最上位区分レベルに、主区分レベルに1を加えた値を設定して、図4Bに示すステップS409に進む。図3の例示においては、マルチビット構成であり、最初に区画構成主区分表のビット値が1になる主区分レベルが5であることから、最上位区分レベルには6が設定される。この最上位区分の設定は、仮想区画を取得し、そこに仮想的に主区域を割り付けることに相当する。
【0064】
図4Bは、区画を初期化する後段の処理フロー例を説明する図である。
ステップS409では、先頭番号に、最上位区分レベルより主区分レベルを減じた値を指数とする2のべき乗数を設定し、ステップS410で、区分数に値“1”を設定してステップS411に進む。上述のステップS409の先頭番号及びステップS410の区分数も、先に述べた図示しない一時的記憶領域の例である。それぞれ、データの名前を一時的記憶領域の名前としている。図3の例示では、先頭番号には2の(6−5)乗である2が設定される。
ステップS411では、主区分番号に、先頭番号に区分数を加えて1を減じた値を設定する。図3の例示では、ステップS411の最初の処理においては、先頭番号にはステップS409の処理により2が設定され、区分数にはステップS410の処理により1が設定されているので、主区分番号には2が設定される。
【0065】
次にステップS412において、主区分レベルの指す主区分番号管理表に、主区分番号を設定する。図3の例示におけるステップS412の最初の処理では、主区分番号管理表309aの区分レベル5に2が設定される。
【0066】
次にステップS414に進み、主区分レベルの指す区分レベルの多層区分割付表の割付状態を初期化する。ステップS414の処理の詳細は、後に図4Cを参照して説明する。
【0067】
次にステップS416において、主区分レベルは最下位の区分レベルか判定し、最下位の区分レベルであれば処理を終了し、最下位の区分レベルでなければステップS417に分岐する。
ステップS417では、主区分レベルを1つ減らし、ステップS418で、先頭番号を2倍にし、ステップS419で区分数を2倍にしてステップS420に進む。
【0068】
ステップS420では、主区分レベルの指す区分レベルの区画構成主区分表のビット値を取り出し、ステップS421で、その取り出したビット値が有意、すなわち値1であるか判定する。ステップS420で取り出した主区分レベルの指す区画構成主区分表のビット値が有意でなければステップS422に分岐して主区分番号に値“−1”を設定してステップS412に戻り、有意であれば、ステップS423に分岐して、区分数に1を加えてステップS411に戻る。
上記ステップS411〜ステップS423のループ処理を、ステップS416で主区分レベルは最下位の区分レベルであると判定されるまで繰り返す。その際、主区分レベルの指す区分レベルの区画構成主区分表のビットが無為ビット、すなわちそのビット値が“0”であれば、上述のとおり、その区分レベルの主区分番号には値“−1”を設定する。
【0069】
図3に示す例では、主区分番号管理表309aの区分レベル4には、ステップS418の最初の処理において先頭番号に4が設定され、区分数は、ステップS419で2、ステップS423で3とされることから、ステップS411において6が設定される。また、主区分番号管理表309aの区分レベル3には、ステップS422の処理において、−1が設定される。以下同様に、主区分番号管理表309aの区分レベル2、1、0には、それぞれ28、−1、−1が設定される。
【0070】
図4Cは、本発明の一実施形態における、多層区分割付表を区分レベル毎に初期化する処理フロー例を説明する図であり、図4Bに示すステップS414の処理の詳細を説明する図である。図4Cに例示する処理フローにより、多層区分割付表を構成する最下位の区分レベルから区画構成主区分表のビット値が1である最上位の区分レベルまでの各区分レベルに対応した区分割付表を初期化する。図3の例では、区分割付表160〜165それぞれの値を図示した値に設定する処理である。図4Bに示すステップS411〜ステップS423のループ処理を実行する毎に、区分割付表165から区分割付表160までの区分割付表の初期化が行われ、多層区分割付表310の初期化が完了する。
【0071】
図4Cに示すように、ステップS431で区分番号に先頭番号を設定し、ステップS432で末尾番号に先頭番号に区分数を加えて1を減じた値を設定する。さらにステップS433において、主区分レベルの指す末尾番号管理表に、末尾番号を設定し、ステップS434に進む。
ステップS431及びステップS432での先頭番号は、図4Bに示すステップS409あるいはステップS418で設定されたものである。また、ステップS432での区分数は、図4Bに示すステップS410もしくはステップS419あるいはステップS423で設定されたものである。
図3の例示では、ステップS431〜ステップS433の処理が実行されるときの主区分レベルは5であり、区分番号には図4Bに示すステップS409で設定された2が設定され、末尾番号には、先頭番号である2に図4Bに示すステップS410で設定された区分数である1を加え、そこから1を減じた2が設定される。
【0072】
ステップS434では、区分番号と末尾番号は等しいか判定する。区分番号と末尾番号が等しくなければ、ステップS435で、区分番号の指す多層区分割付表の割付状態に保留を設定し、ステップS436で、区分番号を1つ増やしてステップS434に戻り、区分番号と末尾番号は等しいかの判定を繰り返す。このステップS434〜ステップS436のループ処理は、処理中の区分レベルに対応した区分割付表の先頭の区分番号から末尾番号の1つ前の区分番号まで、区分番号の指す区分割付表の割付状態に保留を設定する処理である。
【0073】
一方、ステップS434において、区分番号と末尾番号は等しいと判定されると、ステップS437に進み、主区分番号は値“−1”であるか判定する。ここでの主区分番号は、図4Bに示すステップS411あるいはステップS422で設定されたものである。
【0074】
ステップS437で、主区分番号は値“−1”であると判定されると、ステップS438で区分番号の指す多層区分割付表の割付状態に保留を設定して処理を終了し、ステップS437で、主区分番号は値“−1”ではないと判定されると、ステップS439で区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。
このステップS438とステップS439の処理は、処理中の区分レベルに対応した区分割付表の末尾の区分番号の割付状態を設定する処理である。図3に例示するように、主区域に対応する区分ユニットの区分番号は、その主区域の区分レベルに対応する区分番号の末尾であり、その末尾の区分番号の区分割付表の割付状態は、区分番号2、6、28の割付状態に見られるように“00”、すなわち空である。そのほかの多層区分割付表の割付状態は、全て“10”、すなわち保留である。
【0075】
以上詳細に説明した区画の初期化において、区域の割付状態に「空」のほかに「保留」を導入したのは、連続した大きな空の区域の確保を容易にするためである。例えば図3の例で、ファイルシステムからサイズが16の区域の割付を要求された場合、空状態の区域である主区域の中から主区域184、すなわち区分番号6の区域を選択することができる。もし、保留という割付状態がないと、区分番号4、5の区域も空となり、すると、将来サイズが16より大きい区域の割付要求が発生する場合に連続する区域を割り付けられるように、区分番号4、5、6の中から区分番号6の区域を選択する手段が区域を有効に利用するために必要になる。しかしその手段は割付状態に「保留」を導入するよりも複雑になる。
【0076】
なお、本実施の形態においては、「保留」という状態を導入し、それを2ビットの値“10”で表すが、上述の説明のとおり、区域の割付状態を保留に設定するのはその区域を割付の対象から除くためである。したがって、上述のステップS438において、区分番号の指す多層区分割付表の割付状態に、その区分番号の区域への割付を行わないことを示す空以外の状態を設定することもできる。
【0077】
次に、図5〜図11Cを参照して、本発明の一実施形態における多層区分管理情報を用いた区域の割付について説明する。先に図2Bの説明において述べたように、区域の割付は、区画の初期化の後、ファイルシステムからの割付要求サイズを含む割付要求を受け付けることにより、アロケーションシステムの多層区分管理部により行われる。
【0078】
図5は、区域の割付を行う処理全体の概略の処理フロー例を説明する図である。
まず、ステップS501で、割付要求サイズを設定し、ステップS502で、割付要求区分レベルとして、割付要求サイズを内包する最小の2のべき乗サイズの指数を設定する。例えば、割付要求サイズが11(2進数表示で“01011”)であれば、割付要求区分レベルは、16(2進数で「10000」)=24の指数である4が設定される。また割付要求サイズが2のべき乗である8であれば、その指数である3が設定される。
【0079】
次にステップS503で、多層区分割付表を参照して、割付要求区分レベルの区域のうち、その区域の割付状態が「空」である空区域を探索し、空区域の区分番号を取得する。ステップS503の処理の詳細については、後に図6を参照して説明する。
【0080】
ステップS504で、空状態の区域の区分番号を取得することができたかを判定し、取得できた場合はステップS507に進み、取得できなかった場合はステップS505に進む。
ステップS505では、多層区分割付表を参照して割付要求区分レベルの区域のうち割付状態が「空候補」である空候補区域を探索し、空候補区域の区分番号を取得する。ステップS505の処理の詳細については、後に図9を参照して説明する。
ステップS506で、空候補状態の区域を取得することができたか否かを判定し、取得できた場合はステップS507に移行し、取得できなかった場合は取得失敗として区域割付処理を終了する。
【0081】
ステップS507では、ステップS503の処理で取得した区分番号の区分レベルに対応する区域のサイズがステップS501で設定した割付要求サイズより大きいか判定する。割付要求サイズが2のべき乗と等しくない、すなわち2進数形式で表示したとき有意のビット位置が複数(この場合の割付要求をマルチビット要求といい、一方、割付要求が2のべき乗に等しいとき、シングルビット要求ということがある。)であれば、取得される区域のサイズは割付要求サイズより大きい。したがって、ステップS507の判定は、割付要求がマルチビット要求であるかシングルビット要求であるかを判定するものである。
【0082】
ステップS507での判定がシングルビット要求であればステップS509に進み、ステップS507での判定がマルチビット要求であればステップS508に分岐する。ステップS508では、取得した区分番号に対応する一次割付区域を多層区域に区分し、割付要求区分の二次割付区域を得てステップS509に進む。なお、二次割付で得られる領域は、複数の区域からなる多層区域であるが、以下ではその領域を二次割付区域という。
ステップS508の処理の詳細については、後に図11A〜図11Cを参照して説明する。また、一次割付及び二次割付についても後に詳細に説明する。
【0083】
ステップS509では、割付結果として、割付区分番号に一次割付された割付区域の区分番号を設定し、処理を終了する。ここで設定された割付区分番号が、図2Aに示すように、割付結果としてファイルシステムに返される。アロケーションシステムの多層区分管理部は、ファイルシステムに割り付けられた区画の先頭位置から、割付要求されてファイルに割り付けた領域の先頭位置までの相対アドレスを、そのファイルに対応する割付区分番号を用いて多層区分管理表から求めることができる。
【0084】
次に、図5のステップS503、ステップS505及びステップS508の処理の詳細を説明する。
図6は、図5のステップS503の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルの空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【0085】
図に示すように、ステップS601で、多層区分割付表より、割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する。本発明の一実施形態の多層区分管理によれば、割付要求区分レベルの空区域を見つけだすことができない場合でも、割付区分レベルより大きい区分レベルの空区域が存在すればそれを見つけることができる。例えば図3に示す例において、割付要求区分レベルが3の場合、区分レベル3の区分割付表163に示すとおり、区分レベル3の区域には空はない。しかし、区分レベル2には区分番号6の空区域が存在し、この区分番号6を取得する。このように、割付区分レベルより大きい区分レベルの空区域を割り付けることを、仮割付ということがある。ステップS601の詳細については、後に図7A〜図7Cを参照して説明する。
【0086】
次にステップS602で、ステップS601の処理において区分番号は取得できたか判定し、取得できていなければ取得失敗を返して処理を終了し、取得できていればステップS603に進む。
ステップS603では、ステップS601の処理で取得した区分番号に係る区分レベル(取得した区分レベル)と割付要求区分レベルが等しいか判定する。この判定は、仮割付が行われたか否かの判定に相当する。取得した区分レベルと割付要求区分レベルが等しければ、取得成功を返して処理を終了し、取得した区分レベルと割付要求区分レベルが等しくない、すなわち仮割付が行われた場合はステップS604に分岐する。
【0087】
ステップS604では、仮割付された仮割付区域を多層区域に区分し、割付要求区分レベルの区分番号の一次割付区域を得る。すなわち、一次割付として割付要求区分レベルのサイズの区域を取得し、その区分番号を取得して、取得成功を返して処理を終了する。ステップS604の詳細は、後に図8A及び図8Bを参照して説明する。
【0088】
図7Aは、図6のステップS601の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルのサイズを含む空区域を探索し、空区域の区分番号を取得する処理フロー例を説明する図である。
【0089】
図に示すようにステップS701において、区分レベルに、割付要求区分レベルを設定する。ここで割付要求区分レベルの値は、図5のステップS502で設定されたものである。
次に、ステップS702において、先頭番号に、最上位区分レベルより区分レベルを減じた値を指数とする2のべき乗数を設定し、該先頭番号を、ステップS703aで、区分番号に設定する。そして、ステップS703bで、末尾番号管理表より、現在処理中である区分レベルが指す末尾番号を取り出す。
【0090】
次にステップS704で、区分番号に設定された値の指す多層区分割付表の割付状態を読み出す。そして、ステップS705で、読み出した割付状態は空であるかを判定する。ステップS705の判定において、割付状態が空であると判定されると、ステップS710に進む。
【0091】
一方、ステップS705の判定において、割付状態は空ではないと判定されると、ステップS706に分岐する。そして、ステップS706で、区分番号とステップS703bで取り出した末尾番号とが等しいかを判定する。区分番号と末尾番号とが等しくない場合は、ステップS707に分岐し、区分番号を1加算してステップS704に戻る。以降は同一区分レベル内において区分番号を1ずつ加算してゆき、空状態の区域を検索していく。
【0092】
ステップS706において、区分番号と末尾番号が等しいと判定されると、ステップS708に進み、区分レベルは、区画構成主区分表の有意ビットが存在する最上位の区分レベルかを判定する。この判定は、ステップS702で設定された先頭番号が1あるいは2であるかを判定することにより、行うことができる。ステップS702で設定された先頭番号が1あるいは2である場合、区画構成主区分表がシングルビット構成であってもマルチビット構成であっても、有意ビットが存在する最上位の区分レベルまでの空状態の区域の探索は終了しているので、取得失敗を返して処理を終了する。
ステップS708において区分レベルが有意ビットが存在する最上位の区分レベルでないと判定された場合(区分レベルが有意ビットが存在する最上位の区分レベルよりも下位の区分レベルである場合)は、ステップS709に進み、区分レベルを1加算し、ステップS709aに進んで、先頭番号に、先頭番号を2で割った商を設定してステップS703aに戻る。
【0093】
ステップS702に戻ると、上記の処理を繰り返し、1つずつ上位の区分レベルについての多層区分割付表の割付状態を探索していく。探索の結果空状態の区域が得られたときは、ステップS710に進む。
【0094】
ステップS710では、区分番号に設定された値の指す多層区分割付表の割付状態を使用中に設定して処理を終了する。図7Aの処理結果としては、一時記憶領域である区分番号と区分レベルにそれぞれ設定された値と取得成功あるいは取得失敗を示すデータが探索結果として出力される。
【0095】
図7B及び図7Cは、図3に示す多層区分管理表310を参照して図7Aに示す空区域の探索処理を具体例により説明する図である。
図7Bに示す例は割付要求がマルチビット要求であって割付要求区分レベルで空区域が探索される例である。図に示すように、割付要求サイズ220の1ビット目(区分レベル1)と3ビット目(区分レベル3)にビット値1が設定されている。したがって、割付要求区分レベル234には、点線の矢印224で示すように、区分レベル3の上位の区分レベル4が設定されている。ここまでの設定は、図5のステップS501とステップS502の処理で行われる。
【0096】
次に図の実線の矢印で示す区分レベル4の割付要求240により、多層区分割付表310の、符号164aを付した割付前の区分レベル4の区分割付表の空探索244が行われる。図の例では区分番号171が4と5の割付状態が“11”で使用中であり、区分番号が6の割付状態が“00”で空である。したがって、図の実線の矢印で示すように空区域の取得274aが行われ、符号164bを付した割付後の区分レベル4の区分割付表に示すように、区分番号171が6の割付状態に“11”が設定され、使用中であることが表示される。その結果、図の矢印274に対応を示すように、区画311には、区分レベルが4で区分番号は6の区域が一次割付区域280として割り付けられる。
上述の一次割付区域280の割付は、図7Aに示すステップS704〜ステップS707のループ処理とステップS710の処理により実行される。
【0097】
次に図7Cに示す例により割付要求がシングルビット要求であって割付要求区分レベルでは空区域が探索できない場合を説明する。図7Cには割付要求サイズ220は記載していないが、点線の矢印で示す割付要求241aが割付要求区分レベル1のものであるから、割付要求は1ビット目のみが1のシングルビット要求である。
【0098】
割付要求区分レベルでは空区域が探索できない場合は、図7Aに示すフローでは、ステップS706でステップS708に分岐し、ステップS709を経由してステップS702の戻るループ処理を、上位の区分レベルにおいて空区域を見つけるまで繰り返すことになる。
【0099】
この繰り返し処理に対応するのが、図7Cに示す、下位の区分レベル(図7Cにおいては区分レベル1)から順次上位の区分レベルの区分割付表を参照していき、探索した区分レベル内に空状態の区域がない場合に更に上位の区分レベルを探索していく処理である。区分レベル1から順に各区分レベルの区域について先頭番号から順に空状態を探索してゆく。
【0100】
まず、図の点線の矢印241aで示す割付要求区分レベルである区分レベル1の空区域の探索が要求され、多層区分割付表310のうち、区分レベル1の区分割付表161の割付状態を区分番号の昇順に先頭番号である区分番号32から末尾番号である区分番号57まで空状態を探索(図7Cの矢印241b参照)してゆく。
【0101】
図に示す例においては、区分番号が末尾番号である57の区域まで探索しても空状態の区域がないので、図の点線の矢印242aで示す区分レベルを1加算した上位区分である区分レベル2の空区域の探索が要求される。そして、区分レベル2の区分割付表162の割付状態を区分番号の昇順に先頭番号である区分番号16から末尾番号である区分番号28まで空状態を探索(図7Cの矢印242b参照)してゆく。
【0102】
区分番号が末尾番号である28の区域まで探索しても空状態の区域がないので、区分レベルを1加算して上位区分である区分レベル3の空状態の探索が要求される(図7Cの矢印243a参照)。同様に区分レベル3の区分割付表163についても先頭番号である区分番号8の区域から末尾番号である区分番号13の区域までの割付状態を順次探索(図7Cの矢印243b参照)してゆくが、空区域が得られないため、区分レベルを1加算して上位区分である区分レベル4の空区域探索が要求される(図7Cの244a参照)。
【0103】
図7Cの例示では、符号164aを付した割付前の区分レベル4の区分割付表の空区域の探索(図7Cの244b参照)の結果、区分番号が5の区域が、割付状態が“00”の空区域として得られ、図7Cの矢印で示す空取得244cに対応を示すように、符号164bを付した割付後の区分レベル4の区分割付表の区分番号5の割付状態が、使用中を表示する“11”に変更される。すなわち、矢印244dで示すように、区分番号5の区域が仮割付され、仮割付区域280aとして得られる。
【0104】
なお、空区域の探索処理については、上記の区分番号を昇順に探索する方法に限定されるものではなく、任意の探索アルゴリズムを採用してもよい。
以上図7A〜図7Cを参照して説明した処理により、一次割付領域あるいは仮割付領域が得られる。
【0105】
図8Aは、図6のステップS604の処理の詳細を説明するものであり、ステップS601の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を得る処理フロー例を説明する図である。
【0106】
先ず、ステップS804において、区分レベルに、取得した区分レベルよりも1つ減じた値を設定してステップS808に進む。
ステップS808では、区分番号に、区分番号を2倍した値を設定する。ステップS808の最初の処理が始まるときの区分番号は、図7Aに示すステップS710において割付状態を使用中に設定した多層区分割付表のエントリを指す区分番号である。次にステップS809で、対の区分番号に、区分番号に1を加算して得られる値を設定する。例えば、ある区分レベルにおける区分番号が「10」である区域を2分割した1つ下位の区分レベルにおける区域の区分番号は「20」及び「21」となる。
【0107】
次にステップS810で、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS811で、対の区分番号が指す多層区分割付表の割付状態に空を設定してステップS812に進む。
【0108】
ステップS812では、区分レベルは割付要求区分レベルよりも大きいかを判定し、大きければステップS813に分岐して区分レベルに設定された値を1つ減らしてステップS808に戻る。判定結果が大きくない、すなわち区分レベルは割付要求区分レベルと等しければ、処理を終了する。
【0109】
図8Aに示す処理は、仮割付が行われたことを前提としていることから、取得した区分レベルは割付要求区分より大きい。そして区分レベルを1つずつ減らしながらステップS808からステップS813のループ処理を繰り返すことから、ステップS812で区分レベルが割付要求区分レベルよりも大きくないと判定されるのは、区分レベルが割付要求区分レベルと等しくなったときである。
【0110】
以上の処理により、仮割付された区域を多層区分し、一次割付された区域が得られる。上記ステップS804の処理とステップS808〜ステップS813のループ処理は、仮割付された区域からスタートして、区域を1つ下位の区分レベルの2つの区域の対に分割し、若番側の区域の割付状態に使用中を、老番側の区域の割付状態に空を設定するものである。
【0111】
本発明の一実施形態によれば、取得した仮割付区域の全体を使用中とすることなく、割付要求区分レベルの区域を仮割付区域の区分番号の若番側に一次割付し、残りの連続領域を空と設定するので、領域を効率的に利用することができる。なお、一次割付を区分番号の若番側とすることに限らず、老番側とすることも可能であることは当業者に明らかである。
【0112】
図8Bは、図3に示す多層区分管理表310を参照して、図8Aに示す仮割付区域を多層区分して一次割付区域を得る処理を、具体例により説明する図である。
図8Bに示す例は、図7Cに例示するものと同様に、割付要求がシングルビット要求のものであり、図7Cに示す仮割付区域280aから一次割付区域を取得するものである。
【0113】
図8Bには、符号280aで一次割付前の割付状態である仮割付区域(区分番号5)が示されている。仮割付区域280aからの矢印241で示す、仮割付区域の区分レベル4から区分レベル1までの関係する各区域の区分を要求する多層区分要求により、符号164bを付した区分レベル4の区分割付表から処理が開始される。区分割付表164bには、図7Cに示すものと同じ割付状態が格納されている。
【0114】
割付状態が仮割付により使用中に設定された、区分レベル4の区分割付表164bの区分番号171の値が5のエントリからの矢印274aに示す区分要求により、区分レベル3の区分割付表163における区分番号10の区分ユニットの区分けによる区域(以下、「区分番号10の区域」のように表記する。)の割付状態に使用中“11”が設定され、区分番号10の区分ユニットと区分対293aを構成する区分番号11の区分ユニットの区分けによる区域(以下、「区分番号10の区域と区分対293aを構成する区分番号11の区域」のように表記する。)の割付状態に空“00”が設定される。この設定処理は、区分レベル3における図8AのステップS808〜ステップS811の処理で実行される。最初の区分番号は5であり、ステップS808で区分番号にはそれを2倍した10が設定される。また対の区分番号として11が得られる。
【0115】
以下同様に、使用中の区分番号10のエントリに対応して矢印273aに示す区分要求により、区分レベル2の区分割付表162における区分番号20の区域の割付状態に使用中“11”が設定され、区分番号20の区域と区分対292aを構成する区分番号21の割付状態に空“00”が設定される。
一方、区分番号11の割付状態は空に設定されたことから、矢印273bで対応を示すように、符号280bを付した一次割付後の仮割付区域に、空状態の区分番号11の区域283bが割り付けられる。
【0116】
次に使用中の区分番号20のエントリに対応して矢印272aに示す区分要求により、区分レベル1の区分割付表161における区分番号40の区域の割付状態に使用中“11”が設定され、区分番号40の区域と区分対291aを構成する区分番号41の割付状態に空“00”が設定される。そして、区分番号21の割付状態は空に設定されたことから、矢印272bで対応を示すように、一次割付後の仮割付区域280bに、空状態の区分番号21の区域282bが割り付けられる。
【0117】
多層区分要求は区分レベル1までであるから、矢印271aと矢印271bでそれぞれ対応を示すように、一次割付後の仮割付区域280bに、区分番号40の区域281aが使用中として一次割付され、区分番号41の区域281bが空として割り付けられる。
【0118】
上述の多層区分により、一次割付後の仮割付区域280bは、図に示すような使用中の一次割付領域281aと空である区域281b、282b、283bからなる、一次割付領域281aに隣接する隣接多層区域290bに分割される。
【0119】
図9は、図5のステップS505の処理の詳細を説明するものであり、多層区分割付表より、割付要求区分レベルの空候補区域を探索し、空候補区域の区分番号を取得する処理フロー例を説明する図である。空候補は、後に図11A〜図11Cを参照して説明する、マルチビット要求における一次割付領域を分割して二次割付を行ったときの残りの隣接多層区域を構成する区域の割付状態として設定される。
【0120】
空候補区域の探索は空区域の探索と同様に行われ、空候補区域探索の図9に示すフローは、図6に示す空区域探索のフローに対応するものであり、図9のステップS901〜ステップS904は、図6に示すステップS601〜ステップS604において、空区域を空候補区域と読み替えたものであるので、説明を省略する。
【0121】
また、図9のステップS901の処理の詳細を説明する図10Aは、多層区分割付表より、割付要求区分レベルのサイズ以上の空候補区域を探索し、空候補区域の区分番号を取得する処理フローを説明する図であり、図7Aに示す、多層区分割付表より、割付要求区分レベルのサイズ以上の空区域を探索し、空区域の区分番号を取得する処理フローを説明する図に対応する。図10AのステップS1001〜ステップS1010は、図7Aのステップ705において割付状態は空か判定しているのに対して、ステップS1005で割付状態は空候補か判定しているところで異なるだけであるので、図10Aについての説明も省略する。
【0122】
また同じく、図9のステップS904の処理の詳細を説明する図10Bは、ステップS901の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を取得する処理フローを説明する図であり、図8Aに示す、図6のステップS601の処理で得られた仮割付区域を多層区分し、割付要求区分レベルの区分番号の一次割付区域を取得する処理フローを説明する図に対応する。図10BのステップS1024〜ステップS1033は、図8Aのステップ811において、対の区分番号が指す多層区分割付表の割付状態に空を設定しているのに対して、ステップS1031で対の区分番号が指す多層区分割付表の割付状態に空候補を設定しているところで異なるだけであるので、図10Bについての説明も省略する。
【0123】
次に、図11A〜図11Cを参照して、図5のステップS508の処理を詳細に説明する。
図11Aは、取得した区分番号の一次割付区域を多層区域に区分し、割付要求区分の二次割付区域を得る前段の処理フローを説明する図である。
【0124】
まず、ステップS1103で、区分番号として、取得した一次割付区域の区分番号を2倍した値を設定する。図7Bの例示では、取得した一次割付区域の区分番号が6であるので、このステップS1103の処理により、区分番号として12が設定される。
【0125】
次にステップS1104で、一次割付区域を分割するために、割付要求サイズから、割付要求サイズを2進数表示したビット値からなる割付構成区分表を作成する。そしてステップS1105で、分割区分レベルとして、取得区分レベルから1減算した値を設定する。図7Bの例示では、取得した一次割付区域の区分レベルが4であるので、このステップS1105の処理により、分割区分レベルとして3が設定される。
【0126】
次にステップS1106で、最小分割区分レベルとして、割付構成区分表のうちビット値が1であるビット位置で且つ下位0ビット目から見て最も下位のビット位置を設定し、図11BのステップS1110に進む。例えば割付要求サイズが図7Bに示すものであって割付構成区分表のビット値が“1010”であるときは、ビット位置1が最小分割区分レベルに設定される。
【0127】
図11Bは、取得した区分番号の一次割付区域を多層区分に分割し、割付要求区分の二次割付区域を得る後段の処理フローを説明する図である。
ステップS1110では、対の区分番号に、区分番号に1を加えた値を設定する。
【0128】
次にステップS1111で、分割区分レベルの指す割付構成区分表からビット値を取り出し、ステップS1112で、取り出したビット値が1であるかを判定する。
ステップS1112において、取り出したビット値が1でない(0である)と判定された場合は、ステップS1113に分岐し、取り出したビット値が1であると判定された場合は、ステップS1115に進む。
【0129】
ステップS1113では、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1114で、対の区分番号の指す多層区分割付表の割付状態に空候補を設定してステップS1119に進む。
一方、ステップS1115では、分割区分レベルはステップS1106で設定した最小分割区分レベルであるかを判定する。分割区分レベルと最小分割区分レベルとが等しくない場合は、ステップS1116に分岐し、等しい場合はステップS1121に進む。
【0130】
ステップS1116では、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1117で、対の区分番号の指す多層区分割付表の割付状態に使用中を設定する。次にステップS1118で、区分番号に1を加算し、ステップS1119に進む。
ステップS1119では、区分番号を2倍にし、ステップS1120に進み、分割区分レベルを1つ減らしてステップS1110に戻る。
【0131】
ステップS1115において分割区分レベルが最小分割区分レベルと等しいと判定されてステップS1121に進むと、区分番号の指す多層区分割付表の割付状態に使用中を設定し、ステップS1122で、対の区分番号の指す多層区分割付表の割付状態に空候補を設定して処理を終了する。
【0132】
図11Cは、図3に示す多層区分割付表310を参照して、図11A及び図11Bに示す一次割付区域を多層区分し、割付要求区分の二次割付区域を得る処理を、具体例により説明する図である。図11Cに例示するものは、割付要求サイズ220に設定された値及び一次割付区域を区分番号6の一次割付区域280としていることから、図7Bに例示した一次割付に引き続き二次割付を行うものである。
【0133】
図7Bに示すものと同じく、割付要求サイズを2進数表示した割付要求サイズ220の1ビット目と3ビット目のビット値が1である。割付構成区分表230は、その下に0〜5で示すように区分レベルに対応する1ビットからなるエントリから構成されており、図11Cの例示では、区分レベル0から最上位の区分レベル5に対応する6つのエントリを有している。図の点線の矢印223、221で対応を示すように、割付要求サイズを2進数形式で表示したときのビット値に応じて、対応する区分レベルのエントリのビット値が設定されている。ここまでの設定は、図5のステップS501と図11AのステップS1104の処理で行われる。
【0134】
上述の割付構成区分表230のビット値に基づいて、二次割付が実行される。一次割付区域280からの矢印244で示す一次割付区域の最小分割区分レベルである区分レベル1までの多層区分要求により、符号164bを付した取得区分レベルである区分レベル4の区分割付表から多層区分が開始される。区分割付表164bには、図7Bに示すものと同じ割付状態が格納されている。
【0135】
区分レベル4の区分番号6の区域の区分要求274cについては、点線の矢印233で対応を示すように、割付構成区分表230の、区分レベル4より1を減じた区分レベル3に対応するビット値が1であることから、図11BのステップS1116とステップS1117の処理により、区分レベル3の区域であって区分番号6の区域と同一の領域を占める1組の区域に対応する区分対293bである、区分レベル3の区分割付表163における区分番号12と区分番号13の双方の区分ユニットの割付状態に使用中を示す“11”を設定する。
【0136】
図11BのステップS1117に続くステップS1118の処理により区分番号が1つ増えることから、次には区分レベル3の区分番号13の区域が区分要求273dの対象となる。点線の矢印232で対応を示すように割付構成区分表230の区分レベル2に対応するビット値が0であることから、図11BのステップS1113とステップS1114の処理により、区分レベル2の区域であって区分番号13の区域と同一の領域を占める1組の区域に対応する区分対292bである、区分レベル2の区分割付表162における区分番号26の割付状態に使用中を示す“11”を設定し、区分番号27の割付状態に空候補を示す“01”を設定する。
【0137】
次には区分レベル2の区分番号26の区域が区分要求272cの対象となる。点線の矢印231で対応を示すように割付構成区分表230の区分レベル1に対応するビット値が1であり、かつ区分レベル1が最小分割区分レベルであることから、図11BのステップS1121とステップS1122の処理により、区分レベル1の区域であって区分番号26の区域と同一の領域を占める1組の区域に対応する区分対291bである、区分レベル1の区分割付表161における区分番号52の割付状態に使用中を示す“11”を設定し、区分番号53の割付状態に空候補を示す“01”を設定する。
【0138】
以上で二次割付に伴う多層区分割付表310の更新が完了する。この多層区分割付表310の更新により、一次割付区域280は、二次割付後の一次割付区域280cに示すように多層区分される。矢印273cで対応を示すように、区分レベル3の区分番号12の区域283cが使用中として割り付けられ、それに連続して、矢印271cで対応を示すように区分レベル1の区分番号52の区域281cが使用中として割り付けられて多層区域として二次割付区域290cが割り付けられる。一方、矢印272dで対応を示すように、区分レベル2の区分番号27の区域282dが空候補として割り付けられ、それに連続して、矢印271dで対応を示すように区分レベル1の区分番号53の区域281dが空候補として割り付けられ、併せて隣接多層区域290dとして割り付けられる。二次割付区域290cでは、区域が区分レベルの降順で割り付けられ、隣接多層区域290dでは、区域が二次割付区域とは逆順である区分レベルの昇順で割り付けられる。
【0139】
二次割付を行った場合でも、割付区分番号として一次割付で取得した区分番号がファイルシステムに返されるが、上記説明から明らかなとおり、一次割付で取得した区分番号(上記例では6)の区域の先頭位置と、二次割付を行った二次割付区域の先頭位置は同一であることから、ファイル操作システムからの区分番号を指定した割付領域のアドレス問い合わせに対応することができる。
なお、上述の説明では、二次割付を区分番号の若番側から行っているが、先に仮割付後の一次割付について述べたように、区分番号の老番側から行うことができることは、当業者に明らかである。
【0140】
次に、図12〜図17Cを参照して、本発明の一実施形態における割付区域の解放について説明する。区域の割付と同様に、ファイルの削除などによる区域の解放処理もアロケーションシステムの多層区分管理部により行われる。
【0141】
図12は、割付区域を解放し、空区域の連結を試みる処理全体の概略の処理フロー例を説明する図である。図12に示す割付区域の解放処理と空区域の連結により、解放した割付区域を含む区域の割付状態を設定し直して、その区域を再割り付けすることが可能となる。
【0142】
図に示すように、ステップS1201において、区分番号に割付区域番号を設定する。この割付区域番号は、解放の対象となる区域がファイルに割り付けられたときにファイルシステムに返されたものであり、ファイルシステムからの割付区域の解放要求に含ませることができる。また、そのとき併せて割付要求サイズを含ませることもできる。
【0143】
次に、ステップS1202で、設定した区分番号により多層区分管理表を検索して、その区分番号に対応する区分レベルを求める。テップS1202の処理の詳細については、後に図13を参照して説明する。
次にステップS1203に進み、ステップS1202の処理で区分レベルが求められたかを判定し、求められなかった場合は、処理を終了する。求められた場合は、ステップS1204に進む。
【0144】
ステップS1204では、解放区分レベルに、ステップS1202の処理で求められた区分レベルを設定し、ステップS1205において、連結要求と名付ける一時的記憶領域に、空区域の連結を試みるフラグとしてありを初期設定する。
【0145】
次に、ステップS1206において、区分番号の指す一次割付区域内に含まれる区域の解放と空区域の連結を試みる。元の割付要求がシングルビット要求であれば、ステップS1201で設定された区分番号の割付状態に空を設定すればステップS1206の処理は終了する。元の割付要求がマルチビット要求であれば、二次割付が行われており、二次割付領域の解放が行われるだけでなく、隣接多層区域の空候補区域と解放された区域とを連結して上位区分レベルの区域の割付状態を空とすることが試みられる。ステップS1206の処理の詳細は、後に図14A、図14Bを参照して説明する。
【0146】
次にステップS1207において、連結要求はありか判定する。ありでなければ処理を終了し、ありであれば、ステップS1208において、区分番号の指す一次割付区域と隣接する隣接区域とを連結して上位の区域の割付状態を空とすることが試みられる。後の説明から明らかになるが、連結要求がありでステップS1208に進むのは、ステップS1206の処理で、一次割付区域が解放された場合である。ステップS1208の処理の詳細は、後に図17A、図17B及び図17Cを参照して説明する。
ステップS1208の処理が終了すると図12に示す処理は終了する。
【0147】
図13は、図12のステップS1202の処理の詳細を説明するものであり、区分番号により多層区分管理表を検索し、その区分番号に対応する区分レベルを求める処理フロー例を説明する図である。
【0148】
先ず、ステップS1301で、最上位区分レベル管理表より、最上位区分レベルを取り出す。そしてステップS1302で、最上位区分レベルの指す主区分番号管理表の主区分番号は有意か判定する。この判定は、区画構成主区分表がシングルビット構成かマルチビット構成かを判定することに相当するものである。
【0149】
ステップS1302の判定結果が否定的なもの、すなわち、区画構成主区分表がマルチビット構成であれば、ステップS1303で、区分レベルに最上位区分レベルから1を減じた値を設定してステップS1305に進む。一方、肯定的なものであれば、ステップS1304で、区分レベルに最上位区分レベルを設定してステップS1305に進む。
ステップS1305では、先頭番号に、最上位区分レベルより区分レベルを減じた値を指数とする2のべき乗数を設定する。
【0150】
次に、ステップS1306で、末尾番号管理表より、区分レベルの指す末尾番号を取り出し、ステップS1307で、区分番号は、ステップS1305で設定した先頭番号とステップS1306で取り出した末尾番号の範囲内か判定する。この判定が肯定的な場合は区分レベルありとして区分レベルを返して処理を終了する。否定的な場合は、ステップS1308に進む。
【0151】
ステップS1308では、区分レベルは最下位の区分レベルか判定する。区分レベルが最下位の区分レベルであれば、該当する区分レベルなしとして処理を終了する。区分レベルが最下位の区分レベルでなければ、ステップS1309aに進み、先頭番号を2倍にし、ステップS1309で区分レベルを1つ減らしてステップS1306に戻る。
【0152】
上記のステップS1306〜ステップS1309のループ処理を区分レベルを1つずつ減らしながら繰り返し、ある区分レベルのステップS1307の判定において、区分番号がステップS1305で設定した先頭番号あるいはステップS1309aで設定した先頭番号とステップS1306で取り出した末尾番号の範囲内となったときの区分レベルが、区分番号の指す区分ユニットに係る区分レベルである。区分レベルが最下位の区分レベルになっても、区分番号がステップS1305で設定した先頭番号あるいはステップS1309aで設定した先頭番号とステップS1306で取り出した末尾番号の範囲内とならないときは、区分番号は不当なものであり、該当する区分レベルは存在しないことが分かる。
【0153】
次に図14A、図14Bを参照して、図12のステップS1206の処理の詳細を説明する。
図14Aは、区分番号の指す一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理フロー例を説明する図である。
【0154】
まずステップS1401において、割付要求サイズより、割付構成区分表を作成する。割付要求サイズは、先に述べたように区域の解放要求をしたファイルシステムの解放要求に含まれるものとすることができる。割付構成区分表は、図11Aに示すステップS1104の処理と同様に作成する。図11Aに示すものはマルチビット要求の割付要求についてのものであるが、シングルビット要求の場合ではビット値が1のビット位置が1か所の割付構成区分表が構成されることは明らかである。
【0155】
次にステップS1402において、最小区分レベルに、割付構成区分表の下位0ビット目から見た最初のビット1が立つビット位置を設定する。
ステップS1405では、割付構成区分表により、割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュし、ステップS1407に進む。ここで、分割割付状況とは、割付区域を分割割付した区域の区分レベル、区分番号、解放表示である。区分レベルの指す割付構成区分表のビット値が1のときに、解放表示はありとされ、ビット値が0のとき、なしとされる。ステップS1405の処理の詳細については、後に図15を参照して説明する。
【0156】
ステップS1407においては、分割割付状況スタックをポップして、区分レベル、区分番号、解放表示を読み出す。
次にステップS1409において、該読み出した区分レベルは解放区分レベルであるか判定し、区分レベルが解放区分レベルであればステップS1416に分岐し、解放区分レベルでなければステップS1411に進む。なお、元の割付要求がシングルビット要求であれば、最初のステップS1409の判定処理でステップS1416に分岐することになる。
【0157】
ステップS1411では、ステップS1407で読み出した解放表示はありを示しているか判定する。解放表示がありであればステップS1413に進み、解放表示がありでなければステップS1412に進む。
ステップS1412では、連結要求はありか判定する。ありであればステップS1413に進み、ありでなければステップS1407に戻る。
【0158】
ステップS1413では、区分番号の指す区分対の解放を試み、ステップS1407に戻る。ステップS1413の処理の詳細は、後に図16を参照して説明する。
上述のステップ1409の判定で区分レベルは解放区分レベルと等しいと判定されて分岐するステップS1416以降の処理は、解放区分レベルの区域の解放処理である。
【0159】
ステップS1416では、連結要求はありか判定し、ありでなければ処理を終了し、ありであれば、ステップS1417において、区分番号の指す多層区分割付表の割付状態を空として処理を終了する。すなわち、マルチビット要求の場合でも、連結要求がありであれば、二次割付区域と隣接多層区域からなる一次割付区域についての割付状態は、ステップS1417の処理により空に設定される。
【0160】
図14Bは、図3に示す多層区分割付表310を参照して、図14A及び後記図16に示す一次割付区域内に含まれる区域の解放と空区域の連結を試みる処理を、具体例により、説明する図である。
図14Bに示す例は、図11Cに例示するものと同様なマルチビット要求で二次割付された二次割付区域を解放し、隣接区域と連結して上位区分レベルの区域の割付状態に空を設定するものである。したがって、割付要求サイズ220と割付構成区分表230に設定された値は図11Cに示すものと同じである。
図14Bに示す二次割付後の一次割付区域280cは、二次割付区域を解放し連結する前の割付状態のものであり、図11Cに示す二次割付後の一次割付区域280cの空候補であった区分番号27の区域282dが使用中となっている。区分番号53の区域281dの割付状態は空候補のままである。
【0161】
解放と連結の処理は、割付構成区分表230のビット値を参照しながら、最小区分レベルである区分レベル1から上位の区分レベルへと順次行われていく。
まず、最小区分レベルである区分レベル1においては、割付構成区分表230の対応するビット値は1(点線の矢印231aで対応を示す)である。すなわち、解放表示はありなので、図14AのステップS1413、すなわち図16に示す処理が実行される。区分レベル1の解放要求の矢印251aが示すように、区域281cの解放が保障されていることと、符号161cを付した解放前の区分レベル1の区分割付表の、区分番号171の値が52の区域と対をなす区分番号53の区域の割付状態が空候補であることから、後に説明する図16のステップS1605での判定が肯定的なものとなり、区分番号52の区域と区分番号53の区域からなる区分レベル1の区分対291cの上位の区分レベルの区域の割付状態に空を設定する連結要求(矢印241cに示す)がありとされ、符号161dを付した解放後の区分レベル1の区分割付表に示すように、区分番号52及び対の区分番号53の割付状態には保留が設定される。上位区分レベルの区域の空が設定されるとき、その区域に包含される下位の区分レベルの区域の割付状態に保留を設定することは、図3に示す多層区分割付表310の初期設定の場合と同様である。
【0162】
区分レベル2においては、割付構成区分表230の対応するビット値は0(点線の矢印232aで対応を示す)であり、連結要求241cがありなので矢印241dに示すように上位の区分の区域である、符号162cを付した解放前の区分レベル2の区分割付表の区分番号26の区域の解放要求がされる。区分番号26の区域と区分対292cを構成する区分番号27の区域は使用中なので、図16のステップS1605での判定が否定的なものとなり、矢印242cで示すように、区分番号26の区域のみ解放され、区分対292cの割付状態は、符号162dを付した解放後の区分レベル2の区分割付表に示すように空と使用中になる。また、連結要求はなしとなる。したがって、点線の矢印242dに示すように区分対292cの上位の区域であり、符号163cを付した解放前の区分レベル3の区分割付表に示すように割付状態が使用中の区分番号13の区域は解放されない。
【0163】
次に区分レベル3においては、割付構成区分表230の対応するビット値は1(点線の矢印233aで対応を示す)であり、区分レベル3の解放要求の矢印253aが示すように、区域283cが解放される。しかし、先に述べたように、割付状態が使用中の区分番号13の区域は解放されず使用中である。したがって、矢印243cで示すように、区分番号13の区域と区分対293cを構成する区分番号12の区域のみ解放され、区分対293cの割付状態は、符号163dを付した解放後の区分レベル3の区分割付表に示すように空と使用中になる。また、連結要求はなしとなるので、点線の矢印244dに示すように区分対293cの上位の区域であり、符号164を付した解放前の区分レベル4の区分割付表に示すように割付状態が使用中の区分番号6の区域は解放されず、割付状態は使用中のままである。
【0164】
以上の区域の解放と連結の処理により、二次割付区域を解放した後の割付状態の一次割付区域280dは、矢印273e、272e及び点線の矢印272fで多層区分割付表310の割付状態との対応を示すように、区分番号が12で空の区域283cと区分番号が26で空の区域282c、及び区分番号が27で使用中の区域282dに区分される。
【0165】
図15は、図14AのステップS1405の処理の詳細を説明するものであり、割付構成区分表により、割付区域内の分割割付状況を求めて分割割付状況スタックにプッシュする処理フロー例を説明する図である。
【0166】
まず、ステップS1501で、区分レベルに、図12に示すステップS1204で設定した解放区分レベルを設定し、ステップS1502に進む。
【0167】
ステップS1502では、割付構成区分表より区分レベルの指すビット値を解放表示として取り出す。ビット値が1であれば解放表示ありとし、ビット値が0であれば解放表示なしとする。
そして、ステップS1502aにおいて、割付区域内の分割割付状況として、区分レベル、区分番号、解放表示を分割割付状況スタックにプッシュする。
【0168】
次にステップS1504に進み、区分レベルは最小区分レベルに等しいか判定する。区分レベルが最小区分レベルよりも大きいと判定されると、ステップS1504aに分岐して解放表示はありか判定し、解放表示がありでなければステップS1506に進み、解放表示がありであれば、ステップS1505で、区分番号に1を加えてステップS1506に進む。
ステップS1506では、区分番号を2倍にし、ステップS1507で区分レベルを1つ減らしてステップS1502に戻る。
【0169】
上述のステップS1502〜ステップS1507のループ処理を、ステップS1504において区分レベルが最小区分レベルと等しいと判定されるまで繰り返す。ステップS1504において区分レベルが最小区分レベルと等しいと判定されると、処理を終了する。
【0170】
図14Bの例示では、区分番号に6、区分レベルに4が初期設定されており、割付構成区分表の区分レベル4の指すビット値は0であるから、最初に分割割付状況スタックにプッシュされる区分レベル、区分番号、解放表示は、それぞれ4、6、0(解放表示なし)である。
【0171】
区分レベル4の処理では、解放表示はなしなので、区分番号は6×2=12に更新され、区分レベルは3に更新される。また、割付構成区分表の区分レベル3の指すビット値は1である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、3、12、1(解放表示あり)がプッシュされる。
【0172】
区分レベル3の処理では、解放表示はありなので区分番号は(12+1)×2=26に更新され、区分レベルは2に更新される。また、割付構成区分表の区分レベル2の指すビット値は0である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、2、26、0(解放表示なし)がプッシュされる。
【0173】
区分レベル2の処理では、解放表示はなしなので区分番号は26×2=52に更新され、区分レベルは最小区分レベルである1に更新される。また、割付構成区分表の区分レベル1の指すビット値は1である。したがって、分割割付状況スタックには、区分レベル、区分番号、解放表示として、それぞれ、1、52、1(解放表示あり)がプッシュされる。
【0174】
図14Bに示す例は、マルチビット要求で割り付けられた領域を解放するものである。シングルビット要求で割り付けられた領域を解放するのであれば、解放区分レベルと最小区分レベルは等しく、分割割付状況スタックにプッシュされる区分レベル、区分番号、解放表示は1組だけであり、解放表示はありである。
【0175】
上述の分割割付状況スタックにプッシュされた分割割付状況としての区分レベル、区分番号、解放表示と、図12のステップS1205で「あり」に初期設定され、後記図16に示す処理により更新される連結要求により、図14Bに例示する割付区域の解放が行われる。
【0176】
図16は、図14AのステップS1413の処理の詳細を説明するものであり、区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。図14Aに示す処理フローのとおり、図16に示す処理ステップは、分割割付状況スタックを順次ポップすることにより、最小区分レベルから解放区分レベルの1つ下位の区分レベルまでの区分レベル毎に実行される。
【0177】
図に示すとおり、まずステップS1602で、対の区分番号に、区分番号に値1を加算した値を設定してステップS1604に進み、対の区分番号の指す多層区分割付表の割付状態を読み出し、ステップS1605で、読み出した割付状態が空または空候補であるか判定する。読み出した割付状態が空または空候補であれば、ステップS1606に進み、読み出した割付状態が空でも空候補でもなければ、ステップS1609に分岐する。
【0178】
ステップS1606では、区分番号の指す多層区分割付表の割付状態に保留を設定し、ステップS1607で、対の区分番号の指す多層区分割付表の割付状態に保留を設定する。次にステップS1608で連結要求にありを設定して処理を終了する。これらのステップS1606〜S1608の処理は、図14Bの例示では、矢印241cで示す連結要求ありの処理に対応する。
【0179】
一方、ステップS1609に分岐した場合は、区分番号の指す多層区分割付表の割付状態に空を設定し、ステップS1610で、連結要求になしを設定して処理を終了する。この処理は、図14Bの例示では、矢印242c、243cで示す自区域のみ解放の処理に対応する。
【0180】
次に図17A、図17B及び図17Cを参照して、図12のステップS1208の処理の詳細を説明する。
図17Aは、一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理フロー例を説明する図である。
【0181】
図に示すように、ステップS1701で、区分レベルに解放区分レベルを設定し、ステップS1703で、区分番号に割付区分番号を設定してステップS1704に進む。
ステップS1704では、主区分番号管理表より、区分レベルの指す主区分番号を取り出し、ステップS1705に進む。
ステップS1705では、区分番号と主区分番号が等しいか判定する。等しければステップS1710に分岐し、等しくなければステップS1706に進む。
ステップS1706では、区分番号の指す区分対の解放を試みる。ステップS1706の処理の詳細は、後に図17Cを参照して説明する。
【0182】
次にステップS1707に進み、連結要求はありか判定する。連結要求がありでなければ、図16のステップS1605において、対の区分番号の割付状態は空でも空候補でもないと判定されたことを意味するから、区域の連結処理を終了し、連結要求がありであれば、ステップS1708以降の処理に分岐して上位の区分レベルの区域の連結処理を試みる。
【0183】
ステップS1708では、区分レベルを1つ上位のものとし、ステップS1709に進んで、区分番号に、区分番号を値2で割った商を設定し、ステップS1704に戻る。なお、ステップS1708では、区分番号は、ステップS1706での処理により、偶数となっている。
【0184】
ステップS1705で、区分番号と主区分番号が等しいと判定された場合に分岐するステップS1710では、区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。区分番号と主区分番号が等しい場合は、図3の例示から明らかなようにその区分番号と対をなす区分番号の区域は存在しないことから、ステップS1710では、区分番号の指す多層区分割付表の割付状態に空を設定して処理を終了する。
【0185】
図17Bは、図3に示す多層区分割付表310を参照して、図17A及び後記図17Cに示す一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを試みる処理を、具体例により、説明する図である。なお、以下の説明では、一次割付区域と、隣接する空区域とを連結して上位の区域の割付状態を空とすることを、単に、連結ということがある。
【0186】
図17Bに示す例は、図8Bに例示するものと同様なシングルビット要求で一次割付された区域が解放されたので隣接区域と連結して上位区分レベルの区域の割付状態に空を設定するものである。
図17Bには、解放された一次割付区域を連結する前の割付状態の多層区域として、図8Bに示す一次割付後の仮割付区域280bの使用中であった区分番号40の区域が解放され、空であった区分番号11の区域283bが使用中となっている多層区域280eが例示されている。区分番号41の区域281bと区分番号21の区域282bの割付状態は空のままである。
【0187】
連結処理は、解放区分レベルである区分レベル1から、連結処理がそれ以上不可能になる上位の区分レベルへと順次行われていく。すなわち、解放された区分番号40の区域281aに順次隣接した区域であって使用中でない区域を連結していく。
【0188】
まず、図12に示すステップS1207の判定が肯定的であったことから、解放された区域281aに対して、矢印240eに示す連結要求が行われ、解放区分レベルである区分レベル1の処理が行われる。符号161eを付した区分レベル1の区分割付表の、区分番号171の値が40の区域と対をなす区分番号41の区域の割付状態が空であることから、区分番号40の区域と区分番号41の区域からなる区分対291dの上位の区分レベルの区域の割付状態に空を設定する連結要求(矢印241eに示す)がありとされ、符号161fを付した区分レベル1の区分割付表に示すように、区分番号40及び対の区分番号41の割付状態には保留が設定される。図14Bの説明においても述べたように、上位区分レベルの区域の空が設定されるとき、その区域に包含される下位の区分レベルの区域の割付状態に保留を設定することは、図3に示す多層区分割付表310の初期設定の場合と同様である。
【0189】
区分レベル2においては、連結要求がありなので矢印241fに示すように上位の区分の区域である、符号162eを付した連結前の区分レベル2の区分割付表の区分番号20の区域の解放要求がされる。区分番号20の区域と区分対292dを構成する区分番号21の区域は空なので、矢印242eで示すように連結要求がありとされ、符号162fを付した連結後の区分レベル2の区分割付表に示すように、区分番号20及び対の区分番号21の割付状態には保留が設定される。
【0190】
次に区分レベル3においては、連結要求がありなので矢印242fに示すように上位の区分の区域である、符号163eを付した連結前の区分レベル2の区分割付表の区分番号10の区域の解放要求がされる。区分番号10の区域と区分対293dを構成する区分番号11の区域は使用中なので、矢印243eで示すように区分番号10の区域の割付状態のみが空に設定され、区分対293dの割付状態は、符号163fを付した連結後の区分レベル3の区分割付表に示す空と使用中となる。
そして、連結要求はなしであるので、点線の矢印243fで示すように、上位の区域であり、区分レベル4の区分割付表164に示すように割付状態が使用中である区分番号5の区域は解放されずに割付状態は使用中のままである。
【0191】
以上の区域の解放と連結の処理により、一次割付区域を隣接する空区域と連結した後の割付状態の多層区域280fは、矢印273e及び点線の矢印272fで多層区分割付表310の割付状態との対応を示すように、区分番号が10で空の区域283e及び区分番号が11で使用中の区域283fに区分される。
【0192】
図17Cは、図17AのステップS1706の処理の詳細を説明するものであり、区分番号の指す区分対の解放を試みる処理フロー例を説明する図である。ここで、区分番号の指す区分対とは、区分番号で識別される区分ユニットの属する区分対という意味であり、後ほど説明するように、その区分番号は若番の方とは限らない。別の言い方をすれば、その区分番号が偶数とは限らない。
図17Aに示す処理フローのとおり、図17Cに示す処理ステップは解放区分レベルから上位の区分レベルの方向に区分レベル毎に実行され、空領域を連結して上位の区分レベルの領域の解放が試みられる。
【0193】
図に示すとおり、まずステップS1711で、区分番号は偶数かを判定する。図17Cに示す処理フローは、図16に示すものと類似するものであるが、先に述べたように、図17A、つまり図12のステップS1208の処理においては、区分番号が偶数とは限らない。それは、解放され、空状態となった一次割付区域に対応する区分番号は、偶数の場合もあれば、奇数の場合もあるからである。例えば、図17Bに示す使用中の区域283fが一次割付区域であって、それが空となったときには、その区分番号は11であり、奇数である。
【0194】
区分番号が偶数である場合はステップS1712で、対の区分番号に、区分番号に値1を加算した値を設定してステップS1714に進み、奇数である場合はステップS1713で、対の区分番号に、区分番号から1を減じた値を設定してステップS1714に進む。
【0195】
ステップS1714では、対の区分番号の指す多層区分割付表の割付状態を読み出し、ステップS1715で、読み出した割付状態が空または空候補であるか判定する。読み出した割付状態が空または空候補であれば、ステップS1716に進み、読み出した割付状態が空でも空候補でもなければ、ステップS1719に分岐する。
【0196】
ステップS1716では、区分番号の指す多層区分割付表の割付状態を保留に設定し、ステップS1717で、対の区分番号の指す多層区分割付表の割付状態に保留を設定する。次にステップS1718で連結要求にありを設定して処理を終了する。これらのステップS1716〜S1718の処理は、図17Bの例示では、矢印241e、242eで示す連結要求の処理に対応する。
【0197】
一方、ステップS1719に分岐した場合は、区分番号の指す多層区分割付表の割付状態を空に設定し、ステップS1720で、連結要求になしを設定して処理を終了する。こちらの処理は、図17Bの例示では、矢印243eで示す自区域のみ解放の処理に対応する。
【0198】
なお、本発明の区画管理方法を例えば図2Cに例示するデータ処理装置301のようなコンピュータに実行させるプログラムにより、本発明に係る区画管理装置をコンピュータ上に構築可能なことは明らかである。
そこで、本発明の区画管理装置に関する、機能ブロック構成例について以下に説明する。
【0199】
図18Aは、本発明の一実施形態における区画管理装置の機能ブロック構成例を説明する図である。
図に示すように、区画管理装置800は、大きく分けて、初期化部810と多層区分管理部840から構成される。初期化部810と多層区分管理部840は、図2Bに例示するアロケーションシステム(初期化部)101とアロケーションシステム(多層区分管理部)102に相当する。
なお、図18Aの例示では、同一の区画管理装置800に初期化部810と多層区分管理部840が包含されているが、外部記憶装置の区画管理を考えれば、初期化を行う区画管理装置と、初期化された多層区分割付表を用いて多層区分管理を行う区画管理装置が別の装置でも本発明を実施可能なことは、当業者に明らかである。
【0200】
初期化部810は、区画のサイズを取得する区画サイズ取得手段820と多層区分割付表生成手段830を含む。多層区分割付表生成手段830は、区画のサイズを互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表したとき、該和を構成する各2のべき乗と区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの大きさ順に区画を分割することで該区画を区分けし、各主区域を2分の1ずつ分割して順次区画の割当単位のサイズまで各サイズの区域に区分けし、主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成し、初期化する。また、多層区分割付表生成手段830は、区画を包含する2のべき乗サイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗のサイズの区域により、仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、該仮想的に区分けされた仮想区域を識別するための区分番号を該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の仮想区画内の配置順で割り振る。この多層区分割付表生成手段830の機能は、図4A〜図4Cを参照して説明した処理フロー例により実現可能である。
【0201】
多層区分管理部840は、ファイルまたはメモリ領域の空区域への割付を行う区域割付手段850とファイルまたはメモリ領域の割付から割付区域を解放する区域解放手段860を含む。
【0202】
図18Bは、本発明の一実施形態における区域割付手段の機能ブロック構成例を説明する図である。図に示すように、区域割付手段850は、割付要求を受け付ける割付要求受付手段851、空区域探索手段852、二次割付手段853、割付区分番号出力手段を含み、空区域探索手段852は、仮割付手段857を含む。
【0203】
区域割付手段850の機能は、図5を参照して説明した処理フロー例により実現可能である。
空区域探索手段852は、割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と区画の割当単位のサイズの積で表され、区分レベルの異なる区域のサイズの和である場合、その区分レベルの最大のものより1つ大きい区分レベルの空区域であって割付要求サイズより大きいサイズの一次割付区域を探索し、割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、その割付要求サイズの空区域を一次割付区域として探索する。空区域探索手段852の機能は、図6、図9に例示する処理フローに対応する。
【0204】
空区域探索手段852のうち仮割付手段857は、一次割付区域の区分レベルで空区域を探索できなかった場合に、多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域を仮割付区域として前記多層区分割付表の割付状態を使用中とするとともに、仮割付区域を一次割付区域と残りの領域であって区分レベルの小さいものから順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、一次割付区域内の区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する多層区分割付表の割付状態に空状態を設定する。仮割付手段857の機能は、図7Aと図8A、図10Aと図10Bに例示する処理フローに対応する。
【0205】
二次割付手段853は、一次割付区域のサイズが割付要求サイズより大きい場合、一次割付区域を、区分レベルの大きいものから順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって区分レベルの小さいものから順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、二次割付区域のそれぞれの区域に対応する多層区分割付表の割付状態に使用中を設定し、隣接多層区域を構成する区域に対応する前記多層区分割付表の割付状態に空候補状態を設定する。二次割付手段853の機能は、図11A、図11Bに例示する処理フローに対応する。
【0206】
図18Cは、本発明の一実施形態における区域解放手段の機能ブロック構成例を説明する図である。図に示すように、区域解放手段860は、解放要求を受け付ける解放要求受付手段851、一次割付区域内の区域の解放を試みる一次割付区域内解放手段862、一次割付区域の区分レベルより大きい区分レベルの区域の解放を試みる上位区域解放手段863を含む。
【0207】
区域解放手段860の機能は図12に例示する処理フロー例に対応する。
一次割付区域内解放手段862は、解放要求に含まれるサイズである解放要求サイズが、区分レベルの異なる区域の和である場合、隣接多層区域内の最小の区域の区分番号を求めてその区分番号の指す多層区分割付表から割付状態を読み出し、読み出した割付状態が空または空候補の状態であれば、二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する多層区分割付表の割付状態に保留を設定するとともに1つ上位の区分レベルの区域の解放を試み、隣接多層区域内の最小の区域の割付状態が使用中であれば、二次割付区域内の最小の区域の割付状態を空の状態とする。一次割付区域内解放手段862の機能は、図14Aに例示する処理フローに対応する。
【0208】
上位区域解放手段863は、一次割付区域が解放され、その区分番号の指す多層区分割付表の割付状態が空の状態になったとき、一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を一次割付区域としたときの他方の区域の割付状態を多層区分割付表より読み出し、他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する多層区分割付表の割付状態に保留を設定するとともに上位の区分レベルの区域の解放を試み、他方の区域の割付状態が使用中であれば、一方の区域の割付状態を空の状態とする。上位区域解放手段863の機能は、図17Aに例示する処理フローに対応する。
【0209】
以上本発明を実施するための形態について詳細に説明したが、本発明の実施形態は上記に限ることなく種々の変形が可能であることは当業者に明らかである。以上に説明した本発明の実施の形態による区画管理方法、及びその均等物は、それらをコンピュータに実行させるプログラムにより実現可能であることも明らかである。したがって、上記プログラム、及び上記プログラムを記憶したコンピュータ読み取り可能な記憶媒体も、本発明の実施の形態に含まれる。また、本発明の区画管理方法によりその区画が管理される記憶装置は、本発明の実施の形態に含まれる。そして、記憶装置が、記憶媒体駆動装置と記憶媒体からなる場合には、本発明の区画管理方法によりその区画が管理される記憶媒体も本発明の実施の形態に含まれる。以上説明したように、本発明によれば、記憶容量によらず記憶装置を有効にかつ効率的に管理することができる。また、各区分レベルの区域を多層区分割付表及び多層区分管理表を用いて多層的に管理することにより、連続する領域にファイル割付を行うことが可能となる。
【特許請求の範囲】
【請求項1】
記憶装置の区画管理装置において、
区画のサイズを取得する区画サイズ取得手段と、
該区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出し、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けし、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成し、初期化する多層区分割付表生成手段と、を備え、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記多層区分割付表は、前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納するものであり、
前記多層区分割付表生成手段は、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態を設定し、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態を設定する、
ことを特徴とする区画管理装置。
【請求項2】
記憶装置の区画管理装置において、
区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域に対応して、該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表であって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定された多層区分割付表と、
前記多層区分割付表に格納された前記割付情報に基づいて前記各区域の割付を管理する多層区分管理部と、を備え、
前記多層区分管理部は、前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いて、前記区域の割付を管理する、
ことを特徴とする区画管理装置。
【請求項3】
請求項2記載の区画管理装置において、
前記多層区分管理部は、
サイズを含むファイルあるいはメモリ領域の割付要求を受け付ける割付要求受付手段と、
前記多層区分管理表を参照して、前記割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と前記区画の割当単位のサイズの積で表され、前記区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって前記割付要求サイズより大きいサイズの一次割付区域を探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とし、前記割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、該割付要求サイズの空区域を一次割付区域として探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とする空区域探索手段と、
前記一次割付区域のサイズが前記割付要求サイズより大きい場合、該一次割付区域を、前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって前記二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記二次割付区域のそれぞれの区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空候補状態を設定する二次割付手段と、
前記割付区分番号を前記ファイルあるいはメモリ領域の割付要求の割り付け結果の1つとして出力する割付区分番号出力手段と、
を含み、
前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域の区分レベルは等しく、前記多層区分割付表において前記区分レベルより1つ上位の区分レベルの区域を2分割したものであることを特徴とする区画管理装置。
【請求項4】
請求項3記載の区画管理装置において、
前記空区域探索手段は、前記一次割付区域の区分レベルで空区域を探索できなかった場合に、前記多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域の区分番号を求め、該区分番号の区域である仮割付区域を、前記一次割付区域と残りの領域であって前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記一次割付区域内の区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空状態を設定する仮割付手段を含むことを特徴とする区画管理装置。
【請求項5】
請求項4記載の区画管理装置において、
前記空区域探索手段は、割付要求されたファイルあるいはメモリ領域を割付可能な空状態の区域を探索できなかった場合、前記多層区分割付表から空候補状態の区域を探索することを特徴とする区画管理装置。
【請求項6】
請求項5記載の区画管理装置において、
前記多層区分管理部は、
サイズ及び割付区分番号を含むファイルあるいはメモリ領域の解放要求を受け付ける解放要求受付手段と、
前記解放要求に含まれるサイズである解放要求サイズが、前記区分レベルの異なる区域の和である場合、前記隣接多層区域内の最小の区域の区分番号を求めて該区分番号の指す前記多層区分割付表から割付状態を読み出し、該読み出した割付状態が空または空候補の状態であれば、前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記1つ上位の区分レベルの区域の解放を試み、前記隣接多層区域内の最小の区域の割付状態が使用中であれば、前記二次割付区域内の最小の区域の割付状態を空の状態とする一次割付区域内解放手段と
前記一次割付区域が解放され、その区分番号の指す前記多層区分割付表の割付状態が空の状態になったとき、該一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を前記一次割付区域としたときの他方の区域の割付状態を前記多層区分割付表より読み出し、該他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記上位の区分レベルの区域の解放を試み、前記他方の区域の割付状態が使用中であれば、前記一方の区域の割付状態を空の状態とする上位区域解放手段と、
を備えることを特徴とする区画管理装置。
【請求項7】
記憶装置の区画管理装置が実行する記憶装置の区画管理方法において、
区画のサイズを取得する区画サイズ取得ステップと、
該区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出し、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けし、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成する多層区分割付表生成ステップと、を備え、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記多層区分割付表は、前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納するものであり、
前記多層区分割付表生成ステップは、前記区画を包含する、2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、主区域の割付情報の初期値として空きであることを示す空き状態を設定し、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態を設定する、
ことを特徴とする区画管理方法。
【請求項8】
記憶装置の区画管理装置が実行する記憶装置の区画管理方法において、
前記記憶装置の区画管理装置は、区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域に対応して、該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表であって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定された多層区分割付表を備え、
前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いて、前記区域の割付を管理するものであり、
前記記憶装置の区画管理装置が、
サイズを含むファイルあるいはメモリ領域の割付要求を受け付ける割付要求受付ステップと、
前記多層区分管理表を参照して、前記割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と前記区画の割当単位のサイズの積で表され、前記区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって前記割付要求サイズより大きいサイズの一次割付区域を探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とし、前記割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、該割付要求サイズの空区域を一次割付区域として探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とする空区域探索ステップと、
前記一次割付区域のサイズが前記割付要求サイズより大きい場合、該一次割付区域を、前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって前記二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記二次割付区域のそれぞれの区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空候補状態を設定する二次割付ステップと、
前記割付区分番号を前記ファイルあるいはメモリ領域の割付要求の割り付け結果の1つとして出力する割付区分番号出力ステップと、を実行する
ことを特徴とする区画管理方法。
【請求項9】
請求項8記載の区画管理方法において、
前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域の区分レベルは等しく、前記多層区分割付表において前記区分レベルより1つ上位の区分レベルの区域を2分割したものであることを特徴とする区画管理方法。
【請求項10】
請求項9記載の区画管理方法において、
前記空区域探索ステップは、前記一次割付区域の区分レベルで空区域を探索できなかった場合に、前記多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域の区分番号を求め、該区分番号の区域である仮割付区域を、前記一次割付区域と残りの領域であって前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記一次割付区域内の区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空状態を設定する仮割付ステップを含むことを特徴とする区画管理方法。
【請求項11】
請求項10記載の区画管理方法において、
前記空区域探索ステップは、割付要求されたファイルあるいはメモリ領域を割付可能な空状態の区域を探索できなかった場合、前記多層区分割付表から空候補状態の区域を探索することを特徴とする区画管理方法。
【請求項12】
請求項11記載の区画管理方法により管理されている区画内に割り付けられたファイルあるいはメモリ領域を記憶装置の区画管理装置が解放する記憶領域解放方法において、
サイズ及び割付区分番号を含むファイルあるいはメモリ領域の解放要求を受け付ける解放要求受付ステップと、
前記解放要求に含まれるサイズである解放要求サイズが、前記区分レベルの異なる区域の和である場合、前記隣接多層区域内の最小の区域の区分番号を求めて該区分番号の指す前記多層区分割付表から割付状態を読み出し、該読み出した割付状態が空または空候補の状態であれば、前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記1つ上位の区分レベルの区域の解放を試み、前記隣接多層区域内の最小の区域の割付状態が使用中であれば、前記二次割付区域内の最小の区域の割付状態を空の状態とする一次割付区域内解放ステップと
前記一次割付区域が解放され、その区分番号の指す前記多層区分割付表の割付状態が空の状態になったとき、該一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を前記一次割付区域としたときの他方の区域の割付状態を前記多層区分割付表より読み出し、該他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記上位の区分レベルの区域の解放を試み、前記他方の区域の割付状態が使用中であれば、前記一方の区域の割付状態を空の状態とする上位区域解放ステップと、
を含むことを特徴とする記憶領域解放方法。
【請求項13】
請求項7乃至請求項12のいずれか1項に記載の方法をコンピュータに実行させることを特徴とするプログラム。
【請求項14】
請求項7乃至請求項12のいずれか1項に記載の方法をコンピュータに実行させるプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項15】
請求項7乃至請求項11のいずれか1項に記載の区画管理方法により前記区画が管理されていることを特徴とする記憶装置。
【請求項16】
請求項7乃至請求項11のいずれか1項に記載の区画管理方法であって、前記記憶装置は記憶媒体駆動装置と記憶媒体とを含むものであり、前記記憶装置の前記区画は前記記憶媒体の区画である区画管理方法により前記区画が管理されていることを特徴とする記憶媒体。
【請求項17】
区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域毎に前記区画を管理する、記憶装置の区画管理のための多層区分割付表のデータ構造において、
前記多層区分割付表は、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納するものであって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定されたものであり、
前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いた前記区域の割付を管理する区画管理を可能とする
ことを特徴とする多層区分割付表のデータ構造。
【請求項18】
請求項17記載のデータ構造を有するデータを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項1】
記憶装置の区画管理装置において、
区画のサイズを取得する区画サイズ取得手段と、
該区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出し、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けし、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成し、初期化する多層区分割付表生成手段と、を備え、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記多層区分割付表は、前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納するものであり、
前記多層区分割付表生成手段は、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態を設定し、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態を設定する、
ことを特徴とする区画管理装置。
【請求項2】
記憶装置の区画管理装置において、
区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域に対応して、該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表であって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定された多層区分割付表と、
前記多層区分割付表に格納された前記割付情報に基づいて前記各区域の割付を管理する多層区分管理部と、を備え、
前記多層区分管理部は、前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いて、前記区域の割付を管理する、
ことを特徴とする区画管理装置。
【請求項3】
請求項2記載の区画管理装置において、
前記多層区分管理部は、
サイズを含むファイルあるいはメモリ領域の割付要求を受け付ける割付要求受付手段と、
前記多層区分管理表を参照して、前記割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と前記区画の割当単位のサイズの積で表され、前記区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって前記割付要求サイズより大きいサイズの一次割付区域を探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とし、前記割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、該割付要求サイズの空区域を一次割付区域として探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とする空区域探索手段と、
前記一次割付区域のサイズが前記割付要求サイズより大きい場合、該一次割付区域を、前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって前記二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記二次割付区域のそれぞれの区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空候補状態を設定する二次割付手段と、
前記割付区分番号を前記ファイルあるいはメモリ領域の割付要求の割り付け結果の1つとして出力する割付区分番号出力手段と、
を含み、
前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域の区分レベルは等しく、前記多層区分割付表において前記区分レベルより1つ上位の区分レベルの区域を2分割したものであることを特徴とする区画管理装置。
【請求項4】
請求項3記載の区画管理装置において、
前記空区域探索手段は、前記一次割付区域の区分レベルで空区域を探索できなかった場合に、前記多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域の区分番号を求め、該区分番号の区域である仮割付区域を、前記一次割付区域と残りの領域であって前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記一次割付区域内の区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空状態を設定する仮割付手段を含むことを特徴とする区画管理装置。
【請求項5】
請求項4記載の区画管理装置において、
前記空区域探索手段は、割付要求されたファイルあるいはメモリ領域を割付可能な空状態の区域を探索できなかった場合、前記多層区分割付表から空候補状態の区域を探索することを特徴とする区画管理装置。
【請求項6】
請求項5記載の区画管理装置において、
前記多層区分管理部は、
サイズ及び割付区分番号を含むファイルあるいはメモリ領域の解放要求を受け付ける解放要求受付手段と、
前記解放要求に含まれるサイズである解放要求サイズが、前記区分レベルの異なる区域の和である場合、前記隣接多層区域内の最小の区域の区分番号を求めて該区分番号の指す前記多層区分割付表から割付状態を読み出し、該読み出した割付状態が空または空候補の状態であれば、前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記1つ上位の区分レベルの区域の解放を試み、前記隣接多層区域内の最小の区域の割付状態が使用中であれば、前記二次割付区域内の最小の区域の割付状態を空の状態とする一次割付区域内解放手段と
前記一次割付区域が解放され、その区分番号の指す前記多層区分割付表の割付状態が空の状態になったとき、該一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を前記一次割付区域としたときの他方の区域の割付状態を前記多層区分割付表より読み出し、該他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記上位の区分レベルの区域の解放を試み、前記他方の区域の割付状態が使用中であれば、前記一方の区域の割付状態を空の状態とする上位区域解放手段と、
を備えることを特徴とする区画管理装置。
【請求項7】
記憶装置の区画管理装置が実行する記憶装置の区画管理方法において、
区画のサイズを取得する区画サイズ取得ステップと、
該区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出し、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けし、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表を生成する多層区分割付表生成ステップと、を備え、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記多層区分割付表は、前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納するものであり、
前記多層区分割付表生成ステップは、前記区画を包含する、2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画とし、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、主区域の割付情報の初期値として空きであることを示す空き状態を設定し、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態を設定する、
ことを特徴とする区画管理方法。
【請求項8】
記憶装置の区画管理装置が実行する記憶装置の区画管理方法において、
前記記憶装置の区画管理装置は、区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域に対応して、該各区域のそれぞれの割付状態を示す割付情報を格納する多層区分割付表であって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定された多層区分割付表を備え、
前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いて、前記区域の割付を管理するものであり、
前記記憶装置の区画管理装置が、
サイズを含むファイルあるいはメモリ領域の割付要求を受け付ける割付要求受付ステップと、
前記多層区分管理表を参照して、前記割付要求に含まれるサイズである割付要求サイズが、互いに異なる2のべき乗の和と前記区画の割当単位のサイズの積で表され、前記区分レベルの異なる区域のサイズの和である場合、該区分レベルの最大のものより1つ大きい区分レベルの空区域であって前記割付要求サイズより大きいサイズの一次割付区域を探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とし、前記割付要求に含まれるサイズである割付要求サイズが2のべき乗と前記区画の割当単位のサイズの積で表される場合、該割付要求サイズの空区域を一次割付区域として探索し、該一次割付区域に対応する区分番号を求めて割付区分番号とする空区域探索ステップと、
前記一次割付区域のサイズが前記割付要求サイズより大きい場合、該一次割付区域を、前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である二次割付区域と、残りの領域であって前記二次割付区域の区分レベルの異なる区域が割り付けられる区分レベルの順とは逆順で区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記二次割付区域のそれぞれの区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空候補状態を設定する二次割付ステップと、
前記割付区分番号を前記ファイルあるいはメモリ領域の割付要求の割り付け結果の1つとして出力する割付区分番号出力ステップと、を実行する
ことを特徴とする区画管理方法。
【請求項9】
請求項8記載の区画管理方法において、
前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域の区分レベルは等しく、前記多層区分割付表において前記区分レベルより1つ上位の区分レベルの区域を2分割したものであることを特徴とする区画管理方法。
【請求項10】
請求項9記載の区画管理方法において、
前記空区域探索ステップは、前記一次割付区域の区分レベルで空区域を探索できなかった場合に、前記多層区分割付表の上位の区分レベルの区域に対応する割付状態を参照して上位の区分レベルの空区域を探索して該区域の区分番号を求め、該区分番号の区域である仮割付区域を、前記一次割付区域と残りの領域であって前記区分レベルの順に区分レベルの異なる区域が連続して割り付けられた領域である隣接多層区域とに分割し、前記一次割付区域内の区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に使用中を設定し、前記隣接多層区域を構成する区域に対応する区分番号を求めて該区分番号の対応する前記多層区分割付表の割付状態に空状態を設定する仮割付ステップを含むことを特徴とする区画管理方法。
【請求項11】
請求項10記載の区画管理方法において、
前記空区域探索ステップは、割付要求されたファイルあるいはメモリ領域を割付可能な空状態の区域を探索できなかった場合、前記多層区分割付表から空候補状態の区域を探索することを特徴とする区画管理方法。
【請求項12】
請求項11記載の区画管理方法により管理されている区画内に割り付けられたファイルあるいはメモリ領域を記憶装置の区画管理装置が解放する記憶領域解放方法において、
サイズ及び割付区分番号を含むファイルあるいはメモリ領域の解放要求を受け付ける解放要求受付ステップと、
前記解放要求に含まれるサイズである解放要求サイズが、前記区分レベルの異なる区域の和である場合、前記隣接多層区域内の最小の区域の区分番号を求めて該区分番号の指す前記多層区分割付表から割付状態を読み出し、該読み出した割付状態が空または空候補の状態であれば、前記二次割付区域内の最小の区域と隣接多層区域内の最小の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記1つ上位の区分レベルの区域の解放を試み、前記隣接多層区域内の最小の区域の割付状態が使用中であれば、前記二次割付区域内の最小の区域の割付状態を空の状態とする一次割付区域内解放ステップと
前記一次割付区域が解放され、その区分番号の指す前記多層区分割付表の割付状態が空の状態になったとき、該一次割付区域と同一の区分レベルであって、1つ上位の区分レベルの区域を2つに分割したときの一方の区域を前記一次割付区域としたときの他方の区域の割付状態を前記多層区分割付表より読み出し、該他方の区域の割付状態が空または空候補の状態であれば、前記一方の区域と他方の区域に対応する前記多層区分割付表の割付状態に空または空候補以外の状態を設定するとともに前記上位の区分レベルの区域の解放を試み、前記他方の区域の割付状態が使用中であれば、前記一方の区域の割付状態を空の状態とする上位区域解放ステップと、
を含むことを特徴とする記憶領域解放方法。
【請求項13】
請求項7乃至請求項12のいずれか1項に記載の方法をコンピュータに実行させることを特徴とするプログラム。
【請求項14】
請求項7乃至請求項12のいずれか1項に記載の方法をコンピュータに実行させるプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項15】
請求項7乃至請求項11のいずれか1項に記載の区画管理方法により前記区画が管理されていることを特徴とする記憶装置。
【請求項16】
請求項7乃至請求項11のいずれか1項に記載の区画管理方法であって、前記記憶装置は記憶媒体駆動装置と記憶媒体とを含むものであり、前記記憶装置の前記区画は前記記憶媒体の区画である区画管理方法により前記区画が管理されていることを特徴とする記憶媒体。
【請求項17】
区画のサイズと前記区画の割当単位のサイズから互いに異なる2のべき乗の和を算出したときの、該算出した和の異なる2のべき乗の指数毎の該2のべき乗と前記区画の割当単位のサイズとの積のサイズの主区域により、そのサイズの順に前記区画を分割することで該区画を区分けし、前記各主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に区分けして得られる前記主区域を含む各区域毎に前記区画を管理する、記憶装置の区画管理のための多層区分割付表のデータ構造において、
前記多層区分割付表は、前記主区域を含む各区域に対応して該各区域のそれぞれの割付状態を示す割付情報を格納するものであって、
前記区域のサイズを規定する2のべき乗の指数を該区域の区分レベルとすると、
前記区域の割付情報を、前記区域の区分レベル順、同一区分レベルにおいては前記区域の前記区画内の配置順で格納し、かつ、前記区画を包含する2のべき乗と前記区画の割当単位のサイズの積のサイズを有する最小の区画を仮想区画としたとき、該仮想区画のサイズを規定する2のべき乗と前記区画の割当単位のサイズとの積のサイズの区域により、前記仮想区画を仮想的主区域に区分けし、該仮想的主区域を2分の1ずつ分割して順次前記区画の割当単位のサイズまで各サイズの区域に仮想的に区分けし、前記主区域の割付情報の初期値として空きであることを示す空き状態が設定され、前記主区域を分割して得られる区域の割付情報の初期値として該区域への割付を行わないことを示す空以外の状態が設定されたものであり、
前記仮想的に区分けされた仮想区域を識別するための、該仮想区域の区分レベル順、同一区分レベルにおいては該仮想区域の前記仮想区画内の配置順で割り振られた区分番号を用いた前記区域の割付を管理する区画管理を可能とする
ことを特徴とする多層区分割付表のデータ構造。
【請求項18】
請求項17記載のデータ構造を有するデータを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【図1A】
【図1B】
【図2A】
【図2B】
【図2C】
【図3】
【図4A】
【図4B】
【図4C】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図8A】
【図8B】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図12】
【図13】
【図14A】
【図14B】
【図15】
【図16】
【図17A】
【図17B】
【図17C】
【図18A】
【図18B】
【図18C】
【図1B】
【図2A】
【図2B】
【図2C】
【図3】
【図4A】
【図4B】
【図4C】
【図5】
【図6】
【図7A】
【図7B】
【図7C】
【図8A】
【図8B】
【図9】
【図10A】
【図10B】
【図11A】
【図11B】
【図11C】
【図12】
【図13】
【図14A】
【図14B】
【図15】
【図16】
【図17A】
【図17B】
【図17C】
【図18A】
【図18B】
【図18C】
【公開番号】特開2011−204279(P2011−204279A)
【公開日】平成23年10月13日(2011.10.13)
【国際特許分類】
【出願番号】特願2011−153399(P2011−153399)
【出願日】平成23年7月12日(2011.7.12)
【分割の表示】特願2011−526346(P2011−526346)の分割
【原出願日】平成23年2月9日(2011.2.9)
【出願人】(506235616)株式会社エスグランツ (32)
【Fターム(参考)】
【公開日】平成23年10月13日(2011.10.13)
【国際特許分類】
【出願日】平成23年7月12日(2011.7.12)
【分割の表示】特願2011−526346(P2011−526346)の分割
【原出願日】平成23年2月9日(2011.2.9)
【出願人】(506235616)株式会社エスグランツ (32)
【Fターム(参考)】
[ Back to top ]