JP2007334463A - 補助記憶装置およびデータ転送方法 - Google Patents
補助記憶装置およびデータ転送方法 Download PDFInfo
- Publication number
- JP2007334463A JP2007334463A JP2006163006A JP2006163006A JP2007334463A JP 2007334463 A JP2007334463 A JP 2007334463A JP 2006163006 A JP2006163006 A JP 2006163006A JP 2006163006 A JP2006163006 A JP 2006163006A JP 2007334463 A JP2007334463 A JP 2007334463A
- Authority
- JP
- Japan
- Prior art keywords
- data
- buffer
- host device
- sector
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Abstract
【課題】磁気ディスク装置のセクタ・バッファにおいて断片化したセグメントのデータを効率的にホスト装置に転送する。
【解決手段】セクタ・バッファにLBA2000hからLBA31FFhまでのデータが記憶されているが、LBA3000hからLBA31FFhまでのデータは断片化している。ホスト装置からLBA2000hからLBA31FFhまでのデータに対するリード・コマンドを受け取ったとき、磁気ディスク装置は、断片化したセグメントをつなぎ合わせた転送情報を生成し一度の処理でホスト装置に転送する。この結果、セクタ・バッファにデータが記憶されているにもかかわらず、磁気ディスクからデータを再生して転送したり断片化したセグメント毎にデータを転送したりすることがなくなる。
【選択図】図3
【解決手段】セクタ・バッファにLBA2000hからLBA31FFhまでのデータが記憶されているが、LBA3000hからLBA31FFhまでのデータは断片化している。ホスト装置からLBA2000hからLBA31FFhまでのデータに対するリード・コマンドを受け取ったとき、磁気ディスク装置は、断片化したセグメントをつなぎ合わせた転送情報を生成し一度の処理でホスト装置に転送する。この結果、セクタ・バッファにデータが記憶されているにもかかわらず、磁気ディスクからデータを再生して転送したり断片化したセグメント毎にデータを転送したりすることがなくなる。
【選択図】図3
Description
本発明はセクタ・バッファを搭載した補助記憶装置からホスト装置に対して行うデータの転送技術に関し、さらにはセクタ・バッファ上で断片化したデータをホスト装置に効率的に転送する技術に関する。
コンピュータ・システムでは、CPUが実行するプログラムを記憶したり作業領域を提供したりする主記憶装置の他にデータをほぼ恒久的に記録する補助記憶装置を採用している。補助記憶装置は、一般的に、主記憶装置に比べて記憶容量が大きいため大容量記憶装置といわれたりする。また、CPUに付属する主記憶装置以外の外部の記憶装置という意味から外部記憶装置といわれたりすることもある。補助記憶装置の例として、磁気ディスク装置、フロッピィ・ディスク装置(フロッピィ・ディスクは商標)、光磁気ディスク装置、CD−RWドライブ、DVD−RWドライブなどがある。
これらの補助記憶装置は、SCSIやIDEといったインターフェース回路を通じてホスト装置としてのコンピュータ・システムに接続され、ホスト装置から送られたデータを記録したり、記録していたデータをホスト装置に送ったりしている。これらの補助記憶装置では、ホスト装置とのデータの通信時間と内部における読み取りまたは書き込み処理の時間との差を吸収したり通信時間を短縮したりするためにセクタ・バッファを設けている。
代表的な補助記憶装置の1つである磁気ディスク装置では、セクタ・バッファとしてSRAMまたはDRAMといった半導体メモリが使用されている。セクタ・バッファにはリード・バッファとライト・バッファで構成されているものがある。図6に示すセクタ・バッファ1では、ホスト装置から要求された読み取りデータを一時的に記憶しておくリード・バッファとホスト装置から転送された書き込みデータを一時的に記憶しておくライト・バッファで構成されている。
いま、リード・バッファにnからmまでの連続する論理ブロック・アドレスのデータが記憶されているものとする。ここで、論理ブロック・アドレスとは、磁気ディスクにアクセスできる最小単位となるデータ・セクタのアドレスをいう。つぎに、ホスト装置からnからmまでの論理ブロック・アドレスに対するリード・コマンドを受け取ったときは、プロセッサは磁気ディスクからデータを再生しないでリード・バッファに記憶してあったデータ・ブロックを読み出して転送することで高速な読み取り動作を実現する。リード・バッファにnからmまでの連続する論理ブロック・アドレスのデータ・ブロックが記憶されている状態で、ホスト装置からnからmまでの間にあるn+x1からn+x2までの連続する論理ブロック・アドレスに対するライト・コマンドを受け取ったときは、プロセッサはホスト装置から書き込みデータを受け取ってライト・バッファに記憶した時点でホスト装置に転送処理完了の状態を返送し、ホスト装置を書き込み動作から解放して高速な書き込み動作を実現する。
このとき、リード・バッファに記憶されていたn+x1からn+x2までのデータは、ライト・バッファに記憶されたn+x1からn+x2までのデータで更新されているので、リード・バッファの論理ブロック・アドレスn+x1からn+x2は無効にされる。この状態でホスト装置からnからmまでの論理ブロック・アドレスに対するリード・コマンドを受け取ったときは、プロセッサは、nからn+x1−1までのデータをリード・バッファから読み出してホスト装置に転送し、つづいて、磁気ディスクからn+x1からmまでのデータを再生してホスト装置に転送する。あるいは、nからn+x1−1までのデータを転送したあとに、さらにリード・バッファあるいはライト・バッファにそれ以降のデータが存在するか否かを検索して転送する。いずれの方法でも余分な転送時間を費やしてしまう。
特許文献1には、メモリの断片化に伴う不都合を解消するために、断片化の有無、空きメモリ先頭アドレスおよび領域サイズなどの断片化情報を検出して、空き領域の結合作業を行う技術を開示している。この技術では断片化の対策がメモリ上でのデータの移動によって実現されている。特許文献2は、ディスクのデータに断片化が発生したときに、バッファに蓄積したデータが空にならないように、ディスク上で再配置してから読み出す技術を開示している。特許文献3は、HDDのバッファ・セグメントをセグメント・テーブルの設定で動的に変更し、バッファの断片化を防ぐ技術を開示している。
特開2003−331239号公報
特開2000−21086号公報
特開平11−120690号公報
連続する論理ブロック・アドレスのデータがセクタ・バッファの論理的なアドレスの順番に並ばないでデータが記憶されている状態を本明細書においては断片化ということにする。ライト・バッファにn+x1からn+x2までのデータが書き込まれたあとにライト・バッファに記憶されている更新されたデータでリード・バッファの対応するデータを上書きして断片化を防止する方法も考えられる。しかし、セクタ・バッファの中でデータを移動させるには所定の時間を必要とし、また制御も複雑になるという短所がある。また、nからn+x1までのデータを転送したあとに、さらに、それ以降のデータがバッファに記憶されていないかどうかを検索して、セクタ・バッファにデータが存在していればセクタ・バッファから残りのデータを転送することも考えられる。しかし、この方法でもデータ転送を複数回繰り返すことになるので、十分に高速化が図られているとは言い難い。
そこで本発明の目的は、補助記憶装置においてセクタ・バッファに断片化して記憶されたデータをホスト装置に高速に転送する転送方法を提供することにある。さらに本発明の目的は、そのような高速転送を実現する補助記憶装置を提供することにある。
本発明の原理は、セクタ・バッファにおいて断片化したセグメントに記憶されたデータ・ブロックに対するアドレスを指定したホスト装置からのリード・コマンドに対して、一度の処理でデータ転送するために、断片化したセグメントをデータ転送前に連続させるための転送情報を生成して論理的に並び替える点にある。断片化したセグメントに記憶されたデータ・ブロックのアドレスに対するリード・コマンドがホスト装置から送られてくると、補助記憶装置は転送情報に基づいて転送することにより、一度の処理でデータ転送を完了することができる。
本発明の態様では、ホスト装置から、読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取る。そして複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索する。つづいて、先頭データ・ブロックと複数のデータ・ブロックのいずれかがセクタ・バッファの異なるセグメントに存在する場合に、複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成する。転送情報は、転送の都度バッファ管理テーブルのアドレス情報に基づいてプロセッサが生成する。転送情報は、1つのリード・コマンドに対して生成されるセクタ・バッファのページ・アドレスとページ数で構成されるテーブルである。最後に、転送情報に基づいてアドレスが指定されたデータ・ブロックをセクタ・バッファから読み出してホスト装置に転送する。
本発明により、補助記憶装置においてセクタ・バッファに断片化して記憶されたデータをホスト装置に高速に転送する方法を提供することができた。さらに本発明により、そのような高速転送を実現する補助記憶装置を提供することができた。
[装置の構成]
図1は、本発明の実施の形態にかかる磁気ディスク装置10の概略を示すブロック図である。磁気ディスク装置10は、コンピュータや音楽記録再生装置などのホスト装置11に接続され、ホスト装置11から受け取ったデータを磁気ディスク25に記録したり、磁気ディスク25に記録したデータをホスト装置11に転送したりする。ホスト・インターフェース回路13は、ホスト装置11と磁気ディスク装置10とのデータ通信を制御するATA規格の回路である。ホスト装置11と磁気ディスク装置10との間では、ホスト・インターフェース回路13を通じてデータ、コマンド、および制御情報などの入出力が行われる。
図1は、本発明の実施の形態にかかる磁気ディスク装置10の概略を示すブロック図である。磁気ディスク装置10は、コンピュータや音楽記録再生装置などのホスト装置11に接続され、ホスト装置11から受け取ったデータを磁気ディスク25に記録したり、磁気ディスク25に記録したデータをホスト装置11に転送したりする。ホスト・インターフェース回路13は、ホスト装置11と磁気ディスク装置10とのデータ通信を制御するATA規格の回路である。ホスト装置11と磁気ディスク装置10との間では、ホスト・インターフェース回路13を通じてデータ、コマンド、および制御情報などの入出力が行われる。
ホスト装置11は、磁気ディスク装置10にデータを書き込んだり、磁気ディスク装置10からデータを読み取ったりするときに、ホスト・インターフェース回路13上に割り当てられたATAレジスタのアドレスにアクセスする。ATAレジスタにはコマンド・レジスタ、ステータス・レジスタ、データ・レジスタ、シリンダ・ロー/ハイ・レジスタ、セクタ・ナンバー・レジスタ、セクタ・カウント・レジスタなどがある。
ホスト装置11は磁気ディスク装置10との間でデータ転送をするときに、コマンド・レジスタに、リード・コマンドまたはライト・コマンドを書き込み、シリンダ・ロー/ハイ・レジスタとセクタ/ナンバー・レジスタに先頭のデータ・セクタの論理ブロック・アドレス(以後、LBAという。)を書き込む。さらにセクタ・カウント・レジスタに書き込みまたは読み出しにかかるデータ・セクタの数を指定してデータの送受信を行う。磁気ディスク装置10は、リード・コマンドまたはライト・コマンドの実行過程においてエラーが発生したときに、ステータス・レジスタのエラー・ビットを設定してホスト装置11に報告する。磁気ディスク装置10は、ホスト装置11との間でデータ転送が完了したとき、ステータス・レジスタに状態を設定し、ホスト装置11はそれを読み取ってデータ転送の完了を認識する。
セクタ・バッファ31は揮発性半導体メモリの一例であるSDRAMで形成されている。セクタ・バッファ31は、磁気ディスク装置10の内部における処理速度とホスト装置11に対するデータ転送速度との差を吸収してパフォーマンスを向上させるために、リード・キャッシュ機能やライト・キャッシュ機能を実現する。セクタ・バッファ31は、機能的にリード・バッファとライト・バッファに分割されている。ただし、リード・バッファとライト・バッファを物理的に分離させてもよい。リード・バッファはホスト装置11からの読み取りのために磁気ディスク25から読み取ったデータを記憶する領域で、ライト・バッファはホスト装置からの書き込みにかかるデータを記憶する領域である。リード・バッファとライト・バッファはそれぞれリング・バッファ方式でデータを記憶する。
CRC回路27は、ホスト・インターフェース回路13からバッファ・コントローラ15に送られてきたユーザ・データに対して、巡回冗長検査(CRC)方式に基づく生成多項式を使用して冗長バイトとしてのエラー検査コード(以後、CRCCという。)を計算してバッファ・コントローラ15に送る。本実施の形態においては、CRCCはデータ・セクタの単位に相当する512バイトのユーザ・データごとに計算され4バイトで構成されている。バッファ・コントローラ15は、セクタ・バッファ31およびCRC回路27へのデータの入出力を制御する。バッファ・コントローラ15は、512バイトのユーザ・データと4バイトのCRCCからなる516バイトのデータ・セットをセクタ・バッファ31の所定のアドレスに記憶するために、セクタ・バッファ31を制御する。バッファ・コントローラ15は、リング・バッファ方式でセクタ・バッファ31に対するデータの記憶動作を制御するためにアドレス管理テーブルを備える。
CRC回路27は、ホスト装置11にデータを送る前および磁気ディスク25にデータを書き込む前に、セクタ・バッファ31からバッファ・コントローラ15に読み出されたデータ・セットに対して生成多項式を使用してビット反転エラーの有無を検査する。CRC回路27は、データ・セットから検出したエラーをMPUユニット33に通知する。
チャネル・インターフェース回路17は、バッファ・コントローラ15、リード・チャネル19、ライト・チャネル21、およびECC回路29に対するデータの入出力動作を制御する。ECC回路29は、記録動作時においてバッファ・コントローラ15からチャネル・インターフェース回路17に送られた記録にかかるデータ・セットから、リードソロモン方式でエラー訂正コード(以後、ECCという。)を算出してチャネル・インターフェース回路17に送る。ECCは、516バイトのデータ・セットごとに20バイト〜40バイト程度生成される。
ECC回路29は、再生動作においてリード・チャネル19からチャネル・インターフェース回路17に送られたデータ・セットとECCから、エラー・シンドロームを計算してデータ・セットにビット反転エラーがあるか否かを検査する。ECC回路29は、ビット反転エラーが所定の数以内であれば、データ・セットを正しい値に訂正してバッファ・コントローラ15に送る。リード・チャネル19は、磁気ディスク25から読み出したユーザ・データを処理して、チャネル・インターフェース回路17に送る。リード・チャネル19は、磁気ディスク25から読み出したサーボ・データを処理してサーボ・コントローラ35に送る。
ライト・チャネル21はチャネル・インターフェース回路17から受け取った記録にかかるデータ・セクタ情報を処理してヘッド機構23に送る。データ・セクタ情報はデータ・セットとECCに加えて、周知の方法で生成および付加されたプリアンブル、ポストアンブル、アドレス情報などを含む。ヘッド機構23は、磁気ヘッドと磁気ヘッドを磁気ディスク23の所定の位置に位置付けるキャリッジ機構で構成される。磁気ディスク25はデータ・セクタ単位でユーザ・データを記録する。各データ・セクタは再生データの同期をとるためのプリアンブル、512バイトのデータ・ブロック、CRCC、ECCなどで構成されている。磁気ディスク上に定義されたすべてのデータ・セクタに対しては順番にLBAが割り当てられている。
MPUユニット33は、プロセッサ、RAM、EEPROM、およびファームウエアを格納するROMなどで構成され、ファームウエアを実行して磁気ディスク装置10の動作全体を制御する。MPUユニット33は、ホスト装置11からホスト・インターフェース回路13のATAレジスタに書き込まれたコマンドを解釈して磁気ディスク装置10の動作を制御する。MPU33は、ホスト装置11から送られたコマンドを実行する際に、エラーが発生した場合には、ホスト・インターフェース回路13のステータス・レジスタにエラー・ビットを設定してホスト装置11に報告する。さらにMPU33は、セクタ・バッファ31に記憶されているデータを検索したり、セクタ・バッファからデータを読み出したりしてホスト装置との間で行うデータの転送動作を制御する。本実施の形態にかかるデータ転送方式はファームエアで実現される。
サーボ・コントローラ35は、リード・チャネル19から受け取ったサーボ情報を処理してMPUユニット33に磁気ヘッドの位置情報を送る。MPU33はサーボ・コントローラ35から送られた位置情報に基づいて、ヘッド機構23の制御情報を生成し、ドライバ37に送る。ドライバ37は、MPUユニット33から指示された位置にヘッド機構23を位置付けるための制御電流を生成して、ヘッド機構23に送る。磁気ディスク装置10を構成するには、これら以外にも多くの周知の要素が必要であるが、本発明には特に関係がないので説明を省略する。また、図1に示した機能ブロックは例示として示したものであり、これらのいくつかの機能を1つの半導体装置に統合したり分割したりすることは当業者が自由になし得ることである。
[セクタ・バッファとバッファ管理テーブル]
図2は、セクタ・バッファとバッファ管理テーブルのデータ構造を説明する図である。図2(A)に示すように、セクタ・バッファ31はリード・バッファ101とライト・バッファ103で構成され、それぞれリング・バッファ方式でデータが記憶される。セクタ・バッファ31は、図2(B)に示すように512バイトのユーザ・データと4バイトのCRCCからなるデータ・セットを516バイトのページ105の単位で記憶する。図2(A)に示すように、本実施の形態では、リード・バッファ101は0000hから3FFFhまでの連続する16384個のページ・アドレスを有し、ライト・バッファ103は4000hから7FFFhまでの連続する同じ数のページ・アドレスを有する。
図2は、セクタ・バッファとバッファ管理テーブルのデータ構造を説明する図である。図2(A)に示すように、セクタ・バッファ31はリード・バッファ101とライト・バッファ103で構成され、それぞれリング・バッファ方式でデータが記憶される。セクタ・バッファ31は、図2(B)に示すように512バイトのユーザ・データと4バイトのCRCCからなるデータ・セットを516バイトのページ105の単位で記憶する。図2(A)に示すように、本実施の形態では、リード・バッファ101は0000hから3FFFhまでの連続する16384個のページ・アドレスを有し、ライト・バッファ103は4000hから7FFFhまでの連続する同じ数のページ・アドレスを有する。
リング・バッファ方式では、ページ・アドレス0000hから順番に連続するLBAのデータ・セットを記憶してゆく。そして最後に記憶されたページのつぎのページから新しい連続するLBAのデータ・セットを記憶してゆく。そして、ページ・アドレス3FFFh以降はページ・アドレス0000hに戻ってすでに記憶されていたデータ・セットを上書きしてゆく。ライト・バッファ103においても同様に記憶してゆく。
LBAの連続するデータ・セットが記憶されているページ・アドレスが連続する記憶領域の単位をセグメントという。図2(B)の例では、ページ・アドレス0005hから000Chまでの8個のページがLBA11からLBA18までのデータ・セットを記憶して1つのセグメントを形成している。また、ページ・アドレス000Dhから0012hまでの7個のページがLBA35からLBA41までのデータ・セットを記憶して他の1つのセグメントを形成している。ホスト装置11からリード・バッファ101に記憶されていないデータ・セットに対するアドレスが指定されたリード・コマンドを受け取ったときは、MPU33は、アドレスが指定されたLBAの連続するデータ・セットを磁気ディスク25から読み出すとともにリード・バッファ101に記憶する。このときリード・バッファ101に記憶されたデータ・セットが1つのセグメントを形成する。
図2(C)は、バッファ・コントローラ15がセクタ・バッファ31のアドレスを管理するためのバッファ管理テーブル107の構成を示している。バッファ管理テーブル107は、セグメントごとにエントリが形成されている。一つのエントリは、ページ・アドレスと当該ページ・アドレスに記憶されているデータ・セットの最終LBAと、当該ページのページ数(レングス)で構成されている。図2(B)の例では、000Chには、LBA18のデータ・セットを最終アドレスとする8個のLBAが連続するデータ・セットで形成されたセグメントがエントリとして登録されている。ページ・アドレス0012hにも同様にセグメント情報が登録されている。
[セグメントの断片化]
図3は、セクタ・バッファ31においてセグメントに断片化が発生した状態を説明する図である。図3(A)では、セクタ・バッファ31のページ・アドレス1000hから2FFFhまでに記憶されたLBA2000hからLBA3FFFhまでのデータ・セットが一つのセグメントを形成し、バッファ管理テーブル107にセグメントのエントリが登録されている。その後、ホスト装置11が磁気ディスク装置10に書き込みデータの先頭アドレスであるLBA3000hとそれにつづく511個のデータ・ブロックをライト・コマンドとともに送る。磁気ディスク装置10は、磁気ディスク25のデータ・セクタに実際にデータを書き込む前に、図3(B)に示すように、ライト・バッファ103にデータ・セットを記憶し、ステータス・レジスタに書き込み処理完了の状態を設定してホスト装置に通知する。
図3は、セクタ・バッファ31においてセグメントに断片化が発生した状態を説明する図である。図3(A)では、セクタ・バッファ31のページ・アドレス1000hから2FFFhまでに記憶されたLBA2000hからLBA3FFFhまでのデータ・セットが一つのセグメントを形成し、バッファ管理テーブル107にセグメントのエントリが登録されている。その後、ホスト装置11が磁気ディスク装置10に書き込みデータの先頭アドレスであるLBA3000hとそれにつづく511個のデータ・ブロックをライト・コマンドとともに送る。磁気ディスク装置10は、磁気ディスク25のデータ・セクタに実際にデータを書き込む前に、図3(B)に示すように、ライト・バッファ103にデータ・セットを記憶し、ステータス・レジスタに書き込み処理完了の状態を設定してホスト装置に通知する。
磁気ディスク装置10が磁気ディスク25にデータを書き込むまでには多少の時間を費やすので、ライト・バッファ103に書き込みデータを記憶した時点でホスト装置に対して書き込み処理完了の状態を通知することで、ホスト装置11を早期に書き込み動作から解放することができる。バッファ・コントローラ15は、ライト・バッファ103の所定のページにホスト装置から転送されたデータ・ブロックとCRCCからなるデータ・セットを記憶する。そして、データ・セットが記憶されたページ・アドレス、最終LBA、およびページ数がバッファ管理テーブル107に記憶される。図3(B)では、MPU33が、ページ・アドレスが5000hから51FFhまでのライト・バッファ103のページにLBA3000hからLBA31FFhまでのデータ・ブロックを書き込んだときの状態を示している。したがって、セクタ・バッファ31のページ・アドレス2000hから21FFhに記憶されていたLBA3000hからLBA31FFhまでのデータ・ブロックは更新されたことになるので、バッファ管理テーブル107において無効になるように処理される。
図3(B)のバッファ管理テーブル107では、ページ・アドレス1000hから2FFFhまでのページに記憶されていたデータ・セットのセグメントは、更新によりページ・アドレス1000hから1FFFhまでのセグメントとページ・アドレス2200hから2FFFhまでのセグメントの2つに分割されている。セグメントが分割されていることの認識は、バッファ管理テーブル107に基づいて、バッファ・コントローラ15が行う。よって、つぎにホスト装置11から、LBA3000hからLBA31FFhまでのデータ・ブロックに対してリード・コマンドが送られてきたときは、バッファ・コントローラ15は、ページ・アドレス5000hから51FFhに記憶されているデータが有効なデータであると判断して、ホスト装置11に送るようにセクタ・バッファ31のアドレスを指定する。
よって、ページ・アドレスが2000hから21FFhに記憶されていたデータ・セットは無効になる。このようにセグメントは、最初に形成されるときの大きさがホスト装置から指令されるLBAの数に応じて可変サイズとなり、かつ、ユーザ・データの更新により分割されて個数が増大してゆく。ページ・アドレスが2000hから21FFhまでの記憶領域に記憶されたデータ・ブロックは、リング・バッファ方式による順番でつぎに新しいデータ・セットが記憶されるまで読み出されることはない。本実施の形態では、リード・バッファ101は128個のセグメントを保有することができ、ライト・バッファ103は64個のセグメントを保有することができる。
図3(B)では、LBA2000hからLBA3FFFhまでの連続するLBAのデータ・セットが、セクタ・バッファ31上においてページ・アドレスが不連続な記憶領域に記憶され、セグメントが断片化された状態になっている。従来は、このように断片化されたセグメントに対応するデータに対してリード・コマンドが送られてくると、MPUユニット33は、セクタ・バッファ31上にリード・コマンドで指定された先頭LBAのデータ・セットを含むセグメントが存在するか否かを検索し、存在する場合は、当該セグメントの最終LBAまでのデータ・ブロックを一旦ホスト装置11に転送し、残りのデータ・ブロックは磁気ディスク25から再生して送っていた。あるいは、検索と転送をセグメントごとに繰り返していた。なお、セグメントの断片化は、リード・バッファ101とライト・バッファ103との間だけで発生するものではなく、リード・バッファ101内だけでも発生する。
[データ転送の手順]
図4は、図3(B)のように断片化したセグメントに含まれるLBAのデータ・ブロックに対するリード・コマンドが送られてきたときの、転送の手順を示すフローチャートである。転送の手順を記述したプログラムはMPUユニット33のファームウエアに組み込まれている。ブロック201では、ホスト装置11が、ホスト・インターフェース回路13のATAレジスタに、磁気ディスク25に記憶されている読み取りにかかる先頭データ・ブロックのLBA2000hと、読み取るデータ・ブロックの数8192を指定してリード・コマンドを送る。ブロック203ではMPUユニット33はリード・コマンドを解釈し、先頭LBAとデータ・ブロックの数をバッファ・コントローラ15に送る。バッファ・コントローラ15は、バッファ管理テーブル107のエントリを検索してリード・コマンドで指定されたLBAの先頭データ・セットがセクタ・バッファ31に存在するか否かを検索する。
図4は、図3(B)のように断片化したセグメントに含まれるLBAのデータ・ブロックに対するリード・コマンドが送られてきたときの、転送の手順を示すフローチャートである。転送の手順を記述したプログラムはMPUユニット33のファームウエアに組み込まれている。ブロック201では、ホスト装置11が、ホスト・インターフェース回路13のATAレジスタに、磁気ディスク25に記憶されている読み取りにかかる先頭データ・ブロックのLBA2000hと、読み取るデータ・ブロックの数8192を指定してリード・コマンドを送る。ブロック203ではMPUユニット33はリード・コマンドを解釈し、先頭LBAとデータ・ブロックの数をバッファ・コントローラ15に送る。バッファ・コントローラ15は、バッファ管理テーブル107のエントリを検索してリード・コマンドで指定されたLBAの先頭データ・セットがセクタ・バッファ31に存在するか否かを検索する。
ブロック203で先頭データ・ブロックがセクタ・バッファ31に存在しない場合は、MPUユニット33は、通常の再生動作で磁気ディスク25からデータを再生して(ブロック205)、リード・バッファ101に記憶したあとに(ブロック207)、ホスト装置に転送する(ブロック209)。次回からホスト装置11が同一LBAのデータを要求したときは、MPUユニット33は、リード・バッファ101から読み出して転送する。この手順は従来の転送手順と同じである。
ブロック203で、先頭データ・ブロックがセクタ・バッファ31に存在する場合は、ブロック211でMPUユニット33は、指定されたLBAを記憶するセグメントについて断片化が生じているか否かを検査する。図3(A)に示すように、指定されたLBAのデータ・ブロック全体が一つのセグメントの中に記憶されて断片化が生じていない場合は、MPUユニット33は本実施の形態にかかる転送情報を生成しないでリード・バッファ101からデータを読み出してホスト装置11に転送する。ブロック211で断片化が生じていると判断した場合は、MPUユニット33はブロック213で本実施の形態にかかる転送情報を生成する。
転送情報は、MPUユニット33が一度のデータ転送手順で断片化したセグメントに記憶されているデータ・ブロックを転送するためのセクタ・バッファ31のアドレス情報である。図5は、転送情報のデータ構造を示す図である。転送情報は、MPUユニット33がホスト装置11から1つのリード・コマンドを受け取ったときに、対応するデータ・ブロックがセクタ・バッファ31に断片化した状態で存在すると判断した場合に、ホスト装置11に転送する都度MPUユニット31がファームウエアを実行して生成するテーブルである。MPUユニット31は、転送情報を利用して断片化したセグメントのデータを、一度の転送動作でホスト装置11に転送することができる。
転送情報は図5(A)に示すように、セクタ・バッファのページ・アドレスとページ数で構成されている。図3(B)に示した断片化したセグメントに含まれるLBAのデータ・ブロックは、図5(A)において、各セグメントの最終LBAのページ・アドレスが1FFFh、51FFh、2FFFhの順番に並ぶように配列される。各最終LBAには、対応するセグメントのページ数が関連づけられている。そして、ブロック215では、MPUユニット33が、転送情報に基づいてセクタ・バッファのページ・アドレスを、1000h−1FFFh、5000h−51FFh、2200h−2FFFhの順番に読み出して指定されたデータ・ブロックを一度にホスト装置に転送する。
リード・コマンドで指定されたデータ・ブロックの最後のLBAが、セグメントの最終LBA(3FFFh)ではなく、たとえば3FF5hである場合の転送情報は図5(B)のようになる。この場合、LBA3FF5hのデータ・ブロックはセクタ・バッファの2FF5hのページ・アドレスに記憶されている。よって、図5(B)のように転送情報が生成され、MPUユニット33によりセクタ・バッファが転送情報に基づいて、1000h−1FFFh、5000h−51FFh、2200h−2FF5hのページ・アドレスの順番に転送される。
本実施の形態では、リード・コマンドを処理する都度、MPUユニット33がバッファ管理テーブル107のアドレス情報に基づいて転送情報を生成している。転送情報はたとえばバッファ管理テーブル107に転送の順序を示す情報を加えるようにして生成することも可能である。断片化を生じさせるような読み取りまたは書き込み動作が行われる都度バッファ管理テーブル107の状態を計算して更新することはMPUユニット33における負担が大きくなる。また、断片化が発生したときにセクタ・バッファのデータ配列自体を実際に変更して断片化を除去することも可能であるが、これもデータの移動に対するMPUユニット33の負担が大きくなるので、転送情報は本実施の形態に基づくようにデータ転送の都度生成する方が優れている。
本実施の形態では、セクタ・バッファがリング・バッファ方式でデータの記憶をする方法を例示して説明したが、本発明はこれに限定されるものではなく、LRU(Least Recently Used)アルゴリズムやFIFO(First-In First-Out ) アルゴリズムで記憶する場合でも、断片化が生ずる場合には適用することができる。
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
101…リード・バッファ
103…ライト・バッファ
105…ページ
107…バッファ管理テーブル
103…ライト・バッファ
105…ページ
107…バッファ管理テーブル
Claims (13)
- 不揮発性記録媒体とセクタ・バッファを搭載する補助記憶装置からホスト装置にデータを転送する方法であって、
前記ホスト装置から読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取るステップと、
前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索するステップと、
前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックとが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成するステップと、
前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送するステップと
を有する転送方法。 - 前記転送情報は、前記リード・コマンドの処理ごとに生成される請求項1記載の転送方法。
- 前記転送情報は、前記セクタ・バッファのページ・アドレスとページ数で構成される請求項1記載の転送方法。
- 前記複数のデータ・ブロックの全体が前記セクタ・バッファの一つのセグメントに存在する場合は、前記アドレス情報を生成しないで前記セクタ・バッファから前記複数のデータ・ブロックを読み出して前記ホスト装置に転送するステップを有する請求項1記載の転送方法。
- 前記複数のデータ・ブロックの一部が前記セクタ・バッファに存在しない場合は、前記先頭ページから連続して前記セクタ・バッファに存在するデータ・ブロックを前記ホスト装置に転送し、続いて、前記不揮発性記録媒体から残りのデータ・ブロックを前記ホスト装置に転送する請求項1記載の転送方法。
- 前記先頭データ・ブロックが前記セクタ・バッファに存在しない場合は、前記データ・ブロック全体を前記不揮発性記録媒体から読みとるステップを有する請求項1記載の転送方法。
- 補助記憶装置であって、
不揮発性記録媒体と、
ホスト装置とのデータ転送を制御するインターフェース回路と、
書き込みにかかるデータ・ブロックと読み取りにかかるデータ・ブロックを記憶するセクタ・バッファと、
前記ホスト装置と前記インターフェース回路との間で行われるデータ転送を制御する制御部とを有し、
前記制御部は、前記ホスト装置から、読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取り、前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索し、前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成し、前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送する補助記憶装置。 - 前記セクタ・バッファがリード・バッファとライト・バッファで構成され、前記リード・バッファおよび前記ライト・バッファがリング・バッファである請求項7記載の補助記憶装置。
- 前記読み取りにかかるデータ・ブロックが前記ライト・バッファに存在するセグメントと前記リード・バッファに存在するセグメントに含まれる請求項8記載の補助記憶装置。
- 前記読み取りにかかるデータ・ブロックが前記リード・バッファに存在する異なるセグメントに含まれる請求項8記載の補助記憶装置。
- 前記制御部は、前記転送情報を前記セクタ・バッファのページ・アドレスを管理するバッファ管理テーブルのアドレス情報に基づいて生成する請求項7記載の補助記憶装置。
- 前記補助記憶装置が磁気ディスク装置である請求項7記載の補助記憶装置。
- 磁気ディスク装置であって、
磁気ディスクと、
ホスト装置とのデータ転送を制御するインターフェース回路と、
書き込にかかるデータ・ブロックと読み取りにかかるデータ・ブロックを記憶するセクタ・バッファと、
前記磁気ディスク装置を制御するプロセッサと、
前記プロセッサに、前記ホスト装置から読み取りにかかる複数のデータ・ブロックのアドレスを指定したリード・コマンドを受け取るステップと、前記複数のデータ・ブロックのうち先頭に配置された先頭データ・ブロックが前記セクタ・バッファに存在するか否かを検索するステップと、前記先頭データ・ブロックと少なくとも前記先頭データ・ブロック以外のいずれかのデータ・ブロックが前記セクタ・バッファの異なるセグメントに存在する場合に、前記複数のデータ・ブロック全体のページ・アドレスを連続させる転送情報を生成するステップと、前記転送情報に基づいて前記複数のデータ・ブロックを前記セクタ・バッファから読み出して前記ホスト装置に転送するステップとを実行させるファームウエアと
を有する磁気ディスク装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006163006A JP2007334463A (ja) | 2006-06-13 | 2006-06-13 | 補助記憶装置およびデータ転送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006163006A JP2007334463A (ja) | 2006-06-13 | 2006-06-13 | 補助記憶装置およびデータ転送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007334463A true JP2007334463A (ja) | 2007-12-27 |
Family
ID=38933911
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006163006A Withdrawn JP2007334463A (ja) | 2006-06-13 | 2006-06-13 | 補助記憶装置およびデータ転送方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007334463A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100399012C (zh) * | 2000-05-22 | 2008-07-02 | 上村工业株式会社 | 用于无电复合镀敷溶液的自动分析和控制*** |
-
2006
- 2006-06-13 JP JP2006163006A patent/JP2007334463A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100399012C (zh) * | 2000-05-22 | 2008-07-02 | 上村工业株式会社 | 用于无电复合镀敷溶液的自动分析和控制*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7080200B2 (en) | System and method for handling writes in HDD using 4K block sizes | |
US8285923B2 (en) | Disk drive and method using native command queuing tags to identify logical block size and implement protection information | |
JP4634157B2 (ja) | ストレージシステム | |
JP4372134B2 (ja) | データ比較機能を有するストレージシステム | |
JP4469906B2 (ja) | 磁気ディスク装置及び同装置におけるデータリフレッシュ方法 | |
JP4922433B2 (ja) | 磁気ディスク装置及びデータブロックの書き換え方法 | |
JP2016149051A (ja) | ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法 | |
JP6089844B2 (ja) | 制御装置,ストレージ装置,及び制御プログラム | |
US20130304972A1 (en) | Control device, storage device, and storage control method | |
US20100232048A1 (en) | Disk storage device | |
US20110167203A1 (en) | Method and apparatus for cache control in a data storage device | |
JP7131053B2 (ja) | 記憶装置,情報処理プログラムおよび情報処理システム | |
JP4922442B2 (ja) | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 | |
US20070189137A1 (en) | Rotating disk storage device and recording method | |
JP2008077458A (ja) | 記憶データ処理装置、記憶装置、記憶データ処理プログラム | |
US20110022793A1 (en) | Systems And Methods For Accessing Hard Disk Drives | |
JP2008077782A (ja) | 記憶データ処理装置、記憶装置、記憶データ処理プログラム | |
US9146858B2 (en) | Control device, storage device, and storage control method | |
JP2007334463A (ja) | 補助記憶装置およびデータ転送方法 | |
JP4869416B2 (ja) | 磁気ディスク装置及び同装置におけるデータリフレッシュ方法 | |
US20100064198A1 (en) | Stored data processing apparatus, storage apparatus, medium storing stored data processing program, and stored data processing method | |
US20070174739A1 (en) | Disk device, method of writing data in disk device, and computer product | |
JP2010218485A (ja) | ストレージ装置、データ書き込み方法、及びデータ書き込みプログラム | |
US7941574B2 (en) | CKD partial record handling | |
JP2008117491A (ja) | 記録装置、記録方法、およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20090901 |