(57)【特許請求の範囲】
【請求項１】
複数のブロックに分割された記憶手段にファイルのデータを記録するファイル装置であって、
前記記憶手段上で前記複数のブロックのうちから、前記ファイルのデータを記録すべきブロックを割り当てるブロック割り当て手段と、
前記ブロック割り当て手段で前記複数のブロックのうちから割り当てられた前記ブロックを指示する管理情報を作成する管理情報作成手段と、
前記管理情報作成手段で作成された前記管理情報を前記記憶手段に記録した後に、前記記憶手段の、前記複数のブロックのうちから割り当てられた前記ブロックに前記ファイルのデータを記録する記憶制御手段とを有し、
前記記憶制御手段は、前記ファイルのデータを記録したときに、前記ブロック割り当て手段で前記複数のブロックのうちから割り当てられた前記ブロックにデータの未記録のブロックが発生したときに、前記未記録のブロックが未使用のブロックとなるように前記管理情報を更新することを特徴とするファイル装置。
【請求項２】
複数のブロックに分割された記憶手段にファイルのデータを記録するファイル装置であって、
前記記憶手段上で前記複数のブロックのうちから、前記ファイルのデータを記録すべきブロックを割り当てるブロック割り当て手段と、
前記ブロック割り当て手段で前記複数のブロックのうちから割り当てられた前記ブロックを指示する管理情報を作成する管理情報作成手段と、
前記管理情報作成手段で作成された前記管理情報を前記記憶手段に記録した後に、前記記憶手段の、前記複数のブロックのうちから割り当てられた前記ブロックに前記ファイルのデータを記録する記憶制御手段とを有し、
前記記憶制御手段は、前記記憶手段の前記複数のブロックのうちから割り当てられた前記ブロックに記録する前記ファイルのデータに、前のブロックを指示する情報及び該ブロックに記録されるデータの大きさを示す情報を付与して前記ファイルのデータを前記記憶手段に記録し、
前記管理情報に応じて前記記憶手段の前記複数のブロックのうちから割り当てられた前記ブロックに順次アクセスして前記ファイルのデータを読み出し、前記記憶手段の前記複数のブロックのうちから割り当てられた前記ブロックからデータを読み出した結果、前記前のブロックを指示する情報が前のブロックを指示していないとき、又は、前記ブロックに記録するデータの大きさを示す情報が実際のブロックの大きさの範囲外にある場合には、前記ファイルのデータの読み出しを中止し、それ以降のブロックが未使用のブロックとなるように前記管理情報を更新するファイル読出手段を有することを特徴とするファイル装置。
【請求項３】
複数のブロックにファイルのデータを分割して記録するファイルアクセス方法であって、
前記複数のブロックのうちから、前記ファイルのデータを記録するブロックを割り当てるブロック割り当て手順と、
前記ブロック割り当て手順で前記複数のブロックのうちから割り当てられた前記ブロックを指示する管理情報を作成する管理情報作成手順と、
前記ファイルのデータを前記複数のブロックのうちから割り当てられた前記ブロックに記録するファイル記憶手順と、
前記ファイル記憶手順の前に、前記管理情報作成手順で作成された前記管理情報を記録する管理情報記憶手順と、
前記ファイル記憶手順により前記ファイルのデータを記録したときに、前記ブロック割り当て手順で前記複数のブロックのうちから割り当てられた前記ブロックに未記録のブロックが発生したときに、前記未記録のブロックが未使用のブロックとなるように前記管理情報を更新する管理情報更新手順とを有するファイルアクセス方法。
【請求項４】
複数のブロックにファイルのデータを分割して記録するファイルアクセス方法であって、
前記複数のブロックのうちから、前記ファイルのデータを記録するブロックを割り当てるブロック割り当て手順と、
前記ブロック割り当て手順で前記複数のブロックのうちから割り当てられた前記ブロックを指示する管理情報を作成する管理情報作成手順と、
前記ファイルのデータを前記複数のブロックのうちから割り当てられた前記ブロックに記録するファイル記憶手順と、
前記ファイル記憶手順の前に、前記管理情報作成手順で作成された前記管理情報を記録する管理情報記憶手順とを有し、
前記ファイル記憶手順は、前記ファイルのデータを記録する前記複数のブロックから割り当てられた各ブロックに前のブロックを指示する情報及び該ブロックに記録されるデータの大きさを示す情報を付与して前記ファイルのデータを記録し、
前記管理情報に応じて前記複数のブロックから割り当てられた前記ブロックに順次アクセスして前記ファイルのデータを読み出し、前記複数のブロックから割り当てられた前記ブロックから前記ファイルのデータを読み出した結果、前記前のブロックを指示する情報が前のブロックを指示していないとき、又は、前記ブロックに記録するデータの大きさを示す情報が実際のブロックの大きさの範囲外にある場合には、前記ファイルのデータの読み出しを中止し、それ以降のブロックが未使用のブロックとなるように前記管理情報を更新するファイル読出手順を有することを特徴とするファイルアクセス方法。
【発明の詳細な説明】
技術分野
本発明はファイル装置及びファイルアクセス方法に係り、特に、ファイルをクラスタやブロックなどの単位に分割して記録し、管理するファイル装置及びファイルアクセス方法に関する。
背景技術
従来、「ＭＳ−Ｗｉｎｄｏｗｓ」や「ＵＮＩＸ」などのＯＳ（Ｏｐｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ）において、外部記憶装置にデータを記憶する場合には、「ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  ｔａｂｌｅ）」や「インデックスノード（ｉ−ｎｏｄｅ）」と呼ばれる管理情報に各クラスタやブロックなどのつながりを記憶していた。
このようなシステムにおいてファイルを読み出すときには、ファイルに対応するクラスタやブロックを管理情報を参照しながら順番にアクセスする。
また、新たにファイルを記憶する際やデータの更新時には、新しいデータ系列を記憶するためのクラスタやブロックを割り当て、管理情報を更新した後にデータを割り当てた領域に記録する。
ファイルをアクセスする際に、外部記憶装置に記憶された管理情報とデータ系列とを交互にアクセスしていたのでは、アクセスの度に外部記憶装置にシークが生じてしまいアクセスの効率が悪い。アクセスを効率的に行うために、管理情報はシステムのバッファに一時的に記憶しておき、データ系列のみを外部記憶装置に記録し、データ系列の記録後、管理情報をバッファから外部記憶装置に記録するようにしている。
しかし、このようなシステムでは、外部記憶装置にデータを記録しているときに、システムの強制終了、電源異常によるシステムダウン、外部記憶装置がリムーバル媒体の場合にはリムーバル媒体の強制排出などが生じた場合、バッファに一時的に記憶されていた管理情報が外部記憶装置に記録されない。管理情報が外部記憶装置に記録されたない状態で、上記のような障害が復旧した後にファイルへアクセスした場合、管理情報が記録されていないため、媒体に記録されたデータ系列すべてが読み出せなくなる等の問題点があった。
上記のような障害に対処するために下記のような方法が従来から提案されている。
（１）無停電電源装置による方法
無停電電源装置は、一般にＵＰＳ（Ｕｎｉｎｔｅｒｒｕｐｔｉｂｌｅ  Ｐｏｗｅｒ  Ｓｕｐｐｌｙ）と呼ばれる装置で、システムの主電源切断や電圧低下などの電源異常が生じた後でも一定時間電力を供給するものである。ＵＳＰを用いることによりシステムのシャットダウン処理後にシステムへの電力供給を切断される。シャットダウン処理により外部記憶装置へのデータ系列及び管理情報の書き込みが行われ、システムを正常に終了させることができるため、データ系列と管理情報とを制御させてシステムが終了される。
（２）回復可能遅延記憶ファイルシステムによる方法
この方法は、「ＭＳ−Ｗｉｎｄｏｗｓ  ＮＴ」のファイルシステムであるＮＴＦＳ（Ｎｅｗ  Ｔｅｃｈｎｏｌｏｇｙ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）などで用いられている方法であり、管理情報とデータ系列とは別にディスクアクセスの記録を保管するためのログ情報を記録する方法である。
この方法では、障害発生時には、記録されたログ情報を参照し、ログ情報に基づいて管理情報とデータとが整合するように復旧処理を行う。
（３）追記憶ファイルシステムによる方法
追記憶ファイルシステムは、一般にＬＦＳ（Ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ  Ｆｉｌｅｓ  Ｓｙｓｔｅｍ）と呼ばれる方法である。ＬＦＳは、データ系列を常にシーケンシャルに追記憶し、追記憶したデータ系列の最後に管理情報を記憶するシステムである。
ＬＦＳでは、追記憶しているデータ系列の管理情報までが記憶できた場合に、そのデータ系列は有効となる。なお、障害などにより追記憶中のデータ系列の管理情報が記憶できなかった場合には、追記憶中のデータ系列は無効となるが、その前のデータ系列により復旧処理が行われる。
図１に従来の一例の動作説明図を示す。図１（Ａ）は追記憶ファイルシステムのデータ構成、図１（Ｂ）は追記憶ファイルシステムの新規情報追加時の動作説明図、図１（Ｃ）は追記憶ファイルシステムの障害発生時の動作説明図である。
追記憶ファイルシステムでは、図１（Ａ）に示されるようにブロックＢ１〜Ｂ３から構成される一連のデータ系列を１つの管理情報１により管理する。管理情報１は、一連のデータ系列のファイル名、ファイルサイズ、先頭ブロック、ファイルの割り当てなどの情報から構成される。この管理情報１に基づいてファイルにアクセスが行われる。
例えば、図１（Ｂ）に示すように新たにブロックＢ４、Ｂ５が追記憶されると、新たに記憶されたブロックＢ４、Ｂ５の管理情報を含む新しい管理情報２が作成され、記憶される。なお、新しい管理情報２が作成されると、ブロックＢ１〜Ｂ３を管理する管理情報１は無効となる。
このとき、図１（Ｃ）に示すように新たなブロックＢ４、Ｂ５を記憶しているときに、障害が発生し、管理情報２が記憶されずに情報が終了すると、新たに記憶されたブロックＢ４、Ｂ５は無効となるが、管理情報１は残るので、ブロックＢ１〜Ｂ３は管理情報１に基づいて読み出すことができる。
図２は従来の一例の管理情報及びファイルのデータ構成図を示す。図２（Ａ）、図２（Ｂ）は管理情報１、図２（Ｃ）〜（Ｅ）はファイルのデータ構成を示す。
管理情報１は、図２（Ａ）に示すファイル管理情報１ａ、及び、図２（Ｂ）に示すブロック割り当て情報１ｂから構成される。
ファイル管理情報１ａは、ファイル名、ファイルサイズ、先頭ブロック番号の情報から構成される。ファイル管理情報１ａによりファイル名「ｘｘｘＡ」のファイルは、先頭ブロック番号「１」からファイルサイズ「２５６０バイト」のデータで構成されるなどの情報が得られる。
また、ブロック割り当て情報１ｂは、図２（Ｂ）に示すように各ブロックのブロック番号と、各ブロック番号に続く次のブロック番号の情報から構成される。
ファイルは、図２（Ｃ）〜（Ｅ）に示すように図２（Ａ）、（Ｂ）に示す管理情報により設定されたブロックに各ファイル名「ｘｘｘＡ」、「ｘｘｘＢ」、「ｘｘｘＣ」のデータが記憶される。
例えば、ファイル名「ｘｘｘＡ」のファイルにアクセスするためには、まず、図２（Ａ）に示されるファイル管理情報のファイル名「ｘｘｘＡ」の先頭ブロック「１」を参照し、先頭ブロック番号「１」のブロックにアクセスする。次に、図２（Ｂ）に示されるブロック割り当て情報のブロック番号「１」を参照し、次のアクセスすべきブロック番号「２」のブロックにアクセスする。
続けて、図２（Ｂ）に示されるブロック割り当て情報のブロック番号「２」を参照し、次のアクセスすべきブロック番号「３」のブロックにアクセスする。同様にしてアクセスを続け、図２（Ｂ）に示されるブロック割り当て情報が最終ブロックとなるまでアクセスする。以上によりファイル名「ｘｘｘＡ」のデータが記憶されたブロック番号「１」〜「５」のブロックからデータが読み出される。
（４）特開平１０−６３５５５号に開示されている技術
特開平１０−６３５５５号には、データ系列を記憶するためのブロックへ、次にブロックを示すための情報を埋め込み、管理情報と記憶したデータ系列との間に不整合が生じた場合には、ブロックに埋め込まれた情報に基づいて管理情報を復旧する技術が記載されている。
しかるに、従来の（１）に示すＵＳＰによる方法では、障害発生時にも記憶可能な記録媒体が存在している必要があり、リムーバルメディアなどにおいて媒体が強制排出された場合には対応できない等の問題点があった。
また、（２）に示した回復可能遅延記憶ファイルシステムによる方法や（３）に示した追記憶ファイルシステムによる方法では、有効な管理情報の内容を元に復旧処理を行うため、新たに記憶したデータ系列が廃棄される可能性がある。
さらに、（４）に示した特開平１０−６３５５５号の方法では、ブロックに埋め込まれた情報を元に管理情報の復旧処理を行うため、データ系列の各ブロックを順番にアクセスする必要があり、ブロックがランダムに記憶されていた場合には、各ブロックにアクセスする度にシークが発生し、処理時間を要するなどの問題点があった。
また、最近、ＭＰＥＧ−１、ＭＰＥＧ−２などのディジタル映像を複数同時に外部記憶装置に記憶するアプリケーションが提案されている。このようなアプリケーションでは、絶え間なく送れられてくるディジタル映像を記録するために、オーバーヘッドを削減して効率的にディスクアクセスを行う必要があった。ディスクアクセスはシークと回転待ちとデータの読み書き処理からなっており、データの読み書き以外の処理を抑えるためにできるだけシーケンシャルに記憶することが望まれている。
ここで、（４）に示した特開平１０−６３５５号の方法では、データ系列を記憶する際に、障害時の復旧を可能とするために一つのブロックに次にブロックへの情報を記憶する必要がある。このため、予め次のブロックの位置を確保する必要がある。ここで複数のディジタル映像を記録する場合を考える。複数のディジタル映像を遅延なく記憶するには、ディジタル映像のチャンネル数や符号化レートに応じてディスクアクセスをスケジューリングし、複数のディジタル映像のデータをシーケンシャルに記憶することが必要である。しかし、（４）の方法では、予め次のブロックへの情報を記憶する際に、ディスクアクセスのスケジューリングを考慮しておらず、予めブロックへ記録した次のブロックへの情報と、スケジューリングによるアクセスの順番が異なる可能性があり、その結果ランダムアクセスが生じてディスクアクセスの効率が低下する。したがって、複数のディジタル映像をシーケンシャルに記憶するためには、映像のチャンネル数や各映像の転送レートに応じてディスクアクセスをスケジューリングしたときの情報を元にして記録するブロックを設定する必要があった。
発明の開示
本発明は上記の点に鑑みてなされたもので、障害によりデータが最後まで正しく記憶されなかった場合でも記録済みデータへのアクセスが可能なファイル装置及びファイルアクセス方法を提供することを目的とする。
本発明は、複数のブロックに分割された記憶手段にファイルを記録する際に、前記記憶手段上で前記ファイルを記憶すべきブロックを割り当て、割り当てられたブロックを指示する管理情報を作成して、前記管理情報を前記記憶手段に記憶した後に、前記記憶手段に前記ファイルを記録するようにする。
本発明によれば、記憶手段上でファイルを記録すべきブロックを予め割り当て、割り当てられたブロックを指示する管理情報を記憶手段に記憶した後に、ファイルを記録することにより、ファイルの記憶途中で障害が発生しても、管理情報が失われることはなく、よって、管理情報に基づいてファイルの内の既に記録されたデータを読み出すことができる。
また、本発明は、各ブロックに記憶するデータに、前のブロックを指示する情報及びブロックに記録されるデータの大きさを示す情報を付加して、前記記憶手段に記録する。
本発明によれば、各ブロックに記録するデータに、前のブロックを指示する情報及びブロックに記録されるデータの大きさを示す情報を付加することにより、ファイルの読み出しを行ったときに管理情報と記録されたデータとで整合がとれていない場合でも、前のブロックとブロックに記録されたデータの大きさを確認することにより有効なデータを判別できる。
本発明は、ファイルを記録したときに、割り当てられたブロックにデータの未記録のブロックが発生された場合に、未記録のブロックを未使用のブロックとなるように管理情報を更新する。
本発明によれば、ファイルを記録したときに、割り当てられたブロックにデータの未記録のブロックが発生された場合に、未記録のブロックを未使用のブロックとなるように管理情報を更新することにより、他のファイルでブロックを使用できるので、未記録ブロックを有効に活用できる。
本発明は、ファイルを構成するデータの記憶順序を予め設定し、設定された順序に基づいてファイルを構成するデータを割り当てられたブロックに記録する。
本発明によれば、ファイルを構成するデータの記録順序を予め設定し、設定された順序に基づいてファイルを構成するデータを割り当てられたブロックに記録することにより、効率的にファイルにアクセスすることができる。
本発明は、管理情報に応じてブロックに順次アクセスして、ファイルを読み出し、ブロックからデータを読み出した結果、前のブロックを指示する情報が前のブロックを指示していないとき、又は、ブロックに記憶すべきデータの大きさを示す情報が実際のブロックの大きさの範囲外である場合には、ファイルの読出を中止し、それ以降のブロックの未使用のブロックとなるように管理情報を更新する。
本発明によれば、管理情報に応じてブロックに順次アクセスして、ファイルを読み出し、ブロックからデータを読み出した結果、前のブロックを指示する情報が前のブロックを指示していないとき、又は、ブロックに記憶すべきデータの大きさを示す情報が実際のブロックの大きさの範囲外である場合には、ファイルの読出を中止し、それ以降のブロックの未使用のブロックとなるように管理情報を更新することにより、正しくないデータを読み出すことが停止でき、正しくないデータが記憶されたブロックを未使用のブロックとなるように管理情報を更新できるため、他のファイルでブロックを使用できるので、未記録ブロックを有効に活用できる。
発明を実施するための最良の形態
図３は本発明の第１実施例のブロック構成図を示す。
本実施例のファイル装置１００は、ホストコンピュータ１０１と外部記憶装置１０２から構成される。
ホストコンピュータ１０１は、ＣＰＵ１０３、ＲＯＭ１０４、ＲＡＭ１０５、入出力インタフェース１０６をバス１０７で接続した構成とされ、外部記憶装置１０２を制御する。
ＣＰＵ１０３は、ＲＯＭ１０４に記憶されたアプリケーションにより各種制御を行う。ＲＡＭ１０５は、ＣＰＵ１０３の作業用記憶領域として用いられる。
本実施例のファイルシステム１０８は、ＲＯＭ１０４に記憶されたアプリケーションによって実現されている。ファイルシステム１０８を実現するアプリケーションは、実行時にはＲＡＭ１０５に展開されて、ＣＰＵ１０３により実行される。
ファイルシステム１０８は、その機能ブロックとして、アクセス処理部１０９、ブロック割当部１１０、管理情報統括部１１１、管理情報記憶部１１２から構成される。アクセス処理部１０９は、外部記憶装置１０２へのデータの書き込み、読み出しを制御する。
ブロック割当部１１０は、外部記憶装置１０２に書き込もうとするファイルを分割し、外部記憶装置１０２に予め分割されたブロックに割り当てる。管理情報統括部１１１は、管理情報を統括管理する。管理情報記憶部１１２は、管理情報を一時的に管理する。
外部記憶装置１０２は、ハードディスクドライブなどから構成される。外部記憶装置１０２には、管理情報１１３及びファイルデータ１１４がブロック単位で記憶される。
ホストコンピュータ１０１の管理情報記憶部１１２及び外部記憶装置１０２に記憶される管理情報１１３は、ファイル管理情報１１５及びブロック割当情報１１６から構成される。ファイル管理情報１１３は、ファイル名、ファイルサイズ、先頭ブロック番号、最終ブロック番号などの情報から構成され、ファイル毎に設定されている。
ブロック割当情報１１４は、ブロック番号毎に次のブロックの番号又は、最終である旨を示す情報又は、未割当である旨を示す情報を格納した構成とされている。
ファイルデータ１１４は、データ本体１１４ａ、前ブロック番号１１４ｂ、データサイズ１１４ｃから構成される。データ本体１１４ａは、ファイルをブロックに分割したデータである。前ブロック番号１１４ｂは、そのブロックのデータの前に連続するデータが格納されたブロックのブロック番号である。データサイズ１１４ｃは、そのブロックに格納したデータのサイズである。ブロックへ有効なデータを記録した場合、データサイズ１１４ｃは、ブロックの大きさの範囲内の値になる。
次に、ファイルシステム１０８による、ファイルの書き込み動作について説明する。
図４は本発明の第１実施例のファイルシステムのファイル書込時の動作フローチャートを示す。
ファイルシステム１０８は、ファイルの書き込み要求があると、まず、外部記憶装置１０２に予め設定された特定ブロック数分の空き領域があるか否かを判定する（ステップＳ１−１）。
ステップＳ１−１で、外部記憶装置１０２に特定ブロック数分の空き領域がない場合には、次に、外部記憶装置１０２にデータを記録するための空き領域自体があるか否かが判定される（ステップＳ１−２）。
ステップＳ１−２で、外部記憶装置１０２にデータを記録するための空き領域がなければ、ファイルを記録することはできないので、ファイルの書き込みは終了する。
また、ステップＳ１−２で、外部記憶装置１０２にデータを記憶するための空き領域がある場合には、特定ブロック数を空き領域に応じたブロック数に変更する（ステップＳ１−３）。
ステップＳ１−１で外部記憶装置１０２に予め設定された特定のブロック数分の空き領域があった場合、及び、ステップＳ１−３で空き領域に応じたブロック数に空き領域が設定された場合には、設定されたブロック数分のブロックを管理情報記憶部１１２のブロック割当情報１１６に書き込むべきファイルの管理情報としてを割り当てる（ステップＳ１−４）。
ステップＳ１−４で、ブロック割当情報１１６が更新されると、次に、更新されたブロック割当情報１１６に基づいてファイル管理情報１１５を更新する（ステップＳ１−５）。
ステップＳ１−５で、ファイル管理情報１１５が更新されると、ステップＳ１−４、ステップＳ１−５で更新されたファイル管理情報１１５及びブロック割当情報１１６を外部記憶装置１０２に記録する（ステップＳ１−６）。ステップＳ１−６で外部記憶装置１０２に管理情報１１３が記録された後、ファイルを構成するデータが外部記憶装置１０２に記憶された管理情報１１３に従って記録される（ステップＳ１−７）。
ここで、ステップＳ１−７の外部記憶装置１０２へのファイルの書き込み処理について詳細に説明する。
図５は本発明の第１実施例のファイルシステムのファイル書き込み時の動作フローチャートを示す。
ステップＳ１−７の外部記憶装置１０２にファイルを書き込む処理では、まず、割り当てられたブロックが外部記憶装置１０２に存在するか否かが判定される（ステップＳ２−１）。
ステップＳ２−１で外部記憶装置１０２に割り当てられたブロックが存在しなければ、処理は終了する。また、ステップＳ２−１で、外部記憶装置１０２に割り当てられたブロックが存在すれば、データに前のデータを記録したブロックのブロック番号及びブロックに記録したデータのサイズを付加して、割り当てられたブロックに記録する（ステップＳ２−２、Ｓ２−３、Ｓ２−４）。
以上により外部記憶装置１０２へのファイルの書き込みが終了する。
次に、以上のようにして書き込まれたファイルの読み出し時の動作について説明する。
まず、ファイルシステム１０８は、管理情報１１３を外部記憶装置１０２から読み出し、読み出された管理情報１１３に基づいて要求のあったファイルのデータが格納されたブロックからデータを読み出す（ステップＳ３−１）。
ステップＳ３−１では、ファイルシステム１０８は外部記憶装置１０２から読み出した管理情報１１３を管理情報記憶部１１２に記録する。次に、ファイルシステム１０８は、管理情報記憶部１１２に記録された管理情報のうちファイル管理情報１１５を参照し、要求のあったファイルのファイル名の先頭ブロック番号を認識し、認識したブロック番号のブロックにアクセスして、データを読み出す。
ステップＳ３−１で読み出したブロックのデータに記録された前のブロック番号を読み出し、有効か否かを判定する（ステップＳ３−２）。
ステップＳ３−２の判定は、ステップＳ３−１で読み出されたデータのうち前のブロック番号１１４ｂを参照して、前に読み出されたブロックのブロック番号と一致するか否かを判定することにより行われる。なお、両者が一致すれば、有効と判断される。なお、先頭ブロックの場合には前に読み出されるブロックはないので、ブロック番号を示すデータが存在しないことを示す情報であれば、有効であると判断される。
ステップＳ３−２で、前のブロック番号が有効であれば、次にブロックに記録されたデータのデータサイズは有効か否かを判定する（ステップＳ３−３）。
ステップＳ３−３の判定は、ブロックのデータ中のデータサイズが、ブロックの大きさの範囲内であるかを判定することにより行われる。なお、ブロックの大きさの範囲内であれば、データは有効であると、判定される。
ステップＳ３−３でブロックのデータサイズが有効であると判定された場合には、今回読み出されたブロックのうちデータサイズ分だけデータを有効にする（ステップＳ３−４）。
なお、管理情報１１３のうちのブロック割当情報１１６を参照して、次のブロック番号を認識し、認識したブロック番号のブロックにアクセスして、データを読み出しつつ、上記処理をブロック割当情報１１６の参照結果が最終のブロックを示す旨の情報となるまで繰り返すことにより、所望のファイルのデータを読み出す。
また、ステップＳ３−２、Ｓ３−３で、前のブロックのブロック番号及びブロックのデータサイズが無効のときには、管理情報１１３が無効であると判断できるので、以降のブロックを正しく読み出すことはできない。そこで、読み出しブロックの一つ前のブロックを最終ブロックに設定し（ステップＳ３−５）、読み出したブロック以降の管理情報１１３を未割り当ての状態に更新して（ステップＳ３−６）、更新した管理情報１１３を外部記憶装置１０２に記録する（ステップＳ３−７）。
以上により、管理情報１１３が無効となった場合でも、管理情報１１３が無効となる前のブロックまでのデータを読み出すことができる。
次に、本実施例の具体的な動作を図面とともに説明する。
図７は本発明の第１実施例の動作説明図を示す。図７（Ａ）は管理情報１１３のうちのファイル管理情報１１５、図７（Ｂ）は管理情報１１３のうちのブロック割当情報１１６、図７（Ｃ）はファイル名「ＸＸＸＡ」のデータ構成、図７（Ｄ）はファイル名「ＸＸＸＢ」のデータ構成、図７（Ｅ）はファイル名「ＸＸＸＣ」のデータ構成を示す。
例えば、ファイル名「ｘｘｘＣ」のファイルを作成中で図７に示すようなデータ構造であるとする。ファイル名「ＸＸＸＡ」、「ＸＸＸＢ」のファイルは既に作成済みのファイルで、図７（Ａ）、（Ｂ）に示すようにファイル管理情報１１５、ブロック割当情報１１６が記録される。
ファイル名「ＸＸＸＡ」のファイルは、先頭ブロック番号が「１」で最終ブロック番号が「５」であり、ファイルサイズが２５６０バイトである。ファイル名「ＸＸＸＡ」を構成する各ブロックは、ブロック割当情報１１６に示すようにブロック番号「１」の次はブロック番号「２」、ブロック番号「２」の次はブロック番号「３」・・・最終ブロック番号「５」まで順次に割り当てられている。
なお、最終ブロック番号「５」にはファイル名「ＸＸＸＡ」の最終ブロックである旨の情報が割り当てられている。また、使用されていないブロック番号にはそのブロックが未割り当てである旨を示す情報が記録されている。
また、ファイル名「ＸＸＸＡ」の実際のデータには、各ブロック毎に前のブロックへの番号と、各ブロックで使用しているデータサイズとデータが記録されている。例えば、ブロック番号「２」では、図７（Ｃ）に示すように前のブロックのブロック番号「１」で、データサイズが５１２バイトである。
ファイル名「ＸＸＸＡ」の先頭ブロックであるブロック番号「１」には先頭ブロックであることを示す情報が記録される。
次にファイル名「ＸＸＸＣ」を記憶する場合を考える。まず、ファイル名「ＸＸＸＣ」に特定のブロック数を割り当てる。ここでは、例えば、特定のブロック数を４ブロックとする。
次に、ブロック割当情報１１６を参照し、未割り当てのブロックを調べ、未割り当てのブロックに特定のブロック数である４ブロックを割り当てる。このとき、割り当てるブロック数、すなわち、４ブロック数分のブロックが存在しない場合には、残っている未割り当てのブロックを割り当てる。また、未割り当てのブロックが全く存在しない場合には、その旨システムに通知する。
ブロック割当情報１１６にブロックを割り当てる場合には、ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２に記憶されているブロック割当情報１１６に対して、まず、最終ブロック番号を割り当てた後、データ系列の順番、すなわち、データの読み出し順とは逆の順番にブロック番号を設定する。そして、更新前の最後のブロックであるブロック番号「１２」に次のブロック番号「１３」を記録する。
また、図７（Ａ）に示すホストコンピュータ１０１のＲＡＭ１０５に記憶されたファイル管理情報１１５の最終ブロック番号を「１６」に、また、ファイルサイズを「４０９６バイト」に更新する。ファイルサイズ「４０９６バイト」は割り当てたブロックの全て容量を使用したときのデータサイズを示す。
このように、ファイル名「ＸＸＸＣ」のファイルデータを記録する前に管理情報１１３を更新し、外部記憶装置１０２に記録することにより、外部記憶装置１０２の管理情報は常に最新の情報となる。
続いて、割り当てたブロックにファイルを構成するデータを記憶する。
図８に本発明の第１実施例の書き込み動作を説明するための図を示す。図８（Ａ）は管理情報１１３のうちのファイル管理情報１１５、図８（Ｂ）は管理情報１１３のうちのブロック割当情報１１６、図８（Ｃ）はブロック割当直後のファイル名「ＸＸＸＣ」のデータ構成、図８（Ｄ）はブロック書き込み途中のファイル名「ＸＸＸＣ」のデータ構成を示す。
図８（Ｃ）に示すように未使用のブロック番号「１３」のデータとしてデータ自体及び前のブロックのブロック番号「１２」並びにデータサイズ「５１２バイト」を書き込む。この処理をデータの最後か、割り当てたブロックを使い切るまで繰り返す。ブロックを使い切った場合には、新たにブロックを割り当て、管理情報１１３の内容を外部記憶装置１０２に記録した後、さらにデータを記録する。なお、管理情報１１３は、ＲＡＭ１０５に設定された管理情報記憶部１１２に設定されるので、外部記憶装置１０２から管理情報１１３とデータとを得るために、交互にアクセスする必要がない。よって、余計なシーク処理が生じることがない。
ファイル作成の最後のデータを記憶したときには、割り当てたブロックを全て使用しなかった場合や、割り当てたブロックの全データサイズを使用しなかった場合は、実際に利用したデータ量に合わせて管理情報を更新する。
図９に本発明の第１実施例の全データサイズを使用しなかったときの動作説明図を示す。図９（Ａ）は管理情報更新前のファイル管理情報１１５、図９（Ｂ）は管理情報更新前のブロック割当情報１１６、図９（Ｃ）はファイル名「ＸＸＸＣ」のデータ構成、図９（Ｄ）は管理情報更新後のファイル管理情報１１５、図９（Ｅ）は管理情報更新後のブロック割当情報１１６を示す。
ファイル名「ＸＸＸＣ」ではブロック番号「１６」まで割り当てたが、実際にはブロック番号「１５」までしか使用しなかった場合、まず、ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２に記憶された管理情報１１３を更新する。
ブロック割当情報１１６は、図９（Ｂ）に示す状態から図９（Ｄ）に示すように使用した最後のブロックのブロック番号「１５」に最終ブロックである旨の情報を設定した後、ブロック番号「１６」を未割り当てブロックである旨の情報を設定することにより更新される。また、ファイル管理情報１１５は、図９（Ａ）に示す状態から図９（Ｅ）に示すように最終ブロック番号が「１５」に更新され、ファイルサイズが「３６００バイト」に更新される。
ここで、データ及び管理情報１１３が図８（Ａ）〜（Ｃ）に示す状態でシステムに障害が発生し、外部記憶装置１０２にデータを記憶できなくなったとする。
システムに発生した障害を取り除いてファイル名「ＸＸＸＣ」にアクセスすると、まず、外部記憶装置１０２に記憶された管理情報１１３がホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２に記憶される。
次に、管理情報記憶部１１２に記憶された管理情報１１３のファイル管理情報１１５に従って、ファイル名「ＸＸＸＣ」の先頭ブロック番号「９」をアクセスする。
次にブロック番号「９」のブロックデータから前のブロック番号及び現在のブロックのデータサイズを調べ、前のブロック番号が先頭ブロックであることを示す情報であり、現在のブロックのデータサイズが未割り当ての状態でなく、かつ、ブロックサイズ以下であることを確認してデータの有効性を調査する。ファイルシステム１０８は、ここでの調査結果が有効であれば、データを出力する。
次に、ファイルシステム１０８は、ブロック割当情報１１６を参照して、ブロック番号「９」の次のブロック番号「１０」にアクセスする。次に、ブロック番号「１０」のブロックデータから前のブロック番号及び現在のブロックのデータサイズを調べ、前のブロック番号「９」であり、現在のブロックのデータサイズが未割り当ての状態でなく、かつ、ブロックサイズより小さいことを確認してデータの有効性を調査する。ファイルシステム１０８は、ここでの調査結果が有効であれば、データを出力する。
以上の処理をブロック番号「１２」まで繰り返す。続いて、ブロック割当情報１１６を参照して、ブロック番号「１２」の次のブロック番号「１３」のブロックにアクセスする。ブロック番号「１３」は、前のブロック番号もしくは、現在のブロックのデータサイズが未書き込み状態であるので、ファイルシステム１０８は、これ以上データが記録されないことがわかり、外部記憶装置１０２からのデータの読み出しを停止する。これにより障害が生じて管理情報の内容と実際に書込んだデータの内容が不一致の場合にもデータを正しく読み出すことができる。
また，常に書込むデータのブロックを割り当てて、外部記憶装置１０２へ管理情報の内容を記録してからデータを記録するので、必ず書込んだデータまでの内容を読み出すことができる。
また、常に書込むデータのブロックを割り当てて外部記憶装置１０２へ記録してからデータを記録するので，障害発生後、すでにブロックが割り当てられているために、復旧処理を行うまえに新しいデータを記録してもすでにデータを記録したブロックへ上書きされる心配はない。
さらに、ブロックのデータや前ブロック番号や現在のブロックのデータサイズを更新している途中で障害が発生した場合にも、データを記憶してから前ブロック番号や現在のブロックのデータサイズを更新し、前ブロック番号と現在のブロックのデータサイズが正しく記録されていない場合はデータとして認めないことにより、正しくデータを読み出すことができる。
また、上記の状態で、管理情報と実際に記録したデータの整合がとれていないことが判明した場合は、実際に記録したデータの状態に合わせて管理情報の内容を更新する。データ及び管理情報１１３が図８（Ａ）〜（Ｃ）の状態では上記のデータ読み出し処理の結果、ブロック番号「１２」までしかデータが記録されていない。
従って，ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２で管理情報１１３のファイル割当情報１１５でブロック番号「１２」にブロック番号「１３」を設定した後、ブロックを割り当てながらデータが記録されなかったブロック番号「１３」からブロック番号「１６」を設定する。
また、ファイル管理情報１１５でのファイル名「ＸＸＸＣ」のファイルサイズと最後のブロック番号が異なっているので、それぞれを訂正する。
ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２の管理情報１１３を訂正した後，管理情報１１３を外部記憶装置１０２へ記憶する。データの読み出しを行った際に管理情報と実際に書込んだデータの不整合を発見し、そこで得た情報を用いて不整合を修復することができる。
なお、本実施例では、一連のデータをファイルする構成いついて説明したが、複数種類のデータを１つのファイルに取り込む場合についても適用できる。
図１１は本発明の第２実施例のブロック構成図を示す。同図中、図３と同一構成部分には同一符号を付し、その説明は省略する。
本実施例は複数の映像をハードディスクドライブ等の外部記憶装置に取り込んで、ハードディスクドライブに取り込まれた映像を再生するようなシステムに適用した例である。
図１１に示すようにホストコンピュータ１０１には、映像Ａと映像Ｂと映像Ｃの３つ映像が同時に入力される。ホストコンピュータ１０１は、映像Ａと映像Ｂと映像Ｃの３つ映像を外部記憶装置１０２へ漏らすことなく記録する。
この時、外部記憶装置１０２へのアクセスを効率的に行うために、ファイルシステム１０８は、映像のＣＨ数と各映像の転送レートと、一回のアクセスで書込むデータのブロック数と、各アクセスの優先度に基づいてアクセスのスケジューリングを行う。
図１２に本発明の第２実施例のスケジューリングを説明するための図を示す。
図１２（Ａ）に示すように映像Ｂは映像Ａと映像Ｃの２倍の符号化レートを有し、外部記憶装置１０２へのアクセス時の転送ブロック数は同じであり、また、映像Ａ、Ｂ、Ｃで優先度は等しいものとする。
スケジューリングの結果による映像Ａ、Ｂ、Ｃの記録は、図１２（Ｂ）に示すように映像Ｂを４ブロック記録した後、映像Ａを４ブロック記録し、さらに映像Ｂを４ブロック記録した後、映像Ｃを４ブロック記録する。この処理を各映像の記録が終了するまで続ける。途中でチャンネル数が増えたり、減じたりなど条件が変更になった場合は、さらにスケジューリングを行う。
次にスケジューリング情報を基にブロックの割り当てを行い、データを記録していく。
図１３に本発明の第２実施例の動作説明図を示す。図１３（Ａ）はファイル管理情報１１５、図１３（Ｂ）はブロック割当情報１１６、図１３（Ｃ）はデータを示す。図１３は、１度映像を記録した後での管理情報とデータの内容である。
スケジューリングの順番どおり、まず、映像Ｂをブロック番号「１」からブロック番号「４」まで４ブロック記録した後、映像Ａをブロック番号「５」からブロック番号「８」まで記録する。
続いて、また映像Ｂをブロック番号「９」からブロック番号「１２」まで記録した後、映像Ｃをブロック番号「１３」からブロック番号「１６」まで記録する。この後、次のデータを記憶する前に記憶するブロックの割り当てを行う。
スケジューリングの順番に従って、ホストのＲＡＭに記憶されている管理情報のブロック割り当て情報を更新する。まず、映像Ｂを記憶するための領域をブロック番号「１７」からブロック番号「２０」まで確保し、続いて映像Ａ用にブロック番号「２１」からブロック番号「２４」を確保し，再度映像Ｂ用にブロック番号「２５」からブロック番号「２８」を確保した後、映像Ｃ用にブロック番号「２９」からブロック番号「３２」を確保する。続いて割り当てたブロックの情報をファイル管理情報１１５へ適用した後、外部記憶装置１０２へ管理情報１１３を記憶する。各映像のデータを記憶する場合には，各領域毎に割り当てたブロックへ映像データを記憶していく。
なお、図１３に示す例では、１回のスケジューリングサイクルに合わせて領域を割り当てたが、複数回のスケジューリングサイクルに合わせて領域を割り当てることもできる。この時，領域を割り当てた後で条件の変化によりスケジューリングの順番が変更される可能性があるが、割り当てられた領域へのアクセスを考慮して再スケジューリングを行う。アクセスを効率的に行うためのスケジューリング情報に合わせて，予め各映像毎にブロックを割り当てておくので、効率的なアクセスを行いながら管理情報とデータ間の不整合が生じにくい、もしくは不整合が生じた場合にも簡単に訂正することが可能である。
なお、本実施例では、図１３（Ｃ）に示すようにデータに前のブロック番号とデータサイズを付加したが、さらに、次のブロックのブロック番号を付加するようにしてもよい。
図１４に本発明の第３実施例の動作説明図を示す。
なお、本実施例の構成は、図１１と同じであるので、その説明は省略する。
また、スケジュールリングも図１２に示す第２実施例のスケジューリングと同一であるのでその説明は省略する。
図１４に示すように、ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２に記録されている管理情報１１３には最新の管理情報が記録されている。
一方、外部記憶装置１０２には以前に管理情報記憶部１１２から外部記憶装置１０２に記憶したときの管理情報１１３が記録されている。スケジューリングにしたがって各映像を記憶する場合、まず最初にスケジューリングされている映像Ｂの記憶領域を確保する。
このとき、まず、ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報記憶部１１２に記録されている管理情報１１３のブロック割当情報１１６を用いて、未割り当ての領域を求め、ブロック番号「１７」からブロック番号「２０」が空いていることを確認し、ブロックを割り当てる。次に割り当てたブロック番号「１７」からブロック番号「２０」に映像Ｂのデータを記録する。この時、映像Ｂのデータに次のブロック番号と前のブロック番号とブロックで使用したデータサイズを付加して記録する。
なお、最後のブロックを記録する場合、次のブロック番号は，スケジューリング情報を基にて次に映像Ｂを記録するブロックを求め、そのブロックの番号を記憶する。
最後にホストコンピュータ１０１のＲＡＭ１０５に記憶されているファイル管理情報１１５を更新する。映像Ｂへ割り当てられた最後のブロック番号「２０」に設定し、記憶するデータ量に合わせて管理情報を更新する。
また、次に映像Ｂを記録する際に、その記憶領域の先頭になるブロック番号を仮割り当てブロック番号として記録する。
以上の処理をスケジューリングに合わせて、映像Ａから映像Ｃまで順番に行う。また、映像を記録している途中で条件が変化し，ディスクアクセスのスケジューリング変更された場合は、新しいスケジューリングに応じて記憶領域の割り当て及びデータの記録を行う。
この時、スケジューリングの変化によって、前に設定した仮割り当てブロックが記憶に使えない場合、仮割り当てブロックを新しいブロック番号に変更して、ホストコンピュータ１０１のＲＡＭ１０５の管理情報に反映し、そのブロックから記録する。管理情報１１３が予め設定した条件以上のブロック割り当て数や、処理時間間隔を経過した場合、ホストコンピュータ１０１のＲＡＭ１０５の管理情報１１３を外部記憶装置１０２に記憶する。管理情報１１３はデータを記録した後から、外部記憶装置１０２へ記録するのでスケジューリングの変化などが生じた場合にすぐに対応して新しいスケジューリングに適したブロックへデータを記録することができる。
次に、図１４に示す状態で障害が発生した場合を考える。この時、ホストコンピュータ１０１のＲＡＭ１０５に設定された管理情報１１２に記録していた管理情報１１３は失われる。このため、外部記憶装置１０２に記憶されていた管理情報１１３に基づいてアクセスが行われる。障害発生後に映像Ｂのデータを読み出す場合、外部記憶装置１０２に記録された管理情報１１３をホストコンピュータ１０１のＲＡＭ１０５に読み出し、管理情報１１３の内容に従ってデータを読み出す。
管理情報１１３のブロック割り当て情報に記されている最後のブロック番号「１２」まで読み出した後、最後のブロック番号「１２」に付加して記憶されている次のブロック番号を調べ、そのブロック番号「１７」にアクセスする。ブロック番号「１７」の前のブロック番号「１２」で、現在のブロックのデータサイズが未割り当てでなく、不当な値でない、例えば、ブロックのデータサイズ「５１２バイト」よりデータサイズが大きくないことを確認した後、ブロック番号「１７」のデータを有効にする。同様にして、外部記憶装置１０２に記憶されている映像Ｂのデータへアクセスする。これにより、障害が発生した後でも映像Ｂのデータ系列に正しくアクセスすることが可能である。
しかし、障害発生後の状態で放置しておくと，外部記憶装置１０２へ記録されている管理情報と実際に記録されているデータの配置が異なっているために、有効なブロックへ新しいデータが上書きされてしまう恐れがある。そのために復旧処理が必ず必要である。したがって，上記方法により各データ系列を最後までアクセスした後、ホストコンピュータ１０１のＲＡＭ１０５に記憶されている管理情報１１３を更新した後、外部記憶装置１０２へ記録する。これにより外部記憶装置１０２に記録している管理情報１１３を最新の状態とし、既に記録されているデータが上書き消去されないようにしている。
上記本実施例によれば、外部記憶手段上でファイルを記録すべきブロックを予め割り当て、割り当てられたブロックを指示する管理情報を外部記憶手段に記録した後に、ファイルを記憶することにより、ファイルの記憶途中で障害が発生しても、管理情報が失われることはなく、よって、管理情報に基づいてファイルの内の既に記憶されたデータを読み出すことができる。
また、各ブロックに記録するデータに、前のブロックを指示する情報及びブロックに記録されるデータの大きさを示す情報を付加することにより、ファイルの読み出しを行ったときに管理情報と記憶されたデータとで整合がとれていない場合でも、前のブロックとそのデータの大きさを確認することにより有効なデータを判別できる。
さらに、ファイルを記憶したときに、割り当てられたブロックにデータの未記録のブロックが発生された場合に、未記録のブロックを未使用のブロックとなるように管理情報を更新することにより、他のファイルでブロックを使用できるので、未記録ブロックを有効に活用できる。
また、ファイルを構成するデータの記憶順序を予め設定し、設定された順序に基づいてファイルを構成するデータを割り当てられたブロックに記録することにより、効率的にファイルにアクセスすることができる。
さらに、管理情報に応じてブロックに順次アクセスして、ファイルを読み出し、ブロックからデータを読み出した結果、前のブロックを指示する情報が前のブロックを指示していないとき、又は、ブロックに記録するデータの大きさを示す情報が実際のブロックの大きさの範囲内でなかった場合には、ファイルの読出を中止し、それ以降のブロックの未使用のブロックとなるように管理情報を更新することにより、正しくないデータを読み出すことが停止でき、正しくないデータが記憶されたブロックを未使用のブロックとなるように管理情報を更新できるため、他のファイルでブロックを使用できるので、未記録ブロックを有効に活用できる。
【図面の簡単な説明】
図１は、従来の一例の動作説明図である。
図２は、従来の一例の管理情報及びデータのデータ構成図である。
図３は、本発明の第１実施例のブロック構成図である。
図４は、本発明の第１実施例のファイルシステムのファイル書込時の動作フローチャートである。
図５は、本発明の第１実施例のファイルシステムのファイル書込処理の動作フローチャートである。
図６は、本発明の第１実施例のファイルシステムのファイル読出時の動作フローチャートである。
図７は、本発明の第１実施例の動作説明図である。
図８は、本発明の第１実施例の動作説明図である。
図９は、本発明の第１実施例の動作説明図である。
図１０は、本発明の第１実施例の動作説明図である。
図１１は、本発明の第２実施例のブロック構成図である。
図１２は、本発明の第２実施例のスケジューリングを説明するための図である。
図１３は、本発明の第２実施例の動作説明図である。
図１４は、本発明の第３実施例の動作説明図である。
【図１】
0004351409.tif 000002
【図２】
0004351409.tif 000003
【図３】
0004351409.tif 000004
【図４】
0004351409.tif 000005
【図５】
0004351409.tif 000006
【図６】
0004351409.tif 000007
【図７】
0004351409.tif 000008
【図８】
0004351409.tif 000009
【図９】
0004351409.tif 000010
【図１０】
0004351409.tif 000011
【図１１】
0004351409.tif 000012
【図１２】
0004351409.tif 000013
【図１３】
0004351409.tif 000014
【図１４】
0004351409.tif 000015