(57)【要約】【課題】磁気ディスク装置のセクタ・バッファにおいて断片化したセグメントのデータを効率的にホスト装置に転送する。【解決手段】セクタ・バッファにＬＢＡ２０００ｈからＬＢＡ３１ＦＦｈまでのデータが記憶されているが、ＬＢＡ３０００ｈからＬＢＡ３１ＦＦｈまでのデータは断片化している。ホスト装置からＬＢＡ２０００ｈからＬＢＡ３１ＦＦｈまでのデータに対するリード・コマンドを受け取ったとき、磁気ディスク装置は、断片化したセグメントをつなぎ合わせた転送情報を生成し一度の処理でホスト装置に転送する。この結果、セクタ・バッファにデータが記憶されているにもかかわらず、磁気ディスクからデータを再生して転送したり断片化したセグメント毎にデータを転送したりすることがなくなる。【選択図】図３
2007334463.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性記録媒体とセクタ・バッファを搭載する補助記憶装置からホスト装置にデータを転送する方法であって、
前記ホスト装置から読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取るステップと、
前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索するステップと、
前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックとが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成するステップと、
前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送するステップと
を有する転送方法。
【請求項２】
前記転送情報は、前記リード・コマンドの処理ごとに生成される請求項１記載の転送方法。
【請求項３】
前記転送情報は、前記セクタ・バッファのページ・アドレスとページ数で構成される請求項１記載の転送方法。
【請求項４】
前記複数のデータ・ブロックの全体が前記セクタ・バッファの一つのセグメントに存在する場合は、前記アドレス情報を生成しないで前記セクタ・バッファから前記複数のデータ・ブロックを読み出して前記ホスト装置に転送するステップを有する請求項１記載の転送方法。
【請求項５】
前記複数のデータ・ブロックの一部が前記セクタ・バッファに存在しない場合は、前記先頭ページから連続して前記セクタ・バッファに存在するデータ・ブロックを前記ホスト装置に転送し、続いて、前記不揮発性記録媒体から残りのデータ・ブロックを前記ホスト装置に転送する請求項１記載の転送方法。
【請求項６】
前記先頭データ・ブロックが前記セクタ・バッファに存在しない場合は、前記データ・ブロック全体を前記不揮発性記録媒体から読みとるステップを有する請求項１記載の転送方法。
【請求項７】
補助記憶装置であって、
不揮発性記録媒体と、
ホスト装置とのデータ転送を制御するインターフェース回路と、
書き込みにかかるデータ・ブロックと読み取りにかかるデータ・ブロックを記憶するセクタ・バッファと、
前記ホスト装置と前記インターフェース回路との間で行われるデータ転送を制御する制御部とを有し、
前記制御部は、前記ホスト装置から、読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取り、前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索し、前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成し、前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送する補助記憶装置。
【請求項８】
前記セクタ・バッファがリード・バッファとライト・バッファで構成され、前記リード・バッファおよび前記ライト・バッファがリング・バッファである請求項７記載の補助記憶装置。
【請求項９】
前記読み取りにかかるデータ・ブロックが前記ライト・バッファに存在するセグメントと前記リード・バッファに存在するセグメントに含まれる請求項８記載の補助記憶装置。
【請求項１０】
前記読み取りにかかるデータ・ブロックが前記リード・バッファに存在する異なるセグメントに含まれる請求項８記載の補助記憶装置。
【請求項１１】
前記制御部は、前記転送情報を前記セクタ・バッファのページ・アドレスを管理するバッファ管理テーブルのアドレス情報に基づいて生成する請求項７記載の補助記憶装置。
【請求項１２】
前記補助記憶装置が磁気ディスク装置である請求項７記載の補助記憶装置。
【請求項１３】
磁気ディスク装置であって、
磁気ディスクと、
ホスト装置とのデータ転送を制御するインターフェース回路と、
書き込にかかるデータ・ブロックと読み取りにかかるデータ・ブロックを記憶するセクタ・バッファと、
前記磁気ディスク装置を制御するプロセッサと、
前記プロセッサに、前記ホスト装置から読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取るステップと、前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索するステップと、前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成するステップと、前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送するステップとを実行させるファームウエアと
を有する磁気ディスク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はセクタ・バッファを搭載した補助記憶装置からホスト装置に対して行うデータの転送技術に関し、さらにはセクタ・バッファ上で断片化したデータをホスト装置に効率的に転送する技術に関する。
【背景技術】
【０００２】
コンピュータ・システムでは、ＣＰＵが実行するプログラムを記憶したり作業領域を提供したりする主記憶装置の他にデータをほぼ恒久的に記録する補助記憶装置を採用している。補助記憶装置は、一般的に、主記憶装置に比べて記憶容量が大きいため大容量記憶装置といわれたりする。また、ＣＰＵに付属する主記憶装置以外の外部の記憶装置という意味から外部記憶装置といわれたりすることもある。補助記憶装置の例として、磁気ディスク装置、フロッピィ・ディスク装置（フロッピィ・ディスクは商標）、光磁気ディスク装置、ＣＤ−ＲＷドライブ、ＤＶＤ−ＲＷドライブなどがある。
【０００３】
これらの補助記憶装置は、ＳＣＳＩやＩＤＥといったインターフェース回路を通じてホスト装置としてのコンピュータ・システムに接続され、ホスト装置から送られたデータを記録したり、記録していたデータをホスト装置に送ったりしている。これらの補助記憶装置では、ホスト装置とのデータの通信時間と内部における読み取りまたは書き込み処理の時間との差を吸収したり通信時間を短縮したりするためにセクタ・バッファを設けている。
【０００４】
代表的な補助記憶装置の１つである磁気ディスク装置では、セクタ・バッファとしてＳＲＡＭまたはＤＲＡＭといった半導体メモリが使用されている。セクタ・バッファにはリード・バッファとライト・バッファで構成されているものがある。図６に示すセクタ・バッファ１では、ホスト装置から要求された読み取りデータを一時的に記憶しておくリード・バッファとホスト装置から転送された書き込みデータを一時的に記憶しておくライト・バッファで構成されている。
【０００５】
いま、リード・バッファにｎからｍまでの連続する論理ブロック・アドレスのデータが記憶されているものとする。ここで、論理ブロック・アドレスとは、磁気ディスクにアクセスできる最小単位となるデータ・セクタのアドレスをいう。つぎに、ホスト装置からｎからｍまでの論理ブロック・アドレスに対するリード・コマンドを受け取ったときは、プロセッサは磁気ディスクからデータを再生しないでリード・バッファに記憶してあったデータ・ブロックを読み出して転送することで高速な読み取り動作を実現する。リード・バッファにｎからｍまでの連続する論理ブロック・アドレスのデータ・ブロックが記憶されている状態で、ホスト装置からｎからｍまでの間にあるｎ＋ｘ１からｎ＋ｘ２までの連続する論理ブロック・アドレスに対するライト・コマンドを受け取ったときは、プロセッサはホスト装置から書き込みデータを受け取ってライト・バッファに記憶した時点でホスト装置に転送処理完了の状態を返送し、ホスト装置を書き込み動作から解放して高速な書き込み動作を実現する。
【０００６】
このとき、リード・バッファに記憶されていたｎ＋ｘ１からｎ＋ｘ２までのデータは、ライト・バッファに記憶されたｎ＋ｘ１からｎ＋ｘ２までのデータで更新されているので、リード・バッファの論理ブロック・アドレスｎ＋ｘ１からｎ＋ｘ２は無効にされる。この状態でホスト装置からｎからｍまでの論理ブロック・アドレスに対するリード・コマンドを受け取ったときは、プロセッサは、ｎからｎ＋ｘ１−１までのデータをリード・バッファから読み出してホスト装置に転送し、つづいて、磁気ディスクからｎ＋ｘ１からｍまでのデータを再生してホスト装置に転送する。あるいは、ｎからｎ＋ｘ１−１までのデータを転送したあとに、さらにリード・バッファあるいはライト・バッファにそれ以降のデータが存在するか否かを検索して転送する。いずれの方法でも余分な転送時間を費やしてしまう。
【０００７】
特許文献１には、メモリの断片化に伴う不都合を解消するために、断片化の有無、空きメモリ先頭アドレスおよび領域サイズなどの断片化情報を検出して、空き領域の結合作業を行う技術を開示している。この技術では断片化の対策がメモリ上でのデータの移動によって実現されている。特許文献２は、ディスクのデータに断片化が発生したときに、バッファに蓄積したデータが空にならないように、ディスク上で再配置してから読み出す技術を開示している。特許文献３は、ＨＤＤのバッファ・セグメントをセグメント・テーブルの設定で動的に変更し、バッファの断片化を防ぐ技術を開示している。
【特許文献１】特開２００３−３３１２３９号公報
【特許文献２】特開２０００−２１０８６号公報
【特許文献３】特開平１１−１２０６９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
連続する論理ブロック・アドレスのデータがセクタ・バッファの論理的なアドレスの順番に並ばないでデータが記憶されている状態を本明細書においては断片化ということにする。ライト・バッファにｎ＋ｘ１からｎ＋ｘ２までのデータが書き込まれたあとにライト・バッファに記憶されている更新されたデータでリード・バッファの対応するデータを上書きして断片化を防止する方法も考えられる。しかし、セクタ・バッファの中でデータを移動させるには所定の時間を必要とし、また制御も複雑になるという短所がある。また、ｎからｎ＋ｘ１までのデータを転送したあとに、さらに、それ以降のデータがバッファに記憶されていないかどうかを検索して、セクタ・バッファにデータが存在していればセクタ・バッファから残りのデータを転送することも考えられる。しかし、この方法でもデータ転送を複数回繰り返すことになるので、十分に高速化が図られているとは言い難い。
【０００９】
そこで本発明の目的は、補助記憶装置においてセクタ・バッファに断片化して記憶されたデータをホスト装置に高速に転送する転送方法を提供することにある。さらに本発明の目的は、そのような高速転送を実現する補助記憶装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の原理は、セクタ・バッファにおいて断片化したセグメントに記憶されたデータ・ブロックに対するアドレスを指定したホスト装置からのリード・コマンドに対して、一度の処理でデータ転送するために、断片化したセグメントをデータ転送前に連続させるための転送情報を生成して論理的に並び替える点にある。断片化したセグメントに記憶されたデータ・ブロックのアドレスに対するリード・コマンドがホスト装置から送られてくると、補助記憶装置は転送情報に基づいて転送することにより、一度の処理でデータ転送を完了することができる。
【００１１】
本発明の態様では、ホスト装置から、読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取る。そして複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索する。つづいて、先頭データ・ブロックと複数のデータ・ブロックのいずれかがセクタ・バッファの異なるセグメントに存在する場合に、複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成する。転送情報は、転送の都度バッファ管理テーブルのアドレス情報に基づいてプロセッサが生成する。転送情報は、１つのリード・コマンドに対して生成されるセクタ・バッファのページ・アドレスとページ数で構成されるテーブルである。最後に、転送情報に基づいてアドレスが指定されたデータ・ブロックをセクタ・バッファから読み出してホスト装置に転送する。
【発明の効果】
【００１２】
本発明により、補助記憶装置においてセクタ・バッファに断片化して記憶されたデータをホスト装置に高速に転送する方法を提供することができた。さらに本発明により、そのような高速転送を実現する補助記憶装置を提供することができた。
【発明を実施するための最良の形態】
【００１３】
［装置の構成］
図１は、本発明の実施の形態にかかる磁気ディスク装置１０の概略を示すブロック図である。磁気ディスク装置１０は、コンピュータや音楽記録再生装置などのホスト装置１１に接続され、ホスト装置１１から受け取ったデータを磁気ディスク２５に記録したり、磁気ディスク２５に記録したデータをホスト装置１１に転送したりする。ホスト・インターフェース回路１３は、ホスト装置１１と磁気ディスク装置１０とのデータ通信を制御するＡＴＡ規格の回路である。ホスト装置１１と磁気ディスク装置１０との間では、ホスト・インターフェース回路１３を通じてデータ、コマンド、および制御情報などの入出力が行われる。
【００１４】
ホスト装置１１は、磁気ディスク装置１０にデータを書き込んだり、磁気ディスク装置１０からデータを読み取ったりするときに、ホスト・インターフェース回路１３上に割り当てられたＡＴＡレジスタのアドレスにアクセスする。ＡＴＡレジスタにはコマンド・レジスタ、ステータス・レジスタ、データ・レジスタ、シリンダ・ロー／ハイ・レジスタ、セクタ・ナンバー・レジスタ、セクタ・カウント・レジスタなどがある。
【００１５】
ホスト装置１１は磁気ディスク装置１０との間でデータ転送をするときに、コマンド・レジスタに、リード・コマンドまたはライト・コマンドを書き込み、シリンダ・ロー／ハイ・レジスタとセクタ／ナンバー・レジスタに先頭のデータ・セクタの論理ブロック・アドレス（以後、ＬＢＡという。）を書き込む。さらにセクタ・カウント・レジスタに書き込みまたは読み出しにかかるデータ・セクタの数を指定してデータの送受信を行う。磁気ディスク装置１０は、リード・コマンドまたはライト・コマンドの実行過程においてエラーが発生したときに、ステータス・レジスタのエラー・ビットを設定してホスト装置１１に報告する。磁気ディスク装置１０は、ホスト装置１１との間でデータ転送が完了したとき、ステータス・レジスタに状態を設定し、ホスト装置１１はそれを読み取ってデータ転送の完了を認識する。
【００１６】
セクタ・バッファ３１は揮発性半導体メモリの一例であるＳＤＲＡＭで形成されている。セクタ・バッファ３１は、磁気ディスク装置１０の内部における処理速度とホスト装置１１に対するデータ転送速度との差を吸収してパフォーマンスを向上させるために、リード・キャッシュ機能やライト・キャッシュ機能を実現する。セクタ・バッファ３１は、機能的にリード・バッファとライト・バッファに分割されている。ただし、リード・バッファとライト・バッファを物理的に分離させてもよい。リード・バッファはホスト装置１１からの読み取りのために磁気ディスク２５から読み取ったデータを記憶する領域で、ライト・バッファはホスト装置からの書き込みにかかるデータを記憶する領域である。リード・バッファとライト・バッファはそれぞれリング・バッファ方式でデータを記憶する。
【００１７】
ＣＲＣ回路２７は、ホスト・インターフェース回路１３からバッファ・コントローラ１５に送られてきたユーザ・データに対して、巡回冗長検査（ＣＲＣ）方式に基づく生成多項式を使用して冗長バイトとしてのエラー検査コード（以後、ＣＲＣＣという。）を計算してバッファ・コントローラ１５に送る。本実施の形態においては、ＣＲＣＣはデータ・セクタの単位に相当する５１２バイトのユーザ・データごとに計算され４バイトで構成されている。バッファ・コントローラ１５は、セクタ・バッファ３１およびＣＲＣ回路２７へのデータの入出力を制御する。バッファ・コントローラ１５は、５１２バイトのユーザ・データと４バイトのＣＲＣＣからなる５１６バイトのデータ・セットをセクタ・バッファ３１の所定のアドレスに記憶するために、セクタ・バッファ３１を制御する。バッファ・コントローラ１５は、リング・バッファ方式でセクタ・バッファ３１に対するデータの記憶動作を制御するためにアドレス管理テーブルを備える。
【００１８】
ＣＲＣ回路２７は、ホスト装置１１にデータを送る前および磁気ディスク２５にデータを書き込む前に、セクタ・バッファ３１からバッファ・コントローラ１５に読み出されたデータ・セットに対して生成多項式を使用してビット反転エラーの有無を検査する。ＣＲＣ回路２７は、データ・セットから検出したエラーをＭＰＵユニット３３に通知する。
【００１９】
チャネル・インターフェース回路１７は、バッファ・コントローラ１５、リード・チャネル１９、ライト・チャネル２１、およびＥＣＣ回路２９に対するデータの入出力動作を制御する。ＥＣＣ回路２９は、記録動作時においてバッファ・コントローラ１５からチャネル・インターフェース回路１７に送られた記録にかかるデータ・セットから、リードソロモン方式でエラー訂正コード（以後、ＥＣＣという。）を算出してチャネル・インターフェース回路１７に送る。ＥＣＣは、５１６バイトのデータ・セットごとに２０バイト〜４０バイト程度生成される。
【００２０】
ＥＣＣ回路２９は、再生動作においてリード・チャネル１９からチャネル・インターフェース回路１７に送られたデータ・セットとＥＣＣから、エラー・シンドロームを計算してデータ・セットにビット反転エラーがあるか否かを検査する。ＥＣＣ回路２９は、ビット反転エラーが所定の数以内であれば、データ・セットを正しい値に訂正してバッファ・コントローラ１５に送る。リード・チャネル１９は、磁気ディスク２５から読み出したユーザ・データを処理して、チャネル・インターフェース回路１７に送る。リード・チャネル１９は、磁気ディスク２５から読み出したサーボ・データを処理してサーボ・コントローラ３５に送る。
【００２１】
ライト・チャネル２１はチャネル・インターフェース回路１７から受け取った記録にかかるデータ・セクタ情報を処理してヘッド機構２３に送る。データ・セクタ情報はデータ・セットとＥＣＣに加えて、周知の方法で生成および付加されたプリアンブル、ポストアンブル、アドレス情報などを含む。ヘッド機構２３は、磁気ヘッドと磁気ヘッドを磁気ディスク２３の所定の位置に位置付けるキャリッジ機構で構成される。磁気ディスク２５はデータ・セクタ単位でユーザ・データを記録する。各データ・セクタは再生データの同期をとるためのプリアンブル、５１２バイトのデータ・ブロック、ＣＲＣＣ、ＥＣＣなどで構成されている。磁気ディスク上に定義されたすべてのデータ・セクタに対しては順番にＬＢＡが割り当てられている。
【００２２】
ＭＰＵユニット３３は、プロセッサ、ＲＡＭ、ＥＥＰＲＯＭ、およびファームウエアを格納するＲＯＭなどで構成され、ファームウエアを実行して磁気ディスク装置１０の動作全体を制御する。ＭＰＵユニット３３は、ホスト装置１１からホスト・インターフェース回路１３のＡＴＡレジスタに書き込まれたコマンドを解釈して磁気ディスク装置１０の動作を制御する。ＭＰＵ３３は、ホスト装置１１から送られたコマンドを実行する際に、エラーが発生した場合には、ホスト・インターフェース回路１３のステータス・レジスタにエラー・ビットを設定してホスト装置１１に報告する。さらにＭＰＵ３３は、セクタ・バッファ３１に記憶されているデータを検索したり、セクタ・バッファからデータを読み出したりしてホスト装置との間で行うデータの転送動作を制御する。本実施の形態にかかるデータ転送方式はファームエアで実現される。
【００２３】
サーボ・コントローラ３５は、リード・チャネル１９から受け取ったサーボ情報を処理してＭＰＵユニット３３に磁気ヘッドの位置情報を送る。ＭＰＵ３３はサーボ・コントローラ３５から送られた位置情報に基づいて、ヘッド機構２３の制御情報を生成し、ドライバ３７に送る。ドライバ３７は、ＭＰＵユニット３３から指示された位置にヘッド機構２３を位置付けるための制御電流を生成して、ヘッド機構２３に送る。磁気ディスク装置１０を構成するには、これら以外にも多くの周知の要素が必要であるが、本発明には特に関係がないので説明を省略する。また、図１に示した機能ブロックは例示として示したものであり、これらのいくつかの機能を１つの半導体装置に統合したり分割したりすることは当業者が自由になし得ることである。
【００２４】
［セクタ・バッファとバッファ管理テーブル］
図２は、セクタ・バッファとバッファ管理テーブルのデータ構造を説明する図である。図２（Ａ）に示すように、セクタ・バッファ３１はリード・バッファ１０１とライト・バッファ１０３で構成され、それぞれリング・バッファ方式でデータが記憶される。セクタ・バッファ３１は、図２（Ｂ）に示すように５１２バイトのユーザ・データと４バイトのＣＲＣＣからなるデータ・セットを５１６バイトのページ１０５の単位で記憶する。図２（Ａ）に示すように、本実施の形態では、リード・バッファ１０１は００００ｈから３ＦＦＦｈまでの連続する１６３８４個のページ・アドレスを有し、ライト・バッファ１０３は４０００ｈから７ＦＦＦｈまでの連続する同じ数のページ・アドレスを有する。
【００２５】
リング・バッファ方式では、ページ・アドレス００００ｈから順番に連続するＬＢＡのデータ・セットを記憶してゆく。そして最後に記憶されたページのつぎのページから新しい連続するＬＢＡのデータ・セットを記憶してゆく。そして、ページ・アドレス３ＦＦＦｈ以降はページ・アドレス００００ｈに戻ってすでに記憶されていたデータ・セットを上書きしてゆく。ライト・バッファ１０３においても同様に記憶してゆく。
【００２６】
ＬＢＡの連続するデータ・セットが記憶されているページ・アドレスが連続する記憶領域の単位をセグメントという。図２（Ｂ）の例では、ページ・アドレス０００５ｈから０００Ｃｈまでの８個のページがＬＢＡ１１からＬＢＡ１８までのデータ・セットを記憶して１つのセグメントを形成している。また、ページ・アドレス０００Ｄｈから００１２ｈまでの７個のページがＬＢＡ３５からＬＢＡ４１までのデータ・セットを記憶して他の１つのセグメントを形成している。ホスト装置１１からリード・バッファ１０１に記憶されていないデータ・セットに対するアドレスが指定されたリード・コマンドを受け取ったときは、ＭＰＵ３３は、アドレスが指定されたＬＢＡの連続するデータ・セットを磁気ディスク２５から読み出すとともにリード・バッファ１０１に記憶する。このときリード・バッファ１０１に記憶されたデータ・セットが１つのセグメントを形成する。
【００２７】
図２（Ｃ）は、バッファ・コントローラ１５がセクタ・バッファ３１のアドレスを管理するためのバッファ管理テーブル１０７の構成を示している。バッファ管理テーブル１０７は、セグメントごとにエントリが形成されている。一つのエントリは、ページ・アドレスと当該ページ・アドレスに記憶されているデータ・セットの最終ＬＢＡと、当該ページのページ数（レングス）で構成されている。図２（Ｂ）の例では、０００Ｃｈには、ＬＢＡ１８のデータ・セットを最終アドレスとする８個のＬＢＡが連続するデータ・セットで形成されたセグメントがエントリとして登録されている。ページ・アドレス００１２ｈにも同様にセグメント情報が登録されている。
【００２８】
［セグメントの断片化］
図３は、セクタ・バッファ３１においてセグメントに断片化が発生した状態を説明する図である。図３（Ａ）では、セクタ・バッファ３１のページ・アドレス１０００ｈから２ＦＦＦｈまでに記憶されたＬＢＡ２０００ｈからＬＢＡ３ＦＦＦｈまでのデータ・セットが一つのセグメントを形成し、バッファ管理テーブル１０７にセグメントのエントリが登録されている。その後、ホスト装置１１が磁気ディスク装置１０に書き込みデータの先頭アドレスであるＬＢＡ３０００ｈとそれにつづく５１１個のデータ・ブロックをライト・コマンドとともに送る。磁気ディスク装置１０は、磁気ディスク２５のデータ・セクタに実際にデータを書き込む前に、図３（Ｂ）に示すように、ライト・バッファ１０３にデータ・セットを記憶し、ステータス・レジスタに書き込み処理完了の状態を設定してホスト装置に通知する。
【００２９】
磁気ディスク装置１０が磁気ディスク２５にデータを書き込むまでには多少の時間を費やすので、ライト・バッファ１０３に書き込みデータを記憶した時点でホスト装置に対して書き込み処理完了の状態を通知することで、ホスト装置１１を早期に書き込み動作から解放することができる。バッファ・コントローラ１５は、ライト・バッファ１０３の所定のページにホスト装置から転送されたデータ・ブロックとＣＲＣＣからなるデータ・セットを記憶する。そして、データ・セットが記憶されたページ・アドレス、最終ＬＢＡ、およびページ数がバッファ管理テーブル１０７に記憶される。図３（Ｂ）では、ＭＰＵ３３が、ページ・アドレスが５０００ｈから５１ＦＦｈまでのライト・バッファ１０３のページにＬＢＡ３０００ｈからＬＢＡ３１ＦＦｈまでのデータ・ブロックを書き込んだときの状態を示している。したがって、セクタ・バッファ３１のページ・アドレス２０００ｈから２１ＦＦｈに記憶されていたＬＢＡ３０００ｈからＬＢＡ３１ＦＦｈまでのデータ・ブロックは更新されたことになるので、バッファ管理テーブル１０７において無効になるように処理される。
【００３０】
図３（Ｂ）のバッファ管理テーブル１０７では、ページ・アドレス１０００ｈから２ＦＦＦｈまでのページに記憶されていたデータ・セットのセグメントは、更新によりページ・アドレス１０００ｈから１ＦＦＦｈまでのセグメントとページ・アドレス２２００ｈから２ＦＦＦｈまでのセグメントの２つに分割されている。セグメントが分割されていることの認識は、バッファ管理テーブル１０７に基づいて、バッファ・コントローラ１５が行う。よって、つぎにホスト装置１１から、ＬＢＡ３０００ｈからＬＢＡ３１ＦＦｈまでのデータ・ブロックに対してリード・コマンドが送られてきたときは、バッファ・コントローラ１５は、ページ・アドレス５０００ｈから５１ＦＦｈに記憶されているデータが有効なデータであると判断して、ホスト装置１１に送るようにセクタ・バッファ３１のアドレスを指定する。
【００３１】
よって、ページ・アドレスが２０００ｈから２１ＦＦｈに記憶されていたデータ・セットは無効になる。このようにセグメントは、最初に形成されるときの大きさがホスト装置から指令されるＬＢＡの数に応じて可変サイズとなり、かつ、ユーザ・データの更新により分割されて個数が増大してゆく。ページ・アドレスが２０００ｈから２１ＦＦｈまでの記憶領域に記憶されたデータ・ブロックは、リング・バッファ方式による順番でつぎに新しいデータ・セットが記憶されるまで読み出されることはない。本実施の形態では、リード・バッファ１０１は１２８個のセグメントを保有することができ、ライト・バッファ１０３は６４個のセグメントを保有することができる。
【００３２】
図３（Ｂ）では、ＬＢＡ２０００ｈからＬＢＡ３ＦＦＦｈまでの連続するＬＢＡのデータ・セットが、セクタ・バッファ３１上においてページ・アドレスが不連続な記憶領域に記憶され、セグメントが断片化された状態になっている。従来は、このように断片化されたセグメントに対応するデータに対してリード・コマンドが送られてくると、ＭＰＵユニット３３は、セクタ・バッファ３１上にリード・コマンドで指定された先頭ＬＢＡのデータ・セットを含むセグメントが存在するか否かを検索し、存在する場合は、当該セグメントの最終ＬＢＡまでのデータ・ブロックを一旦ホスト装置１１に転送し、残りのデータ・ブロックは磁気ディスク２５から再生して送っていた。あるいは、検索と転送をセグメントごとに繰り返していた。なお、セグメントの断片化は、リード・バッファ１０１とライト・バッファ１０３との間だけで発生するものではなく、リード・バッファ１０１内だけでも発生する。
【００３３】
［データ転送の手順］
図４は、図３（Ｂ）のように断片化したセグメントに含まれるＬＢＡのデータ・ブロックに対するリード・コマンドが送られてきたときの、転送の手順を示すフローチャートである。転送の手順を記述したプログラムはＭＰＵユニット３３のファームウエアに組み込まれている。ブロック２０１では、ホスト装置１１が、ホスト・インターフェース回路１３のＡＴＡレジスタに、磁気ディスク２５に記憶されている読み取りにかかる先頭データ・ブロックのＬＢＡ２０００ｈと、読み取るデータ・ブロックの数８１９２を指定してリード・コマンドを送る。ブロック２０３ではＭＰＵユニット３３はリード・コマンドを解釈し、先頭ＬＢＡとデータ・ブロックの数をバッファ・コントローラ１５に送る。バッファ・コントローラ１５は、バッファ管理テーブル１０７のエントリを検索してリード・コマンドで指定されたＬＢＡの先頭データ・セットがセクタ・バッファ３１に存在するか否かを検索する。
【００３４】
ブロック２０３で先頭データ・ブロックがセクタ・バッファ３１に存在しない場合は、ＭＰＵユニット３３は、通常の再生動作で磁気ディスク２５からデータを再生して（ブロック２０５）、リード・バッファ１０１に記憶したあとに（ブロック２０７）、ホスト装置に転送する（ブロック２０９）。次回からホスト装置１１が同一ＬＢＡのデータを要求したときは、ＭＰＵユニット３３は、リード・バッファ１０１から読み出して転送する。この手順は従来の転送手順と同じである。
【００３５】
ブロック２０３で、先頭データ・ブロックがセクタ・バッファ３１に存在する場合は、ブロック２１１でＭＰＵユニット３３は、指定されたＬＢＡを記憶するセグメントについて断片化が生じているか否かを検査する。図３（Ａ）に示すように、指定されたＬＢＡのデータ・ブロック全体が一つのセグメントの中に記憶されて断片化が生じていない場合は、ＭＰＵユニット３３は本実施の形態にかかる転送情報を生成しないでリード・バッファ１０１からデータを読み出してホスト装置１１に転送する。ブロック２１１で断片化が生じていると判断した場合は、ＭＰＵユニット３３はブロック２１３で本実施の形態にかかる転送情報を生成する。
【００３６】
転送情報は、ＭＰＵユニット３３が一度のデータ転送手順で断片化したセグメントに記憶されているデータ・ブロックを転送するためのセクタ・バッファ３１のアドレス情報である。図５は、転送情報のデータ構造を示す図である。転送情報は、ＭＰＵユニット３３がホスト装置１１から１つのリード・コマンドを受け取ったときに、対応するデータ・ブロックがセクタ・バッファ３１に断片化した状態で存在すると判断した場合に、ホスト装置１１に転送する都度ＭＰＵユニット３１がファームウエアを実行して生成するテーブルである。ＭＰＵユニット３１は、転送情報を利用して断片化したセグメントのデータを、一度の転送動作でホスト装置１１に転送することができる。
【００３７】
転送情報は図５（Ａ）に示すように、セクタ・バッファのページ・アドレスとページ数で構成されている。図３（Ｂ）に示した断片化したセグメントに含まれるＬＢＡのデータ・ブロックは、図５（Ａ）において、各セグメントの最終ＬＢＡのページ・アドレスが１ＦＦＦｈ、５１ＦＦｈ、２ＦＦＦｈの順番に並ぶように配列される。各最終ＬＢＡには、対応するセグメントのページ数が関連づけられている。そして、ブロック２１５では、ＭＰＵユニット３３が、転送情報に基づいてセクタ・バッファのページ・アドレスを、１０００ｈ−１ＦＦＦｈ、５０００ｈ−５１ＦＦｈ、２２００ｈ−２ＦＦＦｈの順番に読み出して指定されたデータ・ブロックを一度にホスト装置に転送する。
【００３８】
リード・コマンドで指定されたデータ・ブロックの最後のＬＢＡが、セグメントの最終ＬＢＡ（３ＦＦＦｈ）ではなく、たとえば３ＦＦ５ｈである場合の転送情報は図５（Ｂ）のようになる。この場合、ＬＢＡ３ＦＦ５ｈのデータ・ブロックはセクタ・バッファの２ＦＦ５ｈのページ・アドレスに記憶されている。よって、図５（Ｂ）のように転送情報が生成され、ＭＰＵユニット３３によりセクタ・バッファが転送情報に基づいて、１０００ｈ−１ＦＦＦｈ、５０００ｈ−５１ＦＦｈ、２２００ｈ−２ＦＦ５ｈのページ・アドレスの順番に転送される。
【００３９】
本実施の形態では、リード・コマンドを処理する都度、ＭＰＵユニット３３がバッファ管理テーブル１０７のアドレス情報に基づいて転送情報を生成している。転送情報はたとえばバッファ管理テーブル１０７に転送の順序を示す情報を加えるようにして生成することも可能である。断片化を生じさせるような読み取りまたは書き込み動作が行われる都度バッファ管理テーブル１０７の状態を計算して更新することはＭＰＵユニット３３における負担が大きくなる。また、断片化が発生したときにセクタ・バッファのデータ配列自体を実際に変更して断片化を除去することも可能であるが、これもデータの移動に対するＭＰＵユニット３３の負担が大きくなるので、転送情報は本実施の形態に基づくようにデータ転送の都度生成する方が優れている。
【００４０】
本実施の形態では、セクタ・バッファがリング・バッファ方式でデータの記憶をする方法を例示して説明したが、本発明はこれに限定されるものではなく、ＬＲＵ（Least Recently Used）アルゴリズムやＦＩＦＯ（First-In First-Out ） アルゴリズムで記憶する場合でも、断片化が生ずる場合には適用することができる。
【００４１】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【図面の簡単な説明】
【００４２】
【図１】本発明の実施の形態にかかる磁気ディスク装置の構成を示すブロック図である。
【図２】セクタ・バッファとバッファ管理テーブルのデータ構造を示す図である。
【図３】セクタ・バッファで断片化したセグメントの状態を示す図である。
【図４】断片化したセグメントのデータを転送する手順を示すフローチャートである。
【図５】転送情報のデータ構造を示す図である。
【図６】セクタ・バッファにおいて発生する断片化の課題を説明する図である。
【符号の説明】
【００４３】
１０１…リード・バッファ
１０３…ライト・バッファ
１０５…ページ
１０７…バッファ管理テーブル
【図１】
2007334463.tif 000003
【図２】
2007334463.tif 000004
【図３】
2007334463.tif 000005
【図４】
2007334463.tif 000006
【図５】
2007334463.tif 000007
【図６】
2007334463.tif 000008