(57)【特許請求の範囲】
【請求項１】
上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む装置であって、
前記記録媒体の未使用領域の大きさを特定する特定部と、
前記未使用領域の大きさに基づいて、前記バッファに格納できるデータの容量の上限値を決定する決定部と、
所定のデータを前記バッファに格納することを指示するコマンドに応じて、前記バッファ内のデータの容量が前記上限値を超えないことを条件に、当該所定のデータを当該バッファに格納する格納部と
を備え、
前記バッファ内のデータは、複数のデータセットから構成され、
前記決定部は、前記未使用領域の大きさが、前記バッファの容量に相当するデータセットの数と１つのデータセットを記録するのに必要となる領域の大きさの最大値として予め設定された大きさとに基づいて決定された閾値を超えている場合に、当該バッファの容量に相当するデータセットの数を前記上限値として決定し、前記未使用領域の大きさが前記閾値以下である場合に、前記バッファの容量よりも小さな容量に相当するデータセットの数であって、当該未使用領域が小さいほど小さくなるように決められ、かつ、前記予め設定された大きさに基づいて決められた数を、前記上限値として決定する、装置。
【請求項２】
前記所定のデータは、複数のデータセットから構成され、
前記格納部は、前記所定のデータを構成するデータセットの数が、前記上限値に相当するデータセットの数と前記バッファに格納されているデータセットの数との差を超えない場合に、当該所定のデータを当該バッファに格納する、請求項１の装置。
【請求項３】
前記記録媒体は、テープ媒体であり、
前記特定部は、前記テープ媒体上のヘッドが位置付けられている位置から終端までの距離を、前記未使用領域の大きさとして特定する、請求項１の装置。
【請求項４】
上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む方法であって、
前記記録媒体の未使用領域の大きさを特定するステップと、
前記未使用領域の大きさに基づいて、前記バッファに格納できるデータの容量の上限値を決定するステップと、
所定のデータを前記バッファに格納することを指示するコマンドに応じて、前記バッファ内のデータの容量が前記上限値を超えないことを条件に、当該所定のデータを当該バッファに格納するステップと
を含み、
前記バッファ内のデータは、複数のデータセットから構成され、
前記決定するステップでは、前記未使用領域の大きさが、前記バッファの容量に相当するデータセットの数と１つのデータセットを記録するのに必要となる領域の大きさの最大値として予め設定された大きさとに基づいて決定された閾値を超えている場合に、当該バッファの容量に相当するデータセットの数を前記上限値として決定し、前記未使用領域の大きさが前記閾値以下である場合に、前記バッファの容量よりも小さな容量に相当するデータセットの数であって、当該未使用領域が小さいほど小さくなるように決められ、かつ、前記予め設定された大きさに基づいて決められた数を、前記上限値として決定する、方法。
【請求項５】
上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記記録媒体の未使用領域の大きさを特定する手段と、
前記未使用領域の大きさに基づいて、前記バッファに格納できるデータの容量の上限値を決定する手段と、
所定のデータを前記バッファに格納することを指示するコマンドに応じて、前記バッファ内のデータの容量が前記上限値を超えないことを条件に、当該所定のデータを当該バッファに格納する手段と
して機能させ、
前記バッファ内のデータは、複数のデータセットから構成され、
前記決定する手段は、前記未使用領域の大きさが、前記バッファの容量に相当するデータセットの数と１つのデータセットを記録するのに必要となる領域の大きさの最大値として予め設定された大きさとに基づいて決定された閾値を超えている場合に、当該バッファの容量に相当するデータセットの数を前記上限値として決定し、前記未使用領域の大きさが前記閾値以下である場合に、前記バッファの容量よりも小さな容量に相当するデータセットの数であって、当該未使用領域が小さいほど小さくなるように決められ、かつ、前記予め設定された大きさに基づいて決められた数を、前記上限値として決定する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを記録媒体に書き込む装置及び方法に関する。特に、本発明は、上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む装置及び方法に関する。
【背景技術】
【０００２】
磁気テープ等のテープ媒体にデータを書き込むテープドライブは、通常、テープ媒体の終端が近づくと警告をホストコンピュータ（以下、「ホスト」という）に返す機能を有する。テープドライブは、ホストから送られたデータを一旦バッファメモリ（以下、「バッファ」という）に蓄積し、所定のタイミングでバッファからテープ媒体へデータを書き込むのが一般的であるが、このバッファに格納された全てのデータがテープ媒体に書き出されるようにするためである。
【０００３】
従来、このような警告をテープ媒体上のどの位置で行うかについては検討がなされていた（例えば、特許文献１参照）。この特許文献１では、バッファメモリに格納されているデータセットの数と、テープ上の現在の書込み位置の情報とを照合することにより、ＬＥＯＴ（Logical End Of Tape）をホストに通知すべきかどうか判定している。
また、その他の公報記載の技術としては、磁気テープ装置において未記録部分での記録容量をデータ量として算出する技術（例えば、特許文献２参照）や、圧縮率を考慮した磁気テープの残容量を知ることのできる技術（例えば、特許文献３参照）もある。
【０００４】
【特許文献１】特開２００６−２２１６９５号公報
【特許文献２】特開平６−２４３６６１号公報
【特許文献３】特開平１１−１６２１４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の技術は、ＬＥＯＴを通知した時点でバッファに格納されているデータしかテープ媒体に記録されないので、テープ媒体の記録効率という観点からは、更なる改善の余地がある。
また、特許文献２、３の技術は、磁気テープの残りのデータ量を求めるだけで、バッファ内のデータがテープ媒体に書ききれないという事態を回避するものではない。
尚、同様の問題点は、テープ媒体以外の記録媒体についても指摘できる。
【０００６】
本発明の目的は、記録媒体の記録効率を高く保ちつつ、バッファ内のデータが記録媒体に書ききれないという事態を回避することにある。
【課題を解決するための手段】
【０００７】
かかる目的のもと、本発明は、上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む装置であって、記録媒体の未使用領域の大きさを特定する特定部と、未使用領域の大きさに基づいて、バッファに格納できるデータの容量の上限値を決定する決定部と、所定のデータをバッファに格納することを指示するコマンドに応じて、バッファ内のデータの容量が上限値を超えないことを条件に、所定のデータをバッファに格納する格納部とを備えた、装置を提供する。
【０００８】
ここで、この装置において、決定部は、未使用領域の大きさが所定の閾値を超えている場合に、バッファの容量を上限値として決定し、未使用領域の大きさが所定の閾値以下である場合に、バッファの容量よりも小さな容量を上限値として決定する、ものであってよい。
そして、決定部は、未使用領域の大きさが所定の閾値以下である場合に、上限値を、未使用領域が小さくなるのに伴って小さくなるように決定する、ものであってよい。
【０００９】
また、この装置において、バッファ内のデータは、複数のデータセットから構成され、決定部は、未使用領域の大きさが所定の閾値を超えている場合に、バッファの容量に相当するデータセットの数を上限値として決定し、未使用領域の大きさが所定の閾値以下である場合に、バッファの容量よりも小さな容量に相当するデータセットの数を上限値として決定する、ものであってよい。
そして、決定部は、未使用領域の大きさが所定の閾値以下である場合に、未使用領域の大きさに応じたデータセットの数を、バッファの容量よりも小さな容量に相当するデータセットの数として決定する、ものであってよく、未使用領域の大きさと、１つのデータセットを記録するのに必要な領域の大きさとして予め設定された大きさとに基づいて、未使用領域に応じたデータセットの数を決定する、ものであってよい。
また、決定部は、バッファの容量に相当するデータセットの数と、１つのデータセットを記録するのに必要な領域の大きさとして予め設定された大きさとに基づいて、所定の閾値を決定する、ものであってよい。
更に、所定のデータは、複数のデータセットから構成され、格納部は、所定のデータを構成するデータセットの数が、上限値に相当するデータセットの数とバッファに格納されているデータセットの数との差を超えない場合に、所定のデータをバッファに格納する、ものであってよい。
【００１０】
また、この装置において、記録媒体は、テープ媒体であり、特定部は、テープ媒体における現在位置から終端までの距離を、未使用領域の大きさとして特定する、ものであってよい。
【００１１】
更に、本発明は、上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む方法であって、記録媒体の未使用領域の大きさを特定するステップと、未使用領域の大きさに基づいて、バッファに格納できるデータの容量の上限値を決定するステップと、所定のデータをバッファに格納することを指示するコマンドに応じて、バッファ内のデータの容量が上限値を超えないことを条件に、所定のデータをバッファに格納するステップとを含む、方法も提供する。
【００１２】
更にまた、本発明は、上位装置からのコマンドに応じてバッファ内のデータを記録媒体に書き込む装置としてコンピュータを機能させるプログラムであって、コンピュータを、記録媒体の未使用領域の大きさを特定する手段と、未使用領域の大きさに基づいて、バッファに格納できるデータの容量の上限値を決定する手段と、所定のデータをバッファに格納することを指示するコマンドに応じて、バッファ内のデータの容量が上限値を超えないことを条件に、所定のデータをバッファに格納する手段として機能させる、プログラムも提供する。
【発明の効果】
【００１３】
本発明によれば、記録媒体の記録効率を高く保ちつつ、バッファ内のデータが記録媒体に書ききれないという事態を回避することができる。
【発明を実施するための最良の形態】
【００１４】
以下、添付図面を参照して、本発明を実施するための最良の形態（以下、「実施の形態」という）について詳細に説明する。
図１は、本実施の形態が適用されるテープドライブ１０の構成例を示した図である。このテープドライブ１０は、ホストインターフェイス（以下、「ホストＩ／Ｆ」という）１１と、バッファ１２と、チャネル１３と、ヘッド１４と、モータ１５とを含む。また、コントローラ１６と、ヘッド位置制御システム１７と、モータドライバ１８とを含む。更に、テープドライブ１０には、テープカートリッジ２０が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ２０も図示している。このテープカートリッジ２０は、リール２１、２２に巻かれたテープ２３を含む。テープ２３は、リール２１、２２の回転に伴い、リール２１からリール２２の方向へ、又は、リール２２からリール２１の方向へ、長手方向に移動する。尚、テープ２３としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【００１５】
ここで、ホストＩ／Ｆ１１は、上位装置の一例であるホスト３０との通信を行う。例えば、ホスト３０から、テープ２３へのデータの書込みを指示するコマンド、テープ２３を目的の位置に移動させるコマンド、テープ２３からのデータの読出しを指示するコマンドを受け取る。尚、このホストＩ／Ｆ１１で用いる通信規格としては、ＳＣＳＩが例示される。ＳＣＳＩの場合、１つ目のコマンドは、Ｗｒｉｔｅコマンドに相当し、２つ目のコマンドは、ＬｏｃａｔｅコマンドやＳｐａｃｅコマンドに相当し、３つ目のコマンドは、Ｒｅａｄコマンドに相当する。また、ホストＩ／Ｆ１１は、ホスト３０に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【００１６】
バッファ１２は、テープ２３に書き込むべきデータやテープ２３から読み出されたデータを蓄積するメモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、バッファ１２は、複数のバッファセグメントからなり、各バッファセグメントが、テープ２３に対する読み書きの単位であるデータセットを格納している。
チャネル１３は、テープ２３に書き込むべきデータをヘッド１４に送ったり、テープ２３から読み出されたデータをヘッド１４から受け取ったりするために用いられる通信経路である。
ヘッド１４は、テープ２３が長手方向に移動するとき、テープ２３に対して情報を書き込んだり、テープ２３から情報を読み出したりする。
モータ１５は、リール２１、２２を回転させる。尚、図では、１つの矩形でモータ１５を表しているが、モータ１５としては、リール２１、２２の各々に１つずつ、合計２個設けるのが好ましい。
【００１７】
一方、コントローラ１６は、テープドライブ１０の全体を制御する。例えば、ホストＩ／Ｆ１１で受け付けたコマンドに従って、データのテープ２３への書込みやテープ２３からの読出しを制御する。また、ヘッド位置制御システム１７やモータドライバ１８の制御も行う。
ヘッド位置制御システム１７は、所望の１つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ２３上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド１４を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム１７で行う。
モータドライバ１８は、モータ１５を駆動する。尚、上述したように、モータ１５を２個使用する場合であれば、モータドライバ１８も２個設けられる。
【００１８】
ところで、図１のテープドライブ１０を、例えば、米国ＩＢＭ社のエンタープライズテープドライブＴＳ１１２０として考えた場合、テープドライブ１０は、データセットという単位でデータをテープ２３に書き込む。ここで、データセットの大きさは常に一定である。また、データセットと次のデータセットの間隔、或いは、あるデータセットの終端から次のデータセットの終端までの長さは、仕様上の制約から、４ｍ以内に収める必要がある。データセットの理想的な間隔は世代によって異なるが、第２世代エンタープライズテープドライブにおけるフォーマットでは約１０ｃｍである。
エラーが発生しなければ、実際のデータセットの間隔は、理想的な間隔にほぼ一致する。
これに対し、データの書込み中にエラーが発生すると、データの書き直しを３回を上限として行うため、実際のデータセットの間隔が、通常の３倍になることもある。また、データセットの間隔を通常の３倍としてもデータを書ききれなかった場合や、サーボ等のエラーで書込みを中断した場合、テープドライブ１０は、必要に応じて書出し位置を変更し、書き直しを試みる。従って、実際のデータセットの間隔は、最大で４ｍになることもある。
【００１９】
一方、テープドライブ１０は、データの書込み時にテープ２３が終端に近付くと、バッファ１２に格納された全てのデータがテープ２３に書き出されるように、「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」という警告をホスト３０に返す。
この場合、バッファ１２に格納された全てのデータをテープ２３に書き出すことを保障するためには、バッファ１２に格納できる最大データセット数をＮとすると、テープ２３の終端から（４×Ｎ）ｍ以上手前の位置で警告を返す必要がある。上述したように、１つのデータセットにつき、最大で４ｍ必要になる可能性があるからである。
第２世代エンタープライズテープドライブでは、バッファ１２に２５６個のデータセットを格納できる。従って、上記の計算をそのまま適用すると、テープ２３の終端より約１０００ｍ手前から警告を返すことになる。ＴＳ１１２０の場合、テープ２３の長さは約６００ｍであり、規定容量までデータを書き込むためにテープ２３は２８往復する。つまり、片道に換算すると５６回走行する。このように、データは、のべ３３６００ｍにわたって書き込まれるので、１０００ｍは全長の約３％に相当する。尚、大きなバッファ１２を持つテープドライブ１０では、この影響はより顕著となる。
【００２０】
ここで、テープ２３は、書込み中にエラーが発生しても容量に影響が出ないようにするため、７％ほどゆとりを持っている。ところが、そのうちの３％を「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」用に割いてしまうと、若干調子の悪いテープドライブ１０の場合、データを規定の容量まで書き込めなくなる虞がある。従って、テープ２３の終端より１０００ｍも手前から「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」を返してホスト３０の書込みを抑制することは現実的ではない。
現在は、容量への影響をさけるため、理想的な長さをＬ（ｍ）とし、テープ２３の終端から（Ｌ×２×Ｎ＋４）ｍの位置に到達した時点で始めて「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」の警告をホスト３０に返すように実装されている。そのため、データを書き込むのに常に通常の３倍近くの長さを必要とするテープドライブ１０を用いてテープ２３の終端付近に書込みを行うと、バッファ１２内のデータをテープ２３に書き切れない障害が発生する。
【００２１】
そこで、本実施の形態では、テープ２３の終端付近において、バッファ１２の使用量（バッファ１２内のデータの容量）を制限する。これにより、常にバッファ１２内の全データをテープ２３に書き込むことを保障する。即ち、テープ２３上の現在位置からテープ２３の終端までの道程をＸ（ｍ）、バッファ１２の容量分データを格納した場合のバッファ１２の使用量（以下、「最大使用量」という）をＮとし、バッファ１２の使用量の上限（以下、「上限使用量」という）ｎを次の条件分岐式に従って定める。尚、以下では、上限使用量ｎ、最大使用量Ｎをデータセットの数で示す。
ｉｆ  （Ｎ  ＜  Ｘ／４−１）
ｎ＝Ｎ
ｅｌｓｅ
ｎ＝Ｘ／４−１
【００２２】
このことを、図面を参照して説明する。
図２は、本実施の形態におけるバッファ１２の使用方法を具体的に示した模式図である。
まず、（ａ）は、上記条件分岐式のｉｆ文における条件である「Ｎ＜Ｘ／４−１」の場合について示したものである。この条件を変数Ｘについての条件に変換すると、「Ｘ＞４（Ｎ＋１）」となる。即ち、テープ２３上の現在位置から終端までの道程Ｘが４（Ｎ＋１）よりも大きい場合、バッファ１２の上限使用量ｎにはバッファ１２の最大使用量Ｎが設定される。
次に、（ｂ）は、上記条件分岐式のｅｌｓｅ文における条件である「Ｎ≧Ｘ／４−１」の場合について示したものである。この条件を変数Ｘについての条件に変換すると、「Ｘ≦４（Ｎ＋１）」となる。即ち、テープ２３上の現在位置から終端までの道程Ｘが４（Ｎ＋１）以下である場合、バッファ１２の上限使用量ｎには（Ｘ／４−１）が設定される。
尚、（ａ）及び（ｂ）において、バッファ１２に施した太線は、バッファ１２の使用可能な部分を示している。
【００２３】
次に、このような動作を実現するためのコントローラ１６について説明する。尚、本実施の形態におけるコマンドとしては、ＳＣＳＩのコマンドを例示する。
まず、コントローラ１６の機能構成について説明する。
図３は、コントローラ１６の機能構成例を示したブロック図である。
図示するように、コントローラ１６は、コマンド処理部４１と、バッファ管理部４２と、チャネル入出力部４３と、道程算出部４４と、上限使用量決定部４５と、上限使用量記憶部４６と、現在使用量記憶部４７とを備える。
【００２４】
このうち、コマンド処理部４１は、ホストＩ／Ｆ１１からコマンドを受け取る。ここで、コマンドとしては、バッファ１２にデータを格納することを指示するＷｒｉｔｅコマンド、バッファ１２に格納されたデータをテープ２３に書き込むＷｒｉｔｅＦＭコマンド等がある。
【００２５】
バッファ管理部４２は、コマンド処理部４１がＷｒｉｔｅコマンドを受け取った場合は、上限使用量決定部４５に対し、バッファ１２の上限使用量を決定するように指示する。そして、上限使用量記憶部４６に記憶された上限使用量と、現在使用量記憶部４７に記憶されたバッファ１２内の現在のデータ量（以下、「現在使用量」という）とに基づいて、Ｗｒｉｔｅコマンドで指示されたデータをバッファ１２に格納すべきかどうかを判定する。また、コマンド処理部４１がＷｒｉｔｅＦＭコマンドを受け取った場合は、バッファ１２からデータを読み出してチャネル入出力部４３に受け渡し、読み出したデータの量だけ、現在使用量記憶部４７に記憶された現在使用量を減算する。本実施の形態では、所定のデータをバッファに格納する格納部の一例として、バッファ管理部４２を設けている。
【００２６】
チャネル入出力部４３は、バッファ管理部４２がバッファ１２から読み出したデータをチャネル１３に出力したり、チャネル１３から受け取ったデータをバッファ１２に格納したりする。
【００２７】
道程算出部４４は、ヘッド１４の１つであるサーボヘッドがサーボトラックを追従することで読み取ったテープ２３上の現在位置の情報をチャネル１３を介して取得する。そして、予め保持していたテープ２３の終端の位置の情報を用いて、終端までの道程を算出する。本実施の形態では、未使用領域の大きさを特定する特定部の一例として、道程算出部４４を設けている。
上限使用量決定部４５は、道程算出部４４が算出した道程と、予め保持していたバッファ１２の最大使用量とに基づいて、バッファ１２の上限使用量を決定する。本実施の形態では、バッファ１２に格納できるデータの容量の上限値を決定する決定部の一例として、上限使用量決定部４５を設けている。
上限使用量記憶部４６は、上限使用量決定部４５が決定した上限使用量を記憶する。
現在使用量記憶部４７は、バッファ１２内の現在のデータ量である現在使用量を記憶する。
【００２８】
次に、コントローラ１６の動作について説明する。
このコントローラ１６の動作としては、ホスト３０からデータを受け取ってバッファ１２に格納する動作と、バッファ１２に格納されたデータを読み出してテープ２３に書き込む動作とがある。そこで、以下では、これらを分けて説明する。尚、前者の動作は、ホスト３０からＷｒｉｔｅコマンドを受け取った場合に行われるので、コントローラ１６がＷｒｉｔｅコマンドを受け取った場合の動作として説明する。また、後者の動作は、ホスト３０からＷｒｉｔｅＦｉｌｅＭａｒｋ（ＷｒｉｔｅＦＭ）コマンドを受け取った場合、バッファ１２内のデータ量が所定の基準に達した場合等に行われるが、ここでは、一例として、コントローラ１６がＷｒｉｔｅＦＭコマンドを受け取った場合の動作として説明する。
【００２９】
［Ｗｒｉｔｅコマンドを受け取った場合］
図４は、この場合のコントローラ１６の動作例を示したフローチャートである。尚、この動作の前提として、道程算出部４４が、チャネル１３からテープ２３上の現在位置を取得し、テープ２３の終端位置からこの現在位置を減算して終端までの道程Ｘ（ｍ）を求め、これを保持しているものとする。この場合、終端位置は、例えば、テープカートリッジ２０がロードされた際に、テープカートリッジ２０に設けられたカートリッジメモリから取得するとよい。
【００３０】
コントローラ１６では、まず、コマンド処理部４１がＷｒｉｔｅコマンドを受け取り、その旨をバッファ管理部４２に伝える（ステップ４０１）。
すると、バッファ管理部４２は、バッファ１２の上限使用量を決定するよう上限使用量決定部４５に指示する。これにより、上限使用量決定部４５は、終端までの道程が、バッファ１２の上限使用量を変更しなければならない閾値に達しているかどうかを判定する。即ち、バッファ１２の最大使用量をＮ、テープ２３上の現在位置から終端までの道程をＸ（ｍ）とした場合に、「Ｎ＜Ｘ／４−１」であるかどうかを判定する（ステップ４０２）。ここで、Ｘ（ｍ）は、上述したように、道程算出部４４が保持しているので、これを取得する。また、Ｎは、バッファ１２の容量であるので、予め保持するものを用いればよい。１つのデータセット当たりの必要なテープ長の最大値「４ｍ」も、予め保持するものを用いればよい。
【００３１】
その結果、「Ｎ＜Ｘ／４−１」であれば、上限使用量決定部４５は、上限使用量ｎにバッファ１２の最大使用量Ｎを設定する（ステップ４０３）。即ち、最大使用量Ｎを上限使用量ｎとして上限使用量記憶部４６に記憶する。
一方、「Ｎ＜Ｘ／４−１」でなければ、上限使用量決定部４５は、上限使用量ｎに（Ｘ／４−１）を設定する（ステップ４０４）。即ち、（Ｘ／４−１）を上限使用量ｎとして上限使用量記憶部４６に記憶する。
【００３２】
次に、バッファ管理部４２は、バッファ１２に空きがあるかどうかを判定する（ステップ４０５）。具体的には、上限使用量記憶部４６に記憶された上限使用量から、現在使用量記憶部４７に記憶された現在使用量を減算して差分を求め、Ｗｒｉｔｅコマンドによりバッファ１２への格納が指示されたデータの容量がこの差分以下であるかどうかを判定する。
【００３３】
その結果、バッファ１２に空きがあれば、即ち、データの容量が差分以下であれば、バッファ管理部４２は、コマンド処理部４１がＷｒｉｔｅコマンドと共に受け取ったデータを取得し、このデータをバッファ１２に格納する（ステップ４０６）。そして、現在使用量記憶部４７に記憶された現在使用量に、バッファ１２に格納したデータの容量を加算する（ステップ４０７）。その後、バッファ管理部４２は、Ｗｒｉｔｅコマンドの完了をコマンド処理部４１に伝え、コマンド処理部４１が、Ｗｒｉｔｅコマンドの完了をホスト３０に報告する（ステップ４０８）。
一方、バッファ１２に空きがなければ、即ち、データの容量が差分を超えていれば、バッファ管理部４２は、その旨をコマンド処理部４１に伝え、コマンド処理部４１が、バッファフルである旨をホスト３０に報告して、ホスト３０を待たせる（ステップ４０９）。
【００３４】
［ＷｒｉｔｅＦＭコマンドを受け取った場合］
図５は、この場合のコントローラ１６の動作例を示したフローチャートである。
コントローラ１６では、まず、コマンド処理部４１が、ＷｒｉｔｅＦＭコマンドを受け取り、その旨をバッファ管理部４２に伝える（ステップ４２１）。
すると、バッファ管理部４２は、バッファ１２に格納されているデータを読み出し、チャネル入出力部４３に受け渡す（ステップ４２２）。また、このとき、現在使用量記憶部４７に記憶されている現在使用量から、読み出したデータの容量を減算する（ステップ４２３）。例えば、ＷｒｉｔｅＦＭコマンドにより、バッファ１２に格納されている全てのデータを読み出してテープ２３に書き込む場合であれば、現在使用量記憶部４７に記憶された現在使用量は、「０」にクリアされる。
次に、チャネル入出力部４３は、バッファ管理部４２から渡されたデータをテープ２３に書き込むべくチャネル１３に出力する（ステップ４２４）。その後、チャネル入出力部４３は、ＷｒｉｔｅＦＭコマンドの完了をコマンド処理部４１に伝え、コマンド処理部４１が、ＷｒｉｔｅＦＭコマンドの完了をホスト３０に報告する（ステップ４２５）。
【００３５】
以上により、本実施の形態についての説明を終了する。
尚、本実施の形態では、「Ｎ＜Ｘ／４−１」という条件を満たすかどうかで、上限使用量ｎに設定する値を切り替えるようにし、この条件を満たさない場合に、上限使用量ｎに「Ｘ／４−１」を設定するようにしたが、これは、あくまで一例である。即ち、上記条件は、「終端までの道程Ｘ（ｍ）が最大使用量×４（ｍ）より大きい」というものであってよいし、この条件を満たさない場合に上限使用量ｎに設定される値は、「終端までの道程Ｘ（ｍ）／４（ｍ）」であってよい。
【００３６】
また、上記条件、及び、上記条件を満たさない場合に上限使用量に設定される値は、より一般化して、次のように考えることもできる。
即ち、まず、条件は、「終端までの道程が所定の閾値を超えている」というものであってもよい。ここで、所定の閾値は、バッファ１２の容量に相当するデータセットの数と、１つのデータセットを記録するのに必要なテープ長とに基づいて、決定されたものであれば、如何なる値を採用してもよい。
【００３７】
次に、条件を満たさない場合に上限使用量に設定される値は、バッファ１２の容量よりも小さな容量に相当するデータセットの数であれば、如何なる値を採用してもよい。但し、テープ２３上の記録効率を考えると、終端までの道程が短くなるのに伴って、上限使用量も小さくなるようにするのが好ましい。また、終端までの道程に応じて決定されたものでもよい。更に、終端までの道程と、１つのデータセットを記録するのに必要なテープ長とに基づいて、決定されたものであれば、一層好ましい。
【００３８】
このように、本実施の形態では、終端までの道程が十分にある間は、バッファ１２をフルに使用するようにし、終端までの道程が短くなってくると、バッファ１２の使用量の上限を徐々に下げるようにした。これにより、本実施の形態は、記録媒体の記録効率を高く保ちつつ、バッファ内のデータが記録媒体に書ききれないという事態を回避することができるという効果を有する。
【００３９】
尚、このような構成を採用した場合、「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」を出すとき、つまり、Ｘ＝Ｌ×２×Ｎ＋４のとき、第２世代エンタープライズでは、Ｌ＝０．１（ｍ）、Ｎ＝２５６なので、ｎ＝１２となる。つまり、バッファ１２の上限使用量が、バッファ１２の容量の１／２０となり、パフォーマンス的にはバッファ１２の恩恵を被ることができない。
しかしながら、次のような理由により、このことは特に問題とはならない。第一に、実際に「Ｅａｒｌｙ  Ｗａｒｎｉｎｇ」に達することはまれであり、通常は、「Ｎ＜Ｘ／４−１」である間に規定容量まで書き込めるからである。また、第二に、例えば調子が悪いドライブでデータを書き込むのに常に通常の３倍近くの長さを必要とするドライブでは、バッファ１２をフルに利用しても調子が良いドライブの１／３程度のパフォーマンスしか出ないため、バッファ１２の大きさがボトルネックとはならないからである。
【００４０】
尚、この技術は、図１に示したようなテープドライブ１０に限らず、ある領域にデータを書き込めないときに別のセグメントを利用するＨＤＤ（Hard Disk Drive）等、他のストレージデバイスにも適用可能である。その場合は、終端までの道程ではなく、より一般的に、記録媒体の未使用領域の大きさに基づいて、バッファ１２の上限使用量を決定することになる。
【００４１】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００４２】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【図面の簡単な説明】
【００４３】
【図１】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図２】本発明の実施の形態の概要を説明するための図である。
【図３】本発明の実施の形態におけるコントローラの機能構成例を示したブロック図である。
【図４】本発明の実施の形態におけるコントローラのＷｒｉｔｅコマンドを受け取った際の動作例の概要を示した図である。
【図５】本発明の実施の形態におけるコントローラのＷｒｉｔｅＦＭコマンドを受け取った際の動作例を示したフローチャートである。
【符号の説明】
【００４４】
１０…テープドライブ、１１…ホストＩ／Ｆ、１２…バッファ、１３…チャネル、１４…ヘッド、１５…モータ、１６…コントローラ、１７…ヘッド位置制御システム、１８…モータドライバ
【図１】
0005068215.tif 000002
【図２】
0005068215.tif 000003
【図３】
0005068215.tif 000004
【図４】
0005068215.tif 000005
【図５】
0005068215.tif 000006