(57)【特許請求の範囲】
【請求項１】
ハードディスク制御装置のためのバッファメモリー制御装置であって、
バッファメモリーとディスクの書き込みヘッドの間で、第１の書き込み動作および第２の書き込み動作に対応する書き込み動作データをバッファに入れるように構成されたデータバッファと、
バッファメモリー内に記憶された対応する書き込み動作データの位置を識別するアドレスを、前記書き込み動作のそれぞれに対して記憶するように構成された複数のアドレスレジスターと、
少なくともアドレスレジスターに記憶された対応するアドレスに基づいて、対応する書き込み動作データを書き込み動作のそれぞれに対してバッファメモリーからデータバッファに転送するように構成された制御装置論理と
を備え、
前記制御装置論理は、
共通するトラックに書き込む前記第１の書き込み動作および前記第２の書き込み動作を識別したことに応じて、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込むか否かを判断し、
前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込む場合に、前記バッファメモリー中における前記第１の書き込み動作に対応するデータの位置を示すアドレスを第１の前記アドレスレジスターにロードした後に前記バッファメモリー中における前記第２の書き込み動作に対応するデータの位置を示すアドレスを第２の前記アドレスレジスターにロードし、当該バッファメモリー制御装置への単一のコマンドを受け取ると、前記複数のアドレスレジスターにロードされた順に対応するデータを前記バッファメモリーから前記データバッファに転送することにより、前記第１の書き込み動作に対応するデータおよび前記第２の書き込み動作に対応するデータを、前記第１の書き込み動作および前記第２の書き込み動作を受け取った順序で前記データバッファに転送し、
前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタに書き込まないことを条件として、前記バッファメモリー中における前記第２の書き込み動作に対応するデータの位置を示すアドレスを第１の前記アドレスレジスターにロードした後に前記バッファメモリー中における前記第１の書き込み動作に対応するデータの位置を示すアドレスを第２の前記アドレスレジスターにロードし、当該バッファメモリー制御装置への単一のコマンドを受け取ると、前記複数のアドレスレジスターにロードされた順に対応するデータを前記バッファメモリーから前記データバッファに転送することにより、前記第１の書き込み動作に対応するデータおよび前記第２の書き込み動作に対応するデータを、前記第１の書き込み動作および前記第２の書き込み動作を受け取った順序とは異なる順序で前記データバッファに転送する
バッファメモリー制御装置。
【請求項２】
各書き込み動作のために、バッファメモリー内に記憶された対応する量の書き込み動作データを記憶するように構成された複数のブロックカウントレジスターをさらに含む、請求項１に記載のバッファメモリー制御装置。
【請求項３】
制御装置論理はブロックカウントレジスターに記憶された量に新たに基づいて転送を行うようにさらに構成されている、請求項２に記載のバッファメモリー制御装置。
【請求項４】
ブロックカウントレジスターがＦＩＦＯとして働く、請求項３に記載のバッファメモリー制御装置。
【請求項５】
データバッファがＦＩＦＯとして働く、請求項１に記載のバッファメモリー制御装置。
【請求項６】
データバッファがディスクフォーマッターに書き込み動作データを供給するように構成された、請求項１に記載のバッファメモリー制御装置。
【請求項７】
アドレスレジスターがＦＩＦＯとして働く、請求項１に記載のバッファメモリー制御装置。
【請求項８】
アドレスレジスターが一杯かどうかを示すように構成された使用中フラグをさらに含む、請求項１に記載のバッファメモリー制御装置。
【請求項９】
アドレスレジスターの数が少なくとも４個である、請求項１に記載のバッファメモリー制御装置。
【請求項１０】
アドレスレジスターの数が少なくとも８個である、請求項１に記載のバッファメモリー制御装置。
【請求項１１】
ハードディスク装置を動作させるための方法であって、
（Ａ）第１の書き込み動作を受け取り、
（Ｂ）（Ａ）の次に第２の書き込み動作を受け取り、
（Ｃ）前記第１の書き込み動作と前記第２の書き込み動作が同じトラックにデータを書き込むことを識別し、
（Ｄ）前記第１の書き込み動作と前記第２の書き込み動作が同じトラックにデータを書き込むことを識別したことに応じて、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込むか否かを判断して、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込む場合に、バッファメモリー中における前記第１の書き込み動作に対応するデータの位置を示すアドレスを第１のアドレスレジスターにロードした後に前記バッファメモリー中における前記第２の書き込み動作に対応するデータの位置を示すアドレスを第２のアドレスレジスターにロードし、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタに書き込まないことを条件として、前記バッファメモリー中における前記第２の書き込み動作に対応するデータの位置を示すアドレスを第１の前記アドレスレジスターにロードした後に前記バッファメモリー中における前記第１の書き込み動作に対応するデータの位置を示すアドレスを第２の前記アドレスレジスターにロードし、
（Ｅ）第１の書き込み動作のデータおよび第２の書き込み動作のデータをディスクフォーマッターに供給する単一のコマンドをプロセッサから受け取り、
（Ｆ）前記第１のアドレスレジスターおよび前記第２のアドレスレジスターにロードされた順に対応するデータを前記バッファメモリーからデータバッファに転送することにより、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込まないことを条件として、第２の書き込み動作のデータをディスクに書き込み、
（Ｇ）（Ｆ）の次に第１の書き込み動作のデータをディスクに書き込む、方法。
【請求項１２】
第２の書き込み動作が第１の書き込み動作の開始セクターの数より小さい最終セクター数を有しているのを決定することをさらに含む、請求項１１に記載の方法。
【請求項１３】
ディスクの書き込みヘッドがトラックに最初に書き込むことができる位置に関連して、第２の書き込み動作が第１の書き込み動作の前に位置されることを決定することをさらに含む、請求項１１に記載の方法。
【請求項１４】
第１の書き込み動作のデータの一部分と、第２の書き込み動作のデータの一部分とが１つの周期の間にディスクに書き込まれる、請求項１１に記載の方法。
【請求項１５】
第１の書き込み動作のデータと第２の書き込み動作のデータが１つの周期の間にディスク装置に完全に書き込まれる、請求項１１に記載の方法。
【請求項１６】
ハードディスク装置のバッファメモリー制御装置を動作させる方法であって、
複数の書き込み動作を受け取り、
各書き込み動作のために、それぞれの書き込み動作の書き込み動作データのバッファメモリー内のアドレスをバッファメモリー制御装置の複数のアドレスレジスターの異なる一つにロードし、
前記複数の書き込み動作のうち少なくとも２つの書き込み動作が同じトラックにデータを書き込むことを識別したことに応じて、前記書き込み動作のいくつかが共通するセクタに書き込みデータを書き込むものであるか否かを判断し、前記少なくとも２つの書き込み動作が共通するセクタにデータを書き込む場合には、バッファメモリー中における前記少なくとも２つの書き込み動作のそれぞれに対応するデータの位置を示すアドレスを前記複数のアドレスレジスターにロードする順序を受け取った順序と同一とし、前記少なくとも２つの書き込み動作が共通するセクタにデータを書き込まないものであることを条件として、バッファメモリー中における前記少なくとも２つの書き込み動作のそれぞれに対応するデータの位置を示すアドレスを前記複数のアドレスレジスターにロードする順序を受け取った順序とは異なる順序とし、
前記複数の書き込み動作のうち少なくとも２つの書き込み動作の書き込み動作データを供給する単一のコマンドを受け取り、
前記複数のアドレスレジスターにロードされた順にデータを書き込むことにより、前記少なくとも２つの書き込み動作が共通するセクタにデータを書き込まないものであることを条件として、前記少なくとも２つの書き込み動作を受け取った順序とは異なる順序でデータを書き込む
方法。
【請求項１７】
各書き込み動作のために、それぞれの書き込み動作に関連して書き込み動作データの量を特定する値をバッファメモリー制御装置の複数のブロックカウントレジスターの異なる一つにロードすることをさらに含む、請求項１６に記載の方法。
【請求項１８】
アドレスレジスターとブロックカウントレジスターに、書き込み動作が実行される順序で書き込み動作のデータのアドレスと量がロードされる、請求項１７に記載の方法。
【請求項１９】
ディスクフォーマッターに複数の書き込み動作の書き込み動作データを提供するようにバッファメモリー制御装置に指示を出すことをさらに含む、請求項１７に記載の方法。
【請求項２０】
ディスクドライブ制御装置であって、
書き込み動作データを記憶するための第１のメモリーと、
バッファメモリー制御装置と、
制御装置論理に対してコマンドを発行するマイクロプロセッサーであって、書き込み動作が前記第１のメモリーによって受け取られた順序以外の順序で書き込み動作を行うことができるように構成されているマイクロプロセッサーと
を備え、
前記バッファメモリー制御装置は
第１のメモリーとディスクの書き込みヘッドとの間で書き込み動作データをバッファに入れるように構成された第２のメモリーと、
複数の書き込み動作ごとに、第１のメモリーに記憶された対応する書き込み動作データの位置を識別するアドレスを記憶するように構成された複数のアドレスレジスターと、
書き込み動作ごとに、少なくともアドレスレジスターに記憶された対応するアドレスに基づいて、対応する書き込み動作データを第１のメモリーから第２のメモリーに転送し、前記複数の書き込み動作のうち少なくとも２つが共通するセクタにデータを書き込むか否かを決定するように構成された制御装置論理と
を有し、
前記マイクロプロセッサーは、
（Ａ）当該ディスクドライブ制御装置によって受け取られた第１の書き込み動作を識別し、
（Ｂ）前記第１の書き込み動作の後、当該ディスクドライブ制御装置によって受け取られた第２の書き込み動作を識別し、
（Ｃ）前記第１の書き込み動作および前記第２の書き込み動作が共通するトラックに書き込むことを識別したことに応じて、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込まないものであることを条件として、前記複数のアドレスレジスターのうちの第１のアドレスレジスターに前記第２の書き込み動作の書き込み動作データの前記第１のメモリー内のアドレスをロードし、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込む場合には、前記バッファメモリー制御装置の前記第１のアドレスレジスターに前記第１の書き込み動作の書き込み動作データの前記第１のメモリー内のアドレスをロードし、
（Ｄ）前記第１の書き込み動作および前記第２の書き込み動作が共通するトラックに書き込むことを識別したことに応じて、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込まないものであることを条件として、前記複数のアドレスレジスターのうちの第２のアドレスレジスターに前記第１の書き込み動作の書き込み動作データの前記第１のメモリー内のアドレスをロードし、前記第１の書き込み動作および前記第２の書き込み動作が共通するセクタにデータを書き込む場合には、前記バッファメモリー制御装置の前記第２のアドレスレジスターに前記第２の書き込み動作の書き込み動作データの前記第１のメモリー内のアドレスをロードし、
（Ｅ）前記バッファメモリー制御装置が前記第１のアドレスレジスターによって識別されたデータを転送し、その後前記第２のアドレスレジスターによって識別されたデータを転送するように、前記バッファメモリー制御装置に対して一つのコマンドを出すように構成されている、
ディスクドライブ制御装置。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明はハードディスク制御装置に関するものであって、特に、ディスクの1 周期の間に多数の書き込み動作を順不同に行うことができるディスク制御装置およびその方法に関する。
【０００２】
（関連技術の説明）
ハードディスクドライブがホストコンピュータによって要求された読み出しおよび書き込み動作を行う速度は、コンピュータの性能にとって重要である。ハードディスクドライブによるいかなる遅延も、コンピュータによるプログラムの実行においてそれと対応する遅延を引き起こしやすい。ハードディスク技術におけるいくつかの開発において、個々のディバイス動作の応答時間を短くしたり、データ転送速度を増したりすることに焦点をあてている。ハードドライブ技術における他の開発では、多数の動作を行うのにかかる時間を短くすることに焦点をあてている。後者のタイプの開発のうちの2 つが米国特許第4 ，667 ，286 号および第6 ，029 ，226 号において記載されている。
【０００３】
「ディスクと中央演算処理装置間のデータ転送のための方法および装置」と題する米国特許第4 ，667 ，286 号は、トグリングデータバッファを備えた構造を開示している。その構造によれば、多数の動作をディスクの1 周期の間に行うことができる。データは中央演算処理装置と最初のデータバッファの間を転送される一方で、データは2 番目のデータバッファとディスク間で転送される。バッファの動作は、データが中央演算処理装置と2 番目のデータバッファ間で転送されている一方で、1 番目のデータバッファとディスク間を転送されるように、トグルされ得る。
【０００４】
「2 つの書き込みコマンドを1 つの書き込みコマンドとして処理することによってオプションのスキップで自動書き込みデータ転送をする方法および装置」と題する米国特許第6 ，029 ，226 号は書き込みコマンドを組み合わせる方法を提示している。2 番目の書き込みコマンドの1 番目の論理ブロックアドレス（LBA ）と1 番目の書き込みコマンドの最後のLBA との近さが比較される。もし2 番目の書き込みコマンドが充分に近いなら、ディスク制御装置は組み合わせた書き込みの間に2 つのコマンド間のセクターをスキップしながら、2 つの書き込みコマンドを1 つの書き込みコマンドとして実行する。それゆえ、2 個の書き込みがハードディスクの1 周期(single revolution) で行われ得る。
【０００５】
ディスク制御装置によって受け取られた順序以外の順序で書き込み動作を実行することがよい場合もある。順不同で書き込み動作をすることによって、ディスクの複数の周期よりむしろ単一周期の間に書き込みが行われることが可能となる。そのため、動作にかかる時間が短くなる。本発明はとりわけこの点を追及している。
【０００６】
【課題を解決するための手段】
（発明の要約）
好ましい実施例において、ハードディスク装置は、ディスクと、制御装置マイクロプロセッサーと、ホストバスインターフェースと、バッファメモリーと、バッファメモリー制御装置と、ディスクフォーマッターとを含む。書き込み動作は、バスインターフェースによって受け取られ、各書き込み動作に対応する書き込み動作のデータがバッファメモリー内の円形バッファに記憶される。バッファメモリー制御装置は、円形バッファを実行し、バッファメモリーへの読み出しおよび書き込みアクセスを制御する。書き込み動作データが到着すると、バッファメモリー制御装置は、その動作がハードディスク装置によって受け取られた順序で円形バッファにデータを連続して記憶する。
【０００７】
マイクロプロセッサーからのコマンドを受け取ると、一般的には、バッファメモリー制御装置は、書き込み動作のデ―タをバッファメモリーから、データをフォーマット化してディスクに書き込むディスクフォーマッターに転送する。一実施例では、バッファ制御装置は、最初の書き込み動作のデータがディスクに書き込まれたあとであっても、円形バッファからデータを転送し続ける。バッファ制御装置は、ハードディスク装置によって受け取られた順序で動作ごとにデータを供給する。マイクロプロセッサーは、単に次に受け取られた動作のデータを書き込み続けるようにディスクフォーマッターにコマンドを出すこともできる。
【０００８】
好ましい実施例では、バッファメモリー制御装置はまた、1 組のアドレスレジスターと1 組のブロックカウントレジスターを含む。これらのレジスターは、バッファ制御装置がマイクロプロセッサーからのただ１つのコマンドを用いて、コマンドが受け取られた以外の順序でいくつかの動作のデータをバッファメモリーから転送できるようにする。
【０００９】
好ましい実施例では、マイクロプロセッサーは、２個以上の書き込み動作のデータのバッファメモリー内のアドレスをアドレスレジスターにロードする。マイクロプロセッサーは対応する動作のブロック内の大きさをブロックカウントレジスターにロードする。マイクロプロセッサーは次に、バッファメモリー制御装置に一つのコマンドを出して、アドレスレジスターとブロックカウントレジスターによって識別されたデータをバッファメモリーからディスクフォーマッターに転送する。バッファ制御装置はまず、1 番目のアドレスレジスターとブロックカウントレジスターによって識別されたデータを転送し、次に2 番目のアドレスレジスターとブロックカウントレジスター、といったように、以下同様である。アドレスレジスターとブロックカウントレジスターによって、バッファメモリー制御装置はバッファ内のデータの置かれている順序に関係なくいかなる順序でも円形バッファから書き込み動作のデータにアクセスできる。
【００１０】
マイクロプロセッサーは一般に、ディスクの1 周期の間に並行して2 番目または追加の動作のためのデータを遅れずに供給するようにバッファ制御装置に2 番目または追加のコマンドを出すほど動作は速くない。一般には、マイクロプロセッサーがバッファメモリー制御装置をセットして追加のコマンドを出すまでに、書き込まれるべきセクターは書き込みヘッドを過ぎ、ディスクの1 周期は終わっている。しかしながら、好ましい実施例によれば、例え動作がディスクに書き込まなくてはならない順序以外の順序で受け取られたとしても、同じトラックへの2 個以上の書き込み動作がディスクの1 周期の間に完了できる。
【００１１】
本発明は添付の図面に関連して以下に説明される。
【００１２】
【発明の実施の形態】
（実施例の詳細な説明）
以下の説明では、本発明の一部を成し、かつ本発明の実施にあたっての特定の実施例または過程を図示する添付の図面を参照する。同じまたは同様の構成要素にはそれらの図面を通して、できる限り同じ参照符号が付されている。本発明を徹底して理解するために、多くの特定の詳細が述べられる場合もあるが、本発明は特定の詳細がなくても実施されてもよいし、また、その代わりの同等の構成要素およびここで述べられた方法で実施されてもよい。あるいは、公知の方法および構成要素は本発明の特徴を不必要にあいまいにしないように詳細には説明されていない。
【００１３】
I ．ハードディスク制御装置の動作
A ．コンピュータシステム
第1 図はホストシステム120 の大容量記憶装置としてハードディスク装置110 が利用されるコンピュータシステムの典型的な形態を示す。ホストシステム120 はコンピュータシステムのマザーボードであることが好ましく、一般的には、１個以上のマイクロプロセッサーや、RAM や、あるいは他の構成要素を接続するシステムバス122 を含む。ハードディスク装置110 、は一般的にはディスク114 を制御するハードディスク制御装置112 を含む。ディスク114 は一般的に、図示されていない読み出し及び書き込みヘッドにより読み出されたり、書き込まれたりする回転磁気媒体のプラターをいくつか含む。例示された実施例では、ハードディスク制御装置112 は先進技術連結（ATA ：Advanced  Technology  Attachment）バス116 を介してホストシステムに接続されている。このATA バス116 はまた、入出力バスブリッジアダプター124 を介してホストシステムバス112 に接続されている。アダプター124 はホストシステムバス122 とATA バス116 の異なるプロトコル及び技術のブリッジとなっている。SCSIやUSB やファイヤーワイヤーといった別の技術がATA バス116 の代わりに用いられてもよい。
【００１４】
一般的に、ホストシステム120 は、ATA バス116 を介してハードディスク制御装置112 に対して読み出しおよび書き込み動作を送信する。一般的に、読み出し動作は、データの開始論理ブロックアドレス（LBA ）のディスク上の位置によって要求されたデータを見分ける。LBA は、ヘッド、トラックおよびデータのブロック（512K）のセクター番号を特定する。一般的には、1 セクターは1 ブロックのデータを保持する。要求により、ハードディスク装置110 は、ATA バス116 を介して要求されたデータを読み出してホストシステム120 に送り返すことにより応答する。一般的に、書き込み動作は、書き込むべきディスク上の位置の開始LBA を見分ける。データはホストシステム120 からハードディスク制御装置112 に送られ、特定されたLBA で始まるディスクに書き込まれる。
【００１５】
B ．ハードディスク制御装置
第2 図はハードディスク制御装置112 の一般的な形態を示す。ハードディスク制御装置112 は一般的に、マイクロプロセッサー204 と、1 組のファームウェアのコード205 と、バッファメモリー206 と、ハードディスク制御装置のコア210 を含む。制御装置コア210 はATA バス116 とディスク114 間のデータのフローを処理する。一般的に、制御装置のタスクにはディスク114 とバッファメモリー206 間でデータを転送したり、バッファメモリー206 とATA バス116 間でデータを転送したり、エラーの修正を行ったり、CRC 計算を行ったりすることが含まれる。また、制御装置コア210 の動作は、一般的にファームウェアコード205 の一組を実行する制御装置マイクロプロセッサー204 によって制御される。ファームウェアコード205 は不揮発性メモリーに保存されてもよい。マイクロプロセッサーもまたディスク114 への図示されていない追加のインターフェースを有して、ディスク114 の読み出し／書き込みヘッドを適切なトラックに移動させるといったタスクを処理してもよい。バッファメモリー206 は遅延や、待ち時間や2 つの装置のタイミング差を補うためにディスク114 とATA バス116 間でデータをバッファに入れるために用いられる。ある形態では、バッファメモリー206 もまた、制御装置マイクロプロセッサー204 のためのメモリーとしての役割をする。バッファメモリー206 の大きさはそのアプリケーションによるが、256 キロバイトから8 メガバイトの範囲である。
【００１６】
制御装置コア210 は一般的に、ATA バスインターフェース220 と、バッファメモリー制御装置230 と、ディスクフォーマッター240 を含む。ATA バスインターフェース220 は、ATA バスプロトコルを実現して書き込みおよび読み出し動作を受け取り、ホストシステム120 に読み出したデータを送信する。書き込み動作222 は点線で示され、バスインターフェース220 を通過することがわかる。書き込み動作のLBA は一般にマイクロプロセッサー204 によって読み出されて記憶される。バスインターフェース220 はバッファメモリー制御装置240 を介してデータをバッファメモリー206 に送る。
【００１７】
バッファメモリー制御装置230 は、ATA バスインターフェース220 とディスクフォーマッター240 とマイクロプロセッサー204 によってバッファメモリー206 へのインターリーブアクセスを制御する。バッファメモリー制御装置230 によるバッファメモリー206 の制御は、一般に先に述べたバッファメモリー206 とそれにアクセスする装置間でデータをバッファに入れることの他に種々の装置によるアクセスをアービトレイト（調停）することを含む。バッファメモリー制御装置230 は、一般に、ATA バスインターフェース220 とバッファメモリー206 間でデータをバッファに入れるATA バスインターフェースデータFIFO（先入れ先出しバッファ）232 と、バッファメモリー206 とディスクフォ―マッター240 間でデータをバッファに入れるディスクフォーマッターデータFIFO234 と、バッファ制御装置230 の機能性を制御するバッファ制御装置論理236 とを含む。一般にバッファ制御装置230 は、好ましくはポインターを使ってバッファメモリー206 内でバッファ制御装置230 が実現する円形データバッファ208 に書き込み動作データを記憶する。ATA バスインターフェースデータFIFO232 とディスクフォーマッターデータFIFO234 は比較的小さなFIFOバッファであって、それぞれ64バイト程であるのが好ましい。一方、円形データバッファ208 はずっと大きいのが好ましく、バッファメモリー206 全体を占有するほどで、実施形態にもよるが、256 キロバイトから8 メガバイトである。
【００１８】
ディスクフォーマッター240 はディスク114 への実際のデータの書き込みを制御する。一般にディスクフォーマッター240 は、バッファメモリー制御装置を介してバッファメモリー206 からデータ―を受け取り、エラー修正コードを加えることがありえるが、ディスクに書き込むためにデータをフォーマット化し、ディスクの書き込みヘッドにデータを送る。ディスクフォーマッター240 はまた、書き込みヘッドにデータを送るための適切なタイミングを決定するためにディスクの読み出し／書き込みヘッドが配置されるトラックのセクターをモニターする。ディスクフォーマッターの機能性はディスクフォーマッター論理242 によって制御される。
【００１９】
第3 図は典型的なディスク書き込み時のホストシステム120 からディスク114 へのデータの流れを示す。データはまず、ATA バス116 を介して、ホストシステム120 からハードディスク制御装置112 のATA バスインターフェース220 に送信される。ATA バスインターフェース220 は、バッファメモリー制御装置230 のATA バスインターフェースFIFO232 を介してバッファメモリー206 の円形データバッファ208 にデータを送信する。そのデータはディスク114 に書き込まれるまで円形データバッファ208 にある。もし、ディスクヘッドが正しく位置決めされ、マイクロプロセッサー204 がデータをディスク114 に書き込む準備ができていると決定したなら、マイクロプロセッサー204 はバッファ制御装置230 にコマンドを出してデータをディスクフォーマッターデータFIFO234 に送信し始める。マイクロプロセッサー204 もまたディスクフォーマッター240 にコマンドを出して、ディスクフォーマッターデータFIFO234 からデータを読み出し、そのデータをフォーマット化し、ディスク114 の書き込みヘッドにデータを送信し始めるようにする。一般に、ディスクフォーマッターの1 つのコマンドはディスクフォーマッター240 にディスク上の1 個のトラックにデータを書き込む指示をするのみである。例えば、数メガバイトのオーダーの大きな書き込み動作の場合、円形のデータバッファ208 にすでに置かれていた先のデータはディスクフォーマッター240 によって読み出され、一方で、同じ動作のための後のデータがATA バスインターフェース220 によって円形データバッファ208 に書き込まれている。もし書き込み動作が多数のトラックに書き込むことを含むなら、ディスクフォーマッター240 が各トラックにデータを書き込んだ後に、マイクロプロセッサー204 が書き込みヘッドを次のトラックに移動させ、ディスクフォーマッター240 に更なるコマンドを出して次のトラックにデータを書き込むようにする。
【００２０】
第4 図は書き込み動作中の円形データバッファ208 の動作を示す。例示された例では、3 つの書き込み動作のデータがATA バスインターフェース220 によってバッファメモリー206 に書き込まれている。バッファメモリー制御装置230 は書き込みポインター402 を更新して、制御装置がATA バスインターフェース220 からの入力データを書き込むバッファメモリー206 内のアドレスを示すようにする。データが書き込まれると、ポインター402 は更新される。もし書き込みポインター402 が円形バッファ208 の最後に達したら、ポインター402 は円形バッファを機能させるために他方の端に戻される。読み出しポインター404 はディスクフォーマッター240 に転送されるためにデータが円形バッファ208 から読み出されるアドレスを示す。例示された例では、バッファ208 内にある3 つの書き込み動作のデータはまだディスクフォーマッター240 に転送されていない。データが読み出されると、バッファメモリー制御装置論理236 のデフォルト動作が円形バッファ208 内の読み出しポインター404 を進める。読み出しポインターは書き込みポインターと同様、最終的にはもとに戻される。一実施例では、バッファ制御装置がリセットされない限り、ディスクフォーマッター234 がディスクフォーマッターデータFIFO234 からデータを読み出し続けている間、読み出しポインター404 は書き込み動作のデータを通って継続的に進む。しかしながら、書き込みポインター404 は一般に読み出しポインター402 を超えない。
【００２１】
第5 図はバッファメモリー制御装置230 とディスクフォーマッター240 をより詳細に示す。バッファメモリー制御装置230 は、読み出しポインター404 が書き込み動作の間維持されているディスクフォーマッター（DF）バッファアドレスレジスター502 を含む。一般に、バッファアドレスレジスター502 はまずマイクロプロセッサー204 によってロードされる。しかしながら、バッファメモリー制御装置論理236 は、データがディスクフォーマッターデータFIFO234 に送信されると、自動的にバッファアドレスレジスター502 を進める。
【００２２】
一般に、ディスクフォーマッター240 はセクター要求レジスター512 と、セクターカウントレジスター514 と、一組のスキップセクターレジスター516 とを備えている。マイクロプロセッサー204 はそのセクター要求レジスター512 と、セクターカウントレジスター514 と、スキップセクターレジスター516 に適切な値をロードすることによって、そしてディスクフォーマッター240 にコマンドを出すことによってディスク動作を開始する。セクター要求レジスター512 にはそのコマンドに応じて、トラック上に書き込まれるべき最初のセクターのセクター番号がロードされる。セクターカウントレジスター514 には動作中に書き込まれるセクター数がロードされる。一般に、8 個のスキップセクターレジスター516 がある。それぞれのスキップセクターレジスター516 は、一般に10ビットセクターIDフィールドと4 ビット長のフィールドを有し、コマンドの実行中にスキップされる特有のセクターを識別する。一般に、欠陥のあるセクターがスキップされる。4 ビット長のフィールドは、IDフィールドによってポイントされたセクターから始まる範囲値を提供する。その範囲値はスキップレジスターが有効でない時ゼロに設定される。スキップセクターレジスター516 へのアクセスは、単一のFIFO同様のインターフェースを通る。スキップセクターレジスター516 は昇順にロードされなければならない。コマンドの実行中にセクター要求レジスター512 はスキップセクターレジスターと比較されて、セクターがスキップされるべきか決定する。スキップされたセクターはセクターカウントとしてカウントされない。
【００２３】
C ．書き込み動作を処理する一般的な方法
第6 図はハードディスク制御装置112 が書き込み動作を処理する方法600 を示す。ステップ602 では、ハードディスク制御装置112 のATA バスインターフェース220 がホストシステム120 からの書き込み動作222 を受け取る。一般に、書き込み動作222 はディスクに書き込まれるデータとデータが書き込まれるディスク上の開始位置を識別するLBA とを含む。
【００２４】
ステップ604 では、ATA バスインターフェース220 がバッファメモリー206 の円形データバッファ208 にデータを送信する。バッファメモリー206 にデータを送信するために、ATA バスインターフェース220 はバッファメモリー制御装置230 のATA バスインターフェースFIFO232 にデータを書き込む。次に、バッファメモリー制御装置230 は円形データバッファ208 の書き込みポインター402 を維持し、バッファメモリー206 にデータを書き込む。バッファメモリー制御装置230 は、ATA バスインターフェースFIFO232 からのデータの書き込みを、例えば、ディスクフォーマッターデータFIFO234 および制御装置マイクロプロセッサー204 といったバッファメモリーにアクセスする他の装置からの読み出し及び書き込みとインターリーブする。
【００２５】
ステップ606 では、マイクロプロセッサー204 はATA バスインターフェース220 からLBA を読み出し、書き込み動作222 のLBA を記憶する。一般に、制御装置マイクロプロセッサー204 はその処理メモリーとしてバッファメモリー206 の一部を利用する。この場合、マイクロプロセッサー204 はバッファメモリー制御装置230 を介してバッファメモリーにアクセスして、バッファメモリー206 にLBA を記憶させてもよい。制御が方法600 の残りのステップに進む前に、ステップ606 からステップ602 への矢印に示されるように、ATA バスインターフェース220 によって追加の書き込み動作が受け取られてマイクロプロセッサー204 によって処理されるかもしれない。
【００２６】
ステップ608 では、マイクロプロセッサー204 は受け取られた書き込み動作を実行するかを決定する。マイクロプロセッサー204 はその動作をいつ実行するかを決定するために、周知の技術に従ってファームウェアコード205 によってプログラミングされるのが好ましい。
【００２７】
ステップ610 では、マイクロプロセッサー204 はバッファメモリー206 内の書き込み動作データの開始アドレスをディスクフォーマッターバッファアドレスレジスター502 にロードする。ステップ612 では、マイクロプロセッサー204 は書き込み動作のためのバッファ制御装置204 のプログラミングを完了する。このステップには陳腐データ(stale data)のディスクフォーマッターデータFIFO234 のクリアおよび／またはバッファメモリー制御装置230 のコマンドレジスターへのコマンドのローディングが含まれるかも知れない。
【００２８】
ステップ614 では、バッファメモリー制御装置230 は、バッファメモリー206 からディスクフォーマッターデータFIFO234 にデータを送信し始める。ディスクフォーマッター240 がFIFO234 からデータを読み出すと、バッファメモリー制御装置230 はFIFO234 がアンダーフローをしないようにしてデータをFIFO234 に書き込む。
【００２９】
ステップ616 では、マイクロプロセッサー204 はディスク114 の書き込みヘッドを適切なトラックに移動するために必要な、すべての追加の構成要素をプログラミングする。書き込みヘッドの移動を制御する回路は、制御装置コア210 の外部にあるのが好ましいが、コア210 内に含まれていてもよい。ステップ616 はステップ610 とステップ608 の間で行われてもよい。
【００３０】
ステップ618 では、マイクロプロセッサー204 は、ディスクフォーマッター240 のセクター要求レジスター512 にトラックに書き込まれる書き込み動作の最初のセクターのセクターIDをロードする。ステップ620 では、マイクロプロセッサー204 はセクターカウントレジスター514 にトラックに書き込まれるセクター数をロードする。書き込み動作が多数のトラックに渡っている場合、トラックに書き込まれるセクター数はすべての動作におけるブロック数より少ないかもしれない。この場合、ディスクフォーマッター240 は現在のトラックの書き込みが完了してから次のトラックにデータを書き込むようにプログラミングされる。
【００３１】
ステップ622 では、マイクロプロセッサー204 は、スキップセクターレジスター516 にトラックに書き込んでいる間スキップされるべきトラック上の欠陥セクタを識別するデータをロードする。ステップ624 では、マイクロプロセッサー204 はトラックへの書き込みのためのディスクフォーマッター240 のプログラミングを完了する。一般にこのステップにはディスクフォーマッター240 のコマンドレジスターにコマンドをロードすることが含まれる。
【００３２】
ステップ626 では、ディスクフォーマッター240 は、マイクロプロセッサー204 によってそのコマンドレジスターにロードされたコマンドの実行を開始する。ディクスフォーマッター240 はディスクフォーマッターデータFIFO234 からデータを読み出し、ディスク114 に書き込むためにデータをフォーマット化し、ディスク114 の書き込みヘッドにデータを送る。ディスク114 に書き込むためのデータのフォーマット化には巡回冗長検査（Cyclic  Redundancy  Check ）コードをデータに追加することが含まれるかもしれない。一般に、ディスクフォーマッター240 はまた、ディスク114 の書き込みヘッドにデータを送信する適切なタイミングを決定し、その結果データはトラック上の適切な位置に書き込まれる。
【００３３】
ステップ628 では、ディスクフォーマッター240 は現在のトラックへの最後のセクターの書き込みを完了する。ステップ630 では、ディスクフォーマッター240 は制御装置マイクロプロセッサー204 に割り込みを送り、トラックへの書き込みの成功状態を示す。一般に書き込みは成功しているであろう。もし、書き込みに失敗があれば、マイクロプロセッサーがその問題に対処する。
【００３４】
ステップ632 では、マイクロプロセッサーは現在の書き込み動作に関連した別のトラックへの書き込むためのデータがあるかを決定する。もし別のトラックに書き込む付加的なデータがまだ残っているなら、制御はステップ616 に戻る。ステップ616 から、マイクロプロセッサーは書き込みヘッドを次のトラックに移動して次のトラックに更なるデータを書き込むためにディスクフォーマッター240 をプログラミングする。
【００３５】
ステップ632 では、もし別のトラックに書き込むデータがもうなくて現在の書き込み動作が終了しているなら、ディスク制御装置112 は別の書き込み動作の受け取りまたは実行をする準備ができている。従って、別の書き込み動作がすでに受信されたかどうかによって、ステップ602 またはステップ608 のいずれかに行く。
【００３６】
D ．性能をよくするための書き込み動作の組み合わせ
一実施例において、マイクロプロッセサー204 はバッファメモリー制御装置230 へのたったひとつのコマンドで2 個以上の書き込み動作を完了するようにプログラミングされてもよい。バッファメモリー制御装置は、最初の動作が完了する前に、円形データバッファ208 内の最初の書き込み動作のデータの後、2 番目の書き込み動作からのデータが連続して書き込まれている限り、ステップ610 からステップ614 のように再びプログラミングされる必要は無い。バッファメモリー制御装置230 はディスクフォーマッター240 がデータを読み出している限り、円形データバッファ208 からディスクフォーマッターデータFIFO242 にデータを供給し続けるように構成されているのが好ましい。従って、バッファメモリー制御装置230 は、最初の書き込み動作のデータの最後がディスクフォーマッター240 によって読み出され、ディスクに書き込まれても、円形データバッファ208 からディスクフォーマッターデータFIFO234 にデータを供給し続ける。FIFO234 を再び満たす(refill)ためにバッファメモリー制御装置230 が自動的に供給するデータは、2 番目の書き込み動作のデータとなる。そのため、この場合バッファメモリー制御装置230 は、再びプログラミングされる必要がなく、プロセス600 のステップ610 からステップ614 はとばすことができる。
【００３７】
一実施例では、マイクロプロセッサー204 はまた、ディスクフォーマッター240 への単一のコマンドを用いて2 個の書き込み動作からデータを部分的にまたは完全に書き込むようにプログラミングされてもよい。ディスクフォーマッターへの単一のコマンドは、先の動作の最後のLBA が同じトラックを有するが、次の動作の開始LBA より小さいセクター番号を有する時に利用することができる。この場合、マイクロプロセッサーは2 つの動作の間のセクターをスキップするようにディスクフォーマッター240 に指示を出すことによって、単一の動作として2 つの動作を処理することができる。これは書き込み動作の間でスキップされるレジスターを1 個以上のスキップセクターレジスター516 にロードすることによって達成できる。
【００３８】
前述の技術により、2 つ以上の動作のためにバッファ制御装置230 および／またはディスクフォーマッター240 のプログラミングを組み合わすことができる。2 つ以上の動作のためにディスクフォーマッター240 のプログラミングを組み合わせる1 つの利点は書き込み動作が単一の周期で完了できることである。
【００３９】
一般に、マイクロプロセッサー204 はディスクフォーマッター240 に比べてずっと長い応答時間を有し、反応時間がずっと遅い。一般に、ディスク114 の1 周期の間にマイクロプロセッサー204 が2 番目の書き込み動作のためにディスクフォーマッター240 を再度プログラミングすることができるように、ディスクフォーマッター240 が書き込み動作の終了と同時にマイクロプロセッサー204 に割り込んだ後には充分な時間がない。従って、ディスク114 の単一の周期の間に1 つ以上の書き込み動作を完了するために、2 つ以上の書き込み動作がディスクフォーマッター240 への単一のコマンドで完了されなければならない。2 つ以上の動作のためにディスクフォーマッター240 のプログラミングを組み合わせるには、これらの動作のためにバッファ制御装置230 のプログラミングもまた組み合わさなくてはならない。これは、マイクロプロセッサー204 もまた一般的には書き込み動作の間にバッファ制御装置230 を再度プログラミングするほど速くないからである。
【００４０】
すでに述べたように、制御装置マイクロプロセッサー204 は一般に、書き込み動作の間にバッファメモリー制御装置230 またはディスクフォーマッター240 を再度プログラミングできるほど速くない。また、ディスクフォーマッターは、例えば、データを書き込むためにタイミングシーケンスを始めるといったような、トラック上の最初のセクターを検索することによって各コマンドを実行し始めるように構成されている場合がある。この場合、ディスクフォーマッター240 は、マイクロプロセッサー204 の速度にかかわらず、1 周期につき1 つのコマンドのみを実行することしかできない。従って、ディスク上の同じトラックにデータを書き込むいくつかの書き込み動作が単一の周期で行われる場合、一般的に書き込み動作はバッファ制御装置230 とディスクフォーマッター240 のそれぞれに対して1 つのコマンドで終了されなくてはならない。
【００４１】
1 つ以上の書き込み動作をディスク114 の単一の周期で実行することにより、実質的に書き込みのスピードはアップする。例えば、もし2 つの書き込みが単一の周期で行われるなら、実行時間は別々に書き込みを行う場合の半分に減る。もし、4 つの書き込みを1 周期で行うなら、その実行時間は個別に行う場合の4 分の1 、多くても3 分の1 に減るであろう。
【００４２】
E ．前述の技術の制限
以上述べられた技術はいくつかの書き込み動作を行う時間を短くするために利用されることがあるが、これらの技術は利用できない場合がある。例えば、もし、書き込み動作が到着する順序がディスク上のそれぞれの書き込み動作の順序に対応していない場合は、これらの技術は利用することができない。
【００４３】
第7 図は書き込みヘッド704 に関連したハードディスクプラター702 の概略図である。ディスク702 は反時計回りに回転している。また、プラター700 のトラック704 の1 つに対して3 つの別々の書き込み動作（書き込み1 と書き込み2 と書き込み3 ）のセクターが示されている。動作のセクターは書き込みヘッド704 の下を、動作３が最初に、動作２が２番目に、動作１が３番目に通過するようになっている。もし書き込み動作1 が最初にハードディスク制御装置112 に到着するとしたら、動作2 は2 番目に到着し、動作3 は3 番目に到着する。書き込み動作は第4 図に示されるように、これと同じシーケンスでバッファメモリーに記憶される。従って、動作が円形データバッファ208 に記憶されている順序はトラック704 上の動作セクタの順序に対応しない。その結果、バッファメモリー制御装置230 がディスクに正しい順序で書き込むようにそれぞれの動作のデータを供給するためのプログラミングは単一のコマンドではできない。
【００４４】
上述されたバッファメモリー制御装置230 は、１つのコマンドで、円形データバッファ208 に置かれているのと同じ順序でデータを供給するように構成されている。その結果、もし、2 つの動作が同じトラックに対してその書き込み動作が順不同なら、その連続した動作のデータは1 つのバッファ制御装置のコマンドでは得られない。
【００４５】
以下の好ましい実施例で示されるように、バッファ制御装置240 はマイクロプロセッサー204 からの1 つのコマンドを用いて円形データバッファ208 の違うセクションからデータを不連続の順序で供給することができる構成要素を新たに加えることができる。
【００４６】
II．好ましい実施例
A ．増補バッファメモリーおよびディスクフォーマッター
第8 図はマイクロプロセッサー204 からの単一のコマンドでバッファメモリー206 から不連続の読み出しを行うために増補されたバッファメモリー制御装置830 の好ましい実施例を示す。バッファメモリー制御装置830 はバッファメモリー制御装置230 の第4 図に示されるすべての構成要素を含むことが好ましい。バッファメモリー制御装置830 はまた1 組のアドレスレジスター852 と、作業ディスクフォーマッターバッファアドレスレジスター802 と、1 組のブロックカウントレジスター862 と、作業ブロックカウントレジスター864 と、使用中フラグ854 と、組み合わせ書き込み論理870 とを含むことが好ましい。
【００４７】
1 組のアドレスレジスター852 には8 個以上のレジスターがあるのが好ましい。4 個か3 個か2 個のアドレスレジスターを使用することも可能であるが、バッファメモリー制御装置830 およびディスクフォーマッター240 への1 組のコマンドで書き込むことができる書き込み動作の数が限定されてしまう。マイクロプロセッサー204 は、トラックに書き込まれる書き込み動作のうちの1 つのためにバッファメモリー206 のデータの開始アドレスを各アドレスレジスター852 にロードする。アドレスレジスター852 は、書き込み動作が行われる順序でロードされる。アドレスレジスター852 はスキップセクターレジスター516 と同様に、FIFOのようなインターフェースを介してマイクロプロセッサー204 によって書き込まれるように構成されているのが好ましい。１組のアドレスレジスター852 内のそれぞれのアドレスは、書き込み動作の間にやがては作業ディスクフォーマッターバッファアドレスレジスター802 に転送される。作業アドレスレジスター802 はバッファアドレスレジスター502 と実質的に同様の機能をする。
【００４８】
ブロックカウントレジスター862 の数はアドレスレジスター852 の数と一致する。マイクロプロセッサー204 は、対応する書き込み動作のために、トラックに書き込まれるバッファメモリー206 に記憶されたデータのブロック数をブロックカウントレジスター862 の各々にロードする。ブロックカウントレジスター862 は書き込み動作が行われる順序でロードされる。アドレスレジスター852 同様、ブロックカウントレジスター862 はスキップセクターレジスター516 と同様に、FIFOのようなインターフェースを介してマイクロプロセッサー204 によって書き込まれるように構成されているのが好ましい。ブロックカウントレジスター862 内の各ブロックカウントはやがて、書き込み動作の間に作業ブロックカウントレジスター864 に送られる。作業ブロックカウントレジスター864 は、動作ごとにバッファメモリー206 からディスクフォーマッターデータFIFO234 にブロック数が転送されている間に、転送される残りのブロック数をカウントダウンするのに用いられる。
【００４９】
使用中フラグ854 は、アドレスレジスター852 およびブロックカウントレジスター862 が一杯かどうかを決定するためにマイクロプロセッサー204 により読み出されることができるレジスターまたはレジスター内の1 ビットであることが好ましい。もしレジスターが852 と862 が一杯であると設定するなら、そのビットが設定される。もしレジスターが852 と862 が一杯でないと設定するなら、そのビットはクリアされる。
【００５０】
組み合わせ書き込み論理870 は、ブロックカウントレジスター862 と、アドレスレジスター852 と、作業ブロックカウントレジスター864 と、使用中フラグ854 の機能性を制御するために、バッファメモリー制御装置論理236 に加えられるのが好ましい。論理870 はバッファメモリー206 内の動作データの順序に関わらず、マイクロプロセッサー204 によって供給された1 つのコマンドからディスクフォーマッターデータFIFO234 に多数の書き込み動作のデータを転送するようにこれらの素子を制御する。
【００５１】
好ましい実施例のディスクフォーマッター240 は実質的に変更されていない。しかしながら、スキップセクターレジスター516 の数は増加するのが好ましい。好ましい実施例では、同じトラック上の2 個以上の書き込み動作間での追加のセクタースキップを処理するために、8 個の代わりに16個のスキップセクターレジスター516 となっている。
【００５２】
B ．バッファメモリー制御装置による方法
第9A図および第9B図は、順不同で受け取られた書き込み動作に対して、組み合わされた書き込み機能を達成するために、その組み合わせた書き込み論理870 とバッファメモリー制御装置論理236 の制御のもとで、制御装置830 によって行われる好ましい方法900 および950 を示す。この方法900 および950 は好ましくはインターリーブされて同時に行われてもよい。方法900 は使用中フラグ854 をセットし、方法950 は作業バッファアドレスレジスター802 および作業ブロックカウントレジスター864 を扱う。
【００５３】
方法900 のステップ902 では、バッファメモリー制御装置830 はアドレスレジスター852 およびブロックカウントレジスター862 においてデータを受け取る。ステップ904 では、制御装置830 がアドレスレジスター852 およびブロックカウントレジスター862 が一杯かどうか決定する。もし、レジスター852 および862 が一杯なら制御装置830 は使用中フラグ854 をセットする。もし、レジスター852 および862 が一杯でないなら、制御装置830 はステップ902 に戻す。
【００５４】
方法950 のステップ952 では、バッファメモリー制御装置830 は多数の動作のデータを転送するために、アドレスレジスター852 およびブロックカウントレジスター862 の使用を選択するマイクロプロセッサー204 からのコマンドを受け取る。これらのレジスター852 および862 の使用は、マイクロプロセッサー204 のオプションであるのが好ましく、そのオプションは組み合わされるべき動作が順不同で到着している時にのみ選択される。
【００５５】
ステップ954 では、バッファメモリー制御装置830 は書き込み動作のためにデータのアドレスをアドレスレジスター852 から作業アドレスレジスター802 に転送する。アドレスはアドレスレジスター852 からアドレスレジスター852 がマイクロプロセッサー204 によってロードされた順序で転送される。要するに、アドレスレジスター852 はFIFOの機能を有することが好ましい。ステップ956 では、制御装置830 が書き込み動作のためにブロックカウントをブロックカウントレジスター862 から作業ブロックカウントレジスター864 に転送する。ブロックカウントレジスター862 もまたFIFO機能を有する。ステップ858 では、レジスター852 およびレジスター862 のそれぞれの組の少なくとも1 つの位置が空にされているので、制御装置が使用中フラグをクリアにする。
【００５６】
ステップ960 では、制御装置830 はバッファメモリー206 からディスクフォーマッターデータFIFO234 にデータを転送し始め、これは作業アドレスレジスター802 におけるアドレスから始める。制御装置は作業アドレスレジスター802 を読み出しポインターとして利用するのが好ましく、データをバッファメモリー206 から読み出すとレジスター802 は増加する。
【００５７】
ステップ962 では、バッファメモリー206 からディスクフォーマッターデータFIFO234 にデータの各ブロック（512K）を転送し始めると、制御装置830 は作業ブロックカウントレジスター864 を減少させる。
【００５８】
ステップ964 では、制御装置830 は、作業ブロックカウントレシスター864 がゼロになるのを待機する。これによって、動作の最後のブロックがバッファメモリー206 からディスクフォーマッターデータFIFO234 に転送し始めていることがわかる。ステップ966 では、制御装置830 は動作のためにデータの最後のブロックを転送し、そしてデータを転送するのを停止する。この時点で、ステップ954 に戻り、次の書き込み動作のデータが転送される。
【００５９】
プロセス950 は、アドレスレジスター852 とブロックカウントレジスター862 の入力がすべて実行されるまで継続される。すべての入力が実行されると、制御装置830 はマイクロプロセッサー204 からの別のコマンドを受け取る準備ができている。
【００６０】
C ．ハードディスク制御装置による方法
第10A 図および第10B 図はバッファメモリー制御装置830 およびディスクフォーマッター240 への1 組のコマンドを用いて多数の順不同の動作を完了させるために、ハードディスク制御装置112 によって行われる好ましい方法1000を示す。マイクロプロセッサー204 は方法1000を実行するためにファームウェア205 でプログラミングされるのが好ましい。ステップ1002と、ステップ1004と、ステップ1006は方法600 のステップ602 とステップ604 とステップ606 とほぼ同じである。
【００６１】
ステップ1008では、マイクロプロセッサー204 は同じトラックにデータを書き込む2 つ以上の書き込み動作を識別し、そのトラックには1 つ以上の動作がトラックの対応しているセクターの位置に対して順不同に到着する。ステップ1010では、マイクロプロセッサー204 はトラック上のそれぞれのセクターの位置に基づいて動作を命令する。
【００６２】
ステップ1012では、マイクロプロセッサー204 は書き込み動作のデータブロックのバッファメモリー206 内の開始アドレスをアドレスレジスター852 にロードする。好ましい実施例では、アドレスレジスター852 はアドレスが書き込まれる順序を維持するFIFO同様のインターフェースを介して書き込まれる。従って、データブロックのアドレスは、対応する書き込み動作がトラックに書き込まれる（ステップ1010でマイクロプロセッサー204 によって決定される）順序でロードされる。ステップ1014では、同様に、マイクロプロセッサーは各書き込み動作のためにデータブロックの対応する数をブロックカウントレジスター862 にロードする。
【００６３】
ステップ1016では、マイクロプロセッサー204 はバッファメモリー制御装置830 のプログラミングを完了させる。このプログラミングは、バッファメモリー制御装置830 にコマンドを出して、アドレスレジスター852 およびブロックカウントレジスター862 にロードされたアドレスとブロックカウントに基づいてデータを転送するようにするのが好ましい。マイクロプロセッサー204 はまた、方法600 に従っていつものデータ転送を行うために、バッファメモリー制御装置830 をプログラミングするオプションを有することが好ましい。
【００６４】
ステップ1018では、バッファメモリー制御装置830 は、バッファメモリー206 からディスクフォーマッターFIFO234 に書き込み動作のデータを転送し始める。ディスクフォーマッター240 がFIFO234 からデータを読み出すと、バッファメモリー制御装置830 はFIFO234 にデータを書き込み、FIFO234 がアンダーフローしないようにする。
【００６５】
ステップ1020では、マイクロプロセッサー204 は、ディスク114 の書き込みヘッドを適切なトラックに移動するのに必要な更なる構成要素をプログラミングする。ステップ1020はステップ1012とステップ1010の間で行われてもよい。
【００６６】
ステップ1022では、マイクロプロセッサー204 はトラックに書き込まれる最初の書き込み動作の最初のセクターのセクターIDをディスクフォーマッター240 のセクター要求レジスター512 にロードする。ステップ1024では、マイクロプロセッサー204 はすべての識別された動作のためにトラックに書き込まれるセクターの合計数をセクターカウントレジスター514 にロードする。
【００６７】
ステップ1026では、マイクロプロセッサー204 は書き込み動作間でスキップされるトラック上のデータ識別セクターをスキップセクターレジスター516 にロードする。レジスターにはまた、書き込み中にスキップされるトラック上の欠陥セクターがロードされる。ステップ1028では、マイクロプロセッサー204 は、トラックへの書き込みのためのディスクフォーマッター240 のプログラミングを完了する。一般にこのステップはディスクフォーマッター240 のコマンドレジスターにコマンドをロードすることを含む。
【００６８】
ステップ1030では、ディスクフォーマッター240 はマイクロプロセッサー204 によってそのコマンドレジスターにロードされたコマンドを実行し始める。ディスクフォーマッター240 はディスクフォーマッターデータFIFO234 からデータを読み出し、ディスク114 に書き込むためにデータをフォーマット化し、そしてそのデータをディスク114 の書き込みヘッドに送信する。
【００６９】
ステップ1032では、バッファメモリー制御装置830 はアドレスレジスター852 およびブロックカウントレジスター862 にロードされたアドレスおよびブロックカウントに従って連続書き込み動作からデータを供給する。バッファメモリー制御装置830 はこのステップで方法950 を行うのが好ましい。
【００７０】
ステップ1034では、ディスクフォーマッター240 は現在のトラックへの最後のセクターの書き込みを完了する。ステップ1034では、ディスクフォーマッター240 は制御装置マイクロプロセッサー204 に割り込みを送り、トラックへの書き込みの成功状態を示す。
【００７１】
１つのトラック上でのすべての書き込みが終了すると、この時点でその方法は終了し、ハードディスク制御装置112 は更なる書き込み動作を行う準備ができている。または、2 個以上のトラックにわたって最初の書き込み動作および／または最後の書き込み動作が実行される時、方法1000も利用されてもよい。例えば、トラックへの短い書き込み動作は、同じトラックで終わる長い動作の前に到着するかもしれない。1 つのバッファメモリー制御装置のコマンドを利用して、後の動作を先に実行してから、その後で最初の動作を実行することができる。後のコマンドのデータの最後の部分および以前のコマンドのデータのすべてを書き込むために、１つのディスクフォーマッターのコマンドを用いることができる。1 個以上の書き込み動作が２個のトラックにわたっている場合、方法1000は以下のように続く。
【００７２】
つぎのステップ1036では、マイクロプロセッサーは現在の書き込み動作の組に関連して別のトラックに書き込むべきデータがあるかどうかを決定する。もし別のトラックに書き込まれるべき更なるデータが残っているなら、ステップ1020に戻る。ステップ1020から、マイクロプロセッサーは書き込みヘッドを次のトラックに移動して、次のトラックにデータをさらに書き込むためにディスクフォーマッター240 をプログラミングする。
【００７３】
ステップ1038では、もし別のトラックに書き込むべきデータがもう残っておらずに現在の書き込み動作の組が完了しているなら、ハードディスク制御装置112 は別の組の書き込み動作を受け取るか、または実行する準備ができている。従って、別の書き込み動作がすでに受け取られているかによって、ステップ1002かまたはステップ1008のいずれかに戻る。
【００７４】
D ．実例動作
第11図は、順不同で到着する2 つの書き込み動作のためにハードディスク制御装置112 によって行われるステップの実例シーケンスの方法1100を示す。方法1100は、方法1000のステップ1002からステップ1014の2 個の書き込み動作の場合をより詳細に説明する。
【００７５】
ステップ1102では、ATA バスインターフェース220 が最初の書き込み動作を受け取る。ステップ1104では、バッファメモリー制御装置230 が最初の書き込み動作のデータを円形データバッファ208 に書き込む。ステップ1106では、バスインターフェース220 は2 番目の書き込み動作を受け取る。ステップ1108では、バッファメモリー制御装置230 が最初の書き込み動作のデータの後に、2 番目の書き込み動作のデータを円形データバッファ208 に書き込む。しかしながら、2 番目の書き込み動作のデータは、バッファメモリー206 内で最初の書き込み動作とデータと連続している必要は無い。
【００７６】
ステップ1110では、マイクロプロセッサー204 は、２番目の書き込み動作が最初の書き込み動作と同じトラックに書き込まれるかを決定する。マイクロプロセッサー204 はまた陳腐データを作るのを避けるために、2 つの書き込み動作間で共通に書き込まれるセクターがないことを決定するのが好ましい。もし2 つの動作が共通のセクターを含むなら、その動作は到着した順序で書き込まれるべきである。
【００７７】
ステップ1112では、マイクロプロセッサー204 がトラック上で2 番目の書き込み動作が最初の書き込み動作の前に位置しているかを決定する。マイクロプロセッサーはまた各動作が書き込む最初のセクターのセクター数を比較することによって、この決定をすることが好ましい。動作の順序は、書き込みヘッドがトラック上に最初の書き込みができる位置に関連して決定される。いくつかの実施例では、ディスクフォーマッター240 は、トラック上のどのセクターにでも最初にデータを書き込むことができるように構成されている。もしヘッドが1024個のセクターを持つトラックに到着して、例えばヘッドが511 番目のセクターの上にある間固定されているなら、これらの実施例はディスクの現在の周期の間、512 番目のセクターにデータを書き込むことができるように構成される。この場合、もし最初の書き込み動作がセクター127 に書き込み、2 番目の書き込み動作がセクター575 に書き込むなら、その2 番目の書き込み動作はトラック上で最初の書き込み動作の前に位置する。他の実施例では、ディスクフォーマッター240 は、データを書き込む前に、待機してトラック上のゼロ番目のセクターを検知するように構成されてもよい。これらの実施例では、ヘッドが1024個のセクターを持つトラックの511 番目のセクター上で固定していても、ディスクフォーマッターはデータを書き込む前にゼロ番目のセクターがヘッドの下を通過するまで待機していなくてはならない。この場合、もし最初の書き込み動作がセクター575 に書き込み、2 番目の書き込み動作がセクター127 に書き込むなら、2 番目の書き込み動作はトラック上で最初の書き込み動作の前に位置している。
【００７８】
一実施例では、ステップ1110およびステップ1112は、各書き込み動作の開始と最終のセクター番号を比較することによって、組み合わされることができる。この場合、両動作は同じトラックに書き込まなくてはならない。また、ディスクフォーマッター240 がデータを書き込む前にゼロ番目のセクターが通過するまで待機しなくてはならないとしたら、2 番目の動作の最後のセクター数は最初の動作の開始セクター数よりも少なくてはならない。ディスクフォーマッター240 が動作を始める前にゼロ番目のセクターを待つ必要のない場合の処理方法は当業者には明らかであろう。
【００７９】
ステップ1114では、マイクロプロセッサー204 は円形データバッファ208 の2 番目の書き込み動作のデータのアドレスをアドレスレジスター852 の一つにロードする。ステップ1116では、マイクロプロセッサー204 は2 番目の書き込み動作のデータブロックの数をブロックカウントレジスター862 の一つにロードする。ステップ1118では、マイクロプロセッサー204 は、円形データバッファ208 内の最初の書き込み動作のデータのアドレスをアドレスレジスター852 の一つにロードする。ステップ1120では、マイクロプロセッサー204 は最初の書き込み動作内のデータブロックの数をブロックカウントレジスター862 の一つにロードする。
【００８０】
バッファメモリー制御装置830 が2 つの動作のアドレスとブロックカウントをロードすると、方法1100は方法1000のステップ1016で継続する。
【００８１】
E ．拡張および追加の実施例
方法1100はいくつかの書き込み動作を処理するために当業者によってファームウェアコード205 に一般化できる。一般化されたファームウェア205 は、動作が受け取られた順序に関係なくディスクフォーマッター240 に多数の書き込み動作のデータを提供するために、バッファメモリー制御装置830 をプログラムするように構成されることができる。
【００８２】
バッファメモリー制御装置830 への一つのコマンドで処理できる動作の数はアドレスレジスター852 およびブロックカウントレジスター862 のレジスターの数によって制限されるかもしれない。しかしながら、好ましい実施例では、これらのレジスター852 とレジスター862 のセットは、バッファメモリー制御装置830 がコマンドを実行している間にマイクロプロセッサー204 によって書き込まれることができる。この機能によりバッファ制御装置830 への単一のコマンドで順不同の書き込み動作の無限の可能性の数が処理できるようになる。
【００８３】
III ．結論
ある好ましい実施例を用いて本発明の説明がなされてきたが、ここで前述されたすべての特長および利点を呈さない実施例を含む、当業者に明らかな他の実施例もまた本発明の範囲内にあることとする。従って、本発明は以下の請求の範囲によって定義される。請求の範囲において、本発明はその一部に限定されず、全体的に解釈されるものとする。方法の請求の範囲において、参照符号は説明の便宜のためのみに用いられ、その方法を実施するための特定の順序を示すものではない。
【図面の簡単な説明】
【図１】  ハードディスク装置がホストシステムの大容量記憶装置として利用されるコンピュータ装置の典型的な形態を示す。
【図２】  ハードディスク制御装置の典型的な形態を示す。
【図３】  典型的なディスク書き込み動作の間のホストシステムからディスクへのデータの流れを示す。
【図４】  書き込み動作中の円形データバッファの動作を示す。
【図５】  バッファメモリー制御装置およびディスクフォーマッターを詳細に示す。
【図６】  ハードディスク制御装置が一般に書き込み動作を扱う方法を示す。
【図７】  書き込みヘッドとともにハードディスクプラターの概略図を示す。
【図８】  マイクロプロセッサーからの単一のコマンドでバッファメモリーの不連続の読み出しを行うために増補されたバッファメモリー制御装置の好ましい例を示す。
【図９】  図9A、図9Bは順不同で受け取られた書き込み動作のための組み合わせた書き込み機能を達成するためにバッファメモリー制御装置によって実施される好ましい方法を示す。
【図１０】  図10A 、図10B はバッファメモリー制御装置およびディスクフォーマッターへの1 組のコマンドを用いて順不同の多数の動作を完了させるために、ハードディスク制御装置によって実施される好ましい方法を示す。
【図１１】  順不同で到着する2 個の書き込み動作のためにハードディスク制御装置によって実施される実例シーケンスのステップの方法を示す。
【図１】
0004579494.tif 000002
【図２】
0004579494.tif 000003
【図３】
0004579494.tif 000004
【図４】
0004579494.tif 000005
【図５】
0004579494.tif 000006
【図６】
0004579494.tif 000007
【図７】
0004579494.tif 000008
【図８】
0004579494.tif 000009
【図９】
0004579494.tif 000010
0004579494.tif 000011
【図１０】
0004579494.tif 000012
0004579494.tif 000013
0004579494.tif 000014
【図１１】
0004579494.tif 000015