(57)【特許請求の範囲】
【請求項１】
記録媒体から読み取ったデータをバッファを介してデータ処理装置へ出力する、外部記憶装置のデータ出力方法において、
前記バッファの記憶エリアを二つのブロックに区分する過程と、
前記データ処理装置からの出力要求に応じて記録媒体から読み取ったデータを前記二つのブロックの何れか一方を介して前記データ処理装置へ出力し、且つ、少なくとも当該出力時についてはブロックにバッファリングのデータを消去しないようにする過程と、
前記データ処理装置から前記出力要求の次に出力要求された後データが前記二つのブロックの何れかのブロックに消去されずに残っているデータと同じである場合は、この同一データについては、記録媒体からの読み取りをなさず、前記消去されずに何れかのブロックに残っているデータを前記データ処理装置へ出力し、一方、前記出力要求された後データが前記何れのブロックに残っているデータとも異なっていた場合は、前記後データを前記記録媒体から読み取って前記二つのブロックの内で、前記後データと同時に出力要求されたデータが記録されていない方のブロック、あるいは前記後データと同時に出力要求されるデータがない場合には直前の時点で変更されていない方のブロックを介して前記データ処理装置へ出力し、且つ少なくとも当該出力時についてはブロックにバッファリングのデータを消去しないようにする過程と、を含むことを特徴とするデータ出力方法。
【請求項２】
前記記録媒体に前記記録媒体に関するデータが記録されている場合に、前記記録媒体に関するデータをバッファリングするためのブロックを前記バッファの記憶エリアに固定的に設定しておき、この固定ブロックを除いた残りの記憶エリアで前記二つのブロックを設定する請求項１に記載のデータ出力方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば光ディスクや磁気ディスクなどの記録媒体を用る外部記憶装置におけるデータ出力方法に関する。
【０００２】
【従来の技術】
例えば光ディスク装置のような外部記憶装置は、一般に、記録媒体である光ディスクから読み取ったデータをバッファを介してコンピュータなどのデータ処理装置へ出力するようになっている。このような出力処理は、先ずデータ処理装置からのデータ要求があり、これに応じて外部記憶装置が記録媒体から目的データを読み取り、それからこのデータをバッファにバッファリングした後に外部記憶装置へ出力する、という一連の処理によりなされる。そして従来の外部記憶装置では、この出力処理に際し、データをデータ処理装置へ出力するのに伴ってバッファリングデータを順次消去するようにしている。このため常にキャッシュミスを生じることになり、データ処理装置からデータ要求がある度に当該データを記録媒体から読み取る動作を繰り返す必要がある。ここでキャッシュとは、データ処理装置から要求されたデータがバッファにバッファリングされており、このデータをデータ処理装置に送ることができることを言い、そうでない場合にはキャッシュミスと言う。
【０００３】
一方、外部記憶装置例えば光ディスク装置におけるデータ構造は、ディスクデータ、ディレクトリデータ及びファイルデータが組になっており、例えば図３に示すようになっている。ディスクデータＰＶＤは、現在使用しているディスクの種類などに関するデータであり、データ処理装置へファイルデータを出力する場合には、ファイルデータの連続的な一連の出力処理ごとに常に最初にデータ処理装置へ出力される。一方ディレクトリデータは、ファイルの名称や大きさなどに関するデータであり、階層構造を持つ。例えば最上位にルーツディレクトリデータＤｒがあり、このルーツディレクトリデータＤｒはディスクデータＰＶＤと同様に扱われる。またルーツディレクトリデータＤｒの下にそれ自身も階層構造を持つサブディレクトリデータＤsa、Ｄsb、Ｄsc……がある。そして最下位のサブディレクトリに対し各ファイルデータＦ1 、Ｆ2 、Ｆ3 ……が対応しており、ファイルデータは対応のサブディレクトリデータと常に組みにして出力される。
【０００４】
したがって、従来の外部記憶装置では連続的な一連の出力処理ごとに、先ず記録媒体のディスクデータエリアをシークしてディスクデータを読み取り、これをバッファにバッファリングしてから外部記憶装置へ出力するとともにバッファリングデータを消去し、それから必要なディレクトリデータの数だけ、ディレクトリエリアに対するシーク、読み取ったデータのバッファリング、及びこのデータの出力と消去を繰り返し、そして最後に目的のファイルデータが記録されているファイルエリアをシークして読み取ったファイルデータを同様にバッファリングしてから外部記憶装置へ出力する、という処理を行なうことになる。そのためシークつまり読取りのためのピックアップを記録媒体の目的位置にアクセスさせるための動作を常にデータの数だけ行なう必要がある。
【０００５】
ところで、上記のようなデータ構造にあってはデータ処理装置が同じデータを処理手順的に近接して要求する場合が少なくない。例えば新たなデータ要求としてファイルデータＦ1 〜Ｆ6 を順次的に要求する場合であれば、データの流れは、ＰＶＤ→Ｄｒが先ずあり、これに続いてＤsa→Ｆ1 →Ｄsa→Ｆ2 →Ｄsa→Ｆ3 →Ｄsb→Ｄsc→Ｆ4 →Ｄsc→Ｆ5 →Ｄsb→Ｄsd→Ｆ6 となる。この例から分かるように、データの流れには同じデータが処理手順的に近接してバッファを通過する場合が多数含まれる。したがってこのようなデータの流れについては、バッファにおける消去をなさずに、先にバッファリングしたデータを次にも利用する、つまり次の要求の際に求められたデータをバッファから直接キャッシュとして出力できるようにすることで、シークの回数を減らすことが可能である。
【０００６】
【発明が解決しようとする課題】
本発明は上記のような知見をもとになされたものであり、バッファにバッファリングのデータをキャッシュとして利用できる機会を増やすことでシークの回数を減らし、データの出力処理時間の短縮化を図ることを目的としている。
【０００７】
【課題を解決するための手段】
このような目的のために、本発明では、記録媒体から読み取ったデータをバッファを介してデータ処理装置へ出力する、外部記憶装置のデータ出力方法について、前記バッファの記憶エリアを二つのブロックに区分する過程と、前記データ処理装置からの出力要求に応じて記録媒体から読み取ったデータを前記二つのブロックの何れか一方を介して前記データ処理装置へ出力し、且つ、少なくとも当該出力時についてはブロックにバッファリングのデータを消去しないようにする過程と、前記データ処理装置から前記出力要求の次に出力要求された後データが前記二つのブロックの何れかのブロックに消去されずに残っているデータと同じである場合は、この同一データについては、記録媒体からの読み取りをなさず、前記消去されずに何れかのブロックに残っているデータを前記データ処理装置へ出力し、一方、前記出力要求された後データが前記何れのブロックに残っているデータとも異なっていた場合は、前記後データを前記記録媒体から読み取って前記二つのブロックの内で、前記後データと同時に出力要求されたデータが記録されていない方のブロック、あるいは前記後データと同時に出力要求されるデータがない場合には直前の時点で変更されていない方のブロックを介して前記データ処理装置へ出力し、且つ少なくとも当該出力時についてはブロックにバッファリングのデータを消去しないようにする過程と、を含むことを特徴とする。
【０００８】
このようなデータ出力方法におけるバッファの記憶エリアのブロック化つまりブロックへの分割は、データの大きさに応じて行なうようにするのが合理的である。例えば一般的な光ディスク装置におけるバッファは１２８乃至２５６キロバイト程度である。これに対し光ディスクにおけるサブディレクトリについてのデータの大きさは数キロバイト程度である。そして前記のように、データの流れでは多くの場合にサブディレクトリデータとファイルデータが交互に現れる。つまりディレクトリデータとファイルデータは多くの場合に交互的に処理され、そしてバッファの記憶エリアに設定した二つのブロックにはその何れか一方にサブディレクトリデータがバッファリングされ、他方にファイルデータがバッファリングされる状態となるのが通常となる。したがって記憶エリアの分割は、ディレクトリデータ用として数キロバイト程度を割当て、残りをファイルデータ用とする分割で行なうのが合理的である。
【０００９】
またこのような外部記憶装置については、ある基準を設け、この基準に基づいてバッファの分割的使用を行なうか否かを選択するようにすることも可能である。例えば前回のデータのアドレスと今回要求されたデータのアドレスを比較し、この両アドレスの差が一定以上より大きい場合には、両ブロックの何れかに残してある前回のデータと同じデータについての要求が現れる可能性が小さい。つまり分割的使用の実効性を期待できない。したがってこのような場合には次にバッファの分割使用を必要とするまでバッファの分割をなわないようにする。
【００１０】
さらに本発明に係る外部記憶装置が例えば光ディスク装置のようなタイプである場合には、上記のようにその記録媒体である光ディスクにディスクデータが記録されており、このディスクデータがファイルデータの連続的な一連の出力処理ごとに常に最初にデータ処理装置へ出力される。このような記録媒体を用いる場合には、ディスクデータをバッファリングするためのブロックをバッファの記憶エリアに固定的に設け、この固定ブロックを除いた残りの記憶エリアに使い分け用の二つのブロックを設定するようにすることで、さらにシークの回数を減らすことができる。すなわちディスクデータは何れのファイルデータを出力する場合でも共通であり、常に同じデータをキャッシュとすることができる。したがってこれをバッファに固定的にバッファリングしておくことで、ディスクデータエリアに対するその都度のシークを不要とすることができ、その分についてシークの回数を減らすことができる。
【００１１】
【実施の形態】
以下、本発明の実施形態を光ディスク装置に関して説明する。本発明の一実施形態では、図１に示すように、光ディスク装置が備えるバッファの記憶エリアを固定ブロックＢf と可変ブロックＢv に分割し、さらに可変ブロックＢv を二つのブロックＢva、Ｂvbに分割して用いる。固定ブロックＢf は、ディスクデータとルーツディレクトリデータの固定的なバッファリング用である。つまりディスクデータとルーツディレクトリデータは、光ディスクからの最初の読取り開始時に固定ブロックＢf にバッファリングし、その以降は当該光ディスクにが使用されている限り変更しない。この固定ブロックＢf は数キロバイト程度の容量で設定する。
【００１２】
一方、可変ブロックＢv における二つのブロックＢva、Ｂvbは、サブディレクトリデータとファイルデータのバッファリング用であり、そこにバッファリングするサブディレクトリデータを基準にして分割する。すなわちその時点でバッファリングしたサブディレクトリデータの大きさに応じて一方のブロック（ブロックＢvaまたはブロックＢvb）を設定し、残りを他方のブロック（ブロックＢvbまたはブロックＢva）とする。
【００１３】
このような分割使用を行なうバッファにおけるサブディレクトリデータとファイルデータのバッファリングやこれに伴うデータのシークの関係を表にして図２に示す。この表の例は図３のデータ構造についてファイルデータＦ1 〜Ｆ6 が順次要求される場合である。つまりサブディレクトリデータとファイルデータについてのデータの流れがＤsa→Ｆ1 →Ｄsa→Ｆ2 →Ｄsa→Ｆ3 →Ｄsb→Ｄsc→Ｆ4 →Ｄsc→Ｆ5 →Ｄsb→Ｄsd→Ｆ6 となる場合である。
【００１４】
処理１ではサブディレクトリデータＤsaが要求される。しかしこのデータはバッファにないので、サブディレクトリエリアをシークしてサブディレクトリデータＤsaを読み取り、これをブロックＢvaにバッファリングしてデータ処理装置へ出力する。そしてブロックＢvaから出力した後にもサブディレクトリデータＤsaは消去しないでブロックＢvaに残しておく。ここでブロックＢvaの大きさはサブディレクトリデータＤsaの大きさで決まる。
【００１５】
処理２ではファイルデータＦ1 が要求されるが、このデータがバッファにないので、ファイルエリアをシークしてファイルデータＦ1 を読み取り、これをブロックＢvbにバッファリングして出力する。この場合にも同じくファイルデータＦ1 を消去しないでブロックＢvbに残しておく。
【００１６】
処理３ではサブディレクトリデータＤsaとファイルデータＦ2 が要求される。この場合、バッファにはサブディレクトリデータＤsaはあるがファイルデータＦ2 はない。したがってサブディレクトリデータＤsaはキャッシュとして出力し、一方、ファイルデータＦ2 はファイルエリアをシークして読み取り、これをブロックＢvbにバッファリングして出力する。このファイルデータＦ2 を出力後も残しておくことは上記と同様であり、また下記の各処理でも各バッファリングデータについて同様とする。
【００１７】
処理４ではサブディレクトリデータＤsaとファイルデータＦ3 が要求される。この場合もバッファにはサブディレクトリデータＤsaはあるがファイルデータＦ3 はない。したがってサブディレクトリデータＤsaはキャッシュとして出力し、一方、ファイルデータＦ3 はファイルエリアから読み取り、これをブロックＢvbにバッファリングして出力する。
【００１８】
処理５ではサブディレクトリデータＤsbが要求される。このサブディレクトリデータＤsbはバッファにないので、サブディレクトリエリアから読み取り、これをブロックＢvaにバッファリングして出力する。
【００１９】
処理６ではサブディレクトリデータＤscが要求される。このサブディレクトリデータＤscもバッファにないので、サブディレクトリエリアから読み取り、これをブロックＢvbにバッファリングして出力する。
【００２０】
処理７ではファイルデータＦ4 が要求される。このファイルデータＦ4 はバッファにないので、ファイルエリアから読み取り、これをブロックＢvaにバッファリングして出力する。
【００２１】
処理８ではサブディレクトリデータＤscとファイルデータＦ5 が要求される。この場合、バッファにはサブディレクトリデータＤscはあるがファイルデータＦ5 はない。したがってサブディレクトリデータＤscはキャッシュとして出力し、一方、ファイルデータＦ5 はファイルエリアから読み取り、これをブロックＢvaにバッファリングして出力する。
【００２２】
処理９ではサブディレクトリデータＤsdが要求される。このサブディレクトリデータＤsdはバッファにないので、サブディレクトリエリアから読み取り、これをブロックＢvbにバッファリングして出力する。
【００２３】
処理１０ではファイルデータＦ6 が要求される。このファイルデータＦ6 はバッファにないので、ファイルエリアから読み取り、これをブロックＢvaにバッファリングして出力する。
【００２４】
以上の例における一連の処理では１０回のシークがなされる。一方、従来の処理で同様にファイルデータＦ1 〜Ｆ6 を順次出力する場合には１４回のシークを必要とする。この比較から分かるように本発明のバッファ割使用法によれば有意にシーク回数を減らすことができる。また本実施形態におけるようにディスクデータとルーツディレクトリデータを固定的にバッファリングするための固定ブロックも設定することにより、ディスクデータとルーツディレクトリデータに関するシークについてもこれを減らすことができ、さらにその分について全体のシーク回数を減らすことができる。
【００２５】
【発明の効果】
以上説明したように本発明によると、バッファにバッファリングのデータをキャッシュとして利用できる機会を有意に増やすことができ、この結果シークの回数が減少し、データの出力処理時間の短縮化を図ることができる。
【図面の簡単な説明】
【図１】バッファの記憶エリアの分割についての説明図。
【図２】一実施形態による光ディスク装置のデータ出力処理にけるサブディレクトリデータとファイルデータのバッファリングやこれに伴うデータのシークの関係を示す表図。
【図３】従来の一般的な光ディスク装置におけるデータ構造の説明図。
【符号の説明】
Ｂva  ブロック
Ｂvb  ブロック
Ｂf   固定ブロック
【図１】
0003707890.tif 000002
【図２】
0003707890.tif 000003
【図３】
0003707890.tif 000004