説明

データをテープ媒体に書き込む装置及び方法

【課題】バッファ内のデータを区切り情報(FM)を伴わずにテープに書き込むことを指示するWriteFM0コマンドと、FMをテープに書き込むことを指示するWriteFM1コマンドとが送られる場合に、2度のバックヒッチが発生する可能性を低くする。
【解決手段】テープドライブのコントローラ16において、コマンド処理部41がWriteFM0コマンドを受け付けると、チャネル入出力部43は、バッファ内のデータと投機的FMとをテープに書き込み、CM入出力部44は、投機的FM存在情報をカートリッジメモリに記録する。また、コマンド処理部41が次にWriteFM1コマンドを受け付けると、CM入出力部44は、投機的FM存在情報をカートリッジメモリから消去し、コマンド処理部41が次にWriteFM1コマンド以外を受け付けると、チャネル入出力部43は、投機的FMを上書きする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データをテープ媒体に書き込む装置及び方法に関する。特に、本発明は、上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置及び方法に関する。
【背景技術】
【0002】
磁気テープ等のテープ媒体にデータを書き込むテープドライブでは、データを一旦バッファに蓄積しておき、ドライブの都合の良いタイミングでバッファからテープ媒体へデータを書き込むのが一般的である。ホストは、ドライブに送ったデータが全てテープ媒体上に書き出されていることを保証するため、強制的にデータを書き込むためのコマンド(WriteFM Non Immediateコマンド)をドライブに送る。このようなバッファからテープ媒体への強制書込みを「同期」という。
ところで、同期が発生した後にテープ媒体を停止させないと、テープ媒体上で、先行する同期にて書き込まれたデータと次に書き込まれたデータとの間にギャップが生じる。その結果、テープ媒体の記録領域が無駄になってしまう。そのため、バックヒッチを行う必要がある。バックヒッチとは、テープ媒体の走行速度を減速して一旦停止し、逆方向に走行し、その後、再度元の方向に走行して書き込むべき位置に達して次のデータを書く、という一連の動作のことである。次のデータは、このバックヒッチが完了するまで書き込むことができない。バックヒッチには約2〜3秒程度の時間を要するため、バックヒッチの発生は、パフォーマンスに大きな影響を与える。
【0003】
従来より、かかるバックヒッチを回避するための技術は種々提案されている(例えば、特許文献1参照)。特許文献1では、ホストから送られた様々なサイズの複数のブロックを、一定サイズのセグメントで分割されたバッファに順次蓄積し、セグメントが少なくとも1つのブロックにより準備された場合に、セグメントの内容をデータセットとしてテープ媒体に書き込み、テープ媒体が4mを移動する間に次のセグメントが準備されない場合に4m内にNullデータセットをテープ媒体に書き込むようにしている。
【0004】
【特許文献1】特開2007−95231号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、ホスト側のアプリケーションによっては、「同期」を指示するコマンドとして、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドとを連続して送る場合がある。
この場合、まず、第1のコマンドでバッファ内のデータをテープ媒体に強制的に書き込むため、バックヒッチが発生する。更に、次の第2のコマンドにより、区切り情報をテープ媒体に強制的に書き込む必要があるため、再度バックヒッチを行う。
そして、バックヒッチを行った後でないと次のデータの書込みを開始できないため、この2度のバックヒッチは、パフォーマンスに大きな影響を与える。
【0006】
しかしながら、上記特許文献1の技術では、「同期」を指示するコマンドとして、上記の第1のコマンド及び第2のコマンドのような2つのコマンドが送られるような場合を想定していない。
【0007】
本発明の目的は、バッファ内のデータをテープ媒体に強制的に書き込むことを指示するコマンドと、区切り情報をテープ媒体に書き込むことを指示するコマンドとが連続して送られる場合に、2度のバックヒッチが発生する可能性を低くすることにある。
【課題を解決するための手段】
【0008】
かかる目的のもと、本発明は、上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置であって、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドとを上位装置から受け付ける受付部と、受付部が第1のコマンドを受け付けた場合に、バッファ内のデータとダミーの区切り情報とをテープ媒体に書き込む書込み部と、受付部が第1のコマンドの次に第2のコマンドを受け付けた場合に、ダミーの区切り情報を有効な区切り情報として扱えるようにする処理を行う処理部とを含む、装置を提供する。
【0009】
ここで、この装置は、書込み部によりダミーの区切り情報がテープ媒体に書き込まれたことを示す情報を記録媒体に記録する記録部を更に備え、処理部は、記録媒体に記録された情報を消去することにより、ダミーの区切り情報を有効な区切り情報として扱えるようにする、ものであってよい。
また、記録媒体は、テープ媒体を収納するカートリッジに設けられたメモリであってよい。
【0010】
また、この装置において、受付部は、第1のコマンド及び第2のコマンド以外の第3のコマンドを更に受け付け、処理部は、受付部が第1のコマンドの次に第3のコマンドを受け付けた場合に、ダミーの区切り情報を有効な区切り情報として扱えないようにする処理を行う、ものであってよい。
【0011】
ここで、第3のコマンドは、バッファにデータを格納することを指示するコマンドであり、処理部は、ダミーの区切り情報を有効な区切り情報として扱えないようにする処理として、ダミーの区切り情報に対してバッファ内のデータによる上書きがなされるようにバッファにデータを格納する処理を行う、ものであってよい。そして、バッファ内のデータによる上書きは、テープ媒体上のダミーの区切り情報と同じ位置にバッファ内のデータを書き込むことによる上書きであってもよいし、テープ媒体上のダミーの区切り情報と異なる位置にバッファ内のデータを書き込むと共にテープ媒体にダミーの区切り情報が無効であることを示す情報を書き込むことによる上書きであってもよい。
【0012】
一方、第3のコマンドは、バッファにデータを格納することを指示するコマンド以外のコマンドであり、処理部は、ダミーの区切り情報を有効な区切り情報として扱えないようにする処理として、ダミーの区切り情報に対して終端情報による上書きがなされるようにバッファに終端情報を格納する処理を行う、ものであってよい。
【0013】
また、この装置において、受付部は、テープ媒体に書き込まれた区切り情報を読み出すこと、及び、テープ媒体に書き込まれた区切り情報にテープ媒体を位置付けることの何れかを指示する第4のコマンドを更に受け付け、処理部は、受付部が第4のコマンドを受け付けた場合に、区切り情報がダミーの区切り情報でなければ、第4のコマンドにより指示された処理を行い、区切り情報がダミーの区切り情報であれば、第4のコマンドにより指示された処理を行わない、ものであってよい。
また、本発明は、上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置であって、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドとを上位装置から受け付ける受付部と、受付部が第1のコマンドを受け付けた場合に、バッファ内のデータとダミーの区切り情報とをテープ媒体に書き込む書込み部と、書込み部によりダミーの区切り情報がテープ媒体に書き込まれたことを示す情報を、テープ媒体を収納するカートリッジに設けられたメモリに記録する記録部と、受付部が第1のコマンドの次に第2のコマンドを受け付けた場合に、メモリに記録された情報を消去することにより、ダミーの区切り情報を有効な区切り情報として扱えるようにする処理を行う処理部とを含む、装置も提供する。
【0014】
更に、本発明は、上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む方法であって、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドが上位装置から送られた場合に、バッファ内のデータとダミーの区切り情報とをテープ媒体に書き込むステップと、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドが第1のコマンドの次に上位装置から送られた場合に、ダミーの区切り情報を有効な区切り情報として扱えるようにするステップとを含む、方法も提供する。
【0015】
更にまた、本発明は、上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置としてコンピュータを機能させるプログラムであって、コンピュータを、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドとを上位装置から受け付ける手段と、第1のコマンドが受け付けられた場合に、バッファ内のデータとダミーの区切り情報とをテープ媒体に書き込む手段と、第1のコマンドの次に第2のコマンドが受け付けられた場合に、ダミーの区切り情報を有効な区切り情報として扱えるようにする手段として機能させる、プログラムも提供する。
【発明の効果】
【0016】
本発明によれば、バッファ内のデータをテープ媒体に強制的に書き込むことを指示するコマンドと、区切り情報をテープ媒体に書き込むことを指示するコマンドとが連続して送られる場合に、2度のバックヒッチが発生する可能性が低くなる。
【発明を実施するための最良の形態】
【0017】
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。
図1は、本実施の形態が適用されるテープドライブ10の構成例を示した図である。このテープドライブ10は、ホストインターフェイス(以下、「ホストI/F」という)11と、バッファ12と、チャネル13と、ヘッド14と、モータ15とを含む。また、コントローラ16と、ヘッド位置制御システム17と、モータドライバ18とを含む。更に、テープドライブ10には、テープカートリッジ20が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ20も図示している。このテープカートリッジ20は、リール21、22に巻かれたテープ23を含む。テープ23は、リール21、22の回転に伴い、リール21からリール22の方向へ、又は、リール22からリール21の方向へ、長手方向に移動する。尚、テープ23としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【0018】
また、テープカートリッジ20は、カートリッジメモリ24も含む。このカートリッジメモリ24は、例えば、テープ23上にどのようにデータが書かれたかの情報を記録する。そして、例えばRFインターフェイスを用いて非接触でテープ23に書かれたデータのインデックスやテープ23の使用状況等を調べることにより、データへの高速アクセスを可能としている。尚、図では、このRFインターフェイスのようなカートリッジメモリ24へのアクセスを行うためのインターフェイスを、カートリッジメモリインターフェイス(以下、「CMI/F」という)19として示している。
【0019】
ここで、ホストI/F11は、上位装置の一例であるホスト30との通信を行う。例えば、ホスト30から、テープ23へのデータの書込みを指示するコマンド、テープ23を目的の位置に移動させるコマンド、テープ23からのデータの読出しを指示するコマンドを受け取る。尚、このホストI/F11で用いる通信規格としては、SCSIが例示される。SCSIの場合、1つ目のコマンドは、Writeコマンドに相当し、2つ目のコマンドは、LocateコマンドやSpaceコマンドに相当し、3つ目のコマンドは、Readコマンドに相当する。また、ホストI/F11は、ホスト30に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【0020】
バッファ12は、テープ23に書き込むべきデータやテープ23から読み出されたデータを蓄積するメモリである。例えば、DRAM(Dynamic Random Access Memory)によって構成される。また、バッファ12は、複数のバッファセグメントからなり、各バッファセグメントが、テープ23に対する読み書きの単位であるデータセットを格納している。
チャネル13は、テープ23に書き込むべきデータをヘッド14に送ったり、テープ23から読み出されたデータをヘッド14から受け取ったりするために用いられる通信経路である。
ヘッド14は、テープ23が長手方向に移動するとき、テープ23に対して情報を書き込んだり、テープ23から情報を読み出したりする。
モータ15は、リール21、22を回転させる。尚、図では、1つの矩形でモータ15を表しているが、モータ15としては、リール21、22の各々に1つずつ、合計2個設けるのが好ましい。
【0021】
一方、コントローラ16は、テープドライブ10の全体を制御する。例えば、ホストI/F11で受け付けたコマンドに従って、データのテープ23への書込みやテープ23からの読出しを制御する。また、ヘッド位置制御システム17やモータドライバ18の制御も行う。
ヘッド位置制御システム17は、所望の1つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ23上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド14を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム17で行う。
モータドライバ18は、モータ15を駆動する。尚、上述したように、モータ15を2個使用する場合であれば、モータドライバ18も2個設けられる。
CMI/F19は、例えば、RFリーダライタにより実現され、カートリッジメモリ24への情報の書込みや、カートリッジメモリ24からの情報の読出しを行う。
【0022】
ところで、SCSIには、Writeコマンド、Locateコマンド、Spaceコマンド、Readコマンドの他に、バッファ12内のデータをテープ23に強制的に書き込むことを指示するWriteFileMark Non Immediateコマンドがある。ここで、FileMark(以下、「FM」という)とは、ひとまとまりのデータの書き込みの区切りを示す区切り情報である。このようなWriteFM Non Immediateコマンドとしては、更に、WriteFM0コマンドと、WriteFM1コマンドとがある。WriteFM0コマンドは、バッファ12内のデータをFMを伴わずにテープ23に強制的に書き込むことを指示するコマンドである。一方、WriteFM1コマンドは、バッファ12内のデータと共にFMをテープ23に強制的に書き込むことを指示するコマンドである。
【0023】
そして、ホスト30で動作するアプリケーションの中には、WriteFM0コマンドを発行した後、続けてWriteFM1コマンドを発行するものがある。
この場合、まず、WriteFM0コマンドによりバッファ12内のデータをテープ23に強制的に書き込むため、バックヒッチが発生する。更に、次のWriteFM1コマンドにより、FMをテープ23に強制的に書き込む必要があるため、再度バックヒッチを行う。
【0024】
米国IBM社のTS1120テープドライブの場合、データセットと呼ばれるデータ単位で、データをテープに書き込む。そこで、このようなデータの書込みを行う場合を例にとり、上記バックヒッチが発生する様子について具体的に説明する。
図2は、バックヒッチが発生する様子を模式的に示した図である。尚、ここでは、「データセット」を便宜上「DS」と表記している。
【0025】
例えば、DS#N+1の途中までデータが格納された状態で、WriteFM0コマンドを受け取ったとする。すると、DS#N+1の後ろの部分をパディングし、(a)に示すように、強制的にDS#N+1をテープ23に書き込み、バックヒッチを行う。
【0026】
その後、WriteFM1コマンドを受け取ったとする。すると、(b)に示すように、上記バックヒッチの完了後、DS#N+2をテープ23に書き込み、再度バックヒッチを行う。ここで、DS#N+2は、FMのみを含み、残りの部分はパディングされたデータセットである。
DS#N+1を書き込んだ後に発生したバックヒッチの完了後でなければ、このDS#N+2の書込み処理はできない。更に、続くWriteコマンドの処理はDS#N+2の書き込み終了後にしかできない。
【0027】
従って、(c)に示すように、DS#N+2の書込みの後に発生したバックヒッチの完了後、Writeコマンドの実行を開始し、DS#N+3を書き込むことになる。
このように、2度のバックヒッチを行った後でないと次のデータ(この場合はDS#N+3以降のデータ)の書込みを開始することができないため、パフォーマンスが大きな影響を受ける。
【0028】
そこで、本実施の形態では、WriteFM0、WriteFM1というコマンドシーケンスに対して、従来は2度のバックヒッチが発生していた点を、1度のバックヒッチの発生で済むよう、テープドライブ10側で解決する。尚、この場合、ホスト30側のソフトウェアを変更することは容易ではないので、テープドライブ10側でパフォーマンスを向上させることは有意義である。
具体的には、WriteFM0コマンドを受け取った時点で、次にWriteFM1コマンドが発行されることを想定して、WriteFM1コマンドに対応したFMを投機的に書き込んでおく。尚、以下では、このように投機的に書き込まれたFMを「投機的FM」(Speculative FM)と呼ぶことにする。そして、投機的FMを書き込んだことをカートリッジメモリ24に保持しておき、続くWriteFM1コマンドに対しては、カートリッジメモリ24に対する情報のアップデートのみを行うことで、バックヒッチの発生を防ぐ。このように、投機的FMを書き込んだことをカートリッジメモリ24に保持するようにしたのは、投機的FMを書き込んだ後、次の処理が行われる前に電源が遮断されてしまった場合に、テープ23の最後に残ったFMが投機的FMか通常のFMかを見分けるためである。
また、投機的FMが不要になった場合は、FMを読み出すコマンドに対し、投機的FMを誤ってホスト30に送らないようにする。
【0029】
次に、このような動作を実現するためのコントローラ16の機能構成について説明する。
図3は、コントローラ16の機能構成例を示したブロック図である。
図示するように、コントローラ16は、コマンド処理部41と、バッファ管理部42と、チャネル入出力部43と、カートリッジメモリ入出力部(以下、「CM入出力部」という)44とを備える。
【0030】
このうち、コマンド処理部41は、ホストI/F11からコマンドを受け取る。ここで、コマンドとしては、バッファ内のデータをテープ媒体に強制的に書き込むことを指示する第1のコマンドの一例であるWriteFM0コマンド、区切り情報をテープ媒体に書き込むことを指示する第2のコマンドの一例であるWriteFM1コマンド、バッファにデータを格納することを指示する第3のコマンドの一例であるWriteコマンド、テープ媒体に書き込まれた区切り情報を読み出したり、テープ媒体に書き込まれた区切り情報にテープ媒体を位置付けたりする第4のコマンドの一例であるReadコマンド、Locateコマンド、Spaceコマンド等がある。本実施の形態では、第1乃至第4のコマンドを受け付ける受付部の一例として、コマンド処理部41を設けている。
【0031】
バッファ管理部42は、コマンド処理部41がWriteFM0コマンドを受け取った場合は、投機的FMをバッファ12内に用意し、コマンド処理部41がWriteFM1コマンドを受け取った場合は、WriteFM0コマンドの直後でなければ、FMをバッファ12内に用意する。また、コマンド処理部41がWriteコマンドを受け取った場合は、データをバッファ12内に用意し、コマンド処理部41がWriteFMコマンド、Writeコマンド以外のコマンドを受け取った場合は、WriteFM0コマンドの直後であれば、EOD(End Of Data)をバッファ12内に用意する。
【0032】
チャネル入出力部43は、バッファ管理部42がバッファ12から読み出したデータをチャネル13に出力したり、チャネル13から受け取ったデータをバッファ12に格納したりする。特に、区切り情報の一例であるFM、ダミーの区切り情報の一例である投機的FM、投機的FMを上書きするためのデータをテープ23に書き込むべく出力する。本実施の形態では、バッファ内のデータとダミーの区切り情報とをテープ媒体に書き込む書込み部の一例として、また、ダミーの区切り情報を有効な区切り情報として扱えないようにする処理を行う処理部の一例として、チャネル入出力部43を設けている。
【0033】
CM入出力部44は、カートリッジメモリ24がアクセス可能であるかどうかや、投機的FMがテープ23に存在することを示す情報(以下、「投機的FM存在情報」という)がカートリッジメモリ24に保存されているかどうかを、CMI/F19を介して調べる。また、カートリッジメモリ24に保存された投機的FM存在情報の消去も行う。本実施の形態では、ダミーの区切り情報がテープ媒体に書き込まれたことを示す情報を記録媒体に記録する記録部の一例として、また、ダミーの区切り情報を有効な区切り情報として扱えるようにする処理を行う処理部一例として、CM入出力部44を設けている。
【0034】
次に、コントローラ16の動作について説明する。
この場合の動作は、WriteFM0コマンドに応じて投機的FMを書き込んだ後、予想に反してWriteFM1コマンドが来なかった場合に、投機的FMを物理的に上書きするか論理的に上書きするかで異なってくるので、これらを分けて説明する。
【0035】
[物理的に上書きする場合]
図4は、この場合のデータセットの内容を模式的に示した図である。尚、ここでも、「データセット」を便宜上「DS」と表記している。即ち、図は、データセットのうちDS#NとDS#N+1に着目して、その内容を示している。
まず、(a)では、WriteFM0コマンドに応じて、その時点でホスト30から受け取っていたレコードRec#Mを含むDS#Nと、投機的FMのみを含むDS#N+1がテープ23に書き込まれている。尚、図中、「SFM」は、投機的FM(Speculative FM)を表す。
そして、(b)は、予想通り、次にWriteFM1コマンドが来た場合のDS#N及びDS#N+1の内容を示す。この場合、投機的FMは、有効化され、通常のFMとなっている。
【0036】
一方、(c),(d)は、予想に反して、次にWriteFM1コマンドが来なかった場合のDS#N及びDS#N+1の内容を示す。例えば、WriteコマンドによりRec#M+1を書き込むよう指示されれば、(c)に示すように、投機的FMを含むDS#N+1は、Rec#M+1を含むDS#N+1で物理的に上書きされる。また、Writeコマンド以外のコマンドが来れば、(d)に示すように、投機的FMを含むDS#N+1は、EODを含むDS#N+1で物理的に上書きされる。尚、この場合、物理的上書き(Physical Overwrite)とは、テープ23上の投機的FMと同じ位置に他のデータを書き込むことによって上書きすることをいう。
【0037】
以下、この場合のコントローラ16の動作について、詳細に説明する。
まず、WriteFMコマンドを受け取った場合の動作について説明する。
図5は、このときのコントローラ16の動作例を示したフローチャートである。尚、このとき、バッファ12内にはDS#Nまでの幾つかのデータセットが格納されており、DS#Nには、図4に示したように途中までデータが格納されているものとする。
【0038】
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteFMコマンドを受け取り(ステップ401)、それがWriteFM0コマンドかWriteFM1コマンドかを判定する(ステップ402)。
ここで、WriteFM0コマンドであると判定した場合、コマンド処理部41はその旨の情報をバッファ管理部42に出力し、バッファ管理部42が、投機的FMを含むDS#N+1をバッファ12に用意する(ステップ403)。そして、バッファ管理部42が、バッファ12内のデータをチャネル入出力部43に渡し、チャネル入出力部43が、このデータをチャネル13に出力する(ステップ404)。これにより、バッファ12内にあるDS#N+1までのデータセットがチャネル13及びヘッド14を介してテープ23に書き込まれることになる。
【0039】
また、バッファ管理部42は、投機的FMをテープ23に書き込んだ旨をCM入出力部44に通知し、CM入出力部44が、投機的FM存在情報をカートリッジメモリ24に保存することを指示する情報をCMI/F19に出力する(ステップ405)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM0コマンド)の完了をホスト30に報告する(ステップ406)。
【0040】
一方、ステップ402でWriteFM1コマンドであると判定した場合、コマンド処理部41はその旨をCM入出力部44に通知し、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ407)。
【0041】
その結果、投機的FMがテープ23上にないと判定した場合、CM入出力部44は、その旨をバッファ管理部42に伝える。この場合は、前回のコマンドがWriteFM0コマンドではない、つまり、WriteFM0コマンドに続けてWriteFM1コマンドが来たわけではないので、バッファ管理部42は、通常のFMの書込みを行う。即ち、まず、FMを含むDS#N+1をバッファ12に用意する(ステップ408)。そして、バッファ12内のデータをチャネル入出力部43に渡し、チャネル入出力部43が、このデータをチャネル13に出力する(ステップ409)。これにより、バッファ12内にあるDS#N+1までのデータセットがチャネル13及びヘッド14を介してテープ23に書き込まれることになる。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM1コマンド)の完了をホスト30に報告する(ステップ406)。
【0042】
一方、ステップ407で投機的FMがテープ23上にあると判定した場合は、前回のコマンドがWriteFM0コマンドである、つまり、WriteFM0コマンドに続けてWriteFM1コマンドが来た場合であるので、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ410)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM1コマンド)の完了をホスト30に報告する(ステップ406)。
【0043】
次に、Writeコマンドを受け取った場合の動作について説明する。
図6は、このときのコントローラ16の動作例を示したフローチャートである。尚、このとき、テープ23上にはDS#N+1までが書かれているものとする。
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteコマンドを受け取り(ステップ411)、その旨の情報をバッファ管理部42及びCM入出力部44に出力する。すると、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ412)。
【0044】
ここで、投機的FMがテープ23上にあると判定した場合は、WriteFM0コマンドに続くコマンドとしてWriteFM1コマンドが来ることを予想して投機的FMをテープ23に書き込んだにも関わらず、続くコマンドとしてWriteコマンドが来た場合である。この場合、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ413)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
【0045】
また、CM入出力部44は、投機的FM存在情報がカートリッジメモリ24に保存されていた旨をバッファ管理部42に通知する。すると、バッファ管理部42は、テープ23上の投機的FMを無効化して次のデータを書き込むための処理を行う。即ち、バッファ12内のデータの格納位置をDS#N+1に設定し、この新たなDS#N+1によりテープ23上の投機的FMを含むDS#N+1が物理的に上書きされるように管理する(ステップ414)。例えば、バッファ12内のDS#N+1が、テープ23上のDS#N+1を物理的に上書きする位置に書き込まれる場合であれば、テープ23上の上書きされるべきデータセットの番号と、バッファ12内の上書きすべきデータセットの番号とを同じにすることが、物理的に上書きされるように管理することに相当する。一方、バッファ12内のDS#N+1が、テープ23上のDS#N+1を物理的に上書きする位置に書き込まれるとは限らない場合であれば、例えば、データセットに付随する情報テーブル(DSIT:Data Set Information Table)の中に、そのデータセットが同じ番号のテープ23上のデータセットを物理的に上書きすべきことを示す情報を持たせてもよい。
【0046】
そして、バッファ管理部42は、Writeコマンドと共にホスト30から送られたデータをコマンド処理部41から受け取り、バッファ12内の格納位置として設定されたデータセットに格納する(ステップ415)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、Writeコマンドの完了をホスト30に報告する(ステップ416)。
そして、その後の同期コマンドにより、投機的FMは、データにより物理的に上書きされる。これは、WriteFM1コマンドを実行し、それを次のデータで物理的に上書きした場合と同じと考えることができる。
【0047】
一方、ステップ412で投機的FMがテープ23上にないと判定した場合は、WriteFM0コマンドに続いて来たWriteコマンドではなく、通常のWriteコマンドである。この場合、CM入出力部44は、その旨をバッファ管理部42に通知する。すると、バッファ管理部42は、Writeコマンドと共にホスト30から送られたデータをコマンド処理部41から受け取り、バッファ12内の現在のデータに続けて格納する(ステップ415)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、Writeコマンドの完了をホスト30に報告する(ステップ416)。
【0048】
次いで、WriteFMコマンド、Writeコマンド以外のコマンドを受け取った場合の動作について説明する。尚、この動作においては、カートリッジメモリ24を読める場合と読めない場合について考慮する。仮に、カートリッジメモリ24が物理的に壊れていたとしても、テープ23上に書かれたデータは正しく読み出されることが求められるからである。
【0049】
図7は、このときのコントローラ16の動作例を示したフローチャートである。尚、ここでは、DS#N+1がテープ23の最後に書かれたデータセットであるとする。
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteFMコマンド、Writeコマンド以外のコマンドを受け取る(ステップ421)。尚、このようなコマンドとしては、Readコマンド、Locateコマンド、Spaceコマンド、Rewindコマンド、Unloadコマンド等がある。
【0050】
そして、コマンド処理部41は、コマンドを受け取った旨の情報をバッファ管理部42に出力し、バッファ管理部42は、まだ書かれていないデータがバッファ12内にあるかどうかを判定する(ステップ422)。
ここで、まだ書かれていないデータがバッファ12内にあると判定した場合、バッファ12内の全てのデータをテープ23に書き込んで(ステップ429)、ステップ427へ進む。一方、まだ書かれていないデータがバッファ12内にないと判定した場合、その旨の情報をCM入出力部44に出力する。すると、CM入出力部44が、カートリッジメモリ24にアクセス可能かどうかを調べることを指示する情報をCMI/F19に出力する(ステップ423)。
【0051】
その結果、カートリッジメモリ24にアクセス可能でないと判定すると、ステップ427へ進むが、カートリッジメモリ24にアクセス可能であると判定すると、CM入出力部44は、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ424)。ここで、投機的FMがテープ23上にない場合は、ステップ427へ進むが、投機的FMがテープ23上にある場合、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ425)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
【0052】
また、CM入出力部44は、投機的FM存在情報がカートリッジメモリ24に保存されていた旨をバッファ管理部42に通知する。一連の書込み処理が終わった時点で投機的FMはテープ23上に存在してはいけないので、この通知により、バッファ管理部42は、テープ23上の投機的FMを無効化してEODを書き込むための処理を行う。即ち、バッファ12内のEODの格納位置をDS#N+1に設定し、この新たなDS#N+1によりテープ23上の投機的FMを含むDS#N+1が物理的に上書きされるように管理する(ステップ426)。尚、この場合の物理的に上書きされるような管理の方法としては、ステップ414に関して説明したのと同様の方法を用いることができる。
その後、コマンド処理部41が受け取ったコマンドに応じて、後述するコマンド処理が行われる(ステップ427)。そして、コマンド処理が終了すると、コマンド処理部41は、コマンドの完了をホスト30に報告する(ステップ428)。
【0053】
次いで、図7のステップ427におけるコマンド処理の動作について説明する。
図8は、コマンド処理を行うときのコントローラ16の動作例を示したフローチャートである。
コントローラ16では、まず、コマンド処理部41が、処理の対象となるコマンドがターゲットの指定を有するものであるかどうかを判定する(ステップ431)。尚、ここで、ターゲットとは、Readコマンドで指定される読出し対象のレコード又はFM、LocateコマンドやSpaceコマンドで指定される位置合わせ対象のレコード又はFMである。
【0054】
その結果、ターゲット指定を有するコマンドでない場合、例えば、Unloadコマンド等の場合は、そのコマンドに応じた処理が行われ(ステップ440)、図7のフローチャートに戻る。
一方、ターゲット指定を有するコマンドである場合、例えば、Readコマンド、Locateコマンド、Spaceコマンド等の場合、コマンド処理部41は、コマンド及びターゲットをチャネル入出力部43に出力し、チャネル入出力部43が、ターゲットを含むデータセット及びその次のデータセットを読んで、読めたかどうかをコマンド処理部41に返す。そして、この結果に基づいて、コマンド処理部41は、ターゲットを含むデータセットがテープ23上の最後のデータセットであるかどうかを判定する(ステップ433)。尚、図では、ターゲットを含むデータセットをDS#Nとしている。
【0055】
ここで、最後のデータセットでないと判定した場合、Readコマンドに対しては、チャネル入出力部43が取得したレコード又はFMをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコード又はFMへの位置合わせをバッファ管理部42が行う(ステップ436)。
【0056】
一方、最後のデータセットであると判定した場合、コマンド処理部41は、その旨の情報をCM入出力部44に出力する。すると、CM入出力部44が、カートリッジメモリ24にアクセス可能かどうかを調べることを指示する情報をCMI/F19に出力する(ステップ434)。
【0057】
まず、このステップ434でカートリッジメモリ24にアクセス可能であると判定された場合について述べる。この場合、コマンド処理部41は、ターゲットが投機的FMであるかどうかを判定する(ステップ435)。尚、ここでの判定は、具体的には、次のように行うことが可能である。即ち、まず、コマンド処理部41が、ターゲットがデータセット内の最後のブロック(レコード又はFM)であるかどうかを判定する。そして、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する。その結果、ターゲットがデータセット内の最後のブロックであり、かつ、投機的FMがテープ23上にあれば、この投機的FMがターゲットとして指定されたことになる。
【0058】
電源障害等により投機的FMを書き込んだ後に正常に書き込み処理が終了できなかった場合を除けば、この時点で、投機的FM存在情報がカートリッジメモリ24に残っていることはない。従って、物理的上書きの規則に従って、DS#N、DS#N+1を扱えば、整合性の取れたデータをホスト30に転送することが可能である。即ち、ターゲットが投機的FMでないと判定した場合、Readコマンドに対しては、チャネル入出力部43が取得したレコード又はFMをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコード又はFMへの位置合わせをバッファ管理部42が行う(ステップ436)。
【0059】
一方、例えば、WriteFM0コマンドにより投機的FMがテープ23上に書き込まれた状態で、ドライブの電源障害等により以後の処理が行われなかった場合は、投機的FM存在情報がカートリッジメモリ24に残っていると考えられる。その場合には、テープ23上の最後に書き込まれた投機的FMはなかったものとして扱う。即ち、ターゲットが投機的FMであると判定した場合、コマンド処理部41は、読出しエラーを報告する準備を行う(ステップ439)。尚、この読出しエラーは、図7のステップ428でホスト30に報告されることになる。
【0060】
次に、ステップ434でカートリッジメモリ24にアクセス可能でないと判定された場合について述べる。このように、カートリッジメモリ24が無効な場合としては、カートリッジメモリ24が物理的に利用できないような場合がある。このような場合でも、テープ23上のデータは可能な限り、正しい内容でホスト30に転送することが要求される。
ここでは、次のデータセットを読めない場合、つまり、ターゲットを含むデータセットがテープ23上の最後のデータセットである場合を考えている。この場合、最後にテープ23上から読めたFMは、情報が不確かである(投機的FMであるかもしれない)ため、ホスト30に転送しない。即ち、まず、コマンド処理部41は、ターゲットがFMであるかどうかを判定する(ステップ438)。そして、ターゲットがFMであると判定されれば、読出しエラーを報告する準備を行う(ステップ439)。尚、この読出しエラーは、図7のステップ428でホスト30に報告されることになる。また、ターゲットがFMでないと判定されれば、Readコマンドに対しては、チャネル入出力部43が取得したレコードをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコードへの位置合わせをバッファ管理部42が行う(ステップ436)。
【0061】
尚、次のデータセットが読める場合、つまり、ターゲットを含むデータセットがテープ23上の最後のデータセットでない場合は、物理上書きの規則に従って、DS#N、DS#N+1を扱えば、整合性の取れたデータをホスト30に転送することが可能である。この場合は、カートリッジメモリ24に投機的FM存在情報が存在することはない。なぜなら、次のデータセットの書込みが正常に終了していれば、投機的FMは、有効なFMであるか、続くデータで物理的に上書きされているかのどちらかのケースしかありえないからである。このような場合は、ステップ433の判断が「No」である場合に該当する。
【0062】
[論理的に上書きする場合]
図9は、この場合のデータセットの内容を模式的に示した図である。尚、ここでも、「データセット」を便宜上「DS」と表記している。即ち、図は、データセットのうちDS#Nと必要があればDS#N+1に着目して、その内容を示している。
まず、(a)では、WriteFM0コマンドに応じて、その時点でホスト30から受け取っていたレコードRec#Mと投機的FMとを含むDS#Nがテープ23に書き込まれている。尚、図中、「SFM」は、投機的FM(Speculative FM)を表す。
そして、(b)は、予想通り、次にWriteFM1コマンドが来た場合のDS#Nの内容を示す。この場合、投機的FMは、有効化され、通常のFMとなっている。
【0063】
一方、(c),(d)は、予想に反して、次にWriteFM1コマンドが来なかった場合のDS#N及びDS#N+1の内容を示す。例えば、WriteコマンドによりRec#M+1を書き込むよう指示されれば、(c)に示すように、Rec#Mと投機的FMとを含むDS#Nは、Rec#MとRec#M+1を含むDS#N+1で論理的に上書きされる。また、Writeコマンド以外のコマンドが来れば、(d)に示すように、Rec#Mと投機的FMとを含むDS#Nは、Rec#Mを含むDS#N+1で論理的に上書きされ、その後にEODが書かれる。尚、この場合、論理的上書き(Logical Overwrite)とは、テープ23上の投機的FMと異なる位置に他のデータを書き込むと共にテープ23に投機的FMが無効であることを示す情報を書き込むことによって上書きすることをいう。
【0064】
以下、この場合のコントローラ16の動作について、詳細に説明する。
まず、WriteFMコマンドを受け取った場合の動作について説明する。
図10は、このときのコントローラ16の動作例を示したフローチャートである。尚、このとき、バッファ12内にはDS#Nまでの幾つかのデータセットが格納されており、DS#Nには、図9に示したように途中までデータが格納されているものとする。
【0065】
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteFMコマンドを受け取り(ステップ451)、それがWriteFM0コマンドかWriteFM1コマンドかを判定する(ステップ452)。
ここで、WriteFM0コマンドであると判定した場合、コマンド処理部41はその旨の情報をバッファ管理部42に出力し、バッファ管理部42が、投機的FMを含むDS#Nをバッファ12に用意する(ステップ453)。そして、バッファ管理部42が、バッファ12内のデータをチャネル入出力部43に渡し、チャネル入出力部43が、このデータをチャネル13に出力する(ステップ454)。これにより、バッファ12内にあるDS#Nまでのデータセットがチャネル13及びヘッド14を介してテープ23に書き込まれることになる。
【0066】
また、バッファ管理部42は、投機的FMをテープ23に書き込んだ旨をCM入出力部44に通知し、CM入出力部44が、投機的FM存在情報をカートリッジメモリ24に保存することを指示する情報をCMI/F19に出力する(ステップ455)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM0コマンド)の完了をホスト30に報告する(ステップ456)。
【0067】
一方、ステップ452でWriteFM1コマンドであると判定した場合、コマンド処理部41はその旨をCM入出力部44に通知し、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ457)。
【0068】
その結果、投機的FMがテープ23上にないと判定した場合、CM入出力部44は、その旨をバッファ管理部42に伝える。この場合は、前回のコマンドがWriteFM0コマンドではない、つまり、WriteFM0コマンドに続けてWriteFM1コマンドが来たわけではないので、バッファ管理部42は、通常のFMの書込みを行う。即ち、まず、FMを含むDS#Nをバッファ12に用意する(ステップ458)。そして、バッファ12内のデータをチャネル入出力部43に渡し、チャネル入出力部43が、このデータをチャネル13に出力する(ステップ459)。これにより、バッファ12内にあるDS#Nまでのデータセットがチャネル13及びヘッド14を介してテープ23に書き込まれることになる。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM1コマンド)の完了をホスト30に報告する(ステップ456)。
【0069】
一方、ステップ457で投機的FMがテープ23上にあると判定した場合は、前回のコマンドがWriteFM0コマンドである、つまり、WriteFM0コマンドに続けてWriteFM1コマンドが来た場合であるので、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ460)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、WriteFMコマンド(この場合、WriteFM1コマンド)の完了をホスト30に報告する(ステップ456)。
【0070】
次に、Writeコマンドを受け取った場合の動作について説明する。
図11は、このときのコントローラ16の動作例を示したフローチャートである。尚、このとき、テープ23上にはDS#Nまでが書かれているものとする。
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteコマンドを受け取り(ステップ461)、その旨の情報をバッファ管理部42及びCM入出力部44に出力する。すると、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ462)。
【0071】
ここで、投機的FMがテープ23上にあると判定した場合は、WriteFM0コマンドに続くコマンドとしてWriteFM1コマンドが来ることを予想して投機的FMをテープ23に書き込んだにも関わらず、続くコマンドとしてWriteコマンドが来た場合である。この場合、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ463)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
【0072】
また、CM入出力部44は、投機的FM存在情報がカートリッジメモリ24に保存されていた旨をバッファ管理部42に通知する。すると、バッファ管理部42は、テープ23上の投機的FMを無効化して次のデータを書き込むための処理を行う。即ち、バッファ12内のデータの格納位置をDS#N+1に設定し、この新たなDS#N+1によりテープ23上の投機的FMを含むDS#Nが論理的に上書きされるように管理する(ステップ464)。例えば、DS#N+1に付随する情報テーブル(DSIT)の中に、DS#Nは無効であることを示す情報を持たせておき、DS#N+1がDS#Nの代わりになることを示しておけばよい。
【0073】
そして、バッファ管理部42は、Writeコマンドと共にホスト30から送られたデータをコマンド処理部41から受け取り、バッファ12内の格納位置として設定されたデータセットに格納する(ステップ465)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、Writeコマンドの完了をホスト30に報告する(ステップ466)。
そして、その後の同期コマンドにより、投機的FMは、データにより論理的に上書きされる。これは、WriteFM1コマンドを実行し、それを次のデータで論理的に上書きした場合と同じと考えることができる。
【0074】
一方、ステップ462で投機的FMがテープ23上にないと判定した場合は、WriteFM0コマンドに続いて来たWriteコマンドではなく、通常のWriteコマンドである。この場合、CM入出力部44は、その旨をバッファ管理部42に通知する。すると、バッファ管理部42は、Writeコマンドと共にホスト30から送られたデータをコマンド処理部41から受け取り、バッファ12内の現在のデータに続けて格納する(ステップ465)。
その後、これらの処理の結果は、コマンド処理部41に返され、コマンド処理部41は、Writeコマンドの完了をホスト30に報告する(ステップ466)。
【0075】
次いで、WriteFMコマンド、Writeコマンド以外のコマンドを受け取った場合の動作について説明する。尚、この動作においては、カートリッジメモリ24を読める場合と読めない場合について考慮する。仮に、カートリッジメモリ24が物理的に壊れていたとしても、テープ23上に書かれたデータは正しく読み出されることが求められるからである。
【0076】
図12は、このときのコントローラ16の動作例を示したフローチャートである。尚、ここでは、DS#Nがテープ23の最後に書かれたデータセットであるとする。
コントローラ16では、まず、コマンド処理部41が、ホストI/F11からWriteFMコマンド、Writeコマンド以外のコマンドを受け取る(ステップ471)。尚、このようなコマンドとしては、Readコマンド、Locateコマンド、Spaceコマンド、Rewindコマンド、Unloadコマンド等がある。
【0077】
そして、コマンド処理部41は、コマンドを受け取った旨の情報をバッファ管理部42に出力し、バッファ管理部42は、まだ書かれていないデータがバッファ12内にあるかどうかを判定する(ステップ472)。
ここで、まだ書かれていないデータがバッファ12内にあると判定した場合、バッファ12内の全てのデータをテープ23に書き込んで(ステップ479)、ステップ477へ進む。一方、まだ書かれていないデータがバッファ12内にないと判定した場合、その旨の情報をCM入出力部44に出力する。すると、CM入出力部44が、カートリッジメモリ24にアクセス可能かどうかを調べることを指示する情報をCMI/F19に出力する(ステップ473)。
【0078】
その結果、カートリッジメモリ24にアクセス可能でないと判定すると、ステップ477へ進むが、カートリッジメモリ24にアクセス可能であると判定すると、CM入出力部44は、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する(ステップ474)。ここで、投機的FMがテープ23上にない場合は、ステップ477へ進むが、投機的FMがテープ23上にある場合、CM入出力部44は、カートリッジメモリ24に記憶された投機的FM存在情報を消去することを指示する情報をCMI/F19に出力する(ステップ475)。これにより、カートリッジメモリ24内の投機的FM存在情報は消去される。
【0079】
また、CM入出力部44は、投機的FM存在情報がカートリッジメモリ24に保存されていた旨をバッファ管理部42に通知する。一連の書込み処理が終わった時点で投機的FMはテープ23上に存在してはいけないので、この通知により、バッファ管理部42は、テープ23上の投機的FMを無効化してEODを書き込むための処理を行う。即ち、バッファ12内のデータの格納位置をDS#N+1に設定し、この新たなDS#N+1によりテープ23上の投機的FMを含むDS#Nが論理的に上書きされるように管理すると共に、次のデータセットにEODを格納する(ステップ476)。尚、この場合の論理的に上書きされるような管理の方法としては、ステップ464に関して説明したのと同様の方法を用いることができる。
その後、コマンド処理部41が受け取ったコマンドに応じて、後述するコマンド処理が行われる(ステップ477)。そして、コマンド処理が終了すると、コマンド処理部41は、コマンドの完了をホスト30に報告する(ステップ478)。
【0080】
次いで、図12のステップ477におけるコマンド処理の動作について説明する。
図13は、コマンド処理を行うときのコントローラ16の動作例を示したフローチャートである。
コントローラ16では、まず、コマンド処理部41が、処理の対象となるコマンドがターゲットの指定を有するものであるかどうかを判定する(ステップ481)。尚、ここで、ターゲットとは、Readコマンドで指定される読出し対象のレコード又はFM、LocateコマンドやSpaceコマンドで指定される位置合わせ対象のレコード又はFMである。
【0081】
その結果、ターゲット指定を有するコマンドでない場合、例えば、Unloadコマンド等の場合は、そのコマンドに応じた処理が行われ(ステップ490)、図12のフローチャートに戻る。
一方、ターゲット指定を有するコマンドである場合、例えば、Readコマンド、Locateコマンド、Spaceコマンド等の場合、コマンド処理部41は、コマンド及びターゲットをチャネル入出力部43に出力し、チャネル入出力部43が、ターゲットを含むデータセット及びその次のデータセットを読んで、読めたかどうかをコマンド処理部41に返す。そして、この結果に基づいて、コマンド処理部41は、ターゲットを含むデータセットの次のデータセットが読めたかどうかを判定する(ステップ482)。尚、図では、ターゲットを含むデータセットをDS#Nとしている。
【0082】
ここで、次のデータセットが読めたと判定した場合、Readコマンドに対しては、チャネル入出力部43が取得したレコード又はFMをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコード又はFMへの位置合わせをバッファ管理部42が行う(ステップ486)。
一方、次のデータセットが読めなかったと判定した場合、ターゲットを含むデータセットがテープ23上の最後のデータセットであるかどうかを判定する(ステップ483)。
【0083】
ここで、最後のデータセットでないと判定した場合、Readコマンドに対しては、チャネル入出力部43が取得したレコード又はFMをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコード又はFMへの位置合わせをバッファ管理部42が行う(ステップ486)。
【0084】
一方、最後のデータセットであると判定した場合、コマンド処理部41は、その旨の情報をCM入出力部44に出力する。すると、CM入出力部44が、カートリッジメモリ24にアクセス可能かどうかを調べることを指示する情報をCMI/F19に出力する(ステップ484)。
【0085】
まず、このステップ484でカートリッジメモリ24にアクセス可能であると判定された場合について述べる。この場合、コマンド処理部41は、ターゲットが投機的FMであるかどうかを判定する(ステップ485)。尚、ここでの判定は、具体的には、次のように行うことが可能である。即ち、まず、コマンド処理部41が、ターゲットがデータセット内の最後のブロック(レコード又はFM)であるかどうかを判定する。そして、CM入出力部44が、CMI/F19を用いて、投機的FM存在情報がカートリッジメモリ24に保存されているかどうかを確認することにより、投機的FMがテープ23上にあるかどうかを判定する。その結果、ターゲットがデータセット内の最後のブロックであり、かつ、投機的FMがテープ23上にあれば、この投機的FMがターゲットとして指定されたことになる。
【0086】
電源障害等により投機的FMを書き込んだ後に正常に書き込み処理が終了できなかった場合を除けば、この時点で、投機的FM存在情報がカートリッジメモリ24に残っていることはない。従って、論理的上書きの規則に従って、DS#N、DS#N+1を扱えば、整合性の取れたデータをホスト30に転送することが可能である。即ち、ターゲットが投機的FMでないと判定した場合、Readコマンドに対しては、チャネル入出力部43が取得したレコード又はFMをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコード又はFMへの位置合わせをバッファ管理部42が行う(ステップ486)。
【0087】
一方、例えば、WriteFM0コマンドにより投機的FMがテープ23上に書き込まれた状態で、ドライブの電源障害等により以後の処理が行われなかった場合は、投機的FM存在情報がカートリッジメモリ24に残っていると考えられる。その場合には、テープ23上の最後に書き込まれた投機的FMはなかったものとして扱う。即ち、ターゲットが投機的FMであると判定した場合、コマンド処理部41は、読出しエラーを報告する準備を行う(ステップ489)。尚、この読出しエラーは、図12のステップ478でホスト30に報告されることになる。
【0088】
次に、ステップ484でカートリッジメモリ24にアクセス可能でないと判定された場合について述べる。このように、カートリッジメモリ24が無効な場合としては、カートリッジメモリ24が物理的に利用できないような場合がある。このような場合でも、テープ23上のデータは可能な限り、正しい内容でホスト30に転送することが要求される。
ここでは、次のデータセットを読めない場合、つまり、ターゲットを含むデータセットがテープ23上の最後のデータセットである場合を考えている。この場合、最後にテープ23上から読めたFMは、情報が不確かである(投機的FMであるかもしれない)ため、ホスト30に転送しない。即ち、まず、コマンド処理部41は、ターゲットがFMであるかどうかを判定する(ステップ488)。そして、ターゲットがFMであると判定されれば、読出しエラーを報告する準備を行う(ステップ489)。尚、この読出しエラーは、図12のステップ478でホスト30に報告されることになる。また、ターゲットがFMでないと判定されれば、Readコマンドに対しては、チャネル入出力部43が取得したレコードをコマンド処理部41がホスト30に転送する。また、LocateコマンドやSpaceコマンドに対しては、指定されたレコードへの位置合わせをバッファ管理部42が行う(ステップ486)。
【0089】
尚、次のデータセットが読める場合、つまり、ターゲットを含むデータセットがテープ23上の最後のデータセットでない場合は、論理上書きの規則に従って、DS#N、DS#N+1を扱えば、整合性の取れたデータをホスト30に転送することが可能である。この場合は、カートリッジメモリ24に投機的FM存在情報が存在することはない。なぜなら、次のデータセットの書込みが正常に終了していれば、投機的FMは、有効なFMであるか、続くデータで物理的に上書きされているかのどちらかのケースしかありえないからである。このような場合は、ステップ483の判断が「No」である場合に該当する。
【0090】
以上により、本実施の形態についての説明を終了する。
尚、本実施の形態では、上述したように、投機的FMを書き込んだ後、次の処理が行われる前に電源が遮断されてしまった場合に、テープ23の最後に残ったFMが投機的FMか通常のFMかを見分けるため、投機的FM存在情報をテープカートリッジ20内のカートリッジメモリ24に保存した。しかしながら、このような電源が遮断されるようなケースを想定しなければ、カートリッジメモリ24以外の記録媒体に保存するようにしてもよい。
【0091】
このように、本実施の形態では、WriteFM0コマンドに応じて、バッファ12内のデータに加えて投機的FMをテープ23に書き込み、かつ、投機的FM存在情報をカートリッジメモリ24に記録しておき、次にWriteFM1コマンドが来れば、投機的FM存在情報をカートリッジメモリ24から消去して、投機的FMを有効なFMとして扱えるようにした。これにより、WriteFM0コマンドとWriteFM1コマンドが連続して送られる場合に、2度のバックヒッチが1度のバックヒッチで済み、かつ、カートリッジメモリ24へのアクセス(数ミリ秒)だけで処理できるので、パフォーマンスが著しく向上する。
尚、本実施の形態では、WriteFM0コマンドとWriteFM1コマンドが連続して送られる場合について述べたが、これはあくまで一実施例であり、WriteFM1コマンドとWriteFM1コマンドが連続して送られる場合についても本発明は適用可能である。
【0092】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
【0093】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【図面の簡単な説明】
【0094】
【図1】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図2】本発明の実施の形態が解決しようとする課題を説明するための図である。
【図3】本発明の実施の形態におけるコントローラの機能構成例を示したブロック図である。
【図4】本発明の実施の形態におけるコントローラの第1の動作例の概要を示した図である。
【図5】本発明の実施の形態におけるコントローラのWriteFMコマンドを受け取った際の第1の動作例を示したフローチャートである。
【図6】本発明の実施の形態におけるコントローラのWriteコマンドを受け取った際の第1の動作例を示したフローチャートである。
【図7】本発明の実施の形態におけるコントローラのWriteFMコマンド、Writeコマンド以外のコマンドを受け取った際の第1の動作例を示したフローチャートである。
【図8】本発明の実施の形態におけるコントローラのWriteFMコマンド、Writeコマンド以外のコマンドを受け取った際の第1の動作例を示したフローチャートである。
【図9】本発明の実施の形態におけるコントローラの第2の動作例の概要を示した図である。
【図10】本発明の実施の形態におけるコントローラのWriteFMコマンドを受け取った際の第2の動作例を示したフローチャートである。
【図11】本発明の実施の形態におけるコントローラのWriteコマンドを受け取った際の第2の動作例を示したフローチャートである。
【図12】本発明の実施の形態におけるコントローラのWriteFMコマンド、Writeコマンド以外のコマンドを受け取った際の第2の動作例を示したフローチャートである。
【図13】本発明の実施の形態におけるコントローラのWriteFMコマンド、Writeコマンド以外のコマンドを受け取った際の第2の動作例を示したフローチャートである。
【符号の説明】
【0095】
10…テープドライブ、11…ホストI/F、12…バッファ、13…チャネル、14…ヘッド、15…モータ、16…コントローラ、17…ヘッド位置制御システム、18…モータドライバ、19…CMI/F

【特許請求の範囲】
【請求項1】
上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置であって、
前記バッファ内のデータを前記テープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報を当該テープ媒体に書き込むことを指示する第2のコマンドとを前記上位装置から受け付ける受付部と、
前記受付部が前記第1のコマンドを受け付けた場合に、前記バッファ内のデータとダミーの区切り情報とを前記テープ媒体に書き込む書込み部と、
前記受付部が前記第1のコマンドの次に前記第2のコマンドを受け付けた場合に、前記ダミーの区切り情報を有効な区切り情報として扱えるようにする処理を行う処理部と
を含む、装置。
【請求項2】
前記書込み部により前記ダミーの区切り情報が前記テープ媒体に書き込まれたことを示す情報を記録媒体に記録する記録部を更に備え、
前記処理部は、前記記録媒体に記録された前記情報を消去することにより、前記ダミーの区切り情報を有効な区切り情報として扱えるようにする、請求項1の装置。
【請求項3】
前記記録媒体は、前記テープ媒体を収納するカートリッジに設けられたメモリである、請求項2の装置。
【請求項4】
前記受付部は、前記第1のコマンド及び前記第2のコマンド以外の第3のコマンドを更に受け付け、
前記処理部は、前記受付部が前記第1のコマンドの次に前記第3のコマンドを受け付けた場合に、前記ダミーの区切り情報を有効な区切り情報として扱えないようにする処理を行う、請求項1の装置。
【請求項5】
前記第3のコマンドは、前記バッファにデータを格納することを指示するコマンドであり、
前記処理部は、前記ダミーの区切り情報を有効な区切り情報として扱えないようにする処理として、当該ダミーの区切り情報に対して前記バッファ内のデータによる上書きがなされるように当該バッファにデータを格納する処理を行う、請求項4の装置。
【請求項6】
前記バッファ内のデータによる上書きは、前記テープ媒体上の前記ダミーの区切り情報と同じ位置に当該バッファ内のデータを書き込むことによる上書きである、請求項5の装置。
【請求項7】
前記バッファ内のデータによる上書きは、前記テープ媒体上の前記ダミーの区切り情報と異なる位置に当該バッファ内のデータを書き込むと共に当該テープ媒体に当該ダミーの区切り情報が無効であることを示す情報を書き込むことによる上書きである、請求項5の装置。
【請求項8】
前記第3のコマンドは、前記バッファにデータを格納することを指示するコマンド以外のコマンドであり、
前記処理部は、前記ダミーの区切り情報を有効な区切り情報として扱えないようにする処理として、当該ダミーの区切り情報に対して終端情報による上書きがなされるように前記バッファに当該終端情報を格納する処理を行う、請求項4の装置。
【請求項9】
前記受付部は、前記テープ媒体に書き込まれた前記区切り情報を読み出すこと、及び、前記テープ媒体に書き込まれた前記区切り情報に当該テープ媒体を位置付けることの何れかを指示する第4のコマンドを更に受け付け、
前記処理部は、前記受付部が前記第4のコマンドを受け付けた場合に、前記区切り情報が前記ダミーの区切り情報でなければ、当該第4のコマンドにより指示された処理を行い、前記区切り情報が前記ダミーの区切り情報であれば、当該第4のコマンドにより指示された処理を行わない、請求項1の装置。
【請求項10】
上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置であって、
前記バッファ内のデータを前記テープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報を当該テープ媒体に書き込むことを指示する第2のコマンドとを前記上位装置から受け付ける受付部と、
前記受付部が前記第1のコマンドを受け付けた場合に、前記バッファ内のデータとダミーの区切り情報とを前記テープ媒体に書き込む書込み部と、
前記書込み部により前記ダミーの区切り情報が前記テープ媒体に書き込まれたことを示す情報を、当該テープ媒体を収納するカートリッジに設けられたメモリに記録する記録部と、
前記受付部が前記第1のコマンドの次に前記第2のコマンドを受け付けた場合に、前記メモリに記録された前記情報を消去することにより、前記ダミーの区切り情報を有効な区切り情報として扱えるようにする処理を行う処理部と
を含む、装置。
【請求項11】
上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む方法であって、
前記バッファ内のデータを前記テープ媒体に強制的に書き込むことを指示する第1のコマンドが前記上位装置から送られた場合に、当該バッファ内のデータとダミーの区切り情報とを当該テープ媒体に書き込むステップと、
区切り情報を前記テープ媒体に書き込むことを指示する第2のコマンドが前記第1のコマンドの次に前記上位装置から送られた場合に、前記ダミーの区切り情報を有効な区切り情報として扱えるようにするステップと
を含む、方法。
【請求項12】
上位装置からのコマンドに応じてバッファ内のデータをテープ媒体に書き込む装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記バッファ内のデータを前記テープ媒体に強制的に書き込むことを指示する第1のコマンドと、区切り情報を当該テープ媒体に書き込むことを指示する第2のコマンドとを前記上位装置から受け付ける手段と、
前記第1のコマンドが受け付けられた場合に、前記バッファ内のデータとダミーの区切り情報とを前記テープ媒体に書き込む手段と、
前記第1のコマンドの次に前記第2のコマンドが受け付けられた場合に、前記ダミーの区切り情報を有効な区切り情報として扱えるようにする手段と
して機能させる、プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2009−271987(P2009−271987A)
【公開日】平成21年11月19日(2009.11.19)
【国際特許分類】
【出願番号】特願2008−120505(P2008−120505)
【出願日】平成20年5月2日(2008.5.2)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】