図1を参照して、本発明の実施の形態に係るファイル管理装置10は、ハードディスク6に記録されたファイルを管理するファイル管理部1と、ファイル管理部1の指示に従い、ハードディスクへのデータの書込および読出の制御を行なう記録媒体制御部2と、ハードディスク6中の未使用領域を管理する未使用領域管理部3と、ハードディスク6中の未使用領域を接合する未使用領域接合部4と、交替処理を遅延させながら実行する遅延交替処理部5とを含む。
このファイル管理装置10は、論理ブロックと呼ばれる単位でハードディスク6にアクセスを行ない、データの読出および書込を実行する。論理ブロックとは、論理ブロックに含まれるセクタのハードディスク6上での連続配置が保証され、かつその論理ブロックのセクタへのアクセスの前に、シークと回転待ちが発生したとしてもハードディスク6に要求されるパフォーマンスが発揮できる単位である。
ディスクアクセスの速度は、(アクセスデータ量[Byte]/総アクセス時間[sec])で表わされ、これがハードディスク6のアクセス速度を上回っている必要がある。このため、パフォーマンスを発揮するには、次式(1)を満たす必要がある。
アクセスデータ量[Byte]/総アクセス時間[sec]
>ディスクに要求されるアクセス速度[Byte/sec] …(1)
ここで、nセクタずつアクセスするものとするとし、1セクタ当りのバイト数が512[Byte]とすると、アクセスデータ量は(512[Byte/セクタ]×n[セクタ])で表わすことができる。
また、総アクセス時間は、回転待ち時間とシーク時間とアクセス時間との和として求めることができる。回転待ち時間とは、ディスクが回転して、ディスクヘッドの位置に最初のセクタが位置するまでにかかる最大時間のことであり、すなわち、ディスクが1回転する時間のことである。シーク時間とは、ディスクのヘッドが目的のセクタの位置へ移動するのにかかる最大の時間のことである。アクセス時間とは、ディスクが1回転する時間に回転数をかけたものである。ここで、回転数は、同時にアクセスするセクタ数nを1回転当りのセクタ数で除した数である。
たとえば、ディスクの回転速度が11.1msec、シーク時間が17.8msec、1回転当たりのセクタ数が400セクタであるハードディスク6を考える。この時、ファイル管理装置10が、24Mbps(bits per second)のデータを同時に3つ扱う場合を考える。論理ブロックに含まれるセクタ数をnとし、1セクタのサイズを512byteとすると、ハードディスク6のパフォーマンスを発揮するには、次式(2)を満たす必要がある。
512×n/(0.0111+0.0178+0.0111×n/400)
>72[Mbits/sec]=9×1024×1024[Bytes/sec] …(2)
すなわち、1つの論理ブロックに含まれるセクタを1091セクタ以上とすれば、目的のパフォーマンスが得られることがわかる。セクタ数を1091以上とし、ファイル管理装置10が管理しやすい単位をハードディスク6にアクセスする際の最小単位とすればよい。
この論理ブロック内では、必ず、ハードディスク6上でのデータの連続性が保証される。1セクタ当りのデータサイズを512バイトとすると、論理ブロックのサイズは、1091×512=545.5[KByte]となる。この値を満たす2のべき乗は1024[KByte]、すなわち1[Mbyte]となる。このため、論理ブロックのサイズは1MByteとなる。論理ブロックのサイズは、ディスクの回転速度や1回転当たりのセクタ数によって変化する。このため、場合によっては、論理ブロックのサイズが512KByteや256KByteなどになる場合もある。
トラックが変化するときのヘッドスイッチの為の処理時間または隣のシリンダに移るためのシリンダ間シーク時間を加味して、論理ブロックのサイズを算出してもよい。
[ファイル管理部1について]
ファイル管理部1は、ハードディスク6中の記憶領域を複数の論理ブロックに分割し、各論理ブロックの使用・未使用状況や、該当論理ブロックの交替処理の有無を表す領域管理テーブルを記憶している。
図2を参照して、領域管理テーブルについて説明する。使用フラグは論理ブロックへのデータの格納の有無を示している。使用フラグの値が1の論理ブロックにはデータが格納されており、使用フラグの値が0の論理ブロックにはデータが格納されていない。ここでは、論理ブロック番号0、1および3の論理ブロックにデータが格納されている。なお、以下の説明では、論理ブロック番号nの論理ブロックを論理ブロックnと表現することにする。
論理ブロックの相対的な並びは、前ブロック相対アドレスおよび次ブロック相対アドレスで表わされる。たとえば、論理ブロック0は、前ブロック相対アドレス値が0であるため、この論理ブロックが開始位置であることを示す。論理ブロック1は、前ブロック相対アドレス値が−1であるため、この論理ブロックの前には、論理ブロック0が存在することを示している。また、論理ブロック1の次ブロック相対アドレス値が2であることから、この論理ブロックの後ろには、論理ブロック3が存在する事がわかる。論理ブロック3の次ブロック相対アドレス値は0であることから、このブロックが終了位置であることがわかる。
論理ブロック2、4、5、6および10の使用フラグの値は0である。このため、これらの論理ブロックは、ファイルのデータが記録されていない未使用領域である事がわかる。
交替フラグは、論理ブロックに欠陥セクタが含まれており、交替処理されたか否かを示している。交替フラグの値が1の論理ブロックは他の論理ブロックと交替されていることを示し、交替フラグの値が0の論理ブロックは交替処理されていないことを示している。ここでは、論理ブロック5が論理ブロック10と交替されていることを示している。
未使用領域として、論理ブロック2から構成されるものと、論理ブロック4、5、6および10から構成されるもの2つがある事が分かる。
ファイル管理部1は、領域管理テーブルの他に、ファイル管理装置10で作成されたファイルで使用される論理ブロックの並びを管理するファイル管理テーブルを記憶している。ファイル管理テーブルは、ファイルごとに存在する。
図3を参照して、ファイル管理テーブルは、1つのファイル中でどのように論理ブロックが構成されているかを、一連の論理ブロックの列を単位として表す。累積論理ブロック数は、それまでに出現した論理ブロック数であり、開始論理ブロックおよび終了論理ブロックで、一連の論理ブロックの列の開始および終了位置が示される。ブロック数は、一連の論理ブロックの列に含まれる論理ブロック数を表す。このファイルは、3つの未使用領域により構成されており、1つ目の未使用領域は、論理ブロック0〜2の3つの論理ブロックにより構成されている。2つ目の未使用領域は、論理ブロック6〜10の5つの論理ブロックにより構成されている。3つ目の未使用領域は、論理ブロック13〜15の3つの論理ブロックにより構成されている。ここではファイルに含まれる論理ブロックの構成のみを示したが、ファイル管理テーブルには、ファイル管理装置10が現在どこまで記録したかまたは読出したかを表すポインタなどのファイルシステムで使用される項目も含まれる。
[記録媒体制御部2について]
記録媒体制御部2は、ファイル管理部1を通じてアプリケーションプログラムから指示される書込要求または読出要求に従い、データの書込または読出を論理ブロック単位または論理ブロックよりも小さい単位であるサブブロック単位で行なう。
上述のように、論理ブロックを単位にしてハードディスク6にアクセスをすることにより、複数のファイルをアクセスする場合であっても、ハードディスク6のパフォーマンスは保証される。
図4を参照して、論理ブロックを単位として、1つのファイルまたは複数のファイルをアクセスする例について説明する。図4(c)を参照して、ハードディスク6上には、ファイルAおよびファイルBが論理ブロックを単位として、不連続に配置されているものとする。この内、ファイルAのみを上書きして記録する場合においては、図4(a)のように、論理ブロック間が不連続であったとしても、その間に発生するシークと回転待ちとのオーバーヘッドが加味されて論理ブロックのサイズが決定されている。このため、データの書込を遅延させることなく行なうことができる。図4(b)のように、ファイルAを記録しながら再生するといった追っかけ再生を行なうと同時に、ファイルBに記録を行なうような場合においても、その間に発生するシークと回転待ちとのオーバーヘッドが加味されて論理ブロックのサイズが決定されている。このため、ディスクアクセスに遅延が生じることはない。
しかし、必ずしも論理ブロックを単位にアクセスされるとは限らない。たとえば、ハードディスク6上のファイルに記録されている映像データからMPEG方式により符号化されたIフレームのみを抽出して早送り再生をしたい場合等である。たとえば、論理ブロックのサイズが1MByte、映像データが24Mbpsで、0.5秒毎に大きさが400KByteのIフレームが存在する場合を考える。図5(a)を参照して、このIフレームのデータが論理ブロックの境界をまたいで2つの論理ブロックに記録されている場合には、2MByteのデータを読出す必要がある。このため、1秒間当り、最悪4MByteのデータをハードディスク6から読出さなければならず、要求されるデータ量に比べ、読出すデータ量が大きくなる。
従って、図5(b)を参照して、本実施の形態では、論理ブロックをいくつかのサブブロックに分割し、ハードディスク6に対して要求されるデータ量が所定量以下の場合においては、サブブロック単位でアクセスを行なう。サブブロック単位でデータを読出すことによって、余分な読出量が低減される。論理ブロックを1MByte、サブブロックを256Kとした場合には、2枚のIフレームを読出すには、最悪1.5MByteのデータを読出すだけで良い。サブブロックを128Kとした場合は、1秒間に4枚のIフレームデータを読出したとしても、最悪2MByteのデータを読出すだけでよい。
図6を参照して、ファイル管理部1および記録媒体制御部2の実行する処理について説明する。
ファイル管理部1は、アプリケーションプログラムからデータの書込または読出の要求を受信した場合、ハードディスク6へのアクセス単位が論理ブロック単位であるかサブブロック単位であるかを判定する(S201)。論理ブロック単位である場合には(S201でfalse)、ファイル管理部1は、記録媒体制御部2に対して、論理ブロック単位で、ハードディスク6へアクセスするように要求する(S202)。サブブロック単位である場合には(S201でtrue)、ファイル管理部1は、記録媒体制御部2に対して、サブブロックを単位で、ハードディスク6へアクセスするように要求する(S203)。
記録媒体制御部2は、ファイル管理部1からの要求に従い、論理ブロック単位またはサブブロック単位でハードディスク6へアクセスする。
S201の判定処理について、具体例を示し説明する。ここでは、ハードディスク6の容量を15Gbyteとし、論理ブロック長を1MByte、サブブロック長を128KByteとする。
また、ハードディスク6に対して、常に論理ブロック長以下のサイズのデータの書込要求または読出要求が行なわれるものとする。
ファイルの先頭から3MByteの位置から1MByteのデータの書込要求があったとする。ファイルは、1MByteの論理ブロック単位に区切られている。このため、データの書込位置とデータのサイズとの下位17ビットが0か否かをチェックすることによって、そのデータ転送が論理ブロック単位のものか否かをチェックすることができる。この例では、双方とも、下位17ビットが0であるので、論理ブロック単位のアクセスである。このため、論理ブロック単位でハードディスク6へのアクセスが行なわれる。
ファイルの先頭から2.5MByteの位置から200KByteのデータの書込要求があったとする。書込位置2.5MByteの下位17ビットは0であるが、データサイズ200KByteの下位17ビットは0x12000である。従って、この場合には、サブブロック単位で記録媒体にアクセスすることになる。
上述の例では、アプリケーションプログラムから書込要求または読出要求されるデータ長を論理ブロック長以下としたが、論理ブロック長以上のアクセス要求があった場合は、そのアクセス要求を1MByte単位のアクセス要求に分割すればよい。たとえば、先頭から2.5MByteの位置から1.7MByteのデータのアクセス要求があった場合には、ファイル管理部1は前処理として、2.5MByteの位置から0.5MByteのアクセス要求、3.0MByteの位置から1MByteのアクセス要求、および4MByteの位置から0.2MByteのアクセス要求の3つのアクセス要求を作成し、各々のアクセス要求について、図6に示した処理を行なう。
[未使用領域管理部3について]
ファイル管理装置10では、論理ブロックを単位としてファイル管理や空き領域管理を行なった場合には、管理テーブルのサイズは大きくなってしまう。また、ファイル管理装置10では、常に複数のファイルを扱うわけではない。このため、各々のファイルのデータをできる限り不連続が生じないように格納するのがよい。
そこで、未使用領域管理部3は、未使用の論理ブロックのハードディスク6上での連続領域を管理する。
図7を参照して、未使用領域管理部3の管理形態の概略を説明する。ハードディスク6内の論理ブロックとして、論理ブロック0〜11が存在し、論理ブロック0、1、2、5、6、7、8、10および11はどのファイルにも属さない未割当の状態であるとする。未使用領域管理部3は、この未割当の論理ブロックのうちハードディスク6上で連続するものを一括して管理する。論理ブロック0〜2、5〜8および10〜11はそれぞれ連続し、未使用領域管理部3は、連続する論理ブロックを、先頭の論理ブロックの番号と連続するブロック数とで管理する。その他、未使用領域管理部3は、連続する論理ブロックを先頭および最後の論理ブロックの番号で管理したり、先頭および最後の論理ブロックの番号と連続ブロック数とで管理するようにしてもよい。
本明細書中では、未割当の論理ブロックを「未使用領域」とよび、ハードディスク6上で連続する一連の未使用の論理ブロックを「フリーブロック群」と呼ぶ。また、未使用領域を管理するテーブルを「未使用領域管理テーブル」という。
なお、ハードディスク6は3つのゾーンに区切られ、各ゾーンごとに未使用領域が管理される。ゾーンとは、ハードディスク6上で同心円により区切られた領域をいう。
ハードディスク6には、1回転当たりのセクタ数が場所によって異なるものがある。このような場合では、ハードディスク6の内周側では、セクタ数が少なく、外周側ではセクタ数が多くなる。なお、セクタ数は、各ゾーンにより異なる。ハードディスク6によっては、内側のゾーンを使用すると、1回転当たりのセクタ数が少なくなる。このため、要求されるパフォーマンスを達成するためには、論理ブロック当りの記憶可能なデータサイズを大きくする必要がある。または、要求されるパフォーマンスが達成できない場合もある。内側のゾーンの1回転当たりのセクタ数が200セクタ、ディスクの回転速度が11.1msec、シーク時間が17.8msec、論理ブロックに含まれるセクタ数をnとし、1セクタのサイズを512byteとすると、次式(3)が成り立つ。
512×n/(0.0111+0.0178+0.0111×n/200)
>9×1024×1024[Bytes/sec] …(3)
式(3)より、n≦−23185となり、要求されるパフォーマンスが出ないことがわかる。また、内側のゾーンの1回転当たりのセクタ数が240セクタであった場合は、n≧3611となり、論理ブロックのサイズが2MByte必要となる。
従って、内周のゾーンを使用することによって、論理ブロックのサイズが大きくなってしまう場合、または、要求されるパフォーマンスに達しない場合は、そのゾーンに該当する論理ブロックをデータの記録または再生に用いないようにすることが必要である。
図8を参照して、未使用領域管理部3は、ハードディスク6の外周側に位置するゾーンに属する未使用領域を管理する外周未使用領域管理テーブル(図8(A))と、ハードディスク6の内周側に位置するゾーンに属する未使用領域を管理する内周未使用領域管理テーブル(図8(C))と、それ以外のゾーンに属する未使用領域を管理する内部未使用領域管理テーブル(図8(B))とを記憶している。
未使用領域は、3つの未使用領域管理テーブルと、上述の領域管理テーブル(図8(D)とで管理される。
ここでは、ハードディスク6の容量が15Gbyteであり、そのゾーンが1Gbyte毎に区切られているものとし、最内周に位置するゾーンは、論理ブロックアドレスとして0x3800〜0x3BFFが付された、容量1Gbyteの領域であり、最外周に位置するゾーンは、論理ブロックアドレスとして0x0000〜0x03FFが付された、容量1Gbyteの領域であるものとする。
図8(A)および図8(C)の外周未使用領域管理テーブルおよび内周未使用領域管理テーブルは、ともに1Gbyteの領域を2つに分割した512MByte単位の2つのフリーブロック群を管理している。
図8の例は、15Gbyteのハードディスクを、先頭から0x200個のブロック毎に、1つの連続したフリーブロック群として管理している例である。たとえば、外周未使用領域管理テーブル(図8(A))には、先頭の論理ブロックのアドレスが0x0000の、ブロック数が0x200のフリーブロック群が登録されている。このフリーブロック群に含まれる論理ブロックの構成は、図8(D)の領域管理テーブルに示される。このフリーブロック群の先頭(論理ブロックアドレス0x0000)の論理ブロックの前ブロック相対アドレスには「0」が登録され、そのブロックよりも前のブロックが存在しない事を示している。その論理ブロックの次ブロック相対アドレスには「1」が登録され、論理ブロックアドレス0x0001の論理ブロックが次に並んだ論理ブロックである事を示す。
同様に、論理ブロック番号アドレスが0x0001の論理ブロックの前ブロック相対アドレスには「−1」が登録され、アドレス0x0000の論理ブロックがアドレス0x0001の論理ブロックの1つ前に位置する事を示している。また、アドレス0x0001の論理ブロックの次ブロック相対アドレスには「1」が登録され、アドレス0x0002の論理ブロックがアドレス0x0001の論理ブロックの次に位置する事を示している。
このように、ディスクを分けて管理することにより、映像や音声が含まれるデータのように、内周のゾーンを使用すると目的のパフォーマンスが得られないものであっても、通常の未使用管理領域内に記憶する事により、目的のパフォーマンスを得ることができる。
一方、ファイル管理装置10として、ハードディスク6のパフォーマンスを保証したとしても、ファイル管理装置10を使用するアプリケーションプログラムが記録再生要求を適時に行なわなければ、記録すべきデータがアプリケーションプログラム上のバッファにたまってしまう。この要因として、たとえば、アプリケーションプログラムの処理負荷が一時的に高くなる場合等が考えられる。このような場合は、バッファに溜まったデータをできる限り速くハードディスク6に記憶することが必要である。このようなときには、外周のゾーンにデータを記憶するのが有効である。
なぜならば、外周ゾーンにおいては、セクタ数が多いため、ハードディスク6のパフォーマンスは高い。従って、ファイル管理装置10を使用しているアプリケーションプログラムの処理負荷が一時的に高くなり、バッファにデータが溜まってしまった場合などにおいて有効である。
図8では、複数のゾーンのうち、最外周のゾーンのみおよび最内周のゾーンのみをそれぞれ外周未使用領域管理テーブルおよび内周未使用領域管理テーブルに登録するようにしたが、複数の外周ゾーンや複数の内周ゾーンを外周未使用領域管理テーブルまたは内周未使用領域管理テーブルで管理するようにしてもよい。
図9を参照して、アプリケーションプログラムからファイルの書込要求を受けた際に、ファイル管理部1が外部からの指示に従って、フリーブロック群を割当てる処理について説明する。
ファイル管理部1は、アプリケーションプログラムからのファイルへの書込要求に対して、ファイルを書込むための領域を追加する必要があるか否かを判定する(S501)。
ファイル領域を追加する必要があると判定された場合には(S501でtrue)、外周ゾーンへの書込が要求されているか否かを判定する(S502)。外周ゾーンへの書込が要求された場合には(S502でtrue)、外周未使用領域管理テーブルの中から論理ブロックがファイルへ割当てられる(S503)。
それ以外の場合には(S502でfalse)、内周未使用領域管理テーブルの中から論理ブロックがファイルへ割当てられる(S504)。
ファイル領域を追加する必要がない場合には(S501でfalse)、処理を終了する。
次に、領域割当処理(S503およびS504)について説明する。
本実施の形態では、ファイル作成時に、ファイルサイズが指定されたかどうか、また、該当ファイルへの領域の割当が初回かどうかによって、割当てる領域を変化させる。
ファイルシステムでは、未使用領域をファイルに割当てる処理と、ファイルの記録領域として割当てられたにもかかわらず、結果として記録されなかった領域や、ファイル削除された領域を未使用領域として回収する処理とが必要である。
この回収作業により、未使用領域の断片化が発生する。図10を参照して、未使用領域が断片化する例について説明する。
図10(a)のようにファイルAに4つの論理ブロックが割当てられている場合に、ファイルAの4番目の論理ブロックが不要であるとして未使用領域となった場合には、図10(b)に示すように、本来連続しているべき6番目の論理ブロックと7番目の論理ブックとが断片化している。
図10(c)を参照して、さらに、ファイルAを構成するすべての論理ブロックを削除した場合には、0〜4番目までの論理ブロックは1つの未使用領域となるべきであるのに、0〜2番目の論理ブロックと、3〜4番目の論理ブロックとに断片化されている。
これを回避するために、断片化を低減するような領域割当方法と、断片化された領域を接合する領域回収方法とが必要となる。
領域の割当方法では、ファイルに対してどのような領域割当が発生するかを考慮する必要がある。
デジタル放送データや、アナログ放送をエンコードしてデジタルデータを記録再生する装置においては、あらかじめサイズが固定されているファイルと、あらかじめサイズが指定されているが、記録領域が不足した場合には領域を追加するファイルと、サイズが指定されないファイルとが存在する。
第1のファイルは、タイムシフト視聴をする際のように、ファイルをリングバッファのように用いて記録再生を行なう場合に用いられる。第2のファイルは、録画予約のように、あらかじめ録画開始時刻および録画終了時刻が設定されるような場合であって、かつ録画時間を延長したいような場合に用いられる。第3のファイルは、記録開始時刻および録画終了時刻が定まっていないような場合に用いられる。これらのファイルに対し、未使用領域を割当てたり、不要となった領域を回収する場合において、領域をなるべく断片化しないことが必要である。
第3のファイルについては、必要となる領域がどのくらいあるかを判定することは難しく、始めに多くの領域を割当てたにもかかわらず、すぐに記録が終了するような場合には、記録されない領域が多く残ってしまう。また、小さな領域を割当てると、記録時間が長い場合において、未使用領域をファイルに割当てる処理のオーバーヘッドが大きくなってしまう。
このために、本発明では、大きさの指定されていないファイルについては、始めは、あらかじめ設定された値の領域を割当て、さらに、記録している間に再び領域を必要とする場合は、残りのフリーブロック群のうち最大長のフリーブロック群を割当てるといった二段階の領域割当処理を行なう。
第1および第2のファイルについては、あらかじめ指定された大きさの未使用領域を確保すれば良いが、指定サイズを満たすフリーブロック群が存在するとは限らない。いくつかのフリーブロック群を組み合わせたとしても、その合計サイズが指定サイズと合致することは希である。従って、フリーブロック群の大きさが指定サイズを超えた場合には、フリーブロック群を分割して割当てることになり、領域の断片化が発生する。このとき、サイズの大きいフリーブロック群の断片化はできる限り避けたい。
そのため、本発明では、あらかじめ大きさが指定されたファイルについては、連続領域の長いフリーブロック群が優先的に割当てられる。これにより、連続領域の長いフリーブロック群ほど、ファイルの末尾から遠ざかる形で割当てられる。よって、領域の断片化を避けることができる。図11がこのような割当処理を行なった際のフリーブロック群の並び方を示している。ここでは、未使用領域の合計サイズが、指定サイズを超えているため、割当てられる領域の中で最小であるフリーブロック群3が断片化される。
また、断片化されるフリーブロック群の大きさをさらに抑えることもできる。図12を参照して、未割当のフリーブロック群のうちで、最後に割当てられたフリーブロック群と交換しても、合計のサイズが指定されたサイズを満たしている場合、その領域を交換することによって、断片化されるフリーブロックの大きさを低減することができる。図12では、未使用領域1〜6のうち、未使用領域1〜3を割当てた場合と、未使用領域1,2、5を割当てた場合とを示している。どちらの場合でも領域は断片化されてしまうが、より小さい未使用領域5が断片化されることで、より大きな未使用領域3の断片化を防ぐことができる。
断片化されるフリーブロック群の大きさを抑える方法としては、未割当のフリーブロック群のうちで、割当可能なフリーブロック群を検索し、条件を満たすフリーブロック群のうち最小長のフリーブロック群を割当てる方法と、最大長のフリーブロック群とを割当てる方法がある。
前者の方法では、連続領域の短いフリーブロック群ほど断片化されやすく、連続領域が長いフリーブロック群ほど、断片化を避けることが可能である。後者の方法では、条件を満たすフリーブロック群を検索する作業を低減しながらも、連続領域が長いフリーブロック群の断片化を低減することができる。
第2のファイルについては、あらかじめ指定された領域を確保したにもかかわらず、たとえば、記録したい番組が時間延長された等の理由により、さらに領域を追加したい場合が生ずる。
そのため、本発明では、第2のファイルについては、あらかじめ指定された値の領域を割当て、領域を追加する際には、残りのフリーブロック群のうち最大長のフリーブロック群を割当てるといった二段階の領域割当処理を行なうことによって対応する。
作成時に、ファイルサイズが指定されているファイルについては、指定されたファイルサイズに達するまで、最大長のフリーブロック群を順次確保する。この時、最後に割当てられたフリーブロック群と、割当てられていない残りのフリーブロック群とを交換しても指定されたファイルサイズが確保できる場合には、2つのフリーブロック群を交換する。予めファイルサイズが指定されているファイルであっても、後に追加で領域を確保する必要がある場合がある。そのような場合には、予め指定されたファイルサイズを確保しておき、さらに領域の確保の必要が生じた場合には、最大長のフリーブロック群を割当てるようにする。
図13を参照して、ファイル管理部1は以下のように領域割当を行なう。ファイルへの領域割当要求をアプリケーションプログラムより受信した場合、ファイル管理部1は、その要求が、サイズ指定されたファイルに対する最初の割当要求かどうかを調べる(S1201)。サイズ指定されたファイルに対する最初の割当要求であった場合には、ファイル管理部1は、指定サイズが、最大長のフリーブロック群のサイズよりも大きいかどうかを判定する(S1202)。指定サイズの方が小さい場合は(S1202でfalse)、ファイル管理部1は、最大長のフリーブロック群を指定されたファイルを割当てる領域として確保する(S1207)。
指定サイズの方が大きい場合は(S1202でtrue)、指定サイズの領域が確保されるまで、最大長のフリーブロック群を順次ファイルに割当てる(S1203、S1204)。指定サイズの領域が確保された場合には(S1204でfalse)、最後に割当てた領域と未使用領域として残っている最大のフリーブロック群とを交換しても指定サイズを満たすか否かを判定する(S1205)。2つのフリーブロック群を交換可能な場合には(S1205でtrue)、それらの交換を行なう(S1206)。
サイズ指定されていないファイルまたは、サイズ指定されたファイルに対する2回目以降の割当要求をアプリケーションプログラムより受信した場合(S1201でfalse)、ファイル管理部1は、サイズ指定されていない最初の割当要求か否かを調べる(S1208)。サイズ指定されていない最初の割当要求の場合には(S1208でtrue)、ファイル管理部1は、所定の個数(N個)以内の論理ブロックを含む連続領域を未使用領域の中から割当てる。それ以外の場合には(S1208でfalse)、ファイル管理部1は、未使用領域として最大長のフリーブロック群を割当てる(S1210)。
S1205およびS1206では、最後に割当てたフリーブロック群が、最大長のフリーブロック群と交換することができれば交換している。しかし、最大長のフリーブロック群には限られず、それ以外のフリーブロック群であっても交換する事ができる場合には、交換するようにしてもよい。
また、S1207では、同様に、最大長のフリーブロック群でなくとも、指定サイズよりも大きなフリーブロック群の中で最小のものを割当てるようにしてもよい。
[未使用領域接合部4について]
未使用領域接合部4は、上述した未使用領域を回収し、断片化が起こらないように領域を接合する処理を行なう。
未使用領域接合部4は、ファイルの記録領域として割当てられたにもかかわらず、結果として記録されなかった領域を回収する際に、その前後に、フリーブロック群として管理されている領域が存在する可能性がある。このフリーブロック群と回収される領域とを接合して、新たなフリーブロック群とする。
また、未使用領域接合部4は、ファイル削除などの理由により不要になった領域の各々についても、その前後に位置するフリーブロック群と接合して、新たなフリーブロック群を作成する。
また、2つの断片化されたフリーブロック群のハードディスク6上での距離が非常に近い場合には、それらのフリーブロック群を接合して、新たなフリーブロック群として管理することにより、フリーブロック群の間で発生するシーク時間を抑える事ができる。
フリーブロック群間の距離としては、2つのフリーブロック群間の論理ブロック数やシリンダ数を用いることが考えられる。論理ブロック数で距離を表す場合には、2つのフリーブロック群のハードディスク6上でのおおよそのシリンダ数を判定し、フリーブロック群の間で発生するシーク時間を概算することができる。また、論理ブロックは、ファイル管理装置10で用いられる単位であるために、ファイル管理装置10が管理しやすいというメリットがある。シリンダ数で距離を表した場合には、フリーブロック群の間で発生するシーク時間を算出する事ができる。
上述のように、距離の近いフリーブロック群同士を接合することは有効な手法であるが、接合の抑制を行なわなければ、ハードディスク6上のすべての領域が未使用領域となった場合には、1つの大きなフリーブロック群として構成されてしまい問題である。
そのために、未使用領域接合部4は、フリーブロック群の接合を抑制することによって、この問題を解決する。フリーブロック群の接合を抑制する方法としては、最大長を設定する方法と、境界を設定する方法が考えられる。
最大長による方法では、2つのフリーブロック群を接合した場合に、あらかじめ設定された最大長よりも長くなるか判定し、長い場合は接合を行なわないようにする。
境界を設定する方法では、2つのフリーブロック群が、ハードディスク6上で境界をまたいで位置するかを判定し、境界をまたいで位置する場合には接合を行なわないようにする。
図14を参照して、未使用領域の接合処理について説明する。
未使用領域接合部4は、これから未使用領域として登録する領域に対して、ハードディスク6上で記録位置が前に位置するフリーブロック群を獲得する(S601)。未使用領域接合部4は、登録対象領域と獲得したフリーブロック群との距離が一定値以内かどうかを判定する(S602)。距離の判定方法については後述する。
登録対象領域とフリーブロック群との距離が一定値以内の場合には(S602でtrue)、2つの領域を実際に接合するか否かを調べる(S603)。S603の処理については後述する。
接合処理を行なうと判断された場合には(S603でtrue)、2つの領域の接合処理を行なう(S604)。
未使用領域接合部4は、接合された領域に対して、ハードディスク6上で記録位置が後に位置するフリーブロック群を獲得し(S605)、同様に2つの領域の距離判定処理(S606)と、接合判定処理(S607)とを行ない、接合をする必要があると判断された場合には(S606でtrue、S607でtrue)、2つの領域の接合処理を行なう(S608)。
図15を参照して、図14のS602およびS606の距離判定処理について説明する。
ここでは、これから未使用領域となる領域と、その前に位置するものとして獲得されたフリーブロック群を領域A、Bとして説明する。
未使用領域接合部4は、領域Aの開始論理ブロック番号(As)および終了論理ブロック番号(Ae)、ならびに領域Bの論理ブロック番号(Bs)および終了論理ブロック番号(Be)を獲得する(S701)。未使用領域接合部4は、一方の領域が、他方の領域に包含されるか否かを判定する(S702)。
たとえば、図16(a)を参照して、未使用領域となるべき領域が論理ブロック3および4からなり、未使用領域となるべき領域の記録位置が前方に位置するフリーブロック群が論理ブロック0〜2、記録位置が後方に位置するフリーブロック群が論理ブロック5〜6より構成されているものとする。このような場合には、未使用領域となるべき領域がフリーブロック群に包含されている。
また、図16(b)を参照して、未使用領域となるべき領域が論理ブロック0〜2および5〜6より構成され、未使用領域となるべき領域の記録位置が前方に位置するフリーブロック群が論理ブロック3および4より構成されているものとする。このような場合には、フリーブロック群が未使用領域となるべき領域に包含されている。
一方の領域が他方の領域に包含されている場合には(S702でtrue)、2つの領域を1つのフリーブロック群として管理するため、trueを返す(S704)。
それ以外の場合には(S702でfalse)、2つの領域間の距離があらかじめ設定された値以下であるかを判定する(S703)。2つの領域間の距離が設定値以下の場合は(S703でtrue)、trueを返す(S704)。2つの領域間の距離が設定値より大きい場合には(S703でfalse)、falseを返す(S705)。
図17を参照して、図14のS602およびS606の距離判定処理においては以下に示すように、2つの領域の属するシリンダが近い場合に接合するようにしてもよい。
未使用領域接合部4は、領域Aの開始論理ブロック番号(As)および終了論理ブロック番号(Ae)、ならびに領域Bの開始論理ブロック番号(Bs)および終了論理ブロック番号(Be)を獲得する(S801)。
未使用領域接合部4は、一方の領域が、他方の領域に包含されるか否かを判定する(S802)。一方の領域が他方の領域に包含される場合には(S802でtrue)、trueを返す(S806)。
それ以外の場合には(S802でfalse)、未使用領域接合部4は、領域Aの開始論理ブロックが含まれるシリンダ番号Assおよび終了論理ブロックが含まれるシリンダ番号Ase、ならびに領域Bの開始論理ブロックが含まれるシリンダ番号Bssおよび終了論理ブロックが含まれるシリンダ番号Bseを獲得する(S803)。未使用領域接合部4は、2つの領域間の距離があらかじめ設定されたシリンダ数以下か否かを判定し(S804)、設定値以下の場合にはtrue(S806)を、設定値より大きい場合にはfalse(S805)を返す。
図18を参照して、図14のS604およびS607の接合判定処理について説明する。ここでは、複数のフリーブロック群を接合する際に、あらかじめ設定された値を越えないように接合を行なう。接合した際のフリーブロック群の長さは、各々のフリーブロック群に含まれる論理ブロック数を合計する事により求められる。
未使用領域接合部4は、2つの領域の論理ブロック数を合計し(S901)、合計値があらかじめ設定された値以下であるかを判定する(S902)。未使用領域接合部4は、設定値以下の場合は(S902でtrue)、trueを(S903)、設定値よりも大きい場合は(S902でfalse)、falseを返す(S904)。
図19を参照して、図14のS604およびS607の接合判定処理では以下に示すように、ハードディスク6中で予め設定された境界を横切らない場合にのみ、接合を行なうように判定を行なってもよい。
たとえば、ハードディスク6中で境界を512MByte毎に設けた場合は、2つの領域の開始論理ブロックアドレスの10ビット目以上が一致すれば、2つの領域は同一の境界に存在すると判定できる。
従って、未使用領域接合部4は、入力された2つの領域の開始ブロックの上位nビットを比較し(S1001)、一致するか否かを判定する(S1002)。上位nビットが一致した場合は(S1002でtrue)、trueを(S1003)、一致しない場合は(S1002でfalse)、falseを返す(S1004)。
ファイルをクローズする際に、記録されずに残った論理ブロックは未使用領域として返却する必要がある。この時、フリーブロック群の断片化を避けるために、返却される領域の大きさが一定値以内の場合には返却を行なわないようにする必要がある。
図20を参照して、ファイル管理部1は、ファイルをクローズする際に、最後にデータの書込を行なった論理ブロック番号(Wp)を獲得する(S1101)。ファイル管理部1は、論理ブロックWpが、ファイルに最後に割当てられた領域内に存在するかを判定する(S1102)。論理ブロックWpが最後に割当てられた領域内に存在する場合(S11102でtrue)、ファイル管理部1は、最後に割当てた領域のブロック数lcと、最後に書込を行なった論理ブロックの該当領域先頭からのブロック数Wpcとを獲得する(S1103)。たとえば、最後に割当てられた領域が論理ブロック番号8〜14の論理ブロックからなり、最後に書込を行なった論理ブロックの番号が12である場合は、ブロック数lcは7であり、論理ブロック先頭からのブロック数Wpcは5である。
ファイル管理部1は、ブロック数lcとWpcとの差が予め定められた値以下であるか否かを判断する(S1104)。両者の差が設定値よりも大きい場合には(S1104でfalse)、未使用領域接合部4により最後に割当てた論理ブロック以降のブロックがフリーブロック群として登録される(S1105)。S1105の処理は、図14に示した未使用領域の接合処理と同様である。このため、その詳細な説明はここでは繰返さない。
[遅延交替処理部5について]
遅延交替処理部5は、ハードディスク6の論理ブロックへのデータ書込時にエラーが発生した場合には、エラー発生箇所に書込まれるべきデータをメモリに一時的に記憶し、その論理ブロックが交替中であることを示すフラグを設定する。また、遅延交替処理部5は、ハードディスク6へのアクセスに時間的余裕がある場合に、エラー発生箇所の含まれる論理ブロックを交替先の論理ブロックに書込むとともに、エラー発生箇所のデータをメモリから読出し、交替先の論理ブロックに書込む処理を行なう。本明細書中では、このような処理を、遅延交替処理と呼ぶ。
交替処理では、ハードディスク6のパフォーマンスを低下させないように、データアクセスを行なう必要がある。このため、論理ブロック単位でデータアクセスを行ない、交替処理を行なう必要がある。論理ブロックごとデータを交替したとしても、論理ブロック間のシーク時間と回転待ち時間とは加味されて論理ブロックのサイズは決められている。このため、ハードディスク6のパフォーマンスは保証される。
ただし、交替処理では、エラーの発生した論理ブロックおよび交替先となる論理ブロックの両者に対して書込を行なわなければならない。このため、エラーの発生直後に交替処理を行なうと一時的にハードディスク6に入出力できるデータ量が低下する。従って、ハードディスク6のパフォーマンスに余裕がない場合は、交替処理を行なうことはできない。
本実施の形態の遅延交替処理では、エラーの直後に交替処理を行なうのではなく、ハードディスク6のパフォーマンスに余裕がある時に、実際の交替処理を行なう。パフォーマンスに余裕があるか否かの判断は、取扱うデータの個数により計測される。たとえば、3つのデータを同時に入出力可能なハードディスク6の場合には、取扱うデータが2つであれば、ディスクのパフォーマンスに余裕がある事が分かる。また、ファイル管理装置10用の時計を有し、単位時間あたりに取扱ったデータ量を計測し、ハードディスク6のパフォーマンスに余裕があるときに交替処理を行なうようにしてもよい。
遅延交替処理では、交替先の論理ブロックに再記録されるべきデータを保存するメモリが必要となる点である。再記録されるべきデータをすべてメモリ上に保存すると、その容量は大きくなってしまう。このため、図21(a)を参照して、本実施の形態では、エラーの発生した箇所のみをメモリに保存して、その他の部分のデータは、エラーの発生した論理ブロックに記憶するようにする。メモリに保存する単位としては、エラーの発生したセクタや、サブブロックなどが考えられる。これにより、交替処理を遅延させた結果、再記録されるべきデータを保存するメモリ量を抑えることができる。
図21(b)を参照して、エラーの発生した箇所が論理ブロックの末端近くである場合には、エラーの発生した箇所以降のデータをメモリに保存して、エラー発生箇所よりも前に位置する部分のデータは、その論理ブロックのデータを利用するようにしてもよい。
また、遅延交替処理では、交替すべき論理ブロックのデータを読出す必要がある場合に、正しいデータのすべてがハードディスク6上に存在しない場合がある。これは、追っかけ再生のように、記録しているデータを記録しながら読出すような場合に発生する。このような場合には、エラーの発生した箇所のデータはメモリから読出し、その他の正しく記録されている部分のデータは、エラーの発生した論理ブロックから読出す。よって、ハードディスク6にデータが存在しない場合の追っかけ再生であっても、データが乱れて再生されるようなことはない。
さらに、遅延交替処理では、実際の交替処理を行なう前に、停電等が起こった場合には、メモリに保存したデータを紛失する可能性がある。このため、メモリだけでなく、他の不揮発性の記録媒体にエラーの発生した箇所のデータを保存するようにする。このようにすれば、メモリに保存したデータを紛失した場合であっても、データの回復が可能である。なお、不揮発性の記録媒体としては、フラッシュメモリ等が挙げられる。
図22を参照して、遅延交替処理について説明する。ここでは、エラー発生箇所をメモリに保存する際に、サブブロック単位で保存する。
遅延交替処理部5は、ハードディスク6へのデータの書込時にエラーが発生しているか否かを調べる(S1301)。書込エラーが発生した場合には(S1301でtrue)、遅延交替処理部5は、エラーの発生したセクタの属する論理ブロックおよびサブブロックを求める(S1302)。論理ブロックのサイズが1MByteの場合には、セクタの番号を20ビットシフトすることにより論理ブロックの番号を求めることができる。また、サブブロックのサイズが128Kバイトの場合には、セクタの番号を17ビットシフトし、下位3ビットを抽出することにより、サブブロックの番号を求めることができる。
遅延交替処理部5は、図2に示した領域管理テーブルの該当する論理ブロックの交替フラグに交替処理が遅延していることを示すデータを設定する(S1303)。遅延交替処理部5は、書込エラーの発生したサブブロックのデータをメモリに保存するとともに(S1304)、同じデータを不揮発性の記録媒体に保存する(S1305)。
この時、メモリや不揮発性の記録媒体には、書込エラーの発生したサブブロックのデータ以外に、そのデータが属する論理ブロックおよびサブブロックの番号なども保存される。
データの書込エラーが発生していない場合には(S1301でfalse)、交替処理が遅延されている論理ブロックが存在するか否かを調べる(S1306)。交替処理が遅延されている論理ブロックが存在する場合には(S1306でtrue)、遅延交替処理部5は、交替処理を行なう余裕があるか否かを判定する(S1307)。
交替処理を行なう余裕がある場合には(S1307でtrue)、遅延交替処理部5は、未使用領域の中から交替先となる論理ブロックを獲得する(S1308)。遅延交替処理部5は、交替元となる論理ブロックから、書込が成功した領域を読出し、エラーの発生したサブブロックのデータは、保存したメモリ上から読出し、交替先に記録すべきデータを作成する(S1309)。遅延交替処理部5は、作成したデータを交替先の論理ブロックに記録する(S1310)。その後、遅延交替処理部5は、領域管理テーブル上の交替元となる論理ブロックの交替フラグを交替済みであることを示す値に変更し、交替先論理ブロックと交替元論理ブロックとを置き換える(S1311)。
S1311の処理としては、交替元論理ブロックの前後に位置する論理ブロックのポインタが交替先論理ブロックを指すように変更したり、交替元論理ブロックのポインタ領域を交替先の論理ブロックを指すように変更し、交替先の論理ブロックのポインタを交替元の前後に位置する論理ブロックを指すように変更することが考えられる。
図23を参照して、この処理について説明する。図23(a)は、エラーが検知される前の領域管理テーブルの状態を示している。論理ブロック番号が0から511までの領域の使用フラグは1であり、それらの論理ブロックがファイルで使用されていることを表す。また、交替フラグの値はすべて0であるため、交替処理は行なわれていないことを示している。
この時、論理ブロック番号1の書込時にエラーが発生したものとする。図23(b)を参照して、1番の論理ブロックの交替フラグの値が2に設定され、その論理ブロックが交替中であることが示される。
図23(c)を参照して、このブロックの交替先の論理ブロックとして、4095番の論理ブロックが選択された場合には、4095番の論理ブロックの前ブロック相対アドレスおよび次ブロック相対アドレスの値がそれぞれ0番および2番の論理ブロックを指し示すように書換えられる。また、交替元の1番の論理ブロックには、交替先の論理ブロックの番号4096が代入される。さらに、1番の論理ブロックの交替フラグには、交替処理が終了したことを示す値1が設定される。
または、図23(d)を参照して、交替先の論理ブロックの前ブロック相対アドレスおよび次ブロック相対アドレスの値が、それぞれ0番および2番の論理ブロックを指し示すように書換えられる。また、0番の論理ブロックの次ブロック相対アドレスおよび2番の論理ブロックの前ブロック相対アドレスが4095番のブロックを指し示すように変更される。また、1番の論理ブロックの交替フラグには、交替処理が終了したことを示す値1が設定される。
図24を参照して、記録媒体制御部2は、読出対象の論理ブロックが交替されていない状態である場合には、エラーが発生した箇所のデータについては、メモリに記憶された正常なデータを読出し、それ以外の部分については、ハードディスク6から読出す処理を行なう。
記録媒体制御部2は、読出対象の論理ブロックが交替中であり、交替処理が終了していないか否かを調べる(S1401)。交替処理が終了していなければ(S1401でtrue)、エラーの発生した箇所以外のデータを読出対象の論理ブロックから読出し(S1402)、メモリからエラーの発生した箇所の正常なデータ読出す(S1403)。
交替処理が終了していれば(S1401でfalse)、通常の読出処理を行なう(S1404)。
ハードディスク6では、1つのコマンドで転送可能なセクタ数は、256個までである。このため、1MByteの論理ブロックを転送するためには、1MByteのデータを8等分し、それぞれのデータを分割転送する必要がある。しかし、ハードディスク内部では、キャッシュメモリを使用している。このため、複数のデータに分割して転送したとしても、転送データのハードディスク6上でのセクタが連続している限りは、転送コマンド間でのシーク時間および回転待ち時間は発生しない。
従って、書込エラーが生じた場合には、256セクタ単位でデータをメモリに保存するようにすれば、エラーが発生した箇所を読出すためのコマンドをハードディスク6に転送する必要がなくなる。また、メモリへ保存するデータサイズの大きさと、上述したサブブロックの大きさとを等しくすれば、ファイル管理装置10におけるデータの管理がしやすくなる。
なお、ハードディスク6以外にも、MO(Magneto-Optical)、DVD−RAM(Digital Video Disk-Random Access Memory)などの円盤状の記録媒体を用いてもよい。
以上説明したように本発明の実施の形態に係るファイル管理装置によると、未使用領域は、未使用領域接合部4で接合され、未使用領域管理部3により管理される。このため、1つのファイルの記録媒体上での連続性をなるべく保つことができ、記録媒体のパフォーマンスを保証することができる。特に、デジタル映像音声データのように大容量で、かつ読出および書込時にリアルタイム性が要求される場合でも、記録媒体のパフォーマンスを保証することができる。
また、データの書込に余裕がある場合に遅延処理を実行させることができる。このため、リアルタイム性が要求されるファイルの読出または書込途中であっても、読出または書込の邪魔をすることなく遅延処理を実行させることができる。
さらに、小サイズのデータについては、サブブロック単位でのアクセスを行なうことにより、アクセス効率を向上させることができる。
さらにまた、未使用領域のうち、記録媒体上で連続した論理ブロックをフリーブロック群として、まとめて管理することにより、ファイルへの領域割当や、不要になった領域の接合処理などを効率良く行なうことができる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
[実施の形態の効果]
本実施の形態によるとデジタル映像音声データのように大容量で、かつ読出および書込時にリアルタイム性が要求されるデータを取扱う場合でも、記録媒体のパフォーマンスを保証することができる。
1 ファイル管理部、2 記録媒体制御部、3 未使用領域管理部、4 未使用領域接合部、5 遅延交替処理部、6 ハードディスク、10 ファイル管理装置。