(57)【要約】２のべき乗サイズの記憶領域から２のべき乗サイズではない記憶領域を取得した場合でも、２のべき乗サイズではない記憶領域から２のべき乗サイズの記憶領域を取得した場合でも、残りの記憶領域を管理することが可能であり、記憶領域を有効活用する技術を提供する。記憶装置の記憶領域管理方法において、取得した記憶領域を異なる２のべき乗サイズの記憶領域に分割してそれぞれ管理する。また、割付要求サイズを含む記憶領域の割付要求を受付け、割付要求サイズを包含する、２のべき乗の最小のサイズの空記憶領域を取得し、割付要求サイズの２進数表示を求め、受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗の大きさの記憶領域からなる連続した記憶領域を割り付ける。
2010021085.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置の記憶領域管理方法において、
予め割り付けられた記憶領域である区画の割付サイズを取得し、
該割付サイズと、前記区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、
前記区画を、該算出された互いに異なる２のべき乗のべき乗数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、
前記主区域毎に前記区画を管理することを特徴とする記憶領域管理方法。
【請求項２】
請求項１に記載の記憶領域管理方法において、
前記区画を前記主区域のサイズの大きさの順に分割することを特徴とする記憶領域管理方法。
【請求項３】
請求項２に記載の記憶領域管理方法において、前記主区域の先頭アドレスである割付位置と主区域のサイズである割付サイズを、前記区画の割付サイズと前記区画の先頭アドレスから求めて前記主区域毎に保持することを特徴とする記憶領域管理方法。
【請求項４】
請求項１に記載の記憶領域管理方法により前記区画を分割した主区域から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記主区域から前記割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを区画の割付単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項５】
請求項４に記載の記憶領域割付方法において、
前記区画を前記主区域のサイズの大きさの順に分割し、
該分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を探索して取得し、該取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に前記割付要求されたサイズの記憶領域を割り付けることを特徴とする記憶領域割付方法。
【請求項６】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記各主区域に対応するバディシステムにより探索して取得することを特徴とする記憶領域割付方法。
【請求項７】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って該最小のサイズの空記憶領域を探索し、すべての主区域において該最小のサイズの空記憶領域を取得できなかったときには、該探索した空記憶領域のサイズの２倍のサイズの空記憶領域を前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って探索することを繰り返すことにより取得することを特徴とする記憶領域割付方法。
【請求項８】
予め割り付けられた記憶領域である区画から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記区画から、前記割付要求サイズを包含する２のべき乗と前記区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを前記割付単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項９】
請求項４乃至請求項８のいずれか１項に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域を解放することを特徴とする記憶領域割付方法。
【請求項１０】
請求項９に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域は、バディシステムにより解放することを特徴とする記憶領域割付方法。
【請求項１１】
請求項４乃至請求項１０のいずれか１項に記載の記憶領域割付方法により割り付けた記憶領域を解放する記憶領域解放方法において、
前記ビット位置の小さい記憶領域から順に、バディシステムにより解放することを特徴とする記憶領域解放方法。
【請求項１２】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラム。
【請求項１３】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【請求項１４】
予め割り付けられた記憶領域である区画の割付サイズを取得し、該割付サイズと、前記区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、前記区画を、該算出された互いに異なる２のべき乗のべき乗数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、前記主区域毎に前記区画を管理する、記憶装置の記憶領域管理のための割付区分表のデータ構造において、
前記割付区分表は、前記主区域を識別する主区域番号毎に、該主区域の割付位置とサイズを格納するものであり、
前記主区域毎に記憶領域のバディシステムによる割付管理を可能とする割付管理表のデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置の記憶領域を管理し、記憶領域にファイル及びメモリオブジェクトの割付を行う技術に関する。
【背景技術】
【０００２】
従来から、ハードディスク等の記憶装置に記憶するデータを管理するための方式として、例えばＦＡＴ（File Allocation Tables）やＮＴＦＳ（NT File System）等のファイルシステムが採用されている。【０００３】
図１Ａは、従来から採用されているハードディスク等の外部記憶装置における区画割付を説明する図である。
図１Ａに示すように、例えば外部記憶装置３０６の記憶領域の先頭には、マスターブートレコード１９５と区画の管理データを格納した区画管理テーブル１９５ａが配置されている。更に図示しないディスクアロケータ等のユーティリティプログラムにより４つの区画１〜４（１９１，１９２，１９３，１９４）が割り付けられ、それぞれあるファイルシステムに割り当てられている。図１Ａに区画番号３についての区画情報１９６が例示されているように、区画管理テーブル１９５ａは、区画番号１９６ａ、開始位置１９６ｂ、区画サイズ１９６ｃのエントリを含んでいる。区画番号１９６ａには、区画を識別する区画番号が格納されており、図示の例では３である。開始位置には、区画の先頭アドレスの情報が格納されており、図示の例ではその内容は省略している。区画サイズ１９６ｃには、区画の割当単位領域の個数が格納されており、図示の例では５２である。【０００４】
各区画におけるファイルに対するディスクの割付管理は、それぞれの区画が割り当てられたファイルシステム特有の割付方法に依存するため煩雑であった。例えば、ＦＡＴによれば、割付を行ったブロックを示すリンクリストをファイルごとに保持している。また、ＮＴＦＳによれば、ファイルごとに割付を行ったブロックの開始位置及び連続するブロック数についての情報を保持している。【０００５】
これらのファイルシステムにおける割付管理の問題を解決するために、例えば、下記特許文献１及び非特許文献１に開示されているバディシステムに関する技術が提案されている。バディシステムは、記憶領域を２ｋからなるサイズごとに分割して割付の管理を行う。仮想記憶方式を使用していない単純なシステムでのメモリオブジェクトの割り付けでは、基本的なバディシステムが採用されている。【０００６】
図１Ｂは、バディシステムの割付原理を説明する図である。図１Ｂに示すのは、サイズが２３＝８の割当領域４９０とそれに対応するツリー構造体５８０である。割当領域４９０は、例えば図１Ａに例示した区画１〜４等である。【０００７】
ツリー構造体５８０は、割当領域４９０を２分の１のサイズに順次割付単位のサイズまで分割して得られる領域（特許文献１の用語を用いればエクステント）の関係を階層的にモデル化したものである。割付単位のサイズのエクステントの階層をレベル０とすると、図に示す例では、ルートノードのレベルは３、すなわち割当領域４９０のサイズである２のべき乗のべき数となる。【０００８】
ツリー構造体５８０のルートノード４８０は、分割前の割当領域４９０全体の領域（レベル３のエクステント）に対応し、ノード内に記載された“８”は、対応する割当領域４９０のサイズに相当する。また、括弧内の数字は、同一レベル内のエクステントを識別するレベル内番号である。【０００９】
ルートノード４８０にリンク５４０で接続されたノード４４０と、ルートノード４８０にリンク５４１で接続されたノード４４１は割当領域４９０を２分割した領域（レベル２のエクステント）に対応する。それぞれのエクステントのサイズは図に示すように４である。【００１０】
ノード４４０の下位には、リンク５２０で接続されたサイズ２のノード４２０と、リンク５２１で接続されたサイズ２のノード４２１が存在する。同様に、ノード４４１の下位には、リンク５２２で接続されたサイズ２のノード４２２と、リンク５２３で接続されたサイズ２のノード４２３が存在する。これら４つのノードはレベル１のエクステントに対応する。【００１１】
ノード４２０の下位には、リンク５１０で接続されたサイズ１のノード４１０と、リンク５１１で接続されたサイズ１のノード４１１が存在する。同様に、ノード４２１の下位には、リンク５１２で接続されたサイズ１のノード４１２と、リンク５１３で接続されたサイズ１のノード４１３が存在し、ノード４２２の下位には、リンク５１４で接続されたサイズ１のノード４１４と、リンク５１５で接続されたサイズ１のノード４１５が存在し、ノード４２３の下位には、リンク５１６で接続されたサイズ１のノード４１６と、リンク５１７で接続されたサイズ１のノード４１７が存在する。これら８つのノードはレベル０のエクステントに対応する。【００１２】
ルートノード４８０以外のノードは親ノードの対応するエクステントを２分割したエクステントの１つに対応したものとなっている。したがって、各レベルのエクステントのサイズの総和は、割当領域４９０のサイズに一致する。【００１３】
上述のバディシステムによれば、ある大きさのファイルを割り付けるとき、その大きさと等しいかそれを超える２ｋからなるサイズのエクステントの中から空きエクステントを探して割り付け、解放するときもそのサイズの空きエクステント群に戻せばよいので、ファイル及びメモリオブジェクトの割り付けと解放及び領域の管理が容易である。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開平７−２８６９３号公報
【非特許文献】
【００１５】
【非特許文献１】安井卓、「はじめて学ぶLinuxカーネル（第５回カーネル・メモリ管理）」日経Linux第６巻第１号（2004-01-08）p123-p130
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、上記のバディシステムによれば、２のべき乗単位で領域を割り付けることから、例えば２．１ＧＢのファイルを割り付けるとき、４ＧＢの領域が必要となり、ファイル割付後のブロックには、データの書き込まれていない領域が生じるにも関わらず、従来のファイルシステムにおいてはその領域に対して更にファイルを追加することができず、領域を有効に使用することができなかった。【００１７】
また、例えば記憶装置全体の記憶容量が１２７ＧＢであったとしても、記憶領域を要求する要求元に対して割り付ける物理的あるいは論理的な領域である区画について、最大でも６４ＧＢの区画として管理せざるを得なかった。区画についていえば、図１に例示した区画３（１９３）のサイズは５２であるが、２５＝３２のサイズの区画として管理せざるを得ないものである。【００１８】
すなわち、バディシステムによれば、２のべき乗単位で領域を割り付けることからファイル及びメモリオブジェクトの割り付けと解放及び領域の管理が容易ではあるが、２のべき乗サイズの領域から２のべき乗サイズではない領域を取得した場合の残りの領域の管理、及び２のべき乗サイズではない領域から２のべき乗サイズの領域を取得した場合の残りの領域の管理がなされていないため、領域を有効活用できないという課題がある。【００１９】
そこで本発明は、２のべき乗サイズの記憶領域から２のべき乗サイズではない記憶領域を取得した場合でも、２のべき乗サイズではない記憶領域から２のべき乗サイズの記憶領域を取得した場合でも、いずれの場合でも残りの記憶領域を管理することが可能であり、記憶領域を有効活用することのできる技術を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明の記憶領域管理手法によれば、取得した記憶領域を異なる２のべき乗サイズの記憶領域に分割して管理し割付を可能とすることにより、上述の課題を解決する。
本発明の一つの態様によれば、区画の割付サイズを取得し、割付サイズと、区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、区画を、該算出された互いに異なる２のべき乗のべき乗数毎に該２のべき乗と区画の割当単位のサイズの積からなる大きさの区域に区分し、記区分された区域毎に区画を管理する。【００２１】
また、本発明の別の態様によれば、割付要求サイズを含む記憶領域の割付要求を受付け、割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、割付要求サイズを区画の割付単位のサイズで割った値の２進数表示を求め、受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を割り付ける。
【発明の効果】
【００２２】
本発明によれば、記憶領域を２のべき乗サイズの組合せで管理するので任意のサイズの記憶領域を有効に管理することが可能であり、記憶領域を分割した各２のべき乗サイズの記憶領域で割付管理を行うことから、連続する記憶領域に無駄なくファイル及びメモリオブジェクトの割付がなされることとなるため、記憶領域の有効活用を図ることができる。
【図面の簡単な説明】
【００２３】
【図１Ａ】外部記憶装置における区画割付例を説明する図である。
【図１Ｂ】バディシステムの割付原理を説明する図である。
【図２】本発明を実施するためのハードウェア構成例を説明する図である。
【図３Ａ】本発明の実施形態１における取得済み区画を主区分（初期割付）して管理する概念を説明する図である。
【図３Ｂ】図３Ａに示す主区分を行った取得済み区画を管理する割付区分表を説明する図である。
【図３Ｃ】本発明の実施形態１における取得済み区画を主区分（初期割付）する処理フロー例を説明する図である。
【図４Ａ】本発明の実施形態２における割付要求サイズの区域を取得して使用区域を解放する概念を説明する図である。
【図４Ｂ】本発明の実施形態２における各区分レベルのエクステントの割付状態例を説明する図である。
【図５Ａ】本発明におけるバディシステムを初期化する処理フロー例を説明する図である。
【図５Ｂ】本発明におけるバディシステムによる空エクステントを取得する処理フロー例を説明する図である。
【図５Ｃ】本発明におけるバディシステムによる取得エクステントを解放する処理フロー例を説明する図である。
【図６】本発明の実施形態２における割付区分レベルの区域を取得する処理フロー例を説明する図である。
【図７Ａ】本発明の実施形態２における割付要求サイズの区域を取得する処理フロー例の前段を説明する図である。
【図７Ｂ】本発明の実施形態２における割付要求サイズの区域を取得する処理フロー例の後段を説明する図である。
【図８Ａ】本発明の実施形態２における取得した割付要求サイズの区域を解放する処理フロー例の前段を説明する図である。
【図８Ｂ】本発明の実施形態２における取得した割付要求サイズの区域を解放する処理フロー例の後段を説明する図である。
【図９】本発明の実施形態３における割付区分レベルの区域を取得する処理フロー例を説明する図である。
【図１０】本発明の実施形態３における空エクステントを取得する処理フロー例を説明する図である。
【発明を実施するための形態】
【００２４】
以下、本発明の好適な実施の形態について、図面を参照して詳細に説明するが、その前に、本明細書で用いる用語を以下のとおり定義する。
最初に、あらためて区画の定義を行う。本発明において「区画」とは、図１Ａを参照して説明したように、予め割り当てられた領域であり、最初に割り当てられる領域である。本発明においては、区画は取得済みであることを前提とする。
「区域」とは、割り当てられた、あるいは割り付けられた領域である。区画は予め割り当てられた領域であるから、区域の１つであり、区域のうちの特定のものである。
区域を、２のべき乗と割当単位領域の積のサイズを有する複数の区域に分割することを「多層区分」という。また、多層区分された区域を「多層区域」という。なお、以下の説明においては、割当単位領域についての言及は省略し、領域のサイズについて、単に２のｎ乗のサイズ等の表記を用いる場合がある。
【００２５】
以下、区域についての用語とそれに対応する区画についての用語を対比しながら定義する。
「区分」とは、領域を割り当てる、あるいは領域を分割して割り当てることであり、「割付」ということもある。このときの領域の分割サイズは、互いに異なる２のべき乗サイズで規定されるが、領域の先頭からサイズの大きさの順に割り付けられる。領域は、区域または区画である。特に区画を区分することを「主区分」という。また、主区分により割り付けられた区域を「主区域」という。主区分は、本発明においては、区画に対する初期割付である。
区分または主区分による区域または主区域の割付サイズの２のべき乗数を「区分レベル」という。図２に示すツリー構造体５８０を援用して説明すると、例えばノード４４１が対応するレベル３のエクステントのサイズは４であるから、その区分レベルは２である。
【００２６】
上記定義された用語により説明すると、本発明の一つの実施態様によれば、区画を主区分し、主区域毎に区画を管理する。
また、本発明の別の態様によれば、割付要求サイズを含む区域の割付要求を受付け、割付要求サイズを包含する２のべき乗と区画の割当単位のサイズの積の最小のサイズの区域を取得し、更に割付要求サイズと、区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、前記割付要求を受け付けた区域を、該算出された互いに異なる２のべき乗のべき乗数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの区域に多層区分した多層区域を使用区域とし、前記取得した区域のうち使用区域以外の残りの区域を、該残りの区域のサイズを互いに異なる２のべき乗の和と区画の割当単位のサイズの積からなる大きさとしたときの該互いに異なる２のべき乗のべき乗数毎に、該２のべき乗と前記割当単位のサイズの積からなる大きさの区域に多層区分して該多層区分された多層区域を解放して未使用状態とする。
【００２７】
次に本発明を実施するためのハードウェア構成例について、図２を参照して説明する。
本発明の一実施形態による記憶装置の領域管理及び区域の割付及び解放処理は図に示す中央処理装置３０２及びキャッシュメモリ３０３を少なくとも備えたデータ処理装置３０１によりデータ格納装置３０８を用いて実施される。データ格納装置３０８については、後に説明する割付区分表２０８と管理対象である取得済み区画２１１を含む。図３に示すように、データ格納装置３０８は、主記憶装置３０５または外部記憶装置３０６、あるいはそれらの組み合わせで実現することができ、あるいは通信装置３０７を介して接続された遠方に配置された装置を用いることも可能である。
【００２８】
すなわち、主記憶装置３０５をデータ処理装置３０１内のものとすることもできるし、割付区分表２０８は主記憶装置３０５に持ち、区画２１１は外部記憶装置３０６に割り当てられるのが多くの場合と考えられるが、区画２１１が、主記憶装置３０５に割り当てられる場合でも本発明が適用可能であることは、後の説明から明らかである。
図３の例示では、主記憶装置３０５、外部記憶装置３０６及び通信装置３０７が一本のバス３０４によりデータ処理装置３０１に接続されているが、接続方法はこれに限るものではない。
【００２９】
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。以下の説明においては、表記の簡略化のため、例えば区画番号１９６ａに格納された値３を区画番号１９６ａと呼ぶように、記憶領域に格納されたあるいは設定された値をその記憶領域の名前で呼ぶことがある。
【００３０】
以下、図３Ａ〜図３Ｃを参照して本発明の実施形態１を説明する。本実施形態は、区画の割付サイズを取得し、割付サイズから互いに異なる２のべき乗の和を算出し、区画を、該算出された互いに異なる２のべき乗のサイズの主区域に主区分し、主区分された主区域毎に区画を管理するものである。区画の取得方法には制限はなく、先に述べた図示しないディスクアロケータ等のユーティリティプログラムにより取得されていてもよく、区画の開始位置とサイズさえ与えられるものであればよい。
【００３１】
図３Ａは、本発明の実施形態１における、取得済み区画を主区分（初期割付）して管理する概念を説明する図である。
図３Ａに例示するのは、取得済み区画２１１の区画サイズ２２０と主区域１〜３（８１ａ、８２ａ、８３ａ）との関係である。取得済み区画２１１は、例えば、図１Ａに示す区画３（１９３）とすることができる。
任意の大きさの区画サイズは互いに異なる２のべき乗の和で表現することができることから、区画サイズ２２０には、区画サイズを互いに異なる２のべき乗の和で表現したとき、その和にべき乗が存在するべき乗数の位置（以下、有意のビット位置ということがある。）にビット１をその他のべき乗数の位置にビット０を格納した２進数表示により区画サイズの大きさを表している。
【００３２】
図３Ａに示す例では、区画サイズ２２０の複数のビット位置（５、４、２）にビット値１が格納されていることから、区画サイズは２のべき乗の値に等しくなく、取得済み区画２１１の区画サイズは２５＋２４＋２２＝５２である。取得済み区画２１１の開始位置２１９から、矢印（２２５、２２４、２２２）で示すように区画サイズ２２０の有意のビット位置（５、４、２）に対応して、それぞれ２のビット位置の値のべき乗のサイズの主区域１〜３（８１ａ、８２ａ、８３ａ）が割り付けられる。
【００３３】
図３Ｂに示すのは、図３Ａに示す主区分を行った取得済み区画２１１を管理する割付区分表２０８である。割付区分表２０８は割り付けられた主区域毎にエントリを有し、各エントリは主区域番号２０５、割付位置２０２、割付サイズ２０３の項目を含んで構成される。
【００３４】
割付位置２０２には、取得済み区画２１１の位置情報が格納されており、主区域番号が１の主区域１の割付位置２０２には開始位置２１９の値（以下、開始位置ということがある。）が、割付サイズ２０３には２５が格納されている。同様に、主区域２の割付位置２０２には開始位置＋２５、割付サイズ２０３には２４が格納され、主区域３の割付位置２０２には開始位置＋２５＋２４、割付サイズ２０３には２２が格納されている。
【００３５】
以上のような本発明の実施形態１の主区分の手法を採用することにより、取得済みの与えられた区画のサイズが２のべき乗の値に等しくなくても、その区画を２のべき乗の値に等しい区域に区分してそれぞれ管理することができるので、初期割付された主区域毎にバディシステムの手法を採用することが可能となり、取得済みの区画を効率よく利用することが可能となる。
【００３６】
図３Ｃは、本発明の実施形態１における区画を主区分する処理フロー例を説明する図である。ここで主区分する処理は、具体的には例えば図３Ｂに示す割付区分表２０８の値を設定する処理である。以下では、例として割付区分表２０８を参照して説明する。
【００３７】
最初にステップＳ２０１で、割付ビットマップに与えられた取得済み区画の区画サイズを２進数表示した値を設定する。割付ビットマップは図３Ａに示す区画サイズ２２０のイメージのものとなる。
ここで割付ビットマップは図示しないワークエリアである。以下の説明においても、表記の簡略化のため、ワークエリアの名称Ｘであることを特に断ることなく、「Ｘに・・・を設定する。」のように記述することがある。
【００３８】
次にステップＳ２０２で、割付位置に区画の開始位置を設定する。次にステップＳ２０３で、主区域番号に初期値を設定する。次にステップＳ２０４で、ビット位置に割付ビット位置の最上位のビット位置を設定する。図３Ａに示す例では、ビット位置には５が設定される。
【００３９】
次にステップＳ２０５に進み、割付ビットマップより、ビット位置の指すビット値を取り出し、ステップＳ２０６ａで、取り出したビット値が１であるか判定する。ビット値が１であればステップＳ２０７ａに進み、割付サイズに、ビット位置の２のべき乗の値を設定する。
【００４０】
次にステップＳ２０７ｂにおいて、主区域番号の指す割付区分表２０８の、割付位置２０２に割付位置に設定した値を、割付サイズ２０３にビット位置に設定した値をべき乗数とする２のべき乗の値を設定し、ステップＳ２０８に進む。
図３Ｂに示す例における最初の処理においては、主区域番号２０５には初期値の１が、割付位置２０２には開始位置が、割付サイズ２０３には２５が設定される。
【００４１】
ステップＳ２０８では、ビット位置は最下位のビット位置であるか判定し、最下位のビット位置であれば処理を終了し、最下位のビット位置でなければステップＳ２０９ａに移行し、割付位置に、割付サイズを加算した値を設定する。次にステップＳ２１０で主区域番号に１を加え、ステップＳ２１１でビット位置に設定する値を１つ減らしてステップＳ２０５に戻る。
【００４２】
一方ステップＳ２０６ａでの判定がビット値は１ではないであれば、ステップＳ２０６ｂに進み、ビット位置は最下位のビット位置であるか判定し、最下位のビット位置であれば処理を終了し、最下位のビット位置でなければステップＳ２１１に移行する。
上記ステップＳ２０５〜ステップＳ２１１のループ処理をビット位置が最下位のビット位置になるまで繰り返し、ビット位置が最下位のビット位置になると処理を終了する。
以上の処理により取得済み区画の主区分が完了する。
【００４３】
次に、本発明の実施形態２について説明する。本実施形態２は、要求元から２のべき乗サイズと異なる割付要求サイズを含む区域の取得要求を受け付け、該割付要求サイズを包含する最小の２のべき乗サイズ（割付区分レベル）の区域を、バディシステムの割付処理により取得し、そのうち未使用区域をバディシステムの割付処理により解放することにより、割付要求サイズに対応する使用区域を異なる区分レベルの区域の連続領域として取得するものである。上述の割付区分レベルの区域の取得は、実施形態１で区画から主区分された主区域からとすることができるが、それに限るものではない。
【００４４】
図４Ａは、本発明の実施形態２における、割付要求サイズの区域を取得し未使用区域を解放する概念を説明する図である。
図４Ａには、２のべき乗サイズとは等しくない割付要求サイズ２０ａと、それに基づいて取得した区域８０との関係及び取得した区域８０を多層区分した区域１〜４（８１ｂ、８３ｂ、８４ｃ、８２ｃ）との関係が示されている。割付要求サイズ２０ａの有意のビット位置は３と１であり、割付要求サイズは２３＋２１＝１０である。
【００４５】
複数の有意ビットが存在する場合、すなわち割付要求サイズが２のべき乗のサイズでない場合は、割付要求サイズ２０ａの最上位の有意ビットの位置３より１つ上位の位置の値４が割付区分レベル４４ａとなる。そして、図の点線の矢印４４に示すように、バディシステムによる割付処理２３により、点線の矢印４０で関係を示すように、割付区分レベル４４ａである４を２のべき乗数とする２のべき乗サイズの区域８０を取得する。区域８０の取得には、任意の既存のバディシステムの割付処理を採用することが可能であるが、後に図６及び図５Ｂを参照して、本実施形態２におけるバディシステムによる割付処理例を説明する。
【００４６】
割付要求サイズ２０ａの各ビット値と区域１〜４（８１ｂ、８３ｂ、８４ｃ、８２ｃ）との関係は、実線の矢印７１ｂ、７３ｂ及び点線の矢印７３ｃ、７２ｃで示すとおりである。すなわち、割付要求サイズ２０ａの最上位の有意ビットの位置が３であることが、２３のサイズの区域１（８１ｂ）が区分されて分割割付されることに対応し、次のビット位置２のビット値が０であることが、２２のサイズの区域２（８２ｃ）が分割割付されることに対応する。そして、次のビット位置１が有意ビットの位置であることから、２１のサイズの区域３（８３ｂ）が分割割付され、更にビット位置１が最下位の有意ビットの位置であることから、残りの領域が区域４（８４ｃ）として分割割付される。
区域１（８１ｂ）と区域３（８３ｂ）により割付要求サイズに対応する使用区域が構成され、区域４（８４ｃ）と区域２（８２ｃ）により未使用区域が構成される。
【００４７】
図４Ｂは、本発明の実施形態２における各区分レベルのエクステントの割付状態例を説明する図である。
図４Ｂに示す各エクステントの割付状態とレベル内番号のツリーは、図４Ａに示す取得した区域８０に対応するエクステントを２分の１ずつ分割（バディ分割）したエクステントの割付状態１または０を、区分レベル４から区分レベル１まで示したものである。割付状態１は塞状態に相当し、割付状態０は空状態に相当する。空状態はそのエクステントが割付可能な状態であり、塞状態は、それ単独ではそのエクステントの全体あるいは一部が割付可能か不明な状態である。上位区分の割付状態と下位区分の割付状態を結ぶ実線は、各割付状態に関するエクステントのバディ分割の関係を示したものである。レベル内番号は０番から始まるものとして示している。
【００４８】
区分レベル４の割付状態６１６は、区域８０に対応するエクステントのものであり、１が設定されている。区分レベル３の割付状態６０８のうち、レベル内番号０のものは区域１（８１ｂ）に対応するエクステントのものであり、１が設定され、それをバディ分割した下位区分のエクステントの割付状態にはすべて１が設定されている。区分レベル１の割付状態６０２のうち、レベル内番号４のものは区域３（８３ｂ）に対応するエクステントのものであり、レベル内番号５のものは区域４（８４ｃ）に対応するエクステントのものである。それぞれ使用区域、不使用区域を構成することに対応して１及び０が設定されている。そして、区分レベル２の割付状態６０４のうち、レベル内番号３のものは区域２（８２ｃ）に対応するエクステントのものであり、０が設定されている。
【００４９】
区分レベル１の割付状態６０２のうち、レベル内番号６と７のものは１ではあるが、それらの上位区分の区分レベル２の割付状態６０４のうちレベル内番号３の割付状態が０であることから、区分レベル２のレベル内番号３のエクステントをバディ分割することにより空状態として使用することができる。
区分レベル１のレベル内番号６と７の割付状態を１とすることにより、図４Ｂに示す割付状態において区分レベル１の空エクステントを探索したとき、レベル内番号５の空エクステントが優先的に取得される。したがって、その後区分レベル２の空エクステントが探索されたときのために、区分レベル２のレベル内番号３のエクステントを空エクステントとして残しておくことができる。
理解を容易にするため、図４Ｂには割付状態をツリーとして表記したが、割付状態を連続した領域におけるビットマップに保持することができることは明らかである。
【００５０】
次に図５Ａ〜図５Ｃを参照して、実施形態２におけるバディシステムについて説明する。以下において、実施形態２におけるバディシステムを、実施形態１で主区分された区画を構成する主区域内のエクステントの割付解放を行うものとして、すなわち主区域番号が与えられるものとして説明するが、先に述べたように、それに限ることなく、２のべき乗サイズのエクステントの割付解放を行うものとしてもよい。
【００５１】
図５Ａは、本実施形態におけるバディシステムを初期化する処理フロー例を説明する図である。
図に示すように、ステップＳ５０１において、区分レベルに、主区域番号の指す主区域の割付サイズに対応する区分レベルを設定する。次にステップＳ５０２で、レベル内開始番号に、初期値（例えば値０）を設定し、ステップＳ５０３で、レベル内終了番号に、レベル内開始番号を設定する。
【００５２】
次にステップＳ５０４で、区分レベルのレベル内開始番号の指す割付状態に空状態を設定し、ステップＳ５０５に進む。
上述のステップＳ５０１〜ステップＳ５０４の処理は、図４Ａの例示の区域８０が主区域であるとして説明すると、区分レベル４の割付状態６１６に空状態を設定するものである。なお、区域を取得する主区域の選択については、後に図６を参照して説明する。また、図４Ｂに示すレベル内番号は、レベル内開始番号＋割付番号として一般化をはかっている。レベル内開始番号は任意の番号であり、割付番号はレベル内開始番号からのオフセットである。したがって、レベル内開始番号を０とすると、レベル内番号と割付番号は同一の値となる。
【００５３】
ステップＳ５０５においては、区分レベルは最下位の区分レベルか判定する。最下位の区分レベルであれば初期化は完了しているので処理を終了する。最下位の区分レベルでなければ、ステップＳ５０６に進む。
ステップＳ５０６では、区分レベルより値１を減らす。次にステップＳ５０７で割付番号に、レベル内開始番号を設定し、ステップＳ５０８で、レベル内終了番号に、レベル内終了番号を２倍した値に値１を加えた値を設定する。
次にステップＳ５０９で区分レベルの割付番号の指す割付状態に塞状態を設定し、ステップＳ５１０で、割付番号はレベル内終了番号と等しいか判定する。割付番号がレベル内終了番号と等しければステップＳ５０５に戻り、等しくなければ、ステップＳ５１１で割付番号に１を加えてステップＳ５０９に戻る。
【００５４】
上述のステップ５０５〜ステップＳ５１１の処理は、主区域をバディ分割したエクステントの割付状態に塞状態を設定するものである。図４Ｂに示す例では、レベル内終了番号が初期値の０から１、３、７と処理ループを回るたびにステップ５０８で計算され、区分レベル３〜区分レベル１のレベル内開始番号０からレベル内終了番号までの割付番号（レベル内番号）の指す割付状態に塞状態が設定される。上述の空状態、塞状態は、先に述べたように、割付状態を表すビットマップのバディ分割された各エクステントに対応するビット位置に設定することができる。
【００５５】
以上の処理により、本実施形態のバディシステムは初期状態となる。初期状態においては、主区域に対応するエクステントのみ空状態とし、主区域に対応するエクステントをバディ分割した実質的には空状態であるエクステントを塞状態とする。先に述べたとおり、塞状態のエクステントは使用可能な場合と使用不可能な場合とがある。
【００５６】
図５Ｂは、本実施形態におけるバディシステムによる空エクステントを取得する処理フロー例を説明する図である。バディシステムは、空エクステントの取得が最初に行われる前には、図５Ａを参照して説明した初期化処理により初期化されているものとする。
【００５７】
最初に、ステップＳ５２１において、主区分レベルに、主区域番号の指す主区域の割付サイズに相当する区分レベルを設定すると共に、区分レベルに割付区分レベルを設定する。ここで割付区分レベルは、バディシステムにより取得する空エクステントの区分レベルである。図５Ａに示す例では４が設定される。
【００５８】
次にステップＳ５２２において、区分レベル内の空状態の区域を探索し、ステップＳ５２３で区分レベルに空があるか判定する。空がなければステップＳ５２４に分岐して、区分レベルは主区分レベルを指すか、すなわち主区域のサイズであるか判定する。主区分レベルを指す場合は取得失敗として処理を終了し、主区分レベルを指していなければ、ステップＳ５２５に進み、区分レベルに値１を加えてステップＳ５２２に戻る。
【００５９】
一方、ステップＳ５２３で区分レベルに空があると判定されるとステップＳ５２６に進み、空状態の割付番号を取得し、割付番号の指す割付状態に塞状態を設定し、ステップＳ５２７に進む。ステップＳ５２７では、区分レベルは割付区分レベルか判定し、割付区分レベルであれば処理を終了し、割付区分レベルでなければステップＳ５２８に分岐する。
【００６０】
ステップＳ５２８では、区分レベルから値１を減らし、ステップＳ５２９に進んで割付番号を２倍する。このステップＳ５２８とステップＳ５２９の処理は、バディ分割の処理に相当する。次にステップＳ５３０で区分レベルの割付番号の指す割付状態に空状態を設定し、ステップＳ５３１において、区分レベルの割付番号とバディ分割の対をなす割付番号（以下、バディということがある。）の指す割付状態に空状態を設定してステップＳ５２２に戻る。すなわち、バディ分割により得られた２つのエクステントの割付状態を空状態として空状態のエクステントの探索を行う。そして、ステップＳ５２６で探索された空状態のエクステントの割付状態を塞状態とし、バディの割付状態は空状態とすることを区分レベルが割付区分レベルとなるまで繰り返し、割付区分レベルの空エクステントを取得する。
【００６１】
図５Ｃは、本実施形態におけるバディシステムによる取得エクステントを解放する処理フロー例を説明する図である。
最初に、ステップＳ５４１において、主区分レベルに、主区域番号の指す主区域の割付サイズに相当する区分レベルを設定すると共に、区分レベルに解放区分レベルを設定する。ここで解放区分レベルは、バディシステムにより解放する塞状態のエクステントの区分レベルである。図４Ａに示す例の区域１（８１ｂ）を解放する場合には、解放区分レベルはそれに対応した３であり、区分レベルには３が設定される。また、解放する塞状態のエクステントを特定する解放区分レベル内の割付番号が、解放番号として与えられているものとする。
【００６２】
次にステップＳ５４３において、区分レベルは主区分レベルを指すか判定する。主区分レベルを指すのであれば区分レベルはルートノードに対応し、バディは存在しないのでステップＳ５４８に分岐し、区分レベルの解放番号の指す割付状態に空状態を設定して処理を終了する。
【００６３】
一方ステップＳ５４３で区分レベルは主区分レベルを指さないと判定されるとステップＳ５４４に進み、区分レベルの解放番号のバディの指す割付状態は空状態か判定する。空状態でなければ先に説明したステップＳ５４８に進み、空状態であれば、ステップＳ５４５に分岐する。
【００６４】
ステップＳ５４５では、区分レベルの解放番号のバディの指す割付状態に塞状態を設定する。次にステップＳ５４６で区分レベルに１を加え、ステップＳ５４７で解放番号に解放番号を２で割った商を設定してステップＳ５４３に戻る。
【００６５】
以上のステップＳ５４３〜ステップＳ５４７のループ処理を、区分レベルが主区分レベルを指すか区分レベルの解放番号のバディの指す割付番号が塞状態となるまで繰り返し、最後に区分レベルの解放番号の指す割付状態に空状態を設定することで割付区域の解放処理が完了する。すなわち、図５Ｄに示す処理では、解放番号のバディの指す割付状態が空状態であれば、解放番号とバディの指すペアの割付状態をともに塞状態とし、上位区分レベルにおいてバディの指す割付状態が塞状態となったとき、あるいは主区分レベルを指す区分レベルにまで至ったときに解放番号の指す割付状態に空状態を設定するものである。
【００６６】
次に、本発明の実施形態２における割付区分レベルの区域を取得しその区域を多層区分し、多層区分された多層区域のうち、割付要求サイズに対応する使用区域を異なる区分レベルの区域の連続領域として取得し、残りの未使用区域をバディシステムの割付処理により解放する処理を、図６〜図７Ｂを参照して説明する。
【００６７】
図６は、本実施形態における割付要求区分レベルの区域を取得する処理フロー例を説明する図である。割付要求区分レベルの区域の取得は、割付要求サイズの区域を取得するのに先立って行われるものであり、後に図７Ａ及び図７Ｂを参照して説明する割付要求サイズの区域を取得する処理の一部をなすものである。ここで割付要求区分レベルの区域は、例えば、図３Ａに示す取得済み区画２１１から取得される。以下では、図４Ａに示す例に加えて、図３Ａ及び図３Ｂに示す割付区分表２０８を参照して説明する。
【００６８】
図６に示すように、ステップＳ６０１において、主区域番号に、割付区分表の最下位の主区域番号を設定する。図３Ｂの例では、割付区分表２０８の主区域番号には３が設定される。すなわち、最も小さいサイズの主区域から割付要求サイズの区域の取得処理が開始される。
【００６９】
次にステップＳ６０２で主区域番号の指す割付区分表の割付サイズを読み出し、ステップＳ６０３において該読み出した割付サイズは割付要求サイズより小さいか判定する。小さければ、ステップＳ６０６に分岐する。図４Ａに示す例では、割付要求サイズは１０であるから、最初の処理においては主区域番号２０５が３の割付サイズ２０３の値４は割付要求サイズより小さく、ステップＳ６０６を介してステップＳ６０７に進み、次の主区域番号として２が設定される。
【００７０】
一方ステップＳ６０３において割付サイズは割付要求サイズより小さくないと判定されるとステップＳ６０４に進み、主区域番号の指す主区域から割付要求区分レベルの区域を取得し、割付番号を得る。ステップＳ６０４の詳細は、先に図５Ｂを参照して説明したものである。
【００７１】
次にステップＳ６０５において、ステップＳ６０４で割付要求区分レベルの区域を取得したか判定する。割付要求区分レベルの区域を取得していれば、ステップＳ６０８に分岐し、割付区分レベルの区域の取得結果に、主区域番号、割付区分レベル、割付番号を設定して処理を終了する。
【００７２】
ステップＳ６０４の処理で割付要求区分レベルの区域を取得していなければ、ステップＳ６０６に進み、主区域番号は最上位の番号か判定する。主区域番号が最上位の番号であれば取得失敗として処理を終了し、主区域番号が最上位の番号でなければ、ステップＳ６０７において主区域番号に次の主区域番号を設定してステップＳ６０２に戻る。
【００７３】
以上のステップＳ６０２からステップＳ６０７までのループ処理を、主区域番号を更新しながら割付要求区分レベルの区域を取得するまで繰り返し、主区域番号が最上位の番号であっても割付要求区分レベルの区域を取得できなければ、取得失敗として処理を終了する。
【００７４】
図３Ａに示す初期割付及び図４Ａに示す割付要求サイズの例では、割付要求サイズが１０、主区域３（８３ａ）の割付サイズが４、主区域２（８２ａ）の割付サイズが１６であるから、主区域２（８２ａ）からステップＳ６０４における割付区分レベルの区域の取得を試み、その取得に失敗した場合に次に主区域１（８１ａ）から割付区分レベルの区域の取得を試みる。主区域２（８２ａ）のサイズは１６、主区域１（８１ａ）のサイズは３２であるから、取得される割付区分レベルの区域の割付番号は、０か１になる。
【００７５】
次に図７Ａ及び図７Ｂを参照して、割付要求サイズの区域を取得する処理を説明する。
図７Ａは、本実施形態２における割付要求サイズの区域を取得する処理フロー例の前段を説明する図である。この前段の処理は、割付区分レベルの区域を取得する処理である。
【００７６】
最初にステップＳ７０１で、割付ビットマップに割付要求サイズを２進数表示した値を設定する。割付ビットマップは図４Ａに示す割付要求サイズ２０ａのイメージのものとなる。割付要求サイズは、要求元から与えられることを前提としている。
次にステップＳ７０２で、最下位ビット位置に割付ビットマップのビット値が１である最も下位のビット位置を設定する。図４Ａに示す例では、最下位ビット位置には１が設定される。
【００７７】
次にステップＳ７０３で、最上位ビット位置に割付ビットマップのビット値が１である最も上位のビット位置を設定する。図４Ａに示す例では、最上位ビット位置には３が設定される。
【００７８】
次にステップＳ７０４において、最上位ビット位置と最下位ビット位置は一致するか判定する。一致すれば、ステップＳ７０５に分岐する。この場合は図４Ａに示す例とは異なり、割付要求サイズ２０ａが２のべき乗サイズと等しい場合であり、ステップＳ７０１で設定した割付ビットマップでビット１が立っているビット位置は１箇所だけである。したがって以下の説明において、２のべき乗サイズと等しい割付要求をシングルビット要求ということがある。
【００７９】
ステップＳ７０４からステップＳ７０５に分岐した場合は、ステップＳ７０５で、割付区分レベルに最上位ビット位置を設定する。この場合には、割付区分レベルのサイズは割付要求サイズと等しくなる。
次にステップＳ７０６に進み、図６を参照して説明した処理により、割付区分レベルの区域を取得し、主区域番号と割付番号を得る。ここでの主区域番号は、図６のステップＳ６０１またはステップＳ６０７で設定されたものである。また割付番号は、ステップＳ６０４で呼び出す図５Ｃの処理フロー例のステップＳ５２６で設定されたものである。
【００８０】
次にステップＳ７０７において、ステップＳ７０６の処理で割付区分レベル、すなわち割付要求サイズの区域を取得したか判定し、取得していなければ、取得失敗として処理を終了する。割付要求サイズの区域を取得していれば、ステップＳ７０７ａにおいて、レベル内番号に、レベル内開始番号に割付番号を加えた値を設定し、ステップＳ７０７ｂで、取得結果に、主区域番号、割付区分レベル、レベル内番号を設定して処理を終了する。
【００８１】
一方、図４Ａの例のように最上位ビット位置と最下位ビット位置が一致しなければ、ステップＳ７０８で割付区分レベルに最上位ビット位置に値１を加えた値を設定してステップＳ７０９に進む。図４Ａの例では、割付区分レベル４４ａとして４が設定される。この場合は、ステップＳ７０１で設定した割付ビットマップの複数のビット位置でビット１が立っているので、以下の説明において、２のべき乗サイズと等しくない割付要求サイズの割付要求をマルチビット要求ということがある。
【００８２】
ステップＳ７０９では、ステップＳ７０６と同様に、図６を参照して説明した処理により、割付区分レベルの区域を取得し、主区域番号と割付番号を得る。
次にステップＳ７１０において、ステップＳ７０９の処理で割付区分レベルの区域を取得したか判定し、取得していなければ、取得失敗として処理を終了し、取得していれば図７Ｂに示すステップＳ７１１に進む。
【００８３】
図７Ｂは、実施形態２の、マルチビット要求における割付要求サイズの区域を取得する処理フロー例の後段を説明する図である。この後段の処理は、取得済みの割付区分レベルの区域から未使用区域を解放することにより、割付要求サイズの区域を使用区域として取得する処理である。
【００８４】
まずステップＳ７１１において、割付番号に、ステップＳ７０９で得た割付番号を２倍した値を設定し、ステップＳ７１２において、ビット位置に、最上位ビット位置を設定する。図３Ａ及び図４Ａの例では、割付番号は０または１であり、最上位ビット位置は３であるから、割付番号には０または１が、ビット位置には３が設定される。
【００８５】
次にステップＳ７１３で、割付ビットマップより、ビット位置の指すビット値を取り出し、ステップＳ７１４において取り出したビット値が１であるか判定し、１であればステップＳ７１８に進み、０であればステップＳ７１５に進む。
ステップＳ７１５では、解放区分レベルにビット位置を設定し、ステップＳ７１６に進み、解放番号に、割付番号に１を加えた値を設定する。次にステップＳ７１７において、図５Ｄを参照して説明した処理により、主区域番号の指す主区域から解放区分レベルの解放番号の区域を解放し、ステップＳ７１７ａにおいて、割付番号に、割付番号を２倍した値を設定してステップＳ７２０に進む。
【００８６】
一方ステップＳ７１８では、ビット位置が最下位ビット位置か判定し、最下位ビット位置であればステップＳ７２１へ進み、最下位ビット位置でなければ、ステップＳ７１９に分岐して割付番号に１を加えた値を２倍した値を設定し、ステップＳ７２０に進む。ステップＳ７２０では、ビット位置から１を減らしてステップＳ７１３に戻る。
【００８７】
図３Ａ、図４Ａの例では、先に述べたようにステップＳ７０９で得る割付区分レベル４の区域の割付番号は０または１である。そこで割付区分レベルの区域をバディ分割した区分レベル３の区域１（８１ｂ）の割付番号をステップＳ７１１で０または２とした後、初回のビット位置３の処理ではステップＳ７１８からステップＳ７１９に分岐して割付番号を２または６とし、ビット位置を２とする。２度目の処理では、ビット位置２のビット値は０なので、ステップＳ７１５に進む。そして解放区分レベルに２が、解放番号に３または７が設定される。区分レベル３の区域１（８１ｂ）の割付番号が０であれば、区分レベル２の解放番号３の区域２（８２ｃ）が解放され、区分レベル３の区域１（８１ｂ）の割付番号が２であれば、同様に区分レベル２の解放番号７の区域２（８２ｃ）が解放される。
【００８８】
一方、ステップＳ７１８でビット位置が最下位ビット位置と判定されると、ステップＳ７２１に進み、解放区分レベルにビット位置を設定し、ステップＳ７２２で、解放番号に、割付番号に１を加えた値を設定する。そして、ステップＳ７２３において、図５Ｄを参照して説明した処理により、主区域番号の指す主区域より解放区分レベルの解放番号の区域を解放する。
【００８９】
図３Ａ、図４Ａの例では、ビット位置１が最下位ビット位置であり、ビット位置２のステップＳ７１７ａの処理で割付番号は４または１２になっているので、解放区分レベルに１が、解放番号には５または１３が設定される。したがって、区分レベル３の区域１（８１ｂ）の割付番号が０であれば、区分レベル１の解放番号５の区域４（８４ｃ）が解放され、区分レベル３の区域１（８１ｂ）の割付番号が２であれば、同様に区分レベル１の解放番号１３の区域４（８４ｃ）が解放される。
【００９０】
ステップＳ７２３に引続きステップＳ７２４では、レベル内番号に、レベル内開始番号に割付番号を加えた値を設定し、ステップＳ７２５で、割付要求サイズの区域の取得結果に、主区域番号、割付区分レベル、レベル内番号を設定して処理を終了する。ここで設定される割付区分レベルは、図７ＡのステップＳ７０８で設定されたものである。
以上の処理により要求されたサイズに対応する使用区域の取得と未使用区域の解放が完了する。
【００９１】
次に、図８Ａ及び図８Ｂを参照して、割付要求サイズの使用区域を解放する処理を説明する。
図８Ａは、実施形態２における取得した割付要求サイズの区域（使用区域）を解放する処理フロー例の前段を説明する図である。図７Ｂを参照して説明した割付要求サイズの区域の取得結果は解放要求に含まれるものとし、また割付要求サイズも解放要求に含まれるものとすることができる。
【００９２】
最初にステップＳ８０１で、解放番号に、レベル内番号からレベル内開始番号を引いた値を設定するとともに、解放区分レベルに割付区分レベルを設定し、次にステップＳ８０２において、割付ビットマップに割付要求サイズを２進数表示した値を設定する。
次にステップＳ８０３で、最下位ビット位置に割付ビットマップのビット値が１である最も下位のビット位置を設定する。図５Ａに示す例では、最下位ビット位置には１が設定される。次にステップＳ８０４で、最上位ビット位置に割付ビットマップのビット値が１である最も上位のビット位置を設定する。
【００９３】
次にステップＳ８０５において、最上位ビット位置と最下位ビット位置は一致するか判定する。一致すれば、ステップＳ８０６に分岐する。この場合は割付要求サイズ２０ａが２のべき乗サイズと等しい場合であり、割付要求がシングルビット要求の場合である。ステップＳ８０６では、図５Ｄを参照して説明した処理により、主区域番号の指す主区域から解放区分レベルの解放番号の指す区域を解放し、処理を終了する。
【００９４】
一方ステップＳ８０５の判定において、最上位ビット位置と最下位ビット位置が一致しなければ、図８Ｂに示すステップＳ８０７に進む。
図８Ｂは、実施形態２における取得した割付要求サイズの区域（使用区域）を解放する処理フロー例の後段を説明する図である。この後段の処理は、マルチビット要求の使用区域を解放する処理である。
【００９５】
図に示すように、ステップＳ８０７で解放番号（割付番号）に、解放番号を２倍した値を設定し、ステップＳ８０８でビット位置に、最上位ビット位置を設定する。
次にステップＳ８０９で、割付ビットマップより、ビット位置の指すビット値を取り出し、ステップＳ８１０で、該取り出したビット値は１か判定する。ビット値が１でなければステップＳ８１１において、解放番号に、解放番号を２倍した値を設定してステップＳ８１４に進む。ビット値が１であれば、ステップＳ８１３において、スタックに、ビット位置と解放番号を書き込み、ステップＳ８１４で、解放番号に、解放番号に値１を加えた値を２倍した値を設定してステップＳ８１４に進む。
【００９６】
ステップＳ８１４ではビット位置は最下位ビット位置か判定し、最下位ビット位置でなければステップＳ８１５でビット位置から１を減らしてステップＳ８０９に戻る。最下位ビット位置であれば、ステップＳ８１６においてスタックは空か判定し、空であれば処理を終了し、空でなければ、ステップＳ８１７に進み、スタックより、ビット位置と解放番号を取り出す。次にステップＳ８１８で解放区分レベルにステップＳ８１７で取り出したビット位置を設定する。そして、ステップＳ８１９で図５Ｃを参照して説明した処理により、主区域番号の指す主区域から解放区分レベルの解放番号の区域を解放し、ステップＳ８１６に戻る。
上述のステップＳ８１６〜ステップＳ８１９のループ処理をスタックが空になるまで繰り返すことにより、割付要求サイズの区域の解放が完了する。
【００９７】
図４Ａに例示する割付要求サイズの使用区域を解放する場合には、ステップＳ８０１で解放番号に０または１が設定され、ステップＳ８０７で解放番号に０または２が設定される。ビット位置にはステップＳ８０８で３が設定され、スタックには最初にビット位置３と解放番号０または２が設定される。解放番号に１を足して２倍し、２または６に更新した後、ビット位置２の処理で更に解放番号を２倍して４または１２に更新する。そしてビット位置１の処理で、スタックにビット位置１と解放番号４または１２を書き込む。
【００９８】
その後、スタックからビット位置１と解放番号４または１２を取り出し、解放区分レベルに１を設定し、解放番号４または１２の区域を解放する。区分レベル３の区域１（８１ｂ）の割付番号が０であれば、区分レベル１の解放番号４の区域３（８３ｂ）が解放され、区分レベル３の区域１（８１ｂ）の割付番号が２であれば、同様に区分レベル１の解放番号１２の区域３（８３ｂ）が解放される。
続いてスタックからビット位置３と解放番号０または２を取り出し、解放区分レベルに３を設定し、解放番号０または２の区域を解放する。すなわち区分レベル３の区域１（８１ｂ）が解放される。以上の処理により、使用区域を構成していた区域１（８１ｂ）と区域３（８３ｂ）が解放される。
【００９９】
以上のような本発明の実施形態２の手法を採用することにより、取得要求された区域のサイズが２のべき乗の値に等しくなくても、その区域を２のべき乗の値に等しい区域に区分して区域毎に管理することができるので、区域毎にバディシステムの手法を採用することが可能となり、取得済みの区域を効率よく利用することが可能となる。また、要求サイズを包含する２のべき乗サイズの区域を取得した場合でも、要求元が要求したサイズ以上の余りの領域を未使用区域として管理し、有効に利用することが可能となる。
【０１００】
次に、本発明の実施形態３について説明する。本実施形態３は、上述の実施形態２の変形例に相当するものである。要求元から２のべき乗サイズと異なる割付要求サイズを含む区域の取得要求を受け付け、該割付要求サイズを包含する最小の２のべき乗サイズ（割付区分レベル）の区域を取得し、そのうち未使用区域をバディシステムの割付処理により解放することにより、割付要求サイズに対応する使用区域を異なる区分レベルの区域の連続領域として取得することでは、実施形態２と同様である。
【０１０１】
しかしながら割付区分レベルの区域の取得に関しては、実施形態２では、図５Ｂ及び図６に示す処理フロー例を参照して説明したように、１つの主区域に対応するバディシステムにより区分レベルを更新しながら空エクステントを探索し、そのバディシステム内で空エクステントが見つからなければ主区域番号を更新し、その主区域番号の主区域に対応するバディシステムにより、空エクステントを探索することを空エクステントが見つかるまで繰り返すものであるのに対し、実施形態３では、同一の区分レベルについて、異なる主区域に亘って空エクステントを探索し、すべての主区域において空エクステントが見つからなかったときに区分レベルを更新し、その区分レベルで異なる主区域に亘って空エクステントを探索することを繰り返す。
【０１０２】
以下、本発明の実施形態３について、図９及び図１０を参照して本発明の実施形態２と異なる部分を説明する。先に述べたように、実施形態２と実施形態３で異なるところは、異なる主区域に対する割付区分レベルの区域の取得手順である。したがって、実施形態２について図４Ａ〜図８Ｂを参照して説明したうち、実施形態３で異なる部分は図５Ｂ及び図６を参照して説明した部分、及びそれに関連した図４Ａを参照して説明した割付区分レベルの区域の取得の部分である。そこで、実施形態２の図５Ｂ及び図６に相当する実施形態３の処理フロー例について説明する。
【０１０３】
図９は、本発明の実施形態３における割付区分レベルの区域を取得する処理フロー例を説明する図である。図９に示す処理フロー例は、図６に示す本発明の実施形態２における処理フロー例に対応するものである。
【０１０４】
図９に示すように、ステップＳ９００で、区分レベルに、割付区分レベルを設定する。次にステップＳ９０１で、主区域番号に、割付区分表の最下位の主区域番号を設定する。図３Ｂの例では、主区域番号には３が設定される。すなわち、最も小さいサイズの主区域から割付要求サイズの区域の取得処理が開始される。
【０１０５】
次にステップＳ９０２で主区分レベルに、主区域番号の指す主区域の割付サイズに相当する区分レベルを設定し、ステップＳ９０３において、区分レベルはステップＳ９０２で設定した主区分レベルより大きいか判定する。大きくなければステップＳ９０４に進み、主区域番号の指す主区域から割付要求区分レベルの区域を取得し、割付番号を得る。ステップＳ９０４の詳細は、後に図１０を参照して説明する
【０１０６】
次にステップＳ９０５において、ステップＳ９０４で割付要求区分レベルの区域を取得したか判定する。割付要求区分レベルの区域を取得していれば、ステップＳ９０８に分岐し、割付区分レベルの区域の取得結果に、主区域番号、割付区分レベル、割付番号を設定して処理を終了する。
ステップＳ９０４の処理で割付要求区分レベルの区域を取得していなければ、ステップＳ９０６に進む。
また、ステップＳ９０３で区分レベルはステップＳ９０２で設定した主区分レベルより大きいと判定されると、ステップＳ９０６に進む。
【０１０７】
ステップＳ９０６では、主区域番号は最上位の番号か判定する。主区域番号が最上位の番号でなければステップＳ９０７に進み、ステップＳ９０７で主区域番号に次の主区域番号を設定してステップＳ９０２に戻る。上述のステップＳ９０２〜ステップＳ９０７のループ処理は、先に述べた同一の区分レベルについて、異なる主区域に亘って空エクステントを探索する処理である。
【０１０８】
一方、主区域番号が最上位の番号であればステップＳ９０６ａに進み、さらに区分レベルは主区分レベルを指すか判定し、主区分レベルを指せば取得失敗として処理を終了し、主区分レベルでなければ、ステップＳ９０７ａにおいて区分レベルに値１を加えてステップＳ９０１に戻る。上述のステップＳ９０６ａの判定処理からステップＳ９０７ａを介してステップＳ９０１に戻るループ処理は、先に述べた、区分レベルを更新しその区分レベルで異なる主区域に亘って空エクステントを探索する処理である。
【０１０９】
以上の２重のループ処理を、主区域番号と区分レベルを更新しながら割付要求区分レベルの区域を取得するまで繰り返し、区分レベルが主区分レベルであっても割付要求区分レベルの区域を取得できなければ、取得失敗として処理を終了する。
【０１１０】
図１０は、図９に示すステップＳ９０４の処理の詳細なフロー例を示すものであり、本発明の実施形態３における空エクステントを取得する処理フロー例を説明する図である。図１０に示す処理フロー例は、図５Ｂに示す本発明の実施形態２における処理フロー例に対応するものである。
【０１１１】
図に示すように、まずステップＳ１０２２において、区分レベル内の空状態の区域を探索する。区分レベルは、図９に示すステップＳ９００あるいはステップＳ９０７ａで設定されたものである。次にステップＳ１０２３で区分レベルに空があるか判定する。空がなければ取得失敗として処理を終了する。
【０１１２】
一方、ステップＳ１０２３で区分レベルに空があると判定されるとステップＳ１０２６に進み、空状態の割付番号を取得し、割付番号の指す割付状態に塞状態を設定し、ステップＳ１０２７に進む。ステップＳ１０２７では、区分レベルは割付区分レベルか判定し、割付区分レベルであれば処理を終了し、割付区分レベルでなければステップＳ１０２８に分岐する。
【０１１３】
ステップＳ１０２８では、区分レベルから値１を減らし、ステップＳ１０２９に進んで割付番号を２倍する。このステップＳ１０２８とステップＳ１０２９の処理は、実施形態２の場合と同様にバディ分割の処理に相当する。次にステップＳ１０３０で区分レベルの割付番号の指す割付状態に空状態を設定し、ステップＳ１０３１において、区分レベルの割付番号とバディ分割の対をなす割付番号（バディ）の指す割付状態に空状態を設定してステップＳ１０２２に戻る。すなわち、バディ分割により得られた２つのエクステントの割付状態を空状態として空状態のエクステントの探索を行う。そして、ステップＳ１０２６で探索された空状態のエクステントの割付状態を塞状態とし、バディの割付状態は空状態とすることを区分レベルが割付区分レベルとなるまで繰り返し、割付区分レベルの空エクステントを取得する。
【０１１４】
以上説明した実施形態３によれば、ある主区域、例えばサイズの小さな主区域に所望の区分レベルの空エクステントがなく、別の主区域、例えばサイズの大きな主区域に所望の区分レベルの空エクステントが存在するとき、サイズの小さな主区域の所望の区分レベルより大きな区分レベルの空エクステントをバディ分割することなく、別の主区域から所望の区分レベルの空エクステントを取得することができる。
【０１１５】
以上本発明を実施するための最良の形態について詳細に説明したが、本発明に実施の形態はそれらに限ることなく種々の変形が可能であることは、当業者に明らかである。また、以上に説明した本発明の実施の形態による記憶領域管理方法、記憶領域割付方法及び記憶領域解放方法、更にその均等物は、それらをコンピュータに実行させるプログラムにより実現可能であることも明らかである。したがって、上記プログラム、及び上記プログラムを記憶したコンピュータ読み取り可能な記憶媒体も、本発明の実施の形態に含まれる。
また、本発明の実施の形態による記憶領域管理方法、記憶領域割付方法及び記憶領域解放方法の各処理の実行手段は、上記プログラムにより、コンピュータ上に実現されることも明らかである。したがって、上記プログラムによりとコンピュータにより、記憶領域管理装置、記憶領域割付装置及び記憶領域解放装置が実現されることも明らかである。
【図１Ａ】
2010021085.tif 000003
【図１Ｂ】
2010021085.tif 000004
【図２】
2010021085.tif 000005
【図３Ａ】
2010021085.tif 000006
【図３Ｂ】
2010021085.tif 000007
【図３Ｃ】
2010021085.tif 000008
【図４Ａ】
2010021085.tif 000009
【図４Ｂ】
2010021085.tif 000010
【図５Ａ】
2010021085.tif 000011
【図５Ｂ】
2010021085.tif 000012
【図５Ｃ】
2010021085.tif 000013
【図６】
2010021085.tif 000014
【図７Ａ】
2010021085.tif 000015
【図７Ｂ】
2010021085.tif 000016
【図８Ａ】
2010021085.tif 000017
【図８Ｂ】
2010021085.tif 000018
【図９】
2010021085.tif 000019
【図１０】
2010021085.tif 000020
【手続補正書】
【提出日】平成23年2月17日(2011.2.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータが実行する記憶装置の記憶領域管理方法において、
予め割り付けられた記憶領域である区画の割付サイズを取得し、
該割付サイズと、前記区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、
前記区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、
前記主区域毎に前記区画を管理することを特徴とする記憶領域管理方法。
【請求項２】
請求項１に記載の記憶領域管理方法において、
前記区画を前記主区域のサイズの大きさの順に分割することを特徴とする記憶領域管理方法。
【請求項３】
請求項２に記載の記憶領域管理方法において、前記主区域の先頭アドレスである割付位置と主区域のサイズである割付サイズを、前記区画の割付サイズと前記区画の先頭アドレスから求めて前記主区域毎に保持することを特徴とする記憶領域管理方法。
【請求項４】
請求項１に記載の記憶領域管理方法により前記区画を分割した主区域から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を、コンピュータが割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記主区域から前記割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを区画の割付単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項５】
請求項４に記載の記憶領域割付方法において、
前記区画を前記主区域のサイズの大きさの順に分割し、
該分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を探索して取得し、該取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に前記割付要求されたサイズの記憶領域を割り付けることを特徴とする記憶領域割付方法。
【請求項６】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記各主区域に対応するバディシステムにより探索して取得することを特徴とする記憶領域割付方法。
【請求項７】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って該最小のサイズの空記憶領域を探索し、すべての主区域において該最小のサイズの空記憶領域を取得できなかったときには、該探索した空記憶領域のサイズの２倍のサイズの空記憶領域を前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って探索することを繰り返すことにより取得することを特徴とする記憶領域割付方法。
【請求項８】
予め割り付けられた記憶領域である区画から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を、コンピュータが割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記区画から、前記割付要求サイズを包含する２のべき乗と前記区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを前記割付単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域であって、前記ビット１の立っているビット位置に対応する記憶領域が該記憶領域のサイズの大きさの順に連結されて得られる記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項９】
請求項４乃至請求項８のいずれか１項に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域を解放することを特徴とする記憶領域割付方法。
【請求項１０】
請求項９に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域は、バディシステムにより解放することを特徴とする記憶領域割付方法。
【請求項１１】
請求項４乃至請求項１０のいずれか１項に記載の記憶領域割付方法により割り付けた記憶領域を、コンピュータが解放する記憶領域解放方法において、
前記ビット位置の小さい記憶領域から順に、バディシステムにより解放することを特徴とする記憶領域解放方法。
【請求項１２】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラム。
【請求項１３】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【請求項１４】
予め割り付けられた記憶領域である区画の割付サイズを取得し、該割付サイズと、前記区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、前記区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、前記主区域毎に前記区画を管理する、記憶装置の記憶領域管理のための割付区分表のデータ構造において、
前記割付区分表は、前記主区域を識別する主区域番号毎に、該主区域の割付位置とサイズを格納するものであり、
前記主区域毎に記憶領域のバディシステムによる割付管理を可能とする割付管理表のデータ構造。
【請求項１５】
請求項１に記載の記憶領域管理方法により前記区画が管理されていることを特徴とする記憶装置。
【請求項１６】
請求項１に記載の記憶領域管理方法により前記区画が管理されていることを特徴とする記憶媒体。
【請求項１７】
請求項４に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶装置。
【請求項１８】
請求項４に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶媒体。
【請求項１９】
請求項８に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶装置。
【請求項２０】
請求項８に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶媒体。
【請求項２１】
記憶装置の記憶領域を管理する記憶領域管理装置において、
予め割り付けられた記憶領域である区画の割付サイズを取得し、該割付サイズと、前記区画の割付単位のサイズから互いに異なる２のべき乗の和を算出する算出手段と、
前記区画を、前記算出手段により算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、前記主区域毎に前記区画を管理する管理手段と、
を備えることを特徴とする記憶領域管理装置。
【請求項２２】
請求項１に記載の記憶領域管理方法により前記区画を分割した主区域から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付装置において、
前記割付要求サイズを含む記憶領域の割付要求を受付ける割付要求受付手段と、
前記主区域から前記割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得する空記憶領域取得手段と、
前記割付要求サイズを区画の割付単位のサイズで割った値の２進数表示を求め、前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付ける割付手段と、
を備えることを特徴とする記憶領域割付装置。
【請求項２３】
予め割り付けられた記憶領域である区画から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付装置において、
前記割付要求サイズを含む記憶領域の割付要求を受付ける割付要求受付手段と、
前記区画から、前記割付要求サイズを包含する２のべき乗と前記区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得する空記憶領域取得手段と、
前記割付要求サイズを前記割付単位のサイズで割った値の２進数表示を求め、前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域であって、前記ビット１の立っているビット位置に対応する記憶領域が該記憶領域のサイズの大きさの順に連結されて得られる記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付ける割付手段と、
を備えることを特徴とする記憶領域割付装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
ツリー構造体５８０は、割当領域４９０を２分の１のサイズに順次割付単位のサイズまで分割して得られる領域（特許文献１の用語を用いればエクステント）の関係を階層的にモデル化したものである。割付単位のサイズのエクステントの階層をレベル０とすると、図に示す例では、ルートノードのレベルは３、すなわち割当領域４９０のサイズである２のべき乗の指数となる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
本発明の記憶領域管理手法によれば、取得した記憶領域を異なる２のべき乗サイズの記憶領域に分割して管理し割付を可能とすることにより、上述の課題を解決する。
本発明の一つの態様によれば、区画の割付サイズを取得し、割付サイズと、区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と区画の割当単位のサイズの積からなる大きさの区域に区分し、記区分された区域毎に区画を管理する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】変更
【補正の内容】
【００２５】
以下、区域についての用語とそれに対応する区画についての用語を対比しながら定義する。
「区分」とは、領域を割り当てる、あるいは領域を分割して割り当てることであり、「割付」ということもある。このときの領域の分割サイズは、互いに異なる２のべき乗サイズで規定されるが、領域の先頭からサイズの大きさの順に割り付けられる。領域は、区域または区画である。特に区画を区分することを「主区分」という。また、主区分により割り付けられた区域を「主区域」という。主区分は、本発明においては、区画に対する初期割付である。
区分または主区分による区域または主区域の割付サイズの２のべき乗の指数を「区分レベル」という。図１Ｂに示すツリー構造体５８０を援用して説明すると、例えばノード４４１が対応するレベル２のエクステントのサイズは４であるから、その区分レベルは２である。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
上記定義された用語により説明すると、本発明の一つの実施態様によれば、区画を主区分し、主区域毎に区画を管理する。
また、本発明の別の態様によれば、割付要求サイズを含む区域の割付要求を受付け、割付要求サイズを包含する２のべき乗と区画の割当単位のサイズの積の最小のサイズの区域を取得し、更に割付要求サイズと、区画の割付単位のサイズから互いに異なる２のべき乗の和を算出し、前記割付要求を受け付けた区域を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの区域に多層区分した多層区域を使用区域とし、前記取得した区域のうち使用区域以外の残りの区域を、該残りの区域のサイズを互いに異なる２のべき乗の和と区画の割当単位のサイズの積からなる大きさとしたときの該互いに異なる２のべき乗の指数毎に、該２のべき乗と前記割当単位のサイズの積からなる大きさの区域に多層区分して該多層区分された多層区域を解放して未使用状態とする。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
すなわち、主記憶装置３０５をデータ処理装置３０１内のものとすることもできるし、割付区分表２０８は主記憶装置３０５に持ち、区画２１１は外部記憶装置３０６に割り当てられるのが多くの場合と考えられるが、区画２１１が、主記憶装置３０５に割り当てられる場合でも本発明が適用可能であることは、後の説明から明らかである。
図２の例示では、主記憶装置３０５、外部記憶装置３０６及び通信装置３０７が一本のバス３０４によりデータ処理装置３０１に接続されているが、接続方法はこれに限るものではない。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
図３Ａは、本発明の実施形態１における、取得済み区画を主区分（初期割付）して管理する概念を説明する図である。
図３Ａに例示するのは、取得済み区画２１１の区画サイズ２２０と主区域１〜３（８１ａ、８２ａ、８３ａ）との関係である。取得済み区画２１１は、例えば、図１Ａに示す区画３（１９３）とすることができる。
任意の大きさの区画サイズは互いに異なる２のべき乗の和で表現することができることから、区画サイズ２２０には、区画サイズを互いに異なる２のべき乗の和で表現したとき、その和に存在する２のべき乗の指数が指す位置（以下、有意のビット位置ということがある。）にビット１をその他の位置にビット０を格納した２進数表示により区画サイズの大きさを表している。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
次にステップＳ２０７ｂにおいて、主区域番号の指す割付区分表２０８の、割付位置２０２に割付位置に設定した値を、割付サイズ２０３にビット位置に設定した値を指数とする２のべき乗の値を設定し、ステップＳ２０８に進む。
図３Ｂに示す例における最初の処理においては、主区域番号２０５には初期値の１が、割付位置２０２には開始位置が、割付サイズ２０３には２５が設定される。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
複数の有意ビットが存在する場合、すなわち割付要求サイズが２のべき乗のサイズでない場合は、割付要求サイズ２０ａの最上位の有意ビットの位置３より１つ上位の位置の値４が割付区分レベル４４ａとなる。そして、図の点線の矢印４４に示すように、バディシステムによる割付処理２３により、点線の矢印４０で関係を示すように、割付区分レベル４４ａである４を指数とする２のべき乗サイズの区域８０を取得する。区域８０の取得には、任意の既存のバディシステムの割付処理を採用することが可能であるが、後に図６及び図５Ｂを参照して、本実施形態２におけるバディシステムによる割付処理例を説明する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００５７
【補正方法】変更
【補正の内容】
【００５７】
最初に、ステップＳ５２１において、主区分レベルに、主区域番号の指す主区域の割付サイズに相当する区分レベルを設定すると共に、区分レベルに割付区分レベルを設定する。ここで割付区分レベルは、バディシステムにより取得する空エクステントの区分レベルである。図４Ａに示す例では４が設定される。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００５８
【補正方法】変更
【補正の内容】
【００５８】
次にステップＳ５２２において、区分レベル内の空状態のエクステントを探索し、ステップＳ５２３で区分レベルに空があるか判定する。空がなければステップＳ５２４に分岐して、区分レベルは主区分レベルを指すか、すなわち主区域のサイズであるか判定する。主区分レベルを指す場合は取得失敗として処理を終了し、主区分レベルを指していなければ、ステップＳ５２５に進み、区分レベルに値１を加えてステップＳ５２２に戻る。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００６５
【補正方法】変更
【補正の内容】
【００６５】
以上のステップＳ５４３〜ステップＳ５４７のループ処理を、区分レベルが主区分レベルを指すか区分レベルの解放番号のバディの指す割付番号が塞状態となるまで繰り返し、最後に区分レベルの解放番号の指す割付状態に空状態を設定することで割付区域の解放処理が完了する。すなわち、図５Ｃに示す処理では、解放番号のバディの指す割付状態が空状態であれば、解放番号とバディの指すペアの割付状態をともに塞状態とし、上位区分レベルにおいてバディの指す割付状態が塞状態となったとき、あるいは主区分レベルを指す区分レベルにまで至ったときに解放番号の指す割付状態に空状態を設定するものである。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００６７
【補正方法】変更
【補正の内容】
【００６７】
図６は、本実施形態における割付区分レベルの区域を取得する処理フロー例を説明する図である。割付区分レベルの区域の取得は、割付要求サイズの区域を取得するのに先立って行われるものであり、後に図７Ａ及び図７Ｂを参照して説明する割付要求サイズの区域を取得する処理の一部をなすものである。ここで割付区分レベルの区域は、例えば、図３Ａに示す取得済み区画２１１から取得される。以下では、図４Ａに示す例に加えて、図３Ａ及び図３Ｂに示す割付区分表２０８を参照して説明する。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００７０
【補正方法】変更
【補正の内容】
【００７０】
一方ステップＳ６０３において割付サイズは割付要求サイズより小さくないと判定されるとステップＳ６０４に進み、主区域番号の指す主区域から割付区分レベルの区域を取得し、割付番号を得る。ステップＳ６０４の詳細は、先に図５Ｂを参照して説明したものである。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００７１
【補正方法】変更
【補正の内容】
【００７１】
次にステップＳ６０５において、ステップＳ６０４で割付区分レベルの区域を取得したか判定する。割付区分レベルの区域を取得していれば、ステップＳ６０８に分岐し、割付区分レベルの区域の取得結果に、主区域番号、割付区分レベル、割付番号を設定して処理を終了する。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００７２
【補正方法】変更
【補正の内容】
【００７２】
ステップＳ６０４の処理で割付区分レベルの区域を取得していなければ、ステップＳ６０６に進み、主区域番号は最上位の番号か判定する。主区域番号が最上位の番号であれば取得失敗として処理を終了し、主区域番号が最上位の番号でなければ、ステップＳ６０７において主区域番号に次の主区域番号を設定してステップＳ６０２に戻る。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００７３
【補正方法】変更
【補正の内容】
【００７３】
以上のステップＳ６０２からステップＳ６０７までのループ処理を、主区域番号を更新しながら割付区分レベルの区域を取得するまで繰り返し、主区域番号が最上位の番号であっても割付区分レベルの区域を取得できなければ、取得失敗として処理を終了する。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
次にステップＳ７１３で、割付ビットマップより、ビット位置の指すビット値を取り出し、ステップＳ７１４において取り出したビット値が１であるか判定し、１であればステップＳ７１８に進み、０であればステップＳ７１５に進む。
ステップＳ７１５では、解放区分レベルにビット位置を設定し、ステップＳ７１６に進み、解放番号に、割付番号に１を加えた値を設定する。次にステップＳ７１７において、図５Ｃを参照して説明した処理により、主区域番号の指す主区域から解放区分レベルの解放番号の区域を解放し、ステップＳ７１７ａにおいて、割付番号に、割付番号を２倍した値を設定してステップＳ７２０に進む。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
一方、ステップＳ７１８でビット位置が最下位ビット位置と判定されると、ステップＳ７２１に進み、解放区分レベルにビット位置を設定し、ステップＳ７２２で、解放番号に、割付番号に１を加えた値を設定する。そして、ステップＳ７２３において、図５Ｃを参照して説明した処理により、主区域番号の指す主区域より解放区分レベルの解放番号の区域を解放する。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
最初にステップＳ８０１で、解放番号に、レベル内番号からレベル内開始番号を引いた値を設定するとともに、解放区分レベルに割付区分レベルを設定し、次にステップＳ８０２において、割付ビットマップに割付要求サイズを２進数表示した値を設定する。
次にステップＳ８０３で、最下位ビット位置に割付ビットマップのビット値が１である最も下位のビット位置を設定する。図４Ａに示す例では、最下位ビット位置には１が設定される。次にステップＳ８０４で、最上位ビット位置に割付ビットマップのビット値が１である最も上位のビット位置を設定する。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
次にステップＳ８０５において、最上位ビット位置と最下位ビット位置は一致するか判定する。一致すれば、ステップＳ８０６に分岐する。この場合は割付要求サイズ２０ａが２のべき乗サイズと等しい場合であり、割付要求がシングルビット要求の場合である。ステップＳ８０６では、図５Ｃを参照して説明した処理により、主区域番号の指す主区域から解放区分レベルの解放番号の指す区域を解放し、処理を終了する。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
図に示すように、ステップＳ８０７で解放番号（割付番号）に、解放番号を２倍した値を設定し、ステップＳ８０８でビット位置に、最上位ビット位置を設定する。
次にステップＳ８０９で、割付ビットマップより、ビット位置の指すビット値を取り出し、ステップＳ８１０で、該取り出したビット値は１か判定する。ビット値が１でなければステップＳ８１１において、解放番号に、解放番号を２倍した値を設定してステップＳ８１４に進む。ビット値が１であれば、ステップＳ８１２において、スタックに、ビット位置と解放番号を書き込み、ステップＳ８１３で、解放番号に、解放番号に値１を加えた値を２倍した値を設定してステップＳ８１４に進む。
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】０１０５
【補正方法】変更
【補正の内容】
【０１０５】
次にステップＳ９０２で主区分レベルに、主区域番号の指す主区域の割付サイズに相当する区分レベルを設定し、ステップＳ９０３において、区分レベルはステップＳ９０２で設定した主区分レベルより大きいか判定する。大きくなければステップＳ９０４に進み、主区域番号の指す主区域から割付区分レベルの区域を取得し、割付番号を得る。ステップＳ９０４の詳細は、後に図１０を参照して説明する。
【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】０１０６
【補正方法】変更
【補正の内容】
【０１０６】
次にステップＳ９０５において、ステップＳ９０４で割付区分レベルの区域を取得したか判定する。割付区分レベルの区域を取得していれば、ステップＳ９０８に分岐し、割付区分レベルの区域の取得結果に、主区域番号、割付区分レベル、割付番号を設定して処理を終了する。
ステップＳ９０４の処理で割付区分レベルの区域を取得していなければ、ステップＳ９０６に進む。
また、ステップＳ９０３で区分レベルはステップＳ９０２で設定した主区分レベルより大きいと判定されると、ステップＳ９０６に進む。
【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】０１０９
【補正方法】変更
【補正の内容】
【０１０９】
以上の２重のループ処理を、主区域番号と区分レベルを更新しながら割付区分レベルの区域を取得するまで繰り返し、区分レベルが主区分レベルであっても割付区分レベルの区域を取得できなければ、取得失敗として処理を終了する。
【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】０１１１
【補正方法】変更
【補正の内容】
【０１１１】
図に示すように、まずステップＳ１０２２において、区分レベル内の空状態のエクステントを探索する。区分レベルは、図９に示すステップＳ９００あるいはステップＳ９０７ａで設定されたものである。次にステップＳ１０２３で区分レベルに空があるか判定する。空がなければ取得失敗として処理を終了する。
【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】０１１５
【補正方法】変更
【補正の内容】
【０１１５】
以上本発明を実施するための最良の形態について詳細に説明したが、本発明に実施の形態はそれらに限ることなく種々の変形が可能であることは、当業者に明らかである。また、以上に説明した本発明の実施の形態による記憶領域管理方法、記憶領域割付方法及び記憶領域解放方法、更にその均等物は、それらをコンピュータに実行させるプログラムにより実現可能であることも明らかである。したがって、上記プログラム、及び上記プログラムを記憶したコンピュータ読み取り可能な記憶媒体も、本発明の実施の形態に含まれる。
また、本発明の実施の形態による記憶領域管理方法、記憶領域割付方法及び記憶領域解放方法の各処理の実行手段は、上記プログラムにより、コンピュータ上に実現されることも明らかである。したがって、上記プログラムによりとコンピュータにより、記憶領域管理装置、記憶領域割付装置及び記憶領域解放装置が実現されることも明らかである。
さらに、本発明の記憶領域管理方法によりその記憶領域が管理される記憶装置及び本発明の記憶領域割付方法によりファイルが割り付けられる記憶装置は、本発明の実施の形態に含まれる。そして、記憶装置が、記憶媒体駆動装置と記憶媒体からなる場合には、本発明の記憶領域管理方法によりその記憶領域が管理される記憶媒体及び本発明の記憶領域割付方法によりファイルが割り付けられる記憶媒体も本発明の実施の形態に含まれる。
【手続補正２８】
【補正対象書類名】図面
【補正対象項目名】図８Ａ
【補正方法】変更
【補正の内容】
【図８Ａ】
2010021085.tif 000021
【手続補正２９】
【補正対象書類名】図面
【補正対象項目名】図８Ｂ
【補正方法】変更
【補正の内容】
【図８Ｂ】
2010021085.tif 000022
【手続補正書】
【提出日】平成23年5月17日(2011.5.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータが実行する記憶装置の記憶領域管理方法において、
予め割り付けられた記憶領域である区画の割付サイズを取得し、
該割付サイズと、前記区画の割当単位のサイズから互いに異なる２のべき乗の和を算出し、
前記区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、
前記主区域毎に前記区画を管理することを特徴とする記憶領域管理方法。
【請求項２】
請求項１に記載の記憶領域管理方法において、
前記区画を前記主区域のサイズの大きさの順に分割することを特徴とする記憶領域管理方法。
【請求項３】
請求項２に記載の記憶領域管理方法において、前記主区域の先頭アドレスである割付位置と主区域のサイズである割付サイズを、前記区画の割付サイズと前記区画の先頭アドレスから求めて前記主区域毎に保持することを特徴とする記憶領域管理方法。
【請求項４】
請求項１に記載の記憶領域管理方法により前記区画を分割した主区域から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を、コンピュータが割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記主区域から前記割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを区画の割当単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項５】
請求項４に記載の記憶領域割付方法において、
前記区画を前記主区域のサイズの大きさの順に分割し、
該分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を探索して取得し、該取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に前記割付要求されたサイズの記憶領域を割り付けることを特徴とする記憶領域割付方法。
【請求項６】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って前記各主区域に対応するバディシステムにより探索して取得することを特徴とする記憶領域割付方法。
【請求項７】
請求項５に記載の記憶領域割付方法において、
前記最小のサイズの空記憶領域は、前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って該最小のサイズの空記憶領域を探索し、すべての主区域において該最小のサイズの空記憶領域を取得できなかったときには、該探索した空記憶領域のサイズの２倍のサイズの空記憶領域を前記分割した主区域のうちサイズの小さい主区域からサイズの大きい主区域に亘って探索することを繰り返すことにより取得することを特徴とする記憶領域割付方法。
【請求項８】
予め割り付けられた記憶領域である区画から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を、コンピュータが割り付ける記憶領域割付方法において、
前記割付要求サイズを含む記憶領域の割付要求を受付け、
前記区画から、前記割付要求サイズを包含する２のべき乗と前記区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、
前記割付要求サイズを前記割当単位のサイズで割った値の２進数表示を求め、
前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域であって、前記ビット１の立っているビット位置に対応する記憶領域が該記憶領域のサイズの大きさの順に連結されて得られる記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付けることを特徴とする記憶領域割付方法。
【請求項９】
請求項４乃至請求項８のいずれか１項に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域を解放することを特徴とする記憶領域割付方法。
【請求項１０】
請求項９に記載の記憶領域割付方法において、
前記取得した最小のサイズの空記憶領域のうち前記割り付ける記憶領域以外の残りの記憶領域は、バディシステムにより解放することを特徴とする記憶領域割付方法。
【請求項１１】
請求項４乃至請求項１０のいずれか１項に記載の記憶領域割付方法により割り付けた記憶領域を、コンピュータが解放する記憶領域解放方法において、
前記ビット位置の小さい記憶領域から順に、バディシステムにより解放することを特徴とする記憶領域解放方法。
【請求項１２】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラム。
【請求項１３】
請求項１〜請求項１１のいずれか１項に記載の方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【請求項１４】
予め割り付けられた記憶領域である区画の割付サイズを取得し、該割付サイズと、前記区画の割当単位のサイズから互いに異なる２のべき乗の和を算出し、前記区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、前記主区域毎に前記区画を管理する、記憶装置の記憶領域管理のための割付区分表のデータ構造において、
前記割付区分表は、前記主区域を識別する主区域番号毎に、該主区域のサイズを格納するものであり、
割付要求された記憶領域のサイズである割付要求サイズの空記憶領域を、前記割付区分表に格納された小さいサイズの主区域番号の主区域から大きいサイズの主区域番号の主区域にわたって、前記各主区域に対応するバディシステムにより探索して取得する、割付管理を可能とする割付区分表のデータ構造。
【請求項１５】
請求項１に記載の記憶領域管理方法により前記区画が管理されていることを特徴とする記憶装置。
【請求項１６】
請求項１に記載の記憶領域管理方法であって、前記記憶装置は記憶媒体駆動装置と記憶媒体とを含むものであり、前記記憶装置の記憶領域は該記憶媒体の記憶領域である記憶領域管理方法により前記区画が管理されていることを特徴とする記憶媒体。
【請求項１７】
請求項４に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶装置。
【請求項１８】
請求項４に記載の記憶領域割付方法であって、前記記憶装置は記憶媒体駆動装置と記憶媒体とを含むものであり、前記記憶装置の記憶領域は該記憶媒体の記憶領域である記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶媒体。
【請求項１９】
請求項８に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶装置。
【請求項２０】
請求項８に記載の記憶領域割付方法により前記割付要求サイズの記憶領域が割り付けられていることを特徴とする記憶媒体。
【請求項２１】
記憶装置の記憶領域を管理する記憶領域管理装置において、
予め割り付けられた記憶領域である区画の割付サイズを取得し、該割付サイズと、前記区画の割当単位のサイズから互いに異なる２のべき乗の和を算出する算出手段と、
前記区画を、前記算出手段により算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの記憶領域である主区域に分割し、前記主区域毎に前記区画を管理する管理手段と、
を備えることを特徴とする記憶領域管理装置。
【請求項２２】
請求項１に記載の記憶領域管理方法により前記区画を分割した主区域から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付装置において、
前記割付要求サイズを含む記憶領域の割付要求を受付ける割付要求受付手段と、
前記主区域から前記割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得する空記憶領域取得手段と、
前記割付要求サイズを区画の割当単位のサイズで割った値の２進数表示を求め、前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付ける割付手段と、
を備えることを特徴とする記憶領域割付装置。
【請求項２３】
予め割り付けられた記憶領域である区画から割付要求された記憶領域のサイズである割付要求サイズの記憶領域を割り付ける記憶領域割付装置において、
前記割付要求サイズを含む記憶領域の割付要求を受付ける割付要求受付手段と、
前記区画から、前記割付要求サイズを包含する２のべき乗と前記区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得する空記憶領域取得手段と、
前記割付要求サイズを前記割当単位のサイズで割った値の２進数表示を求め、前記受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域であって、前記ビット１の立っているビット位置に対応する記憶領域が該記憶領域のサイズの大きさの順に連結されて得られる記憶領域を、前記取得した２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域に割り付ける割付手段と、
を備えることを特徴とする記憶領域割付装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
ツリー構造体５８０は、割当領域４９０を２分の１のサイズに順次割当単位のサイズまで分割して得られる領域（特許文献１の用語を用いればエクステント）の関係を階層的にモデル化したものである。割当単位のサイズのエクステントの階層をレベル０とすると、図に示す例では、ルートノードのレベルは３、すなわち割当領域４９０のサイズである２のべき乗の指数となる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
本発明の記憶領域管理手法によれば、取得した記憶領域を異なる２のべき乗サイズの記憶領域に分割して管理し割付を可能とすることにより、上述の課題を解決する。
本発明の一つの態様によれば、区画の割付サイズを取得し、割付サイズと、区画の割当単位のサイズから互いに異なる２のべき乗の和を算出し、区画を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と区画の割当単位のサイズの積からなる大きさの区域に区分し、記区分された区域毎に区画を管理する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
また、本発明の別の態様によれば、割付要求サイズを含む記憶領域の割付要求を受付け、割付要求サイズを包含する、２のべき乗と区画の割当単位のサイズの積の最小のサイズの空記憶領域を取得し、割付要求サイズを区画の割当単位のサイズで割った値の２進数表示を求め、受け付けた割付要求に対して、該２進数表示でビット１の立っているビット位置毎の２のべき乗と前記区画の割当単位のサイズの積の大きさの記憶領域からなる連続した記憶領域を割り付ける。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
上記定義された用語により説明すると、本発明の一つの実施態様によれば、区画を主区分し、主区域毎に区画を管理する。
また、本発明の別の態様によれば、割付要求サイズを含む区域の割付要求を受付け、割付要求サイズを包含する２のべき乗と区画の割当単位のサイズの積の最小のサイズの区域を取得し、更に割付要求サイズと、区画の割当単位のサイズから互いに異なる２のべき乗の和を算出し、前記割付要求を受け付けた区域を、該算出された互いに異なる２のべき乗の指数毎に該２のべき乗と前記区画の割当単位のサイズの積からなる大きさの区域に多層区分した多層区域を使用区域とし、前記取得した区域のうち使用区域以外の残りの区域を、該残りの区域のサイズを互いに異なる２のべき乗の和と区画の割当単位のサイズの積からなる大きさとしたときの該互いに異なる２のべき乗の指数毎に、該２のべき乗と前記割当単位のサイズの積からなる大きさの区域に多層区分して該多層区分された多層区域を解放して未使用状態とする。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】変更
【補正の内容】
【００２７】
次に本発明を実施するためのハードウェア構成例について、図２を参照して説明する。
本発明の一実施形態による記憶装置の領域管理及び区域の割付及び解放処理は図に示す中央処理装置３０２及びキャッシュメモリ３０３を少なくとも備えたデータ処理装置３０１によりデータ格納装置３０８を用いて実施される。データ格納装置３０８については、後に説明する割付区分表２０８と管理対象である取得済み区画２１１を含む。図２に示すように、データ格納装置３０８は、主記憶装置３０５または外部記憶装置３０６、あるいはそれらの組み合わせで実現することができ、あるいは通信装置３０７を介して接続された遠方に配置された装置を用いることも可能である。
【国際調査報告】
2010021085.tif 000023
2010021085.tif 000024
2010021085.tif 000025
2010021085.tif 000026