以下、この発明の一実施形態について図面を参照して説明する。この一実施形態は、書き換え可能な光ディスクとして、相変化型ディスクを用いる。より具体的には、直径が120mm、ディスク厚みが0.6mmの2枚張り合わせディスクが使用される。また、ディスク上には、予めウォブリンググルーブがエンボス(凹凸形状)として形成されている。ウォブリンググルーブは、後述するように、アドレス(位置信号)をFM変調した信号によりウォブリングされ、ウォブリンググルーブの再生信号からスピンドルサーボ用の信号、並びにディスク上の絶対アドレスを抽出できる。
また、ディスクは、CAV(角速度一定)で回転され、これに応じてグルーブに含まれるアドレスがCAVデータとなる。データは、グルーブ内に記録するグルーブ方式が採用される。また、データは、ディスク上で線密度一定(CLD;Constant Linear Density)で記録される。線密度は、0.35μm/ビットとされる。但し、線密度範囲としては、ある幅が設定され、多数のゾーンにディスク上のリライタブルエリアが分割され、各ゾーン内で線密度が規定される。このようなディスクは、DVD+RWと称される。しかしながら、この発明は、かかるDVD+RWに限定されず、グルーブおよびランドに記録する方式のディスク、光磁気記録(MO)ディスク等の光ディスクに対しても適用できる。
図1を参照して、DVD+RW等の書き換え可能な光ディスクのドライブの概略について説明する。図1において、1が例えば相変化型の光ディスクを示す。光ディスク1は、スピンドルモータ2によって、CAVで回転駆動される。光ディスク1にデータを記録し、また、データを光ディスク1から再生するために、光ピックアップ3が設けられている。
外部のホストプロセッサ10からのデータがインターフェース4を介してドライブに供給される。インターフェース4には、コントローラ5が接続され、コントローラ5には、バッファメモリ6が接続されている。バッファメモリ6は、ライトデータまたはリードデータを保持する。ライトデータがコントローラ5からエンコーダ7に供給される。エンコーダ7では、ライトデータがセクタ構造に変換され、また、16個のセクタからなるECCブロック毎にエラー訂正符号の符号化がなされ、さらに、フレーム同期信号およびリンキングセクションが付加されることで、フレーム構造のデータに変換される。
フレーム構造のデータが記録系8に供給される。記録系8では、ディジタル変調等の処理がされる。記録系8からの記録データがレーザドライブ9に供給される。レーザドライブ9では、光ディスク1に対して記録データを記録するための所定のレベル関係を有するドライブ波形が生成される。レーザドライブ9の出力が光ピックアップ3に対して供給され、データが記録される。
光ディスク1上のデータを光ピックアップ3が再生し、フォトディテクタにより検出された信号が増幅回路11に供給される。増幅回路11の出力信号が再生系12およびサーボシステム14に供給される。増幅回路11では、フォトディテクタの検出信号を演算して、RF信号、トラッキングエラー信号、フォーカスエラー信号が生成される。RF信号が再生系12に供給され、トラッキングエラー信号、フォーカスエラー信号がサーボシステム14に供給される。
再生系12では、ディジタル復調の処理等の処理を行う。また、ウォブリンググルーブの再生信号を処理してアドレスを復調する。分離されたフレーム同期信号およびアドレスがサーボシステム14に供給される。サーボシステム14は、光ピックアップ3に対するトラッキングサーボおよびフォーカスサーボを行い、また、スピンドルサーボを行い、さらに、光ピックアップ3のディスク径方向の移動を制御するスレッドサーボを行う。
再生系12からの再生データがデコーダ13に供給される。デコーダ13では、エラー訂正符号の復号(すなわち、エラー訂正)、セクタ構造へ再生データを分解する処理等がなされる。デコーダ13の再生データがコントローラ5に供給され、バッファメモリ6に格納される。ホストプロセッサ10からのリードコマンドが受け付けられると、リードデータがインターフェース4を介してホストプロセッサ10に対して転送される。
ドライブ全体の動作を制御するために、CPU21が設けられてる。CPU21に対してバス22を介してRAM23およびプログラム格納用のROM24が接続される。また、バス22には、再生系12からの再生アドレスが供給される。さらに、コントローラ5がバス22に接続されている。
書き換え可能な光ディスク1の一例について説明する。図2にディスクの内周側(リードイン)から外周側(リードアウト)までのエリア構造を示す。この構造図の左側には半径位置を、右側には絶対アドレスの値を16進表記(この表記は、hの付加で表す)で付記している。
最内周側(半径位置22.6mm〜24.0mm)および最外周側(半径位置58.00mm以降)の斜線を付した部分はエンボスピットが記録されたエリアとされる。このエンボスエリア(ROMエリアとも呼ばれる)には、オール「00h」のデータ以外には、絶対アドレス「2F000h」の位置からリファレンスコードが2ECCブロック分記録され、また絶対アドレス「2F200h」の位置からコントロールデータが186ブロック記録される。ECCブロックとは、エラー訂正ブロックを構成する単位であり、32Kバイト(=2Kバイト×16)のデータ毎にエラー訂正符号のパリティが付加されて形成される。
コントロールデータおよびリファレンスコードは、原盤製造のためのカッティングの際に記録され、読出し専用のピットデータとなる。コントロールデータには、光ディスクの物理的な管理情報などが記録される。
半径位置24.0mmから58.0mmまでの領域、つまりエンボスエリア以外の領域は、グルーブによるトラックが形成されたリライタブルエリア(グルーブエリア)となる。このうちユーザーがデータ記録に用いることができるユーザエリアは、半径位置24.19mm〜57.9mmの領域であり、絶対アドレスでいえば31000h〜1A0EBFhまでとなる。
このユーザエリアの内周側およびその外周側のリライタブルエリアには、ガードゾーン、ディスクテストゾーン、ドライブテストゾーン、DMA(ディフェクトマネージメントエリア)が設けられる。ガードゾーンは、ディスクテストゾーンやDMAに対する書込を行う際にライトクロックの同期をとるためのエリアとして設けられている。ディスクテストゾーンは、ディスクコンディションのチェックのために設けられている。ドライブテストゾーンは記録再生ドライブ状況のチェックに用いられる。
DMAとして、ディスク内周側にはDMA1, DMA2が、またディスク外周側にはDMA3, DMA4が設けられる。DMA1〜DMA4はそれぞれ同一の内容が記録される。このDMAにはレコーダブルエリア上の欠陥状況の検出結果およびその交代セクタの情報が記録される。記録再生動作がDMAの内容を参照して行われることで、欠陥領域を回避した記録再生を行うことができる。リライタブルエリアの内のユーザエリアを除いた内周側のエリアと、最内周側のエンボスエリアとにより、管理用エリアとしてのリードインエリアが構成される。
光ディスク1において、エンボスエリア以外のグルーブエリアでは、ウォブリンググルーブによりトラックが予め形成されており、また、そのウォブリンググルーブが絶対アドレスを表現している。従って、記録再生装置は、グルーブの再生信号から絶対アドレス等の情報を得ることができる。
図3は、光ディスク1のグルーブ構造例を示している。図3Aに示すように、光ディスク1のグルーブエリアには、プリグルーブ1aがスパイラル状に内周から外周に向かって予め形成されている。もちろん、このプリグルーブ1aは、同心円状に形成することも可能である。
また、このプリグルーブ1aは、図3Bにその一部を拡大して示すように、その左右の側壁が、アドレス情報に対応してウォブリングされる。つまり、アドレスに基づいて生成されたウォブリング信号に対応する所定の周期でウォブリングしている。グルーブ1aとその隣のグルーブ1aの間はランド1bとされ、データがグルーブ1aに記録される。従って、トラックピッチは、グルーブ1aの中心とその隣のグルーブ1aの中心までの距離となり、トラックピッチが例えば0.8μmとされる。そしてグルーブ幅(グルーブ1aの底面部の幅)は、例えば0.48μmとされ、グルーブ1aの幅がランド1bの幅よりも広くされる。
グルーブ1aのウォブリング量は、ウォブル振幅WWの値として規定される。例えばこのウォブル振幅WWは12.5nmとされている。なおグルーブ上では或る周期の間隔で瞬間的にウォブル量が大きくされ、それがファインクロックマークとされる。この部分では、ウォブル振幅が例えば25〜30nm程度となる。
1つのトラック(1周のトラック)は、複数のウォブリングアドレスフレームを有している。ウォブリングアドレスフレームは、ディスクの回転方向に8分割され、それぞれがサーボセグメント(segment0〜segment7)とされている。1つのサーボセグメント(以下単にセグメントという)には、絶対アドレスを主とする48ビットの情報が含まれ、1セグメントあたりのウォブリングは360波とされている。
また、ファインクロックマークがウォブリンググルーブ上に等間隔で形成される。このクロックマークは、データの記録時の基準クロックをPLL回路で生成するために用いられる。ファインクロックマークは、ディスク1回転あたり96個形成されており、従って、1セグメントあたり12個のファインクロックマークが形成される。
各セグメント(segment0〜segment7)としての各ウォブリングアドレスフレームは、図4に示す構成を有する。48ビットのウォブリングアドレスフレームにおいて、最初の4ビットは、ウォブリングアドレスフレームのスタートを示す同期信号(Sync)とされる。この4ビットの同期パターンは、8チャンネルビットで4ビットデータを形成するバイフェーズデータとされている。次の4ビットは、複数の記録層のうちいずれの層であるか、もしくはディスクがどのような層構造であるかを表すレイヤー情報(Layer)とされている。
次の20ビットはディスク上の絶対アドレスとしてのトラックアドレス(トラックナンバー)とされる。さらに次の4ビットはセグメントナンバーを表す。セグメントナンバーの値はsegment0〜segment7に対応する「0」〜「7」の値であり、つまりこのセグメントナンバーはディスクの円周位置を表す値となる。次の2ビットはリザーブとされ、ウォブリングアドレスフレームの最後の14ビットとしてエラー検出符号(CRC)のコードが付加される。また、上述したように、ウォブリングアドレスフレームにはファインクロックマークが等間隔で形成される。
データのリード/ライトは、ECCブロック単位でなされる。1セクタは、例えば2Kバイトとされ、1ブロックが32Kバイトのサイズとされる。図5は、1セクタの構造を示す。1セクタはその先頭から順にデータID(4バイト)、IED(2バイト)、リザーブエリア(6バイト)、ユーザデータ(2048バイト=2Kバイト)、EDC(4バイト)が配置された、合計2064バイトのサイズを有している。
データIDには、ウォブリンググルーブによるアドレスと対応するアドレス、すなわち、トラックナンバーおよびセクタナンバーが含まれる。IEDは、データIDに対するエラー検出用のパリティ(例えばCRC)である。EDCは、光ディスク1から再生され、エラー訂正等の処理が終了した後に、最終的にユーザデータにエラーがあるかどうかをチェックするためのエラー検出用のパリティ(例えばCRC)である。
図5に示す構成のセクタが16セクタ集められて、図6に示すECCブロックが構成される。1セクタが2064バイトであり、これは、(172バイト×12)のデータサイズである。従って、図6に示すように、それぞれが172バイト×12に並び変えられたセクタを縦に16個並べることによって、(172バイト×192(=12×16))のデータ配列が形成される。そして、この192×172バイトのユーザデータに対して、積符号の符号化がなされる。すなわち、各行の172バイトのデータに対して内符号(例えばリードソロモン符号)の符号化がされ、10バイトの内符号のパリティ(PI)が生成され、また、各列の192バイトのデータに対して外符号(例えばリードソロモン符号)の符号化がされ、16バイトの外符号のパリティ(PO)が生成される。
さらに、182バイト×208(=(172+10)×(192+16))にブロック化されたデータのうち、182バイト×16の外符号のパリティ(PO)は、16個の182バイト×1のデータに区分され、図7に示すように、番号0乃至番号15の16個のセクタデータ(182バイト×12のサイズ)のそれぞれの下に1個ずつ付加されるように、インタリーブされる。そして、積符号の符号化の後では、外符号のパリティPOを含む13(=12+1)×182バイトのデータが1セクタのデータとして扱われる。
さらに、図7に示す182バイト×208のデータをディスク上に記録する場合では、図8に示すような伝送フレームの構造とされる。すなわち、各行の182バイトが91バイトずつに2等分され、208(row)×2(フレーム)のデータとされる。この208×2フレームの各データの先頭に、13(row)×2(フレーム)のリンキングセクション(リンクエリアのデータ)が付加される。より正確には、26フレーム分のリンキングセクションのデータの一部が前ブロックの最後に記録され、残りが現ブロックの先頭に記録される。
91バイトのフレームデータの先頭には、さらに2バイトのフレーム同期信号(FS)が付加される。その結果、図8に示すように、1フレームのデータは合計93バイトのデータとなり、合計221(row)×93×2バイト、すなわち、442フレームのブロックのデータとなる。これが、1ブロック(記録/再生の単位)分のデータとなる。そのオーバヘッド部分を除いた実データ部の大きさは、32Kバイト(=2048×16/1024Kバイト)となる。
以上のように、この一実施形態の場合では、1ブロックが16セクタにより構成され、1セクタが26フレームにより構成される。また、ブロックとブロックの間には、リンキングセクションが配置される。リンキングセクションは、データを記録または再生する時に、クロック同期をとるためのエリアとして機能する。
この発明は、上述したドライブにより記録された光ディスク(例えばDVD+RW)をROMドライブ(例えばDVD−ROMドライブ)により再生するために必要とされる、ファイナリゼーションの処理に関する。図9は、この発明によるファイナリゼーションの概念を示す。図9において、ウォブリンググルーブが形成されたリライタブルエリア中のユーザエリアには、ブロック単位でデータが記録される。
DVD−ROMドライブがDVD+RWをリードするためにアクセスするとき、コースシーク、ファインシークを何度か繰り返し、目標トラックに到達する。位置情報(各セクタのデータID)を知るために、スピンドルサーボをかけてこのIDを読もうとするとき、若し、未記録状態だとサーボ情報としてのフレーム同期信号を得ることができず、スピンドルサーボが暴走状態になるとともに、IDが存在しないため、位置情報が得られない。従って、シークしたときには、常に必ず、記録済みのエリアに入ることが必要である。ディスク偏心等でシーク時、現在のトラックから期待されるトラックにジャンプしても、期待されるトラックからある程度はずれてしまうので、その範囲は、あらかじめダミーのデータ(ファイナリゼーションデータと称する)で埋めておくことが必要である。ファイナリゼーションデータは、データ自身が意味を持たないもの(例えば全て0のデータ)であるが、セクタ構造、ブロック構造は、上述したユーザデータと同一のものとされている。従って、ファイナリゼーションデータ中には、サーボ情報(フレーム同期信号)および位置情報(ID)が含まれている。
図9の例は、ファイナリゼーションの結果、ユーザエリア中の記録済エリア、リードインエリア中のリライタブルエリア(テストゾーン、DMA等)並びにリードアウトエリア中のリライタブルエリア(DMA)の前後にファイナリゼーションデータが記録されている状態を示す。ファイナリゼーションデータの記録量は、ドライブのシーク性能、ディスクの偏心量等に依存するが、一般的に数百トラックの幅にわたって記録される。
上述したファイナリゼーションを行うためには、どのブロックが記録済みで、どのブロックが未記録かを知る必要がある。リライタブルエリアの全ブロックに対して、1ブロック毎に1ビットを対応させたビットマップテーブルを作り、例えば記録済み(論理値の1)、未記録(論理値の0)と定義する。ライトコマンドを実行する度に、記録したブロックの対応ビットを1(記録済み)に変えることによって、書込み済みのブロックの情報が残せる。このビットマップをWBBM(Written Block Bit Map) と称する。
図1の構成において、コントローラ5からのライトコマンドに対応する情報をCPU21が受け取り、CPU21の制御の下でRAM23内にWBBMが形成される。そして、後述するような所定のタイミングにおいて、CPU21によりWBBMがRAM23から読出され、コントローラ5を経由して、ユーザデータと同様の記録処理を受け、光ディスク1のリードインエリアの所定のエリアに記録される。また、ホストプロセッサ10(またはドライブ)において、ユーザがファイナリゼーションの実行を指示すると、この指示がCPU21に送られ、最新のWBBMに基づいて、記録済のブロックの前後に所定量のファイナリゼーションデータの書込みを実行するように、CPU21がドライブを制御する。
図10に示すように、WBBMは、テストゾーン、DMA等とともに、リードインエリア内に置かれる。記録位置は、リードインエリア中の30000h〜31000hの間であれば、適宜設定できる。好ましくは、WBBMの前後にガードゾーンが配される。原理的には、一つのWBBMで機能するが、信頼性の向上、同一エリアへの書込み回数を低減させるために、複数のWBBM(WBBM−1〜WBBM−N)を設けることは非常に有効である。相変化型のディスク媒体の場合では、ライト回数に限界(約10万回)があり、同一のエリアに対してのみライト動作を行うと、媒体の寿命を短くする問題が生じる。
WBBMの構造の一例の詳細を以下に説明する。上述したように、1ブロックは、16セクタ(32Kバイト)なので、3Gバイト程度の容量を持つDVD+RWには、9〜10万ブロックが存在する。1ブロックに1ビットを対応させると12Kバイト前後のビットマップが必要になる。このビットマップに、管理情報を付加して、一つのWBBMが形成される。WBBMをディスクに対して記録する時には、ユーザデータの場合と同様に、積符号による符号化の処理と、フレーム化の処理がなされる。すなわち、1個のWBBMにより1ECCブロックが構成される。
図11に示すように、1個のWBBMは、ビットマップデータに対して、管理情報として、WBBM識別子、リング番号、更新カウンタ、ゾーン情報が付加される。ビットマップは、バイト単位に配置され、ビットマップの右上コーナがECCブロック番号が1のブロックに関するビットとされる。そして、各バイト内で左側に向かってECCブロック番号が順次増加し、ビットマップの下側に向かってECCブロック番号が順次増加するように、各ビットが配置されている。図11には、最上段からN番目の位置のバイトが拡大して示されている。このバイトには、ECCブロック番号が8Nのビットからこれが8N+7のビットまでが含まれている。0のビットは、そのECCブロックが未記録であることを示し、1のビットは、そのECCブロックが記録済であることを示す。
管理情報は、それぞれ1バイトであり、下記の内容を有する。
WBBM識別子:そのECCブロックがWBBMであることを示す数値、例えば0C0Ch等の値。
リング番号:複数のWBBMの内で何個のWBBMを一組として扱うか、およびそのなかで何番目かを示す。
更新カウンタ:WBBMを更新する毎に、インクリメントされる数値で、一組のWBBM群のなかで、最大の更新カウンタ値を持つものが最新のWBBMと決定される。更新を行なう場合には、最小の更新カウンタ値を持つWBBMを最新のWBBMへ更新する。それによって特定のWBBMへの書込みの集中を防止することができ、ディスク媒体の劣化を防止できる。また、万一、最新のWBBMにおいてデータ破壊が生じても、残りのWBBMの中で、最大の更新カウンタ値を持つWBBMの情報によって、破壊されたWBBMを殆ど補償することができる。
ゾーン情報:実際にファイナリゼーションを行なうときに、全てのビットをチェックするのは効率的でないので、リライタブルエリアの全エリアを複数のゾーンに分け、各ゾーンに属する全てのブロックの書込みが終了すると、そのゾーンについては、全ブロックが記録済みであることを示すフラグをたてる。一度このフラグがたつとそのゾーンはファイナリゼーションの対象外になる。
なお、信頼性向上のために図12に示すように、全く同じ内容のWBBMを複数個書くようにしても良い。この場合では、全てのWBBMが更新の度に書き換えられる。
図13は、複数のWBBM(WBBM−1,WBBM−2,・・・,WBBM−N)によるリング構造を示す。各WBBMの更新カウンタは、例えば0の値に初期化されている。最初に、WBBM−1を更新すると、その更新カウンタの値のみが1とされる。次に、WBBMを更新する時には、WBBM−2が更新され、WBBM−2の更新カウンタの値のみが2とされる。さらに、次にWBBMを更新する時には、WBBM−3が更新され、WBBM−3の更新カウンタの値のみが3とされる。このように、WBBMを更新する時には、更新カウンタの値が最小のWBBMを更新する。若し、更新カウンタの値が同じWBBMが存在する時には、WBBM番号が最小のものを更新する。それによって、更新カウンタの値が最大のものが最新のWBBMと決定することができる。
WBBMは、最新のものでなくても、すなわち、記録済みビットが、若干欠落していても、有効な情報に成りうる。すなわち、WBBMから未記録と判断されたECCブロックに対してファイナリゼーションデータを書込む前に、チェックがなされるので、そのECCブロックに関するビットが誤っていても、ファイナリゼーションデータを書込み、記録済のデータを破壊することがない。そこで、複数のWBBMを持ち、更新時に、上述したように、旧いWBBMから書き換えていけば、直近のWBBMが複数個残る。更新カウンタの値が大きいほど新しいと定義すれば、ドライブがスピンアップ時にWBBMを読むときに、最新のWBBMを決定できる。
リング構造をWBBMが持つことによる有利な点は、下記に示す。
特定のWBBMへの書込み回数を1/(WBBMのリング数)に減らせるので、媒体の劣化を低減できる。
WBBM書込み中にドライブの電源OFF等の異常が生じても、その前のWBBMが残っているので、それを最新WBBMとして使用できる。
また、同一内容のWBBMを複数個生成する方法(多重書き(図12参照))も可能である。この方法は、最も簡単な、停電対策である。この方法の場合、一般には、更新カウンタは全てのWBBMで同じになるはずであるが、若し、異なるものがあれば、更新中に電源OFF等が起きたと推定できる。この場合、更新カウンタの数値が大きいWBBMが最新のものである。さらに、リング構造と多重書きの方法を併用するようにしても良い。
WBBMの他の例について図14を参照して説明する。図14Aに示す例は、上述したWBBMとペアでユーザーデータマップ(ユーザWBBMと称する)を持つようにしたものである。WBBMは、ブロック単位で記録済/未記録を示すもので、記録済のブロックに記録されているデータがユーザデータか、ファイナリゼーションデータかを区別することができない。ユーザWBBMは、ユーザデータの書込みを行ったブロックに対して1のビットをたてるように形成されたものである。従って、ファイナリゼーションデータを書込んだブロックに関してのビットは、0である。
ユーザWBBMを持つことは、一度、ファイナリゼーションを行なったDVD+RWをDVD−ROMドライブで再生した後、再度DVD+RWドライブで書込みをする場合に有利である。この場合、再度DVD+ROMドライブで、使うためには、再度、ファイナリゼーションが必要である。WBBMは、ユーザーデータのビットマップとファイナリゼーションデータのビットマップを合成したもの、すなわち、全ての記録済みブロックを示すものであるので、WBBMからは、ユーザーデータとファイナリゼーションデータの区別できない。結果として、不必要に、ファイナリゼーションデータの周辺に更に、ファイナリゼーションデータを書込むことになる。ユーザーWBBMとWBBMを持つことによって、不要なファイナリゼーションデータの記録を回避することができる。
ユーザーWBBMの持ち方には、図14Aに示すように、ユーザーWBBMとWBBMをペアで持つ方法に限らず、図14BにおいてWBBM'として示すように、ビットマップ上で1ブロックに対応する部分を2ビットとし、未記録ブロック、ユーザーデータの記録ブロック、ファイナリゼーションデータの記録ブロックを区別するようにしても良い。このように、ユーザデータとファイナリゼーションデータとを区別できるビットマップを持つことによって、より効率的なファイナリゼーションが可能である。
DVD+RWのリードインエリアの所定のエリアに対して、最初にWBBMを書くのは、この媒体のフォーマットの時である。ブランク媒体のフォーマット時に、サーティフィケーションを行なわないときでは、ユーザーエリアは全て未記録とし、サーティフィケーションを行なうときでは、全てのユーザーエリアは記録済になる。また、再フォーマットのときは、ユーザエリアに記録済のデータが残るので、既存のWBBMを継続して使用する。
DVD+RWをドライブに挿入した時に、WBBMがドライブのメモリ(図1中のRAM23)に読み込まれる。図15は、媒体挿入時の処理のフローチャートである。図15のステップS1において、媒体がドライブに挿入され、ステップS2において、スピンアップすると、リードインエリア内のDMA、WBBMを再生する。最初のWBBMを読み(ステップS3)、WBBM中の管理情報であるリング番号を調べる(ステップS4)。WBBMがリング構造の場合では、複数のWBBMがあるので、全てのWBBMを読出し、全てのWBBM内の更新カウンタを読む(ステップS5)。そして、全てのWBBMの更新カウンタの値を比較して、最大の更新カウンタの値を持つものを、メモリ上に残す(ステップS6)。サーティフィケーション済み、もしくは、既に全面にわたって書込み済みになっていたら、WBBMをメモリ上に残したり、WBBMを更新する必要がない。この判断は、ドライブのCPUが行い、判断結果と対応してフラグが制御される。
次に、ライトコマンドを実行する時にメモリ上のWBBMを書き換える処理を図16のフローチャートを参照して説明する。ここでは、簡単のため、ユーザWBBMがない場合の処理を説明する。この処理は、スピンアップ時に、WBBMの管理が必要と判断された媒体に関してなされる。ライトコマンドが受け付けられ(ステップS11)、ステップS12でライトコマンドの実行が終了したとき(記録が1ブロック全体に行なわれたと判断されるとき)、書込んだブロックに対応する、WBBMのビットを見る(ステップS13)。このビットが0であるかが決定される(ステップS14)。
ビットが1の場合は、そのブロックが記録済を意味するので、そのビットを更新することが不要であるため、処理が終了する。若し、そのブロックに対応するビットが0(すなわち、未記録)の場合は、メモリ上のWBBMのブロックに対応するビットを1にセットする(ステップS15)。そして、メモリ上でWBBMが更新されたことを示すフラグ(WBBM更新要求フラグと称する)をたてる(すなわち、このフラグを1とする)。所定のタイミング(媒体のイジェクト時、フラッシュキャッシュ時、若しくは、バックグラウンド時)で、時々、媒体上のWBBMを更新し、更新の終了後にWBBM更新要求フラグをクリアする。フラッシュキャシュは、ライトコマンドが来た時に、データを一旦ライトキャッシュにため、複数のライトコマンドをまとめて実行する処理である。バックグラウンドは、ドライブのCPUが比較的忙しくない状態である。
図17は、所定のタイミングで実行される、WBBMを更新する処理を示すフローチャートである。ここでは、WBBMがリング構造を有している。WBBM更新要求フラグが1のとき、WBBMの更新がなされる(ステップS21)。まず、メモリ上のWBBMの更新カウンタの値を+1する(ステップS22)。
そして、ステップS23において、前に読出したWBBMの次の媒体上のWBBMをメモリ上のWBBMによって更新する。この処理は、媒体上の複数のWBBMのうち、最小の更新カウンタの値のWBBMに対応するリング番号をセットし、最小の更新カウンタの値を持つWBBMをメモリ上の最新WBBMで置き替えるものである。更新処理が終了したので、ステップS24において、WBBM更新要求フラグをクリアする。
書込みを行ったDVD+RWの媒体をDVD−ROMのドライブで再生可能とする時では、ユーザがファイナリゼーションの実行を指示する。ドライブがこのファイナリゼーションコマンドを受け取ったときの処理を図18のフローチャートを参照して説明する。ステップS31において、ファイナリゼーションコマンドを受け取ったとき、メモリ上のWBBMによりディスク上のWBBMが更新されるので、メモリ上のWBBMは最新の状態を示している。勿論、媒体から最新のWBBMを読み取るようにしても良い。
次のステップS32では、メモリ上のWBBMを参照して、既に記録済(ビット=1)の部分の前後の一定範囲、例えば300トラック相当ブロック数、の未記録ブロック(ビット=0)を全てリストアップする。リストアップされたブロックをB(0)、B(1)、B(2) B(N−1)とする。ステップS32では、変数Iが初期値(0)とされる。
次のステップS33は、(I=N?)を調べるもので、(I=N)の場合では、全ての未記録ブロックに対してファイナリゼーションデータを記録したことを意味するので、WBBMの更新処理(ステップS34)がなされる。WBBMの更新処理は、図17を参照して上述した通りである。
変数Iが0のブロックB(0)から順にB(N−1)まで、その周辺にファイナリゼーションデータを記録する。この場合、WBBMから決定したファイナリゼーションデータを記録しようとするエリアが本当に未記録がどうかを検査する。WBBM上で未記録(ビット=0)とされている部分であっても、電源オフ等のトラブルのために、実際は、記録済の可能性が皆無ではない。若し、記録済であると、ファイナリゼーションデータを上書きすることにより、記録済のユーザデータが破壊される。これを避けるため、ファイナリゼーションデータを記録しようとするエリアに関して、リード動作を行なってみる(ステップS35)。
そして、ステップS36において、リード動作でデータが読めたか(OK)否か(若しくは記録不要)が決定される。データがリードできたか、記録不要であるならば、そのブロックB(I)が記録済(または記録不要)ブロックであるので、ファイナリゼーションデータが記録されない。データがリードできない時には、その未記録ブロックB(I)に対してファイナリゼーションデータ(ダミーデータ)を記録する(ステップS37)。そして、ステップS38において、Iをインクリメントする。次のステップS39において、記録したブロックに対応するWBBM上のビットを1とする。
上述した未記録のチェックのためのリード、未記録が確認されたブロックに対するファイナリゼーションデータの記録、Iのインクリメント、並びに対応するWBBM上のビットを1にする処理を全てのリストアップされた未記録ブロックに対して行なう。この後、ステップS34において、記録したブロック、若しくは記録済と確認されたブロックに対応するWBBM上のビットを記録済(ビット=1)とし、メモリ上のWBBMを媒体に書込む。
なお、図18に示すフローチャートでは、リストアップされた複数のブロックの1ブロックずつ処理しているが、リストアップされたブロックを全てリードしてみて記録済のチェックをした後、まとめてフィナリゼーションデータを書込むようにしても良い。この処理の方が効率的であり、インプリメンテーションに適している。
WBBMは、上述したように、ファイナリゼーションを効率的に行うのに利用される。さらに、WBBMは、リードモディファイライトの効率化に利用することができる。DVD−RWは、ホストプロセッサからは、2Kバイト(セクタ)単位で、アクセスされる。ドライブのバッファメモリも同様にアクセスされる。一方、ドライブが媒体に対して行うアクセスは、ECCブロックの32Kバイト単位である。例えば、2Kバイトのリードコマンドを受け取ると、ドライブは、そのセクタを含むブロック(32Kバイト)を読出して、ホストより要求されている2Kバイトをホストに送出し、残り30Kバイトは、捨てることになる。
一方、ライトはもっと複雑である。図19に示すように、2Kバイトをライトしようとすると、対応するブロックに、既にデータが記録されている場合、一度そのブロックを読出して、対応するセクタの2Kバイトを、ホストからのライトデータと入れ替えて、32Kバイトを再びもとのブロックにライトする必要がある。これをリードモディファイライトと称する。この場合、2Kバイトをライトするために32Kバイトリード、32Kバイトライトを行なうことになる。一般に、このリードモディファイライトを避けるために、ドライブは、ライトコマンドを受け取ったとき、一旦、バッファメモリ(図1中のバッファメモリ6)にライトデータを蓄え、コマンドを終了したことにする。これを、ライトキャッシュという。
一般に、ホストコンピュータは、連続されたセクタをライトすることが多いため、ライトデータを蓄えていくうちに1ブロック分のデータが揃うことが起きる。この場合、データをまとめて32Kバイトとし、リード動作を伴わず、ライトすることができる。複数ブロックの一括ライトももちろん可能である。しかしながら、2Kバイト単独でライトされる場合も多いし、長いデータも最初と最後の部分でリードモディファイライトが必要である。
さて、リードモディファイライトするときに、そのブロックが未記録の場合がありうる。一般には、そのブロックを読出してみて、読めないとき、信号レベル等の情報をもとに未記録であることを確認する。未記録である場合、ホストからのライトデータ以外の部分は、一般にオール0のデータで埋める。この場合、前もってそこが未記録であることが確認できれば、リードを行なうことなく、ライトを実行できる。単純に言えば、2倍のパフォーマンスになる。このようなリードモディファイライトの効率向上のためにWBBMを利用することができる。
WBBM上で、記録済のブロックに関しては、2Kバイト等の一部のセクタをライトする時には、リードモディファイライトすべきである。一方、WBBM上で、未記録のブロック(ビット=0)の場合、電源オフ等で、記録部分が未記録とされる可能性が皆無ではないが、殆どの場合では未記録である。このことを利用すれば、リードモディファイライトを行なわず、ライトデータ以外はオール0で埋めてライトすることができる。
多くのファイルシステムにおいて、媒体は、LBA(ロジカルブロックアドレス)が小さいほうから使われるのが普通である。従って、それまでに書込みが行なわれた範囲に続くエリアに対してライトが行なわれる可能性が極めて高い。また、サーティフィケーションなしで使われる媒体では、書込みが行なわれた範囲に続くエリアが未記録である可能性が非常に高い。
従って、WBBMにおいて、書込み済エリアに隣接するエリアを前もって、リードしてみて、未記録であることを確認しておけば、そのエリアへのライトコマンドが来たとき、リードモディファイライトを行なわずに、直ちにライトすることができる。ドライブは、ホストからのアクセスがないときに、WBBMをチェックし、記録済エリアに続く部分をリードし、未記録であることを確認する。これは、次のライトコマンドが来そうな比較的狭い範囲でよい。
このエリアへのライトコマンドを受け取ったとき(キャッシュ後も可)、未記録であることが確認されていたならば、リードモディファイライトを行なわず、ライトデータ以外の部分にオール0等をセットしてライトを行なう。勿論、ライト後にWBBMが更新される。それによって、更に続くエリアに対して未記録か否かのチェックが行なわれることになる。
なお、上述したこの発明の実施形態に限らず、種々の変形が可能である。例えばDVD+RW以外の書き換え可能な、若しくはWO(ライトワンス)の記録媒体に対してもこの発明を適用することができる。また、アドレス情報をウォブリンググルーブ以外の形態で記録するディスクに対してもこの発明を適用できる。さらに、サーボ情報は、CAV、CLVの何れのための情報であっても良い。よりさらに、ファイナリゼーションデータは、記録済のブロックの前および後の一方に記録するようにしても良い。
1・・・書き換え可能な光ディスク、1a・・・プリグルーブ、2・・・スピンドルモータ、3・・・光ピックアップ、6・・・バッファメモリ、21・・・CPU、23・・・RAM