(57)【特許請求の範囲】
【請求項１】
ホスト・システムによって要求される通りにディスクの１つまたはそれ以上のトラック上の１つまたはそれ以上のセクタにデータを読み書きするように構成されたディスク・ドライブ内のディスク・ドライブ・コントローラであって、
複数のレジスタであって、当該複数のレジスタの各々は、
読出しまたは書込み動作中にスキップすべき第１セクタのセクタ・アドレスと、
前記読出しまたは書込み動作中にスキップすべき連続セクタの数を示す範囲値と、
前記ディスク・ドライブ・コントローラが前記ディスク上の１つまたはそれ以上のセクタ上のデータを前記ディスク上の他のセクタに再割当したことを示す第１再割当ビットおよび前記ディスク・ドライブ・コントローラが前記ディスク上の１つまたはそれ以上のセクタ上のデータを前記ディスク上の他のセクタに再割当していないことを示す第２再割当ビットのうちのいずれかのビットと、
を格納するように構成された、複数のレジスタと、
読出しまたは書込み動作中に、前記複数のレジスタの前記セクタ・アドレスおよび前記範囲値を使用して前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであるかどうかを検査して、一範囲の連続セクタをスキップするように構成された制御回路と、
を含み、
前記複数のレジスタのうちの第１レジスタは、第１の読出しまたは書込み動作中にスキップすべき第１セクタの第１セクタ・アドレスと、当該第１の読出しまたは書込み動作中にスキップすべき連続セクタの数を示す第１の範囲値と、前記第１再割当ビットおよび前記第２再割当ビットのうちのいずれかの再割当ビットと、を格納でき、
前記複数のレジスタのうちの第２レジスタは、第２の読出しまたは書込み動作中にスキップすべき第２セクタの第２セクタ・アドレスと、当該第２の読出しまたは書込み動作中にスキップすべき連続セクタの数を示す第２の範囲値と、前記第１レジスタの再割当ビットとは異なる再割当ビットと、を格納でき、
前記制御回路は、検査結果が、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであることを示す場合において、
当該指定されたセクタが前記第１再割当ビットと対応している場合には、当該指定されたセクタが再割当されたセクタを探索する再割当割込み処理を伴う第１のスキップ処理をおこない、
当該指定されたセクタが前記第２再割当ビットと対応している場合には、前記再割当割込み処理を伴わない第２のスキップ処理をおこなう、
ディスク・ドライブ・コントローラ。
【請求項２】
前記第１レジスタは、成長欠陥セクタの開始アドレスと、連続する成長欠陥セクタの数を示す範囲値と、前記第１再割当ビットと、を格納する、
請求項１に記載のディスク・ドライブ・コントローラ。
【請求項３】
前記第２レジスタは、製造欠陥セクタの開始アドレスと、連続する製造欠陥セクタの数を示す範囲値と、前記第２再割当ビットと、を格納する、
請求項１または２に記載のディスク・ドライブ・コントローラ。
【請求項４】
前記複数のレジスタ内のエントリは、満杯レジスタの間に空のレジスタを置かずに昇順にロードされている、
請求項１〜３のいずれかに記載のディスク・ドライブ・コントローラ。
【請求項５】
前記制御回路は、前記複数のレジスタの前記セクタ・アドレスおよび前記範囲値を使用して前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであるかどうかを検査するスキップ検査ステートマシンを有し、
前記スキップ検査ステートマシンは、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであり且つ当該指定されたセクタが前記第１再割当ビットと対応している場合に、処理を中断し、
前記制御回路は、前記スキップ検査ステートマシンが処理を中断したときに、再割当セクタを探索する、
請求項１〜４のいずれかに記載のディスク・ドライブ・コントローラ。
【請求項６】
前記スキップ検査ステートマシンは、処理中断後、スタートコマンドを受け取るまで当該中断を維持する、
請求項５に記載のディスク・ドライブ・コントローラ。
【請求項７】
前記要求セクタのデータが再割当されたセクタ・アドレスを決定して前記制御回路に送信するファームウェアと組み合わされた
請求項５または６に記載のディスク・ドライブ・コントローラ。
【請求項８】
前記スキップ検査ステートマシンは、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであり且つ当該指定されたセクタが前記第２再割当ビットと対応している場合に、当該要求セクタをスキップすべき出力をし、次の要求セクタについて検査する、
請求項５〜７のいずれかに記載のディスク・ドライブ・コントローラ。
【請求項９】
ホスト・システムによって要求される通りにディスクの１つまたはそれ以上のトラック上の１つまたはそれ以上のセクタにデータを読み書きするように構成されたディスク・ドライブにおいて、読出しまたは書込み動作中にスキップすべき第１セクタのセクタ・アドレスと、前記読出しまたは書込み動作中にスキップすべき連続セクタの数を示す範囲値と、前記ディスク・ドライブ内のディスク・ドライブ・コントローラが前記ディスク上の１つまたはそれ以上のセクタ上のデータを前記ディスク上の他のセクタに再割当したことを示す第１再割当ビットおよび前記ディスク・ドライブ・コントローラが前記ディスク上の１つまたはそれ以上のセクタ上のデータを前記ディスク上の他のセクタに再割当していないことを示す第２再割当ビットのうちのいずれかのビットと、を各々のレジスタに格納するように構成された複数のレジスタを用いてセクタをスキップする方法であって、
読出しまたは書込み動作中に、前記複数のレジスタの前記セクタ・アドレスおよび前記範囲値を使用して前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであるかどうかを検査して一範囲の連続セクタをスキップする制御工程を含み、
前記複数のレジスタのうちの第１レジスタは、第１の読出しまたは書込み動作中にスキップすべき第１セクタの第１セクタ・アドレスと、当該第１の読出しまたは書込み動作中にスキップすべき連続セクタの数を示す第１の範囲値と、前記第１再割当ビットおよび前記第２再割当ビットのうちのいずれかの再割当ビットと、を格納でき、
前記複数のレジスタのうちの第２レジスタは、第２の読出しまたは書込み動作中にスキップすべき第２セクタの第２セクタ・アドレスと、当該第２の読出しまたは書込み動作中にスキップすべき連続セクタの数を示す第２の範囲値と、前記第１レジスタの再割当ビットとは異なる再割当ビットと、を格納でき、
前記制御工程は、検査結果が、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであることを示す場合において、
当該指定されたセクタが前記第１再割当ビットと対応している場合には、当該指定されたセクタが再割当されたセクタを探索する再割当割込み処理を伴う第１のスキップ処理をおこない、
当該指定されたセクタが前記第２再割当ビットと対応している場合には、前記再割当割込み処理を伴わない第２のスキップ処理をおこなう、
方法。
【請求項１０】
前記第１レジスタは、成長欠陥セクタの開始アドレスと、連続する成長欠陥セクタの数を示す範囲値と、前記第１再割当ビットと、を格納する、
請求項９に記載の方法。
【請求項１１】
前記第２レジスタは、製造欠陥セクタの開始アドレスと、連続する製造欠陥セクタの数を示す範囲値と、前記第２再割当ビットと、を格納する、
請求項９または１０に記載の方法。
【請求項１２】
前記複数のレジスタ内のエントリは、満杯レジスタの間に空のレジスタを置かずに昇順にロードされている、
請求項９〜１１のいずれかに記載の方法。
【請求項１３】
前記制御工程は、前記複数のレジスタの前記セクタ・アドレスおよび前記範囲値を使用して前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであるかどうかを検査する検査工程を有し、
前記検査工程は、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであり且つ当該指定されたセクタが前記第１再割当ビットと対応している場合に、処理を中断し、
前記制御工程は、前記検査工程が処理を中断したときに、再割当セクタを探索する、
請求項９〜１２のいずれかに記載の方法。
【請求項１４】
前記検査工程は、処理中断後、スタートコマンドを受け取るまで当該中断を維持する、
請求項１３に記載の方法。
【請求項１５】
前記要求セクタのデータが再割当されたセクタ・アドレスを決定して前記制御工程に送信する送信工程をさらに含む、
請求項１３または１４に記載の方法。
【請求項１６】
前記検査工程は、前記ホスト・システムの要求セクタがスキップするよう指定されたセクタであり且つ当該指定されたセクタが前記第２再割当ビットと対応している場合に、当該要求セクタをスキップすべき出力をし、次の要求セクタについて検査する、
請求項１３〜１５のいずれかに記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
（技術分野）
本発明は、一般的にコンピュータ・システムの大容量記憶装置に関する。特に、本発明は、ディスク上の欠陥および／または望まれないセクタを検査し、管理するためのディスク・ドライブ・コントローラ回路および方法に関する。
【０００２】
【従来の技術】
（背景技術）
コンピュータ・システムはしばしばホスト・システムと、データを格納しかつ／またはデータへのアクセスを提供する１つまたはそれ以上の周辺記憶装置とを含む。周辺記憶装置の一種にハード・ディスク・ドライブがある。ハード・ディスク・ドライブは一般的に、モータによって回転する少なくとも１つのプラッタ（集合的に「ディスク」）と、トランスデューサをディスク上の様々な位置に移動させるアクチュエータと、マイクロプロセッサと、ディスク・ドライブ・コントローラ（「コントローラ」）と、種々のその他の電気回路機構とを含む。コントローラは一般的に、ディスク・ドライブ内の印刷配線板に実装された集積回路である。マイクロプロセッサはコントローラ集積回路内または外部に物理的に埋め込むことができる。
【０００３】
コントローラ（マイクロプロセッサの制御下にある）は一般的に、書込み動作中にディスク上に格納されるホスト・コンピュータ（「ホスト・システム」または単に「ホスト」）からのデータを処理すること、および読出し動作中に要求ホスト・コンピュータにデータを渡すことを含め、ディスク・ドライブの動作の大部分を制御する。コントローラはディスク表面へ、またはそこからデータを検索したり送るために使用される。コントローラは一般的に、データがディスクへ、およびそこから正常に転送することができるように、データを符号化する。
【０００４】
ディスクはしばしば、データを格納する１組の回転プラッタを含む。データは何回でもディスクに書き込み、またはディスクから読み出すことができ、ディスク・ドライブを停止した後、データはそのまま維持される。プラッタは２つの書込み可能な面を持つことができる。各書込み可能面は、トラックと呼ばれる同心のリング上にデータを格納する。トラックの数はディスクによって異なる。トラックは半径方向にセクタに分割され、それはトラックの最小の書込み可能／読出し可能な単位である。１トラック当たりのセクタの数は様々であり、ディスクの製造者は様々なディスク構成を持つことができるので、ディスクによって異なる。１トラック当たり２００またはそれ以上のセクタを持つことができる。各セクタはデータ、セクタに関する情報、および同期情報を含む。
【０００５】
ディスク・プラッタ上で発生し得る欠陥は、一般的に２種類ある。すなわち、製造欠陥および成長欠陥である。製造欠陥とは、製造中に発生し、検出される欠陥である。ディスクを製造中に工場でフォーマットするときに、工場アルゴリズムは、どのセクタに初期欠陥があるかを決定し、全ての検出された製造欠陥のセクタ・アドレスのリストを作成する。製造欠陥を記録する手順はディスクによって異なり、各ディスク製造者に独特であるかもしれない。工場アルゴリズムは製造欠陥のアドレスのリストを、製造者のディスク・ドライブの定義された実現(implemention)によって物理的アドレスまたは論理ブロック・アドレスのいずれかとして、ディスク・ドライブのディスク上に格納する。ディスク・ドライブはこのリストを使用して、「スリッピング（ｓｌｉｐｐｉｎｇ）」を実行する。これは、製造欠陥のある各セクタに対し、読み出すかまたは書き込むべき次のセクタのアドレス（製造者の定義された実現によって物理または論理のいずれか）が、最後の正常なセクタのアドレスから論理的に増分されることを意味する。こうして、製造欠陥のあるセクタのアドレスは次の正常なセクタに増分されるので、ディスク・ドライブの動作中にディスク・ドライブはそのセクタを読み書きしない。
【０００６】
もう１つの一般的な種類の欠陥は成長欠陥と呼ばれるものであり、これは製造後に発生し、かつ／または検出される。成長欠陥は、ディスク・ドライブが、フォーマット動作中などに読出し不能または使用不能であると判断するセクタを含む。成長欠陥は一般的に、セクタが読出されるときに検出され、記録されるが、プロセスは製造者の定義された実現によって異なる。成長欠陥のある各セクタからのデータは、非欠陥セクタに再割当される。
【０００７】
製造欠陥の場合と同様に、成長欠陥の位置およびそれらの再割当されたセクタ・アドレスは一般的に、製造者の定義された実現によって、物理または論理アドレスのいずれかとしてディスク上に格納される。成長欠陥の位置は、ディスク・ドライブが電源を投入されるたびに、ディスクからランダム・アクセス・メモリ（ＲＡＭ）に転送することができる。
【０００８】
一部のディスク・ドライブ・コントローラは、現在の読出しまたは書込み動作中にスキップするか再割当される欠陥セクタのアドレスを一時的に格納するために使用される、１つまたはそれ以上のレジスタを含む。
【０００９】
【発明が解決しようとする課題】
（発明の開示）
一部のディスク・ドライブ・コントローラの１つの欠点は、読出しまたは書込み動作中にスキップまたは再割当されるトラック上の欠陥セクタを識別するために割り当てられる、ディスク・ドライブ・コントローラ内のレジスタの制限された数である。レジスタの数は、読出しまたは書込み動作中にスキップまたは再割当することのできる欠陥セクタの総数を制限する。一部のディスク・ドライブでは、特定のトラック上の欠陥の数は、トラック上の欠陥を識別するために使用される、利用可能なレジスタの数より大きくなるであろう。さらなるレジスタを追加するには、さらなるゲートを追加する必要があり、これはディスク・ドライブ・コントローラの製造コストを増加させる。
【００１０】
製造コストに加えて、さらなるレジスタを追加することの別の欠点は、どれだけのレジスタがあれば特定のディスク・プラッタの特定のトラックの全ての欠陥を処理するのに充分であるかを、事前に推測しようとすることである。異なるディスク・プラッタは、１トラック当たりの異なる数のセクタ、および異なる数のトラックを持つかもしれない。さらに、ディスク技術が改善されるにつれて、１トラック当たりのセクタの数は増加するかもしれず、これは、より多くの欠陥セクタがディスク・ドライブ・コントローラによって管理され、スキップされ、かつ／または再割当されることにつながるかもしれない。
【００１１】
１つの解決策は、コントローラは所定の読出しまたは書込み動作に対し（制限された数のレジスタに基づき）特定の数の欠陥セクタしかスキップできないので、欠陥管理動作を複数の部分に分割することである。複数部分欠陥管理動作の各部分が特定の数の欠陥セクタをスキップまたは再割当すると、特定のトラック上の欠陥の多くまたは全部を処理するのに充分なレジスタがある。しかし、欠陥管理動作を複数の部分に分割すると、全体的な欠陥管理動作の時間が増加し、ディスク・ドライブ性能が低下する。現在のディスク・ドライブの重要な目標は、読出しまたは書込み動作の時間の量を最小にすることである。
【００１２】
【課題を解決するための手段】
本発明は、ディスク上の欠陥および／または望まれないセクタを追跡し、かつ読出しまたは書込み動作中にそうした欠陥および／または望まれないセクタをスキップするためのディスク・ドライブ・コントローラ回路および方法に関する。本発明は、欠陥セクタが相互に近接する傾向があり、かつしばしば一塊りの隣接または連続したセクタとしてまとまって見つかるという事実を認識し、利用する。本発明のディスク・ドライブ・コントローラは、連続した欠陥セクタの範囲の位置を格納できる「スキップ範囲検査レジスタ」または「スキップ検査レジスタ」を使用する。
【００１３】
欠陥セクタ情報を欠陥セクタの範囲としてコントローラ内に格納することにより、本発明は、欠陥を追跡するために必要なレジスタおよび／またはレジスタ論理の量を減少することができる。代替的に、本発明は、レジスタ論理を実質的に増加することなく、読出しまたは書込み動作中に処理できる欠陥セクタの数を（従前の設計より）増加することができる。
【００１４】
さらに、ディスク・ドライブはトラック上のデータを１セクタづつ連続的に読み出しまたは書き込むように構成されるので、スキップ範囲検査レジスタは、コントローラが欠陥セクタを単一ユニット毎にではなく、一塊り毎にすばやくスキップすることを可能にする。こうして、本発明のディスク・ドライブ・コントローラ回路および方法は、さらなるレジスタを追加したり、さらなるレジスタがどれだけ必要かを推測しようとしたり、欠陥管理動作を複数の部分に分割する問題を軽減する。
【００１５】
様々なディスク・ドライブ製造者が様々な欠陥管理方式を使用する。様々な既知の欠陥管理方式のどれでも、本発明と共に使用することができる。
【００１６】
一実施形態は、ホスト・システムが読出しまたは書込み動作中に特定の望まれないセクタをスキップまたはマスクすることをも可能にする。これらのセクタは欠陥ではないが、それらは、特定の読出しまたは書込み動作中にホスト・システムによって望まれないものである。
【００１７】
本発明の一態様は、ホスト・システムによって要求される通りにディスクの１つまたはそれ以上のトラック上の１つまたはそれ以上のセクタにデータの読み書きを行なうように構成された、ディスク・ドライブ内のディスク・ドライブ・コントローラに関する。このディスク・ドライブ・コントローラは、（ａ）読出しまたは書込み動作中にスキップすべき第１セクタのセクタ・アドレス、および（ｂ）読出しまたは書込み動作中にスキップすべき多数の連続セクタを示す範囲値を格納するように構成された、少なくとも１つのレジスタを含む。ディスク・ドライブ・コントローラは、読出しまたは書込み動作中に前記セクタ・アドレスおよび前記範囲値を使用して一範囲の連続セクタをスキップするように構成された制御回路をさらに含む。１つの構成では、制御回路はステートマシンを含む。レジスタの１つの構成は、特定のセクタまたは特定の範囲の連続セクタが再割当されており、スキップすべきであることを示す再割当ビットをさらに含む。レジスタの別の構成は、ホスト・システムが読出しまたは書込み動作中にコントローラに指示して特定の望まれない（しかし欠陥ではない）セクタにスキップさせることを可能にする、増分論理ブロック・アドレス（ＬＢＡ）をさらに含む。
【００１８】
本発明の別の態様は、ホスト・システムによって要求された読出しまたは書込み動作中にディスク・ドライブのディスク上で１つまたはそれ以上のセクタをスキップする方法に関する。当該方法は、読出しまたは書込み動作中にスキップすべきセクタのリストを生成し、当該リスト内でスキップすべき少なくとも１つの範囲の連続セクタを識別し、前記範囲をアドレスおよび範囲値に変換して圧縮リストを生成し、かつ当該圧縮リストをディスク・ドライブ・コントローラの１組のレジスタにロードすることを含む。
【００１９】
【発明の実施の形態】
（好適な実施形態の詳細な説明）
本発明の範囲を限定するのではなく、例証することを意図した、本発明の好適な実施形態をここで説明する。
【００２０】
Ｆｉｇ．１は、本発明の一実施形態によるディスク・ドライブ２を示す。ディスク・ドライブ２が、例えばパーソナル・コンピュータ（ＰＣ）とすることのできるホスト・システム（ホスト）５と一緒に示される。ディスク・ドライブ２は、ディスク・ドライブ・コントローラ回路（コントローラ）１５、ホスト・インタフェース・ポート１０、ディスク・ポート２７、ローカルまたはディスク・ドライブ・マイクロプロセッサ（マイクロプロセッサ）２０、マイクロプロセッサ・ポート２２、データ・バッファ・ポート７５、読出し専用メモリ（ＲＯＭ）７０、ランダム・アクセス・メモリ（ＲＡＭ）６０、およびデータ・バッファ８０を含む。ディスク・ドライブ・コントローラ１５はディスク２５にデータを読み書きする。
【００２１】
ホスト・インタフェース・ポート１０は例えば小型コンピュータ標準インタフェース（ＳＣＳＩ）ポート、アドバンスト・テクノロジ・アタッチメント（ＡＴＡ）バス・ポート、またはファイバ・チャネル・ポートとすることができる。マイクロプロセッサ２０は汎用マイクロプロセッサであることが好ましく、コントローラ１５内またはコントローラ１５の外部のいずれかに物理的に埋め込むことができる。データ・バッファ８０は、コントローラ１５の内側または外側のいずれかに置くことができる。ＲＯＭ７０は実行可能なファームウェア６５を格納し、これはブートアップ時にＲＡＭ６０にコピーされ、マイクロプロセッサ２０によって実行することができる。代替的に、ＲＯＭ７０は、ディスク２５からＲＡＭ６０にファームウェアをダウンロードする１組の命令を格納することができる。
【００２２】
ＲＡＭ６０は、ブートアップ時にファームウェアによってディスク２５または他の適切な場所からロードされる欠陥リスト６２を格納する。欠陥リスト６２は、ディスク２５全体の全ての製造欠陥および成長欠陥のマスタ・リストとすることができる。代替的に、別の構成では、欠陥リスト６２は、各読出しまたは書込み動作中の開始時にファームウェア６５によってＲＡＭ６０にロードすることができる。この構成では、欠陥リスト６２は、ディスク２５全体の全ての製造欠陥および成長欠陥のマスタ・リストの一部分とすることができる。この構成では、ファームウェア６５は、読出しまたは書込みコマンドによって必要とされるときに、マスタ・リストの一部を（製造者の定義された実現によって）１トラックづつまたは１ゾーンづつロードすることができる。
【００２３】
Ｆｉｇ．１に図示した実施形態では、ディスク・ドライブ・コントローラ１５はマイクロプロセッサ・インタフェース４０、データ・フロー・コントローラ３５、バッファ・コントローラ４５、誤り訂正コード（ＥＣＣ）モジュール５０、ディスク・フォーマッタ３０、およびホスト・インタフェース・コントローラ５５を含む。ホスト・インタフェース・コントローラ５５は、ＳＣＳＩコントローラまたはＳＣＳＩプロセッサ、ＡＴＡプロセッサ、もしくはファイバ・チャネル・インタフェース・マネージャを含むことができる。バッファ・コントローラ４５は、読出しまたは書込み動作に関連付けられたセクタの論理ブロック・アドレスを計数する、少なくとも１つの論理ブロック・アドレス（ＬＢＡ）カウンタ４７を含む。
【００２４】
ディスク・フォーマッタ３０は、主ステートマシン９０、セクタ・パルス発生器９２、ＡＮＤ論理関数ゲート９５、コマンドステートマシン１０２、スキップ検査ステートマシン１００、および１組のスキップ検査レジスタ１０５を含む。ディスク・フォーマッタ・レジスタは、ディスク・フォーマッタ制御レジスタ１０１、ＳＥＣ＿ＲＥＱレジスタ１０３、およびＳＥＣ＿ＣＮＴレジスタ１０４を含む。代替的に、他の構成では、開示した機能を実現するために、他の回路アーキテクチャを使用することができる。
【００２５】
（コントローラおよびマイクロプロセッサの一般動作）
ディスク・ドライブ・コントローラ１４およびマイクロプロセッサ２０の一般動作について、Ｆｉｇ．１およびＦｉｇ．７を参照しながら説明する。Ｆｉｇ．７は、Ｆｉｇ．１のディスク・ドライブ２によって実行されるファームウェア法の１つの構成を示す。Ｆｉｇ．７のプロセス・ブロック７００で、ディスク・ドライブ２はホスト・システム５から読出しまたは書込みコマンドを受け取って処理する。特に、ホスト５は、ディスク・ドライブ・コントローラ１５のホスト・インタフェース・コントローラ５５に読出しまたは書込みコマンドを送ることによって、ディスク・ドライブ動作を開始する。マイクロプロセッサ２０は、ホスト・インタフェース・コントローラ５５から読出しまたは書込みコマンドを読み出す。読出しまたは書込みコマンドは選択された論理ブロック・アドレスから始動し、１つ以上のトラックが関与することがある。
【００２６】
プロセス・ブロック７０２で、マイクロプロセッサ２０は、読み出されるかまたは書き込まれるトラックを識別するファームウェア６５を実行する。ファームウェア６５は、読出しまたは書込みコマンドの論理ブロック・アドレスを、ディスク２５上で読み出されるかまたは書き込まれる特定の物理セクタ位置（アドレス）に変換または翻訳する。この変換は製造者のディスク・ドライブの実現によって定義される。
【００２７】
プロセス・ブロック７０４で、ファームウェア６５は、読出しまたは書込み動作の識別されたトラック内のスキップすべきセクタのリストを生成する。このリストを生成するために、ファームウェア６５は、もしあれば読出しまたは書込みコマンドに関連付けられたビット・マップ（Ｆｉｇ．４に示すような）、およびディスク２５からの欠陥リスト６２を使用することができる。上述した通り、ファームウェア６５によって使用される欠陥リスト６２は、ディスク２５上の全ての製造および成長欠陥のマスタ・リスト、またはマスタ・リストの一部分とすることができる。
【００２８】
プロセス・ブロック７０６で、ファームウェア６５はスキップすべきセクタのリスト６２を、スキップ範囲検査レジスタ１０５にロードするための適切なフォーマットに変換する。これは、例えば連続欠陥セクタ・アドレスを開始アドレスおよび連続欠陥セクタ・アドレスの範囲（長さ）に組み合わせることを含む。こうして、欠陥リスト６２は凝縮または圧縮リストに変換される。ファームウェア６５はまた欠陥リスト６２を使用して、読出しまたは書込みコマンドによって指定された、成長欠陥のあるセクタに対する（スキップ検査レジスタ・セット１７０の再割当ビット１６２にロードされる）再割当ビットをも生成する。
【００２９】
プロセス・ブロック７０８で、ファームウェア６５は、コマンドを実行するために必要な全ての制御パラメータを、ディスク・フォーマッタ制御レジスタ１０１、ＳＥＣ＿ＲＥＱレジスタ１０３、ＳＥＣ＿ＣＮＴレジスタ１０４、およびスキップ検査レジスタ１０５など、コントローラ１５の適切なレジスタにロードする。Ｆｉｇ．３のスキップ検査レジスタの構成の場合、ファームウェア６５は必要に応じて４つのフィールド１６２〜１６８にロードする。
【００３０】
制御パラメータの目的の１つは、どの物理セクタおよびどのトラックに書込みまたは読み出しを行うかを指定することである。ＳＥＣ＿ＲＥＱレジスタ１０３は当初、ホスト・システム５からの読出しまたは書込みコマンドを実行するために識別された、開始または第１セクタ・アドレス（最も低い物理セクタのアドレス）を含む。ＳＥＣ＿ＣＮＴレジスタ１０５は当初、読出しまたは書込みコマンドによって識別されたセクタの総数を指定し、動作の進行中には、処理すべき残りのセクタ数を指定する。
【００３１】
レジスタ１０１、１０３、１０４および１０５がロードされた後、ファームウェア６５は、プロセス・ブロック７１０に示すように、ディスク・フォーマッタ３０に読出し／書込みコマンドを発行する。ディスク・フォーマッタ３０は、マイクロプロセッサ２０によるそれ以上の介入無く、自動的にコマンドを実行することが好ましい。セクタ・パルス発生器９２は、ＡＮＤ論理関数ゲート９５に開始コマンド・セクタ・パルス（ＣＭＤ＿ＳＴＡＲＴ＿ＳＰ）を生成する。ＣＭＤ＿ＳＴＡＲＴ＿ＳＰは第１指定セクタＩＤ、ＳＥＣ＿ＲＥＱを識別する。セクタ・パルス発生器９２はまたＣＭＤ＿ＳＴＡＲＴ＿ＳＰをスキップ検査ステートマシン１００に送る。
【００３２】
スキップ検査ステートマシン１００は、ＳＥＣ＿ＲＥＱレジスタ１０３に格納された値がスキップすべきセクタを指すかどうかを決定する。スキップ検査ステートマシン１００は、セクタ・パルス発生器９２からのＣＭＤ＿ＳＴＡＲＴ＿ＳＰと共にＡＮＤゲート９５に入力される出力を生成する。スキップ検査ステートマシン１００の出力が「低レベル」の場合、セクタはスキップされる。スキップ検査ステートマシン１００の出力が「高レベル」の場合、セクタはスキップされない。ＡＮＤゲート９５の出力は主ステートマシン９０に入力される。
【００３３】
スキップ検査ステートマシン１００は、スキップ検査レジスタ１０５の内容を使用して、欠陥セクタが無いか検査する。成長欠陥のため再割当されるセクタとして指定されたセクタのアドレスを検出すると、スキップ検査ステートマシン１００は作動を停止する。次いでファームウェア６５は再割当アルゴリズムを使用して、成長欠陥の無いセクタにデータを割り当てる（例えば書込み動作のため）か、あるいは交換セクタを識別する（例えば読出し動作のため）。
【００３４】
コマンドが完了すると、ディスク・フォーマッタ３０はマイクロプロセッサ２０に割込みを送信し、かつ／またはフラッグをセットする。割込みはコマンドが完了したことを示し、ディスク・フォーマッタ３０は別のコマンドを実行できる状態にある。
【００３５】
（読出しまたは書込み）
１つの構成で、ホスト５からのコマンドが読出しコマンドである場合、要求されたデータはディスク２５からデータ・バッファ８０へ読み出される。特定の量のデータがバッファ８０内にあると、マイクロプロセッサ２０はコントローラ１５にバッファ８０からホスト５へデータを送らせる。ホスト５からのコマンドが書込みコマンドである場合、ディスク・フォーマッタ３０およびＥＣＣモジュール５０は、データをディスク２５に格納する前にそれを符号化する。
【００３６】
（ファームウェアの機能）
ファームウェア６５は、欠陥管理方式に関連する３つの主要な機能を実行するように構成することが好ましい。ブートアップ時にファームウェア６５は、マイクロプロセッサ２０によって実行される場合、ディスク・ドライブ・コントローラ１５に、製造欠陥のあるセクタのリストをディスク２５から読み取らせ、このリストをＲＡＭ６０、データ・バッファ、または何らかの他の領域（ディスク・コントローラには不明）に格納する。リストは、ディスク・ドライブ製造者によって指定されるゾーン、プラッタ、または何らかの他のユニットに関連する。読出しまたは書込み動作中に、ファームウェア６５はこのリストの一部をディスク・フォーマッタ３０に転送する。リストの転送部分は、ホスト・システム５によって指定されたセクタに関連する特定のトラックを含む。ディスク・フォーマッタ３０は、転送された部分リストに従ってトラックの特定のセクタをスキップする。これは、上述の欠陥管理動作の一部である。
【００３７】
ファームウェア６５はまた、成長欠陥のあるセクタを再割当する。再割当手順はディスク・ドライブ製造者の実現によって異なる。読出し動作中にエラーに遭遇すると、ファームウェア６５はデータを回復してデータを欠陥のない代替「正常」セクタに再割当しようとする。この正常セクタは、ディスク２５のどこにでも配置することができる。ファームウェア６５は、セクタ再割当のレコードを制御し、維持する。その後の読出しまたは書込み動作の開始時に（データが再割当された後）、ファームウェア６５は、スキップすべき１つまたはそれ以上の欠陥セクタの位置をディスク・ドライブ・フォーマッタ３０内のスキップ検査レジスタ１０５にプログラムする。再割当されたセクタにより、ファームウェア６５（およびディスク・フォーマッタ３０）は、再割当アドレスまでの読出しまたは書込みを行ない、再割当セクタのアドレスを決定し、このセクタの読出しまたは書込みを行ない、次いで読出しまたは書込みコマンドの残りのセクタに戻る。
【００３８】
読出しまたは書込み動作前に、ファームウェア６５はまた、ホスト５からの読出しまたは書込みコマンドによって望まれない特定のセクタをスキップするように、ディスク・フォーマッタ３０をプログラムすることもできる。望まれないセクタは欠陥ではない（それらは有効な読出し可能データを含む）が、それらは様々な理由で転送すべきものとしてホスト・システム５によって識別されない。例えば特定のセクタは、Ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｅｘｐｅｎｓｉｖｅ  ｄｉｓｋ（ＲＡＩＤ）コントローラで使用される「スキップ・マスク読出し」および「スキップ・マスク書込み」などの専用コマンド・セットでは使用されないことがある。例えばＳＣＳＩプロトコルは、特定の望まれないセクタまたは一範囲のセクタを除外するために使用できる専用コマンドを持つ。
【００３９】
制御パラメータが各読出しまたは書込み動作毎に異なるかもしれないので、ファームウェア６５は、各読出しまたは書込み動作前に、レジスタ１０１、１０３、１０４、およびスキップ・レジスタ１０５を再プログラムすることが好ましい。
【００４０】
（欠陥管理動作の概要−主ステートマシンおよびスキップステートマシンの機能）
欠陥管理動作の一部分について、Ｆｉｇ．１を参照しながら説明する。第１セクタを検査した後、ディスク・フォーマッタ３０の主ステートマシン９０は、スキップ検査ステートマシン１００と並行して作動することが好ましい。スキップ検査ステートマシン１００は識別された後続セクタにスキップ検査手順を実行する一方、主ステートマシン９０は他の処理機能を実行する。
【００４１】
（ＳＥＣ＿ＲＥＱおよびＳＥＣ＿ＣＮＴ）
スキップ検査ステートマシン１００はスキップ・レジスタ１０５を検査して、要求されたセクタ（ＳＥＣ＿ＲＥＱ）のセクタ・アドレスがファームウェア６５によってスキップ・セクタとして指定されたかどうかを決定する。ＳＥＣ＿ＲＥＱレジスタ１０３は、（読出しまたは書込み動作によって要求された）各要求セクタ・アドレスが、スキップ・レジスタ１０５に格納された（ファームウェア６５によってスキップ・セクタとして指定された）スキップ・セクタ・アドレスに照らして検査された後、１づつ増分するカウンタとして作動することが好ましい。
【００４２】
要求されたセクタ（ＳＥＣ＿ＲＥＱ）がスキップ・セクタとして指定された場合、スキップ検査ステートマシン１００はそのセクタをスキップし、トラック上の次の順序セクタ（ＳＥＣ＿ＲＥＱ＋１）を検査する。セクタがスキップ・セクタとして指定されなければ、スキップ検査ステートマシン１００は主ステートマシン９０にそのセクタを処理させ、主ステートマシン９０はそのセクタのデータの読出しまたは書込みを行なう。主ステートマシン９０は、各セクタが正常に見つかり読出しまたは書込みが行なわれた後に、要求セクタの総数（ＳＥＣ＿ＣＮＴ）を１だけ減分する。ＳＥＣ＿ＣＮＴが零まで減分されると、読出しまたは書込み動作は完了する。
【００４３】
（既存のスキップ・レジスタの構成）
Ｆｉｇ．２Ａはディスク２５上のトラック１２０、第１スキップ・レジスタ１２５、および第２スキップ・レジスタの一例を示しており、既存の設計の欠点を例証するために使用する。この例の目的のために、６つのセクタ１３０〜１４０および２つのスキップ・レジスタ１２５、１２７だけが示されている。しかし、トラックは２００またはそれ以上のセクタを含むことができ、ディスク・フォーマッタ３０は幾つかのスキップ・レジスタを持つことができる。
【００４４】
Ｆｉｇ．２Ａで、各スキップ・レジスタ１２５、１２７は、単一の欠陥セクタの位置（セクタ・アドレスまたはセクタＩＤとも呼ばれる）を格納またはマップすることができる。しかし、読出しまたは書込みが行なわれるトラック上の欠陥セクタの数は、スキップ・レジスタの数より大きいかもしれない。例えばＦｉｇ．２Ａに示すように、３つの欠陥セクタ１３２〜１３６があり、スキップ・レジスタ１２５、１２７は２つしかない。１つの既存の方法では、ディスク・フォーマッタ３０は、その欠陥管理動作がスキップすべきセクタを制限された数、この例では２個しか処理できないので、そのトラック１２０に意図された読出しまたは書込み動作を少なくとも２つの動作に分割する。第１欠陥管理動作は、第１セクタ欠陥１３２の位置を格納するために第１スキップ・レジスタ１２５を使用し、かつ第２セクタ欠陥１３４の位置を格納するために第２スキップ・レジスタ１２７を使用する。第２欠陥管理動作は、第３セクタ欠陥１３６の位置を格納するために第１スキップ・レジスタ１２５を使用する。第１読出し動作は、セクタｎ１３０まで読み出し、第２読出し動作はｎ＋１からトラック１２０に沿ってさらに別のセクタまで読み出す。
【００４５】
欠陥管理動作を分割する１つの欠点は、読出しまたは書込み動作を完了するために必要な時間が長くなること、およびそれによってディスク・ドライブ性能が低下することである。
【００４６】
（スキップ範囲検査レジスタ）
Ｆｉｇ．２Ｂは、ディスク・トラック１２０、および本発明の一実施形態によるスキップ範囲検査レジスタ１５０の１つの構成を示す。Ｆｉｇ．２Ｂで、スキップ範囲検査レジスタ１５０はスキップ・セクタ位置またはＩＤフィールド１５４（ＳＫＩＰ＿ＩＤ）および長さフィールド１５２（ＬＥＮＧＴＨ）を含む。スキップ・セクタＩＤフィールド１５４は、Ｆｉｇ．２Ｂに示す第１欠陥セクタ１３２のように、トラック１２０上でスキップすべき第１セクタのセクタ位置を指定する。好適な構成では、このスキップ・セクタＩＤは、論理アドレスではなく、物理アドレスである。
【００４７】
ＬＥＮＧＴＨフィールド１５２は、第１欠陥セクタ１３２から始まる、スキップすべき連続欠陥セクタの数を指定する。「１」のＬＥＮＧＴＨは、ＳＫＩＰ＿ＩＤアドレスのセクタだけがスキップされることを示す。「２」のＬＥＮＧＴＨは、ＳＫＩＰ＿ＩＤおよびＳＫＩＰ＿ＩＤ＋１アドレスの２つのセクタがスキップされることを示す。例えば、Ｆｉｇ．２Ｂに示すトラック１２０の場合、ＬＥＮＧＴＨフィールド１５２は３である。ＬＥＮＧＴＨフィールド１５２は、１つのスキップ・レジスタ１５０を使用するだけであるが、ディスク・フォーマッタ３０に２つ以上のセクタをスキップさせることができる。
【００４８】
スキップ範囲検査レジスタ１５０は、欠陥セクタがしばしば一塊りの隣接または連続したセクタにまとまって見つかるという事実を利用する。単一のスキップ範囲検査レジスタ１５０（Ｆｉｇ．２Ｂ）を持つディスク・フォーマッタ３０（Ｆｉｇ．１）は、動作を複数の部分に分割する代わりに、１回の欠陥管理動作で（図示する欠陥を持つ）トラック１２０の読出しまたは書込み動作を実行することができる。これは読出しまたは書込み動作の時間を短縮し、ディスク・ドライブの性能を向上する。
【００４９】
Ｆｉｇ．３は、１組１７０のスキップ範囲検査レジスタ１８０〜２１０の１つの構成を示す。各レジスタ１８０〜２１０は、不良セクタまたは連続不良セクタの範囲を表わすことができる。Ｆｉｇ．３のスキップ範囲検査レジスタ１８０〜２１０は、１０ビットのＳＫＩＰ＿ＩＤフィールド１６８、４ビットのＬＥＮＧＴＨフィールド１６６、ＩＮＣＲＥＭＥＮＴ  ＬＢＡビット１６４、およびＲＥ−ＡＳＳＩＧＮビット１６２を含む。ＳＫＩＰ＿ＩＤ１６８は、トラック１２０上のスキップまたは再割当すべき第１セクタの位置を指定する。ＬＥＮＧＴＨフィールド１６６は、スキップまたは再割当すべき連続セクタの数を指定する。ＬＥＮＧＴＨフィールド１６６の「０」の値は、スキップ範囲検査レジスタ１６０が有効でないエントリを含むことを示す。言い換えると、ＬＥＮＧＴＨ＝０の場合、スキップは必要ない。
【００５０】
スキップ範囲検査レジスタ１８０〜２１０内のエントリは、ファームウェア６５によって昇順にロードされることが好ましい。スキップすべき最も低い物理セクタの位置またはセクタの範囲は、第１スキップ・レジスタ１８０にロードされる。スキップすべき２番目に低い物理セクタの位置またはセクタの範囲は、第２スキップ・レジスタ１８２にロードされ、以下同様である。この好適な構成では、満杯レジスタの間に空のレジスタは無い。したがって、ひとたびスキップ検査ステートマシン１００が空のレジスタに遭遇すると、それ以上スキップ範囲検査レジスタを読み出す必要はない。満杯レジスタの間に空のレジスタを置かずにエントリを昇順にロードする利点について、以下でＦｉｇ．５およびＦｉｇ．６を参照しながら説明する。
【００５１】
Ｆｉｇ．３には１６個のスキップ・レジスタ１８０〜２１０が示されているが、本発明の他の実施形態は１６個より多数または少数のスキップ・レジスタを持つことができる。Ｆｉｇ．１のスキップ検査レジスタ１０５は、Ｆｉｇ．３のスキップ範囲検査レジスタ１８０〜２１０の組１７０を含むことが好ましい。代替的に、他の実施形態では、スキップ範囲検査エントリは、レジスタ１８０〜２１０の代わりにメモリに格納された、先入れ先出し（ＦＩＦＯ）モジュールまたはスタックにより実現することができる。
【００５２】
（論理ブロック・アドレス）
ＩＮＣＲＥＭＥＮＴ  ＬＢＡビット１６４は、ホスト・システム５からの読出しまたは書込み動作に、欠陥ではない特定の望まれないセクタをスキップさせる。一般的に、ホスト・システム５はデータを一続きの連続した論理ブロック・アドレス（ＬＢＡ）として認識する。ディスク・コントローラ１５は、データがディスク２５上にどのように格納されるかの配列を制御し、ファームウェア６５は、ＬＢＡと物理セクタ・アドレスとの間の変換を制御する。ＬＢＡから物理アドレスへのマッピングは、ホスト・システム５に対して透過的に行われることが好ましい。したがって、論理ブロック・アドレスは、ディスク上の物理セクタＩＤと一致しないかもしれない。
【００５３】
例えば、ホスト５によって使用される論理ブロック・アドレス１〜１９は、第１ディスク・プラッタ（図示せず）の第１トラックのセクタ８〜２６に格納されるかもしれず、ＬＢＡ２０〜２２は（Ｆｉｇ．２Ｂの場合のように）第１ディスク・プラッタの第２トラックのセクタ１、５、および６に格納されるかもしれず、ＬＢＡ２３〜３０は第２ディスク・プラッタのトラックのセクタ１〜８上に格納されるかもしれない。さらに、データ・セクタは様々な物理セクタＩＤに再割当されるかもしれないが、論理ブロック・アドレスは連続したままである。
【００５４】
ＬＢＡカウンタ４７（Ｆｉｇ．１）は、ディスク２５に格納されたデータ・セクタの論理ブロック・アドレスを追跡する。ディスク・コントローラ１５がディスク２５にデータを書き込むと、ＬＢＡカウンタ４７は自動的に増分され、データがディスク２５のセクタに格納されるときに、割り当てられたＬＢＡ値がデータと共に挿入される。製造中に検出された、スキップされる欠陥セクタに関連付けられるＬＢＡ値は無い。ディスク・フォーマッタ３０は、各セクタのＬＢＡ値がディスク２５から読み出されるときに、それを自動的に検査することができる。
【００５５】
（増分ＬＢＡビット）
Ｆｉｇ．４は、ホスト５からの読出しまたは書込みコマンドに関連してホスト・システム５（Ｆｉｇ．１）によって生成される、リストまたはビット・マップ１８０の一構成を示す。ビット・マップ１８０は、ディスク・ドライブ２がホスト・システム５からビット・マップ１８０を受け取ったときに、ＲＡＭ６０に格納される。代替的に、Ｆｉｇ．４のビット・マップの代わりに、またはそれに加えて、ディスク・ドライブ・コントローラ１５に特定の望まれないセクタをスキップするように通知する他の手段を使用することができる。
【００５６】
動作中、ファームウェア６５はビット・マップ１８０を使用して、特定の読出しまたは書込み動作でどの論理ブロック・アドレスがホスト・システム５によって要求され、どの論理ブロック・アドレスが要求されないかを決定する。ビット・マップ１８０の各ビット１８２〜２０４は、トラック上のセクタの物理セクタ・アドレスに関連付けられる論理ブロック・アドレスを表わす。「１」は、特定の読出しまたは書込みコマンドでホスト５によって要求される論理ブロック・アドレスを示す。「０」は、望まれない論理ブロック・アドレスまたはディスク・コントローラ１５によってスキップすべきセクタを示す。ファームウェア６５は、Ｆｉｇ．４のビット・マップ１８０および増分ＬＢＡビット１６４（Ｆｉｇ．３）を使用して、特定の読出しまたは書込み動作によって望まれないセクタについてＬＢＡカウンタ４７を調整する。特に、ファームウェア６５はビット・マップ１８０を使用して、スキップ検査レジスタ１０５（Ｆｉｇ．１）のエントリを構成する。
【００５７】
例えば、Ｆｉｇ．４で、最初の３つのビット１８２〜１８６は「１」であり、次の２つのビット１８８〜１９０は「０」である。これは、論理ブロック・アドレス１〜３が読出しまたは書込み動作で使用され、論理ブロック・アドレス４〜５が使用されない（望まれない）ことを示す。ファームウェア６５（Ｆｉｇ．１）はビット・マップ１８０をスキップ範囲検査レジスタ１８０〜２１０（Ｆｉｇ．３）のエントリに変換して、論理ブロック・アドレス４〜５に関連付けられるセクタをスキップする。ファームウェア６５は、スキップ検査レジスタのエントリの増分ＬＢＡビット１６４を、「１」などの予め定められた状態に設定し、長さ（範囲）フィールド１６６（Ｆｉｇ．３）に値「２」をロードする。これは、ＬＢＡカウンタ４７が、スキップされた２つのセクタのために２だけ増分されることを示す。
【００５８】
このように、増分ＬＢＡビット１６４は、ＬＢＡカウンタ４７を増分すべきか否かを示す。望まれない（しかし欠陥ではない）セクタはスキップされ（読み書きされず）、増分ＬＢＡビット１６４は、スキップされたセクタがあたかも有効であり読み書きが行われたかのように、それらをＬＢＡカウンタ４７に計数させる。特定の読出しまたは書込み動作によって望まれない特定のセクタを標記する能力は、ディスク・コントローラ１５及びスキップ検査方法にいっそうの柔軟性を追加するが、必須ではない。
【００５９】
（再割当ビット）
上述した通り、Ｆｉｇ．３の再割当ビット１６２は、残りのフィールド１６４〜１６８と共にファームウェア６５によってロードされる。再割当ビット１６２が１に設定される場合、これは、スキップ・セクタＩＤフィールド１６８および長さフィールド１６６によって指定された全てのセクタが再割当され、スキップされることを示す。言い換えると、ＳＫＩＰ＿ＩＤからＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１）までの範囲の全てのセクタがスキップされる。スキップされたセクタは、セクタ・カウント（ＳＥＣ＿ＣＮＴ）の一部として計数されない。
【００６０】
（スキップ・レジスタへのアクセス）
マイクロプロセッサ２０によるスキップ範囲検査レジスタ１９０〜２１０の組１７０へのアクセスは、２バイト・アドレス空間を占めるＦＩＦＤ様インタフェース（図示せず）を通して行われる。ファームウェア６５が読出しまたは書込み動作のためにスキップ検査レジスタ１８０〜２１０をロードする前に、ディスク・フォーマッタ３０は、Ｆｉｇ．１のディスク・フォーマッタ制御レジスタ１０１の「スキップＦＩＦＯ初期化」ビットをセットすることによって、ＦＩＦＯインタフェースを初期化することが好ましい。スキップＦＩＦＯ初期化ビットをセットすると、長さフィールドおよび再割当ビットを含めて、各スキップ検査レジスタ１９０〜２１０の全てのフィールドが０にリセットされる。
【００６１】
（アドレス論理およびポインタ）
ディスク・フォーマッタ３０はさらに、Ｆｉｇ．３に示すように選択されたスキップ検査レジスタ１８０〜２１０を指す、スキップ・レジスタ・アドレス・ポインタＰＮＴＲ１７２などのスキップ・レジスタ・アドレス論理を含む。ロード・ポインタ変数は、レジスタ１８０〜２１０をロードするためにファームウェア６５によって使用される。読出しポインタ変数は、レジスタ１８０〜２１０がファームウェア６５によってロードされた後で、レジスタ１８０〜２１０を読み出すために、スキップ検査ステートマシン１００によって使用される。
【００６２】
読出しまたは書込み動作の開始時に、ディスク・フォーマッタ３０はポインタＰＮＴＲ１７２（ロード・ポインタ変数）を「０」にリセットする。（マイクロプロセッサ２０によって実行される）ファームウェア６５がスキップ検査レジスタ１８０〜２１０をロードすると、ファームウェア６５はポインタ１７２（ロード・ポインタ変数）によって指定される単一のアドレスにアクセスして書込みを行なう。組１７０内のスキップ検査レジスタ１８０〜２１０が増分しながらロードされるように、ディスク・フォーマッタ３０はＰＮＴＲ１７２（ロード・ポインタ変数）を自動的に増分する。一構成では、ファームウェアによってレジスタ１８０〜２１０に書き込まれるエントリが１６より多い（実現されたレジスタ１９０〜２１０の総数より多い）場合には、ポインタ１７２（ロード・ポインタ変数）は最後のレジスタ２１０をラップアラウンドして、連続レジスタ１８０〜２１０を増分し続ける。ポインタ１７２（ロード・ポインタ変数）のラップアラウンド性のため、ディスク・フォーマッタ３０はレジスタ１８０〜２１０の前のデータに上書きする。
【００６３】
ポインタ１７２がスキップ検査ステートマシン１００によって使用されるとき、ポインタ１７２（読出しポインタ変数）はスキップ検査範囲レジスタ１８０〜２１０をラップアラウンドするが、ひとたびそれがラップし始めると、スキップ検査ステートマシン１００は停止して、コントローラ１５にＳＥＣ＿ＲＥＱを処理させる。
【００６４】
（スキップ検査ステートマシン−Ｆｉｇ．５およびＦｉｇ．６）
Ｆｉｇ．５は、Ｆｉｇ．１のスキップ検査ステートマシン１００によって実行されるスキップ検査方法の一実施形態を示す。Ｆｉｇ．６は、Ｆｉｇ．３に示したスキップ範囲検査レジスタ１８０〜２１０と構造的に同様の多数のセクタ２５２〜２６８および１組のスキップ範囲検査レジスタ２７０〜２７６を持つトラック２５０の一例を示す。
【００６５】
スキップ検査ステートマシン１００の動作について、Ｆｉｇ．１〜Ｆｉｇ．６を参照しながら説明する。Ｆｉｇ．１で、ファームウェア６５は主ステートマシン９０およびコマンドステートマシン１０２を初期化し始動する。コマンドステートマシン１０２はスキップ検査ステートマシン１００を始動し、スキップ検査ステートマシン１００が終了するのを待つ。Ｆｉｇ．５で、スキップ検査ステートマシン１００は当初、休止状態２１０にあり、コマンドステートマシン１０２からのＳＫＩＰ  ＳＴＡＲＴコマンドを待つ。スキップ検査ステートマシン１００がＳＫＩＰ＿ＳＴＡＲＴコマンドを受け取ると、ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１＿２１５に進む。コマンドステートマシン１０２はＳＥＣ＿ＲＥＱ１０３（次の要求セクタのＩＤ）をセクタ・パルス発生器９２に転送する。ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、スキップ検査ステートマシン１００は、Ｆｉｇ．１のＳＥＣ＿ＲＥＱレジスタ１０３に格納された最初の値をセクタ・パルス発生器９２から受け取り、この値を第１スキップ検査レジスタ２７０のスキップ・セクタＩＤ（ＳＫＩＰ＿ＩＤ）と比較する。当初、ＰＮＴＲ２９８は第１スキップ検査レジスタ２７０にある。
【００６６】
（再割当）
ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、ＳＥＣ＿ＲＥＱが第１スキップ検査レジスタ２７０のスキップ・セクタＩＤに等しく、かつ再割当ビット２９０が１に設定された場合には、スキップ検査ステートマシン１００は再割当割込みをセットし（後述する）、制御をコマンドステートマシン１０２（または主ステートマシン９０）に転送する。スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５から休止状態２１０に進む。例えば、Ｆｉｇ．６でＳＥＣ＿ＲＥＱ＝２であり、かつＳＫＩＰ＿ＩＤ＝２である場合、ＳＥＣ＿ＲＥＱ＝ＳＫＩＰ＿ＩＤとなる。再割当ビットが１に設定された場合、ディスク・フォーマッタ３０は要求された再割当データ・セクタをトラックまたはディスク３０で探索することができる。この再割当セクタの探索はファームウェア６５によって指示することができ、Ｆｉｇ．５に示したスキップ検査ステートマシン法とは別個のプロセスであることが好ましい。
【００６７】
ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、ＳＥＣ＿ＲＥＱが（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））に低いか等しい場合、これは、ＳＥＣ＿ＲＥＱが第１スキップ検査レジスタ２７０によってスキップするように指定されたセクタの範囲内であることを意味する。例えば、Ｆｉｇ．６で、ＳＥＣ＿ＲＥＱ＝３であり、かつ（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））＝２＋（２・１）＝３である場合、ＳＥＣ＿ＲＥＱは、第１スキップ検査レジスタ２７０によってスキップするように指定されたセクタの範囲内になる。再割当ビット２９０が１に設定されると、スキップ検査ステートマシン１００はその動作を中断し（休止状態２１０に進み）、再割当割込みをセットし、制御をコマンドステートマシン１０２（または主ステートマシン９０）に戻す。
【００６８】
再割当割込みは、データが別のセクタ場所に再割当されたことをファームウェア６５（Ｆｉｇ．１）に知らせる。上述の通り、成長欠陥は一般的にセクタが読み出されるときに検出され記録されるが、プロセスは製造者の定義された実現によって異なる。成長欠陥のある各セクタからのデータは、非欠陥セクタに再割当される。再割当割込みに応答して、ファームウェア６５は、例えば再割当セクタ・アドレスのリストを使用することにより、データがどこに再割当されたかを決定する。ファームウェア６５は、再割当セクタのために再割当されたセクタアドレスを新しいコマンドと共にディスク・フォーマッタ３０に送る。スキップ検査ステートマシン１００は、別のＳＫＩＰ＿ＳＴＡＲＴコマンドをコマンドステートマシン１０２から受け取るまで休止状態２１０を維持する。
【００６９】
（ＬＥＮＧＴＨ＝０）
ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、ＬＥＮＧＴＨフィールド２９４が「０」に等しい場合、スキップ検査エントリは有効でなく、スキップは必要ない。例えばＦｉｇ．６で、全てのレジスタ２７０〜２７６のＬＥＮＧＴＨフィールドが「０」の場合、スキップは必要ない。次いでスキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５に進み、これは、スキップ検査ステートマシンによって「正常」セクタが見つかったことを示し、ディスク・フォーマッタ３０は、以下で述べる通り、セクタに読出しまたは書込みを行なうことができる。
【００７０】
（ＳＥＣ＿ＲＥＱ＜ＳＫＩＰ＿ＩＤ）
ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、ＬＥＮＧＴＨフィールドが零でなく、かつＳＥＣ＿ＲＥＱがＳＫＩＰ＿ＩＤより低い場合、これは、要求されたセクタ・アドレスが、ポインタＰＮＴＲ２９８によって現在指定されているスキップ検査レジスタの、この場合には第１スキップ・レジスタ２７０のＳＫＩＰ＿ＩＤより低いことを意味する。例えば、Ｆｉｇ．６で、ＳＥＣ＿ＲＥＱ＝１であり、かつＳＫＩＰ＿ＩＤ＝２である場合、ＳＥＣ＿ＲＥＱ＜ＳＫＩＰ＿ＩＤである。ＳＥＣ＿ＲＥＱが第１スキップ検査レジスタ２７０のＳＫＩＰ＿ＩＤより低い場合には、要求セクタ・アドレス（ＳＥＣ＿ＲＥＱ）は、昇順のため、全てのスキップ検査レジスタ２７０〜２７６のＳＫＩＰ＿ＩＤより低い。
【００７１】
スキップ検査ステートマシン１００は全てのスキップ検査レジスタ２７０〜２７６のエントリを検査する必要がないので、これはスキップ検査レジスタの昇順の利点である。スキップ検査ステートマシン１００がＳＥＣ＿ＲＥＱ＜ＳＫＩＰ＿ＩＤの状態を見つけるやいなや、スキップ検査ステートマシン１００はただちにイネーブル信号をコマンドステートマシン１０２および／または主ステートマシン９０に返して、要求セクタＳＥＣ＿ＲＥＱを読み出すかまたは書き込むことができる。スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５からＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５に進む。
【００７２】
（スキップ検査済み）
ＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５で、スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿４  ２３０に進み、これはＳＥＣ＿ＲＥＱによって現在指定されているセクタに対してスキップ検査手順が行なわれたことを示す。スキップ検査ステートマシン１００は制御をコマンドステートマシン１０２および／または主ステートマシン９０に返す。ディスク・フォーマッタ３０は、トラック２５０でＳＥＣ＿ＲＥＱによって指定されているセクタの読出しまたは書込みをディスク・ドライブ１５（Ｆｉｇ．１）に行なわせる。例えばＦｉｇ．６では、ディスク・フォーマッタ３０はディスク・ドライブ１５に、ＳＥＣ＿ＲＥＱ＝１のセクタ２５２の読出しまたは書込みを行なわせる。
【００７３】
セクタが正常に見つかり読み出された後、コマンドステートマシン１０２はＳＥＣ＿ＣＮＴレジスタ１０４の要求セクタの総数（ＳＥＣ＿ＣＮＴ）を減分する。ＳＥＣ＿ＣＮＴが零に達したとき、特定の読出しまたは書込み動作に関連付けられるセクタがそれ以上無く、読出しまたは書込み動作は完了する。
【００７４】
（スキップ検査続行）
ＳＫＩＰ＿ＳＴＡＴＥ＿４  ２３０で、スキップ検査状態マシン１００はコマンドステートマシン１０２および／または主ステートマシン９０からの信号を待つ。読出しまたは書込み動作で読み出すべき、または書き込むべきセクタがもっとある（ＳＥＣ＿ＣＮＴが零でない）場合、コマンドステートマシン１０２はセクタ・パルス発生器９２に、別のセクタ・パルスをスキップ検査ステートマシン１００へ送らせる。コマンドステートマシン１０２は、次のセクタのためにスキップ検査プロセスを続けるために、スキップ検査ステートマシン１００にＳＫＩＰ＿ＣＯＮＴコマンドを送る。スキップ検査ステートマシン１００は、ＳＫＩＰ＿ＳＴＡＴＥ＿４  ２３０からＳＫＩＰ＿ＳＴＡＴＥ＿５  ２３５へ進む。スキップ検査ステートマシン１００は、トラック上の次のセクタを指すように要求セクタＳＥＣ＿ＲＥＱを増分し、スキップ検査方法を再び始動する。
【００７５】
例えばＳＥＣ＿ＲＥＱが１である場合、それはＳＥＣ＿ＲＥＱ＋１＝２に増分される。次いでスキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５に進み、ＳＥＣ＿ＲＥＱ＋１＝２である次のＳＥＣ＿ＲＥＱ値にスキップ検査手順を実行する。
【００７６】
ディスク・フォーマッタ３０が現在の要求セクタ（ＳＥＣ＿ＲＥＱ）を読出している間に、スキップ検査ステートマシン１００は、読み出すべき、または書き込むべき次の要求セクタ（ＳＥＣ＿ＲＥＱ＋１）を検査することが好ましい。これは時間を節約し、読出しまたは書込み動作の効率を改善する。
【００７７】
（ポインタの増分）
ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５で、ＳＥＣ＿ＲＥＱが（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））より大きい場合、これは、要求セクタ・アドレスが、ポインタＰＮＴＲ２９８によって現在指定されているスキップ検査レジスタのＳＫＩＰ＿ＩＤより高いことを意味する。例えば、Ｆｉｇ．６で、ＳＥＣ＿ＲＥＱ＝４、ＳＫＩＰ＿ＩＤ＝２、および（ＬＥＮＧＴＨ・１）＝１の場合、（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））＝１であり、ＳＥＣ＿ＲＥＱ＞（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））である。スキップ検査ステートマシン１００は、ＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５からＦｉｇ．５に示すＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０に進む。スキップ検査ステートマシン１００は、次のスキップ検査レジスタ２７２を指すようにポインタＰＮＴＲ２９８を増分する。スキップ検査レジスタ値は昇順に編成されるので、次のスキップ検査レジスタ２７２は、トラック２５０でスキップすべき次に最も高いセクタのセクタ・アドレスまたはセクタの範囲を含む。
【００７８】
（ＲＥＡＤ＿ＡＬＬ信号）
ＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０で、スキップ検査ステートマシン１００は次のスキップ検査レジスタ２７２のＳＫＩＰ＿ＩＤを読み出す。スキップ検査レジスタにそれ以上エントリが無い場合、すなわちスキップ検査レジスタ２７２〜２７６が空であるか、あるいはＬＥＮＧＴＨ＝０である場合、内部信号ＲＥＡＤ＿ＡＬＬがコマンドステートマシン１０２に生成される。これは、スキップ検査ステートマシン１００が全てのスキップ検査レジスタ２７０〜２７６を検査し、スキップすべきセクタがそれ以上見つからなかったことを示す。これは、満杯のスキップ検査レジスタの間に空のスキップ検査レジスタが無いことを利用している。スキップ検査ステートマシン１００は、各スキップ検査レジスタ２７０〜２７６を検査する必要がない。スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０からＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５へ進む。
【００７９】
ＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０で、スキップ検査レジスタ２７０〜２７６にさらにエントリがある場合、スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５に戻る。例えば、Ｆｉｇ．６で、ＰＮＴＲ２９８は増分して第２スキップ検査レジスタ２７２を指す。第２スキップ検査レジスタ２７２はエントリを含む。スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５に戻り、ＳＥＣ＿ＲＥＱレジスタ１０３の現在値を第２スキップ検査レジスタ２７２に格納された値と比較する。
【００８０】
（ＳＥＣ＿ＲＥＱがスキップ範囲内、再割当＝０で、ＳＥＣ＿ＲＥＱの増分）
ＳＫＩＰ＿ＳＴＡＴＥ＿１で、要求セクタＳＥＣ＿ＲＥＱがＳＫＩＰ＿ＩＤ２９６に等しいか、またはスキップ検査レジスタ２７０によってスキップするように指定されたセクタの範囲内にあり、かつ再割当ビット２９０が０に等しい場合、スキップ検査ステートマシン１００はＳＥＣ＿ＲＥＱをＳＥＣ＿ＲＥＱ＋１に増分する。したがって、ＳＥＣ＿ＲＥＱのセクタはトラック２５０に沿ってスキップ検査ステートマシン１００によってスキップされ、読出しまたは書込み動作中に処理されない。例えば、Ｆｉｇ．６で、ＳＥＣ＿ＲＥＱ＝２、ＳＫＩＰ＿ＩＤ＝２、および（ＳＫＩＰ＿ＩＤ＋（ＬＥＮＧＴＨ・１））＝３である場合、ＳＥＣ＿ＲＥＱは１だけ増分されるので、ＳＥＣ＿ＲＥＱ＝２のセクタ２５４はスキップされる。次いでスキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５からＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０に進む。
【００８１】
上述した通り、ＳＫＩＰ＿ＳＴＡＴＥ＿２で、スキップ検査ステートマシン１００は次のスキップ検査レジスタ２７２のＳＫＩＰ＿ＩＤを読み出す。次のスキップ検査レジスタ２７２にエントリが無ければ、スキップ検査ステートマシン１００は信号ＲＥＡＤ＿ＡＬＬをコマンドステートマシン１０２に生成する。スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０からＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５に進む。次のスキップ検査レジスタ２７２に別のエントリがある場合、スキップ検査ステートマシン１００はＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５に戻る。次いでスキップ検査ステートマシン１００は、次のＳＥＣ＿ＲＥＱ値（ＳＥＣ＿ＲＥＱ＋１）にスキップ検査を実行する。
【００８２】
要するに、スキップ検査ステートマシン１００がＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５からＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０に進むときに、スキップ検査ステートマシン１００は（欠陥セクタをスキップするために）ＳＥＣ＿ＲＥＱレジスタ１０３を増分するか、または（次のスキップ検査レジスタを指すために）ポインタＰＮＴＲ２９８を増分する。ＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０からＳＫＩＰ＿ＳＴＡＴＥ＿１  ２１５に戻る経路は、スキップ検査ステートマシン１００がスキップ検査状態レジスタ２７０〜２７６の可能なエントリを全部は検査し終わっていないことを示す。ＳＫＩＰ＿ＳＴＡＴＥ＿２  ２２０からＳＫＩＰ＿ＳＴＡＴＥ＿３  ２２５への経路は、スキップ検査ステートマシン１００が、スキップ検査状態レジスタ２７０〜２７６の全てのエントリを検査し終わり、スキップすべき欠陥セクタがそれ以上見つからなかったことを示す。
【００８３】
本発明の実施形態および適用例を示しかつ説明したが、発明の範囲から逸脱することなく様々な変形が可能であることを、当業者は理解されるであろう。したがって、本発明は請求の範囲内で、具体的に説明した以外のやり方で実施することができる。
【図面の簡単な説明】
【図１】Ｆｉｇ．１は、本発明の一実施形態によるホスト・システムおよびディスク・ドライブを示し、かつディスク・ドライブに接続されたホスト・システムを示す。
【図２】Ｆｉｇ．２Ａは、ディスク上のトラックおよび２つのスキップ・レジスタの一例を示す。
【図３】Ｆｉｇ．２Ｂは、ディスク上のトラックの一例および図１のディスク・ドライブ内のスキップ範囲検査レジスタの１つの構成を示す。
【図４】Ｆｉｇ．３は、Ｆｉｇ．１のディスク・ドライブ内の１組のスキップ範囲検査レジスタの１つの構成を示す。
【図５】Ｆｉｇ．４は、Ｆｉｇ．１のディスク・ドライブによって使用されるビット・マップの１つの構成を示す。
【図６】Ｆｉｇ．５は、Ｆｉｇ．１のディスク・ドライブによって実行されるステートマシン方法の１つの構成を示す。
【図７】Ｆｉｇ．６は、ディスク上のトラックの一例およびＦｉｇ．３の１組のスキップ範囲検査レジスタを示す。
【図８】Ｆｉｇ．７は、Ｆｉｇ．１のディスク・ドライブによって実行されるファームウェア方法の１つの構成を示す。
【図１】
0004652642.tif 000002
【図２】
0004652642.tif 000003
【図３】
0004652642.tif 000004
【図４】
0004652642.tif 000005
【図５】
0004652642.tif 000006
【図６】
0004652642.tif 000007
【図７】
0004652642.tif 000008
【図８】
0004652642.tif 000009