(57)【特許請求の範囲】
【請求項１】
不揮発性メモリ媒体を有する記憶装置における、複数の揮発性メモリ・セルを有するキャッシュ・バッファにデータを格納するためのキャッシュ・バッファ制御方法であって、
メモリ・セルを複数のページに論理的に分割するステップと、
各ページのカウンタに当該ページに格納されているデータパケット数を登録するステップと、
個々のページのカウンタの値をチェックして、空きスペースを探索するステップと、
空きスペースを有するページに新しいデータを格納するステップと、
コマンド履歴から読み出しコマンド率を計算するステップと、
前記読み出しコマンド率から重み率を決定するステップと、
個々のページ用に設けられたシャドウ・カウンタに前記重み率を割り当てるステップと、
ページにデータを格納すると、他のページのシャドウ・カウンタの値を更新するステップを備えたことを特徴とするキャッシュ・バッファ制御方法。
【請求項２】
複数のページに論理的に分割されたメモリ・セルで構成されたキャッシュ・メモリを有するディスク・ドライブのための制御装置であって、
前記ページ毎に設けられ、当該ページに格納されるデータパケット数を格納するページ・カウンタと、
読み出しコマンド率に対応する重み率を格納したテーブルと、
ページ毎に前記重み率を格納するシャドウ・カウンタと、
ページに格納されたデータの転送の完了によって前記ページ・カウンタの値を更新するとともに、ページにデータが格納されると、他のページのシャドウ・カウンタの値を更新する制御器とを備えたことを特徴とする制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ハードディスク・ドライブとテープ・ドライブのキャッシュ・バッファ制御方法とアルゴリズムに関し、より詳しくは、キャッシュ・バッファを管理すると共に、読み出し動作と書き込み動作のために使用可能な前記キャッシュ・バッファ内のメモリ・セルを識別するための方法とアルゴリズムに関する。
【０００２】
【従来の技術】
一般的なコンピュータ・システムにおいては、データはホスト・ユニット内で処理され、後の検索と更なる処理のためにメモリ内に格納される。普通に使用されるメモリは、ホスト・ユニットからのコマンドによってデータの書き込みと読み出しが行われる不揮発性記憶媒体を有するハードディスク・ドライブまたはテープ・ドライブである。理解を容易にするために、本発明は、磁気ディスクを有するハードディスク・ドライブに関して述べられているが、前記記憶媒体が、磁気ディスク・ドライブ、光ディスク・ドライブ、テープ・ドライブ等であってもよい。
【０００３】
書き込み処理と読み出し処理は、ディスク・ドライブ制御のために設けられた専用の中央処理装置（CPU）によってハードディスク・ドライブ内で内部的に制御される。とりわけ、このCPUは、ハードディスク・ドライブ内（またはホスト・ユニット内）のキャッシュ・バッファなどの揮発性メモリを用いて、書き込み動作と読み出し動作を促進し、ホスト・ユニットに効率よく貢献している。
【０００４】
【発明が解決しようとする課題】
図24に、公知のキャッシュ・バッファの概略構造を示す。キャッシュ・バッファ内の各メモリ・セルはメモリ・アドレスを有している。CPUは、LBA（論理ブロック・アドレス）と呼ばれる、通常、ブロックに分けられているこれらのアドレスに従ってキャッシュ・バッファ内にデータを格納する。図24において、W1は最初の書き込みコマンドでディスクに書き込まれるデータを示しており、W2からW5は、その後に続く書き込みコマンドで書き込まれるデータを示している。R1、R2、およびR3は、連続する読み出しコマンドでディスクから読み出されるデータを示している。別々の論理キャッシュ・バッファと物理的キャッシュ・バッファまたはそのいずれかが、それぞれ読み出しと書き込みのために使用される。読み出しバッファと書き込みバッファはリング・バッファであるので、書き込みバッファが一杯になると、W5データは、キャッシュがディスクに書き込まれるまで保持されなければならないか、W1データを上書きするかのいずれかである。このことは読み出しバッファについても同様である。あるいは、CPUがデータを分解してキャッシュ・バッファのいくつかの領域の間に格納しなければならない。２バッファ形態のキャッシュ・バッファと、データを格納し上書きする方法とは、両方とも、効率が悪く、時間を無駄にし、ハードディスク・ドライブの応答時間を遅くする。そこで、本発明の目的は、ハードディスク・ドライブ等のための新規な改善されたキャッシュ・バッファ制御方法とアルゴリズムを提供することにある。
【０００５】
本発明のもう一つの目的は、キャッシュ・バッファ内のメモリ・セルのための新規な改善された管理方式を提供することにある。
【０００６】
本発明の更なる目的は、ハードディスク・ドライブ等からの読み出しとハードディスク・ドライブ等への書き込みのためのキャッシュ・バッファ内の有効メモリを識別するための新規な改善されたキャッシュ・バッファ制御方法と装置を提供することにある。
【０００７】
【課題を解決するための手段】
本発明は、不揮発性メモリ媒体を有する記憶装置内にあって、一つの方法で不揮発性メモリへの書き込みと不揮発性メモリからの読み出しの両方を行うために用いることができる複数の揮発性メモリ・セルを有するキャッシュ・バッファの中にデータを格納するために用いるキャッシュ・バッファ制御方法を含んでいる。この方法は、メモリ・セルを複数のページに論理的に分割するステップと、その中の少なくともいくつかの（通常は全ての）メモリ・セルが新しいデータを格納することができる各ページのカウンタにオープン状態を登録するステップと、新しいデータを格納することができるメモリ・セルを持たない各ページのカウンタにフル状態を登録するステップと、オープン状態にあるページに新しいデータを格納するステップとを備えている。
【０００８】
また、本発明は、キャッシュ・バッファ内の複数の連続したメモリ・セルで構成された個々のページ用に設けられたページ・カウンタの値をチェックすることによって空きスペースを探索するステップを備えた、キャッシュ・バッファ内空きスペース探索方法を含んでいる。本発明の方法によって、重み率が読み出しコマンド率から決定される。読み出しコマンド率は、読み出しコマンド数を読み出しコマンド数と書き込みコマンド数の合計で除したものであって、パーセントで表される。重み率は個々のページ用に設けられたシャドウ・カウンタに割り当てられる。重み率はコマンドに優先順位をつけるために用いられる。
【０００９】
また、本発明は、キャッシュ・バッファ内の複数の連続したメモリ・セルで構成された個々のページ用に設けられたページ・カウンタの値に基いて、ページがオープン状態にあるか否かを判定するステップと、前記判定ステップにおいてオープン状態にあると判定されたページにデータを格納するステップとを備えた、キャッシュ・バッファ制御方法を含んでいる。本発明の方法によって、順次アクセス、すなわち、一つの書き込みコマンドのあとにもう一つの書き込みコマンドがくるか、一続きまたは一ブロックのデータのあとに、それに続く一つの関連するデータのブロックがくるか、またはその両方であるアクセスの書き込みコマンドの書き込みデータを格納する間に、キャッシュ・バッファがバッファ・フル状態となる場合に、順次アクセス書き込みコマンドの書き込みデータのデータ書き込み動作が優先される。
【００１０】
また、本発明は、複数のページに論理的に分割されたメモリ・セルで構成されたキャッシュ・メモリを有するディスク・ドライブのための制御装置であって、個々のページ用に設けられたページ・カウンタと、ページの中に格納されたデータのデータ転送の完了によって前記ページ・カウンタの値を更新する制御器とを備えた制御装置を含んでいる。本発明の装置によって、計算された読み出しコマンド率に基いて重み率を決定する手段と、オープン状態にある前記キャッシュ・バッファのページにデータを格納する手段と、順次アクセスの書き込みコマンドの書き込みデータを格納する間、前記キャッシュ・バッファがバッファ・フル状態になった場合に、順次アクセス書き込みコマンドの書き込みデータのデータ書き込み動作の優先順位を変更する手段とを提供することができる。
【００１１】
本発明のこれらの目的およびその他の目的と、本発明の具体的な実施態様が、本発明の以下の詳細な説明と、図面と、請求の範囲とから、当業者にとって明らかとなるであろう。
【００１２】
【発明の実施の形態】
図１は、コンピュータ・システム１０のブロック図である。コンピュータ・システム１０は、ホスト・ユニット１２と、少なくとも一つの入力装置１４と、少なくとも一つの周辺装置１６を備えている。ホスト・ユニット１２は、入力装置１４によって供給されたデータを処理するための中央処理装置と、ランダム・アクセス・メモリ（RAM）等を有する一般的なパソコン等である。入力装置１４は、キーボードと、データ、ビデオ、またはオーディオのソース等である。周辺装置１６は、一つまたはそれ以上のプリンタ、ディスプレイ等を含む。
【００１３】
コンピュータ・システム１０はまた、データの不揮発性記憶のための少なくとも一つのハードディスク・ドライブ（HDD）１８を備えている。HDD１８は、一般に磁気記録媒体を含むが、光記憶媒体、テープ、またはその他の適当な不揮発性媒体であってもよい。
【００１４】
図２は、ハードディスク・ドライブ１８の概略構造を示す図である。HDD１８は、制御器２０と、不揮発性メモリ媒体２２と、リードチャネル２４と、ヘッドIC２６と、サーボ・チャネル回路２８と、スピンドル・モータおよびボイスコイル・モータ（SPM/VCM）３０と、キャッシュ・バッファ３２と、フラッシュROM３４とを備えている。制御器２０は、プロセッサ（MPU）３６と、キャッシュ情報テーブル３９と重み率テーブル４１を有するS-RAM３８と、ハードディスク制御器４０と、S-RAM４２とを備えている。読み出しヘッド４４と書き込みヘッド４６も装備されている。
【００１５】
HDD１８の一般的な動作は以下の通りである。ホスト・ユニット１２は、MPU３６を外部装置のコンソール・インターフェース（I/F）に接続するために、MPU３６にRS232Cポート４８などの適当な接続を介して読み出しコマンドと書き込みコマンドを送る。MPU３６は、ハードディスク制御器４０を介して読み出しコマンドと書き込みコマンドを実行する。このハードディスク制御器４０は、種々のコマンドの優先順位をつけると共に、メモリ媒体２２からの読み出しとメモリ媒体２２への書き込みを直接管理する。HDC４０は、メモリ媒体からの読み出しとメモリ媒体２２への書き込みを上手に管理するためにキャッシュ・バッファ３２内の揮発性メモリを使用する。ATA読み出しコマンドおよび書き込みコマンドを発行するパソコンと通信するために、ATAポート５０等を介してデータを、ホスト・ユニット１２から受け取り、ホスト・ユニット１２へ転送する。
【００１６】
キャッシュ・バッファ３２はいく通りかの方法で使用される。例えば、時には、HDC４０が、データをハードディスク・ドライブに受容可能な速度で連続的にメモリ媒体２２に書き込むことができるように、キャッシュ・バッファ３２に入力データを蓄える。キャッシュ・バッファ３２は、データがメモリ媒体２２のいくつかの場所に格納されているときは特に、メモリ（ディスク）媒体２２から読み出されたデータを組み立てるために使用することもできる。キャッシュ・バッファ３２は、順次読み出しコマンドまたは順次書き込みコマンドを処理するために使用することができる。キャッシュ・バッファ３２はまた、読み出しコマンドおよび書き込みコマンドが混在している場合、および、多くの書き込みコマンドと読み出しコマンドが事実上同時に受け取る場合にも有用である。
【００１７】
ホスト・ユニット１２が読み出しコマンドと書き込みコマンドまたはそのいずれかを発すると、HDD１８は、コマンドが書き込みコマンドであればホスト・ユニット１２から、コマンドが読み出しコマンドであれば記憶媒体から、キャッシュ・バッファ３２にデータを蓄積する。適当なときに、HDC４０は、キャッシュ・バッファ３２内のデータをホスト・ユニット１２またはメモリ媒体２２に転送させるキャッシュ・ヒット・コマンドを発する。
【００１８】
図3は、「ページ・キャッシュ」と呼ばれる、キャッシュ・バッファ３２を制御のために管理する方法を示す。図3に示すように、キャッシュ・バッファ３２を、「ページ」と呼ばれるブロック０，１，２，．．．Ｎに論理的に分割する。ページ数はメモリ・サイズに基いて決定されるため、メモリ・サイズによって変化する。自由領域探索動作における読み出しデータ転送動作と書き込みデータ転送動作またはそのいずれかのために確保されるキャッシュ・バッファ内の領域は「自由領域」と呼ばれる。各ページは３２のセクタを有し、各セクタは１１２バイトのメモリ・セルを有する。
【００１９】
各ページ内のいくつかまたは全てのメモリ・セルは、任意の時間にデータを読み出すことと書き込むことまたはそのいずれかのために使用することができる。キャッシュ・バッファの全てのメモリ・セルは、書き込みデータまたは読み出しデータのいずれかのために使用することができる。このことは、キャッシュ・バッファが、読み出しデータ転送動作と書き込みデータ転送動作の両方のために共有されることを意味する。
【００２０】
一つのキャッシュ・バッファを読み出しデータ転送動作と書き込みデータ転送動作の両方のために共有するために、ページ・キャッシュとページ・カウンタが用いられる。ページのページ・カウンタが特定の値、例えば「０」をもつ場合、そのページがオープン状態にあることを意味する。オープン状態は、空き（または使用可能）状態に相当する。これらのページは自由スペースと見なされる。ページのページ・カウンタがそのような特定の値を有する場合、そのページは自由スペースであって、読み出しアクセスと書き込みアクセスの両方のために使用することができる。もちろん、キャッシュ・バッファは、MPU３６の制御のもとに、読み出しアクセスと書き込みアクセスの両方のためにアドレス可能なように、キャッシュ・バッファの全てのメモリ・セルを割り当てることができるように構成される。
【００２１】
各ページのサイズはレジスタなどに格納される。すなわち、一つのページ内のセクタ数に相当する値「３２」は、レジスタかS-RAM３８の記憶場所に保持される。また、各ページの状態を格納するキャッシュ情報テーブル３９が用意される。MPU３６は、電源が入ると、S-RAM３８の中にテーブル３９を作成する。
【００２２】
テーブル３９は、キャッシュ・バッファ３２の個々のページ０〜Nのために、図３に示すように、「カウンタ」のカウント値を格納する。このようにテーブルはページ・カウンタをページに関係付ける。ページが空いているか否かはページの「カウント」に基いて管理される。ページのカウント値は、各ページ内のデータの状態を示す。ページのカウント値が「１」またはそれ以上の場合、そのページが「保持」状態にあることを意味する。「保持」状態とは、そのページ内のデータが上書きされるべきではないことを意味する。ページのカウント値が「０」の場合、そのページが「オープン」状態にあることを意味する。「オープン」状態は、そのページの全てのメモリ・セルが上書き可能であることを示す。重要なことは、「オープン」状態とは、そのページの全てのメモリ・セルが、読み出しコマンドか書き込みコマンドのいずれかの他のデータのために使用可能であることを意味することである。「オープン」状態にあるそのような領域は、自由領域探索動作が可能であり、自由領域として適当である。
【００２３】
MPU３６は、データ読み出しやデータ書き込みの間のコマンド受信時と、データ転送完了時、またはそのいずれかの時における自由領域探索動作によって、キャッシュ・バッファ内に自由領域があるかどうかを判定する。自由領域探索動作において、MPU３６は、全てのページの個々のカウンタの値をチェックする。カウンタの値は、MPU３６内の組込みメモリ内に作成されたテーブル内に格納することができる。
【００２４】
MPU３６は、以下のようないくつかの形式の自由領域探索動作を用いることができる。
【００２５】
（１）自由領域の探索サイズを固定ページ数に設定する。探索によって、「オープン」状態を有するページの数が固定ページ数と合致する連続自由領域があるかどうかがわかる。固定数のオープン状態ページが探索で発見されないならば、発見されるまでその探索を周期的に繰り返す。
【００２６】
（２）最小数と最大数を自由領域探索のために設定する。この自由領域探索において、最小数と最大数の間の総ページ数を探索し、「オープン」状態を有する連続ページを確保する。
【００２７】
（３）最小数のみを定義したのち、ページ数に相当する連続自由領域を探索して、できるだけ多くの「オープン」状態を有する連続ページを確保する。
【００２８】
（４）探索サイズを設定せずに、ページ数に相当する連続自由領域を探索して、できるだけ多くの「オープン」状態を有する連続ページを確保する。
【００２９】
（５）探索サイズを設定せずに、コマンドによって要求されたセクタ数を格納することができるページ数に相当する連続自由領域を探索し決定する。
【００３０】
ディスク・ドライブの動作状況に基いて、ディスク・ドライブがこれらの自由領域探索動作のうちの一つまたはそれ以上を行うようにこれらの自由領域探索動作を選択する。自由探索動作において確保される連続ページ数は、自由領域探索パターンと、キャッシュ・バッファ内に残っている「オープン」状態を有するページの数とに基いて変化する。
【００３１】
例えば、書き込み動作に対しては、自由領域探索パターン（３）および（４）を割り当てることができる。その場合、必要ならば、パターン（３）を最初に用いる。自由領域がパターン（３）によって発見されない場合は、パターン（４）を用いる。読み出し動作に対しては、パターン（１）、（２）、および（５）を割り当てることができる。その場合、必要ならば、パターン（１）を探索動作のために最初に用いる。もし自由領域を発見できない場合は、パターン（２）および（５）をその順に実行する。
【００３２】
自由領域探索動作の開始点のために、最新の自由領域探索動作において確保したページの情報を、組込みメモリまたは他の適当な場所に保持する。保持された情報によって識別されるページに続くページから新しい自由領域探索動作を行うことができる。
【００３３】
データは、図４(A)〜(D)及び図５(A)〜(C)に示すように、W1、W2等のいくつかのブロックに記録される。各ブロックは一つのコマンドに関するデータを表す。各ページのカウンタは、そのページにブロックが格納されていない場合は「０」、一つのブロックだけが格納されている場合は「１」、二つのブロックのいずれかまたは全てが格納されている場合は「２」というような数を示す。このように、二つ以上のブロックを各ページに格納でき、カウンタ内の数字がゼロでないかぎり保持状態が維持される。
【００３４】
図3に示すように、キャッシュ・バッファは所定サイズＸのページ０．．．Ｎを有し、カウンタ・フラグは各ページ内のデータ・パケットW１．．．Wnの数を表示する。例えば、図5(A)のデータ・パケットＷ１は完全にページ０内にあるが、ページ０はW２の一部をも含んでいる。従って、テーブル内に作成されたページ・カウントは、二つのデータ・パケットがページ０内にあることを示す。そのカウントは従って「２」である。ページ５はデータＷbの一部だけを含んでいるので、そのカウントは「１」であり、ページ９はデータがないので、そのカウントは「０」である。
【００３５】
図4(A)〜(D)及び図5(A)〜(C)に、データ・パケットW1〜W5を格納する第1の方法を示す。この第1の方法において、データ・パケットの長さは、書き込みコマンドがホスト・システムとの通信を通じて受け取られたときに、HDDによって知られる。
【００３６】
図4(A)に示すように、データWa、Wb、およびWcは、ページ４〜６の各々の値が１またはそれ以上であるので、消去および上書きすることができないため、その状態は「保持」である（図3参照）。一方、ページ０〜３とページ７〜９の値はすべて「０」であるので、これらのページの状態はすべて「オープン」である。この状態において、書き込みデータW1のコマンドを受け取ると、ハード・ドライブ制御器（MPU）３６は自由領域探索動作を実行する。この自由領域探索動作において、図4(A)に示すように、連続ページ０〜３のそれぞれのカウンタの値がすべて「０」であるので、ページ０〜３が自由領域とわかる。
【００３７】
また、MPU３６は、ホスト・コンピュータからHDC４０を介してキャッシュ・バッファ３２に格納される書き込みデータW1のセクタ数を得る。MPU３６は更に、S-RAM３８から所定数Ｘ１を得る。ここで、図5(B)に示すように、所定数Ｘ１は、一つのページの全セクタ数よりも少ない値であり、例えば「２０」である。また、MPU３６は、一つのページ内のセクタ数、例えば「３２」に、自由探索動作において確保されたページ数を掛けることによって、自由領域探索動作において確保される自由領域の全セクタ数を計算する。
【００３８】
書き込みデータW1のセクタ数が与えられると、MPU３６は、自由領域の全セクタ数から書き込みデータＷ１のセクタ数を差し引く。MPU３６はまた、自由領域の残りのセクタ数を得て、その残りのセクタ数を所定数Ｘ１と比較する。もし残り数が数Ｘ１よりも大きければ、書き込みデータW1を自由領域に格納する。ここで、図4(B)に示すように、書き込みデータW1は、ページ０〜３のうちの最小数のページから格納され、ページ０のテーブル内のページ・カウンタの値を１だけ増加させる。次の書き込みデータW2を受け取ると、MPU３６は、図4(B)について説明したのと同じ方法を実行し、図4(C)に示すように、自由領域に書き込みデータW2を格納する。図4(C)において、MPU３６はページ０と１に渡って書き込みデータW2を格納し、ページ０と１のカウンタの値を１だけ増やす。従って、ページ０と１のカウンタの値はそれぞれ「２」と「１」になる。
【００３９】
図4(D)と図5(A)に示すように、MPU３６は、書き込みデータW3とW4に対して同じ手順を繰り返し、書き込みデータW3とW4をキャッシュ・バッファに格納する。MPU３６は、その手順の実行の間にページ２と３のカウンタの値を変更する。
【００４０】
キャッシュ・バッファに書き込みデータW1〜W4を格納した後、書き込みデータW5を受けたときに、MPU３６は、自由領域の残りのセクタ数が所定数Ｘ1よりも少ないことを認識する。そこでMPU３６は、書き込みデータW5のセクタ数が所定数Ｘ１よりも少い可能性があっても、書き込みデータW5を自由領域に格納する動作を停止する。それからMPU３６は、新しい自由領域探索動作を開始する。図5(B)に示すように、MPU３６は、その新しい自由領域探索動作を通して次の自由領域を得る。上記で説明したように、自由領域探索動作における確保される連続ページ数を変化させることができる。ここで、自由領域探索動作において新しく発見された自由領域には、図5(B)の中でハッチングが施されたようにページ７〜９がある。
【００４１】
それから、MPU３６は、図5(C)に示すように、書き込みデータW5をページ７と８に渡ってキャッシュ・バッファ４２に格納し、ページ７と８のカウンタの値を１だけ増やす。すなわち、書き込みデータW5のセクタ数が大きくとも、W5はページ７とページ８の一部とに格納される。ページ８の残りとページ９とは次の使用または続いてくるコマンドのために残される。
【００４２】
キャッシュ・バッファを複数のページに分割し、各ページのカウントを記録することによって、システムは、自由スペースがキャッシュ・バッファの中のどこにあるのかを容易に決定することができる。また、「保持」状態と「オープン」状態が、個々のページの値に基いて管理されるので、キャッシュ・バッファのバッファ・スペースを、書き込みデータだけのバッファ・スペースと読み出しデータだけのバッファ・スペースに分ける必要はない。従って、全てのページを例えば書き込みデータだけに用いることができるので、キャッシュ・バッファの記憶容量を有効に利用することができる。
【００４３】
図6(A)〜(C)に、データ・パケットW1〜W5を格納する第2の方法を示す。第2の方法においては、データ・パケットの長さは、書き込みコマンドが受け取られたとき、HDDによって知られていない。この状態において、W1〜W5を、上記に図4(A)〜図5(C)を参照して述べた手順と同様な方法で、ページ１〜３の自由領域に連続的に格納する。ここで、MPU３６内で実行される手順は、セクタ数の所定数Ｘ１との比較を含んでいない。なぜなら、個々の書き込みデータのセクタ数が、書き込みデータW1〜W5を格納するときに知られていないためである。
【００４４】
データ・パケットW1〜W5の書き込みデータを格納する間、MPU３６は、書き込みデータを１つのセクタ・ユニット内のキャッシュ・バッファの自由領域に格納するたびに、確保された自由領域の全セクタ数を１だけ減らす。従って、MPU３６は、自由領域内にW5の全てのデータのための十分なメモリ容量がないため、ページ０〜３の確保された自由領域内のスペースが不十分であることを知る。そこで、MPU３６は、図6(A)に示すように、W5の書き込みデータの一部、すなわちW5aをページ３に格納したのち、書き込みデータW5の残りをキャッシュ・バッファに格納することを停止する。停止後、MPU３６は、新しい自由領域探索動作を開始する。MPU３６が次の自由領域、すなわち図6(B)のページ７〜９を見つけると、W5の残り、すなわち書き込みデータW5bを、図6(C)に示すようにページ７に格納する。最後に、MPU３６は、W5をページ３と７に分割したことをRAMに記録する。
【００４５】
図7(A)〜図7(C)に、データ・パケットW1〜W5を格納する第3の方法を示す。この第3の方法においては、データ・パケットの長さは、書き込みコマンドが受け取られたとき、HDDによって知られている。この第3の方法においては、残りのセクタ数を所定数Ｘ１と比較する手順がないことを除いて、図4(A)〜(D)に示されたのと同じ手順が実行される。図4においてＸ１は所定値であり、図7においてＸ２は残りの自由スペースである。比較を実行する代わりに、書き込みデータW1〜W5の各々を受け取ったときに、MPU３６は、自由領域の残りのセクタ数から書き込みデータのセクタ数を差し引くことによって、書き込みデータW1〜W5の各々のセクタ数が、自由領域の残りのセクタ数よりも大きいかどうかを判定する。自由領域の残りのセクタ数が書き込みデータのセクタ数より大きい場合、MPU３６は、書き込みデータをキャッシュ・バッファの自由領域に格納する。図7(A)に示すように、W1〜W4の書き込みデータが自由領域のページ０〜３に渡って格納される。
【００４６】
しかしながら、書き込みデータW5を受け取ったとき、自由領域の残りのセクタ数Ｘ２は、書き込みデータW5のセクタ数よりも少ないので、MPU３６は、書き込みデータW5をページ０〜３の自由領域に格納するのを停止する。
【００４７】
それからMPU３６は、新しい自由領域探索動作を実行し、図7(B)に示すように、ページ７〜９のカウンタの値がすべて０であるので、ページ７〜９に新しい連続自由領域を見つける。新しい連続自由領域を確保した後、MPU３６は、図7(C)に示すように、書き込みデータW5をページ７に格納する手順を開始する。
【００４８】
図8及び図9は、図4(A)〜図5(C)を参照して上述された第1の方法に関するデータ転送動作のイベント順を示すフローチャートである。
【００４９】
ステップS10で書き込みコマンドを受け取ると、MPU３６は自由領域探索動作を実行する。探索動作を実行する間、MPU３６は、ステップS12において、メモリ媒体に書き込むデータが、データ転送が完了したその前の書き込みコマンドのデータと重なるかどうかを判定する。もし重なる場合は、新しいコマンドの要求データを、前の書き込みコマンドからの同じデータが書き込まれたキャッシュ・バッファの領域に上書きする。それから、重なりデータ削除コマンドをステップS14で実行し、データ転送動作を実行する。ステップS12で重なりがないか、ステップS14で重なりデータを削除したならば、MPU３６は次のステップS18に進む。
【００５０】
図4(A)に示すように、自由領域探索動作において自由領域が確保されたならば、MPU３６は、一つのページの所定セクタ数に、自由領域探索動作において確保されたページの数を掛けることによって、自由領域内の全セクタ数を計算する。
【００５１】
順次アクセス・ステップS18は、新しいコマンドが、新しいコマンドのすぐ前を行くコマンドと順序関係があるかどうかを判定する。もし順次アクセスがあれば、すなわち、書き込みコマンドのデータのすぐ後にもう一つの書き込みコマンドのデータがあれば、新しい書き込みコマンドのデータを前の書き込みコマンドのデータに続けるために、前の書き込みコマンドのデータのすぐ後に、新しい書き込みコマンドのデータをバッファ内の位置に転送する（すなわち、W1のすぐ後にW2を転送する）。もし順次アクセスがあれば、ステップS20において、前のコマンドのセクタ・カウントに、新しい書き込みコマンドのセクタを表す数を加えることによって、前の書き込みコマンドのセクタ・カウントを調節する。その後、新しい書き込みコマンドは無視される。
【００５２】
ステップS18で順次アクセスがないか、ステップS20でセクタ・カウントを調節したならば、ステップS22でキャッシュ・バッファへのデータ転送を開始する。ここで、MPU３６は、書き込みコマンドを受け取った後、ホスト・システムとの通信を通じて書き込みデータのセクタ数を受け取る。それから、MPU３６は、自由領域の全セクタ数から書き込みデータのセクタ数を差し引いて、その計算結果を、あとで使用するために、一時的な格納手段、例えばS-RAM３８に格納する。通常、ページ数、すなわち自由領域探索動作において得られる連続セクタ数は、書き込みデータのセクタ数に比べて比較的大きい。
【００５３】
図4(B)に示すようにデータ転送動作が完了すると、MPU３６は、ステップS24において、書き込みデータが前のステップS22で格納されたページのページ・カウンタの値を一つ増やす。また、MPU３６は、ステップS26において、受け取ったコマンドのアクセス範囲、すなわち、両方ともLBAである、データの先行アドレスおよびデータの末端アドレスと、キャッシュ・バッファ内のデータのアドレスとを、データのキャッシュ情報としてキャッシュ・テーブル３９に保存する。MPU３６は、電源が入るとS-RAM３８内にキャッシュ・テーブル３９を作成し、読み出しコマンドや書き込みコマンドまたはパケットの処理後に、そのテーブルの全てを更新する。
【００５４】
データとキャッシュ情報をそれぞれキャッシュ・バッファとキャッシュ・テーブルに保存した後、ステップS30でコマンド履歴を計算する。コマンド履歴はハードディスク・ドライブのキャッシュ機能である。コマンド履歴機能において、MPU３６は、ディスク・ドライブによって受け取られたホスト・システムから発せられた読み出しコマンドと書き込みコマンドのサンプル数によって、読み出しコマンドと書き込みコマンドの内の読み出しコマンドの割合を決定する。所定数である、読み出しコマンドと書き込みコマンドのサンプル数は、ディスク・ドライブ内の動作状況に基いて変化する。
【００５５】
ここで、MPU３６に、S-RAM３８に格納された重み率テーブル４１（図10）が与えられる。この重み率テーブル４１は、ハードディスク・ドライブの工場または設計段階で予め決定される。この重み率テーブルには、図8に示すように、読み出しコマンドと書き込みコマンドのうちの読み出しコマンドの割合と重み率との間の関係が格納されている。図8は、読み出しコマンド率と重み率との間の関係を格納するテーブル４１を示している。得られた割合が０％であれば重み率は「０」である。得られた割合が１〜３４％であれば重み率は「１」である。割合が３５〜６７％であれば重み率は「２」である。割合が６８％より大きければ重み率は「３」である。割合と重み率との間の関係は変更することができ、動作状況、性能などに基き、望みどおりに分類することができる。重み率はページのシャドウ・カウンタの初期値を決定するために用いられる。
【００５６】
計算された割合に従って、MPU３６は、関係テーブルを参照することによって重み率を得る（図8のステップS30）。ステップS32で重み率が変更されていれば、ステップS34で全てのページのシャドウ・カウンタの値を一つ減らす。ステップS32で重み率の変更がないか、ステップS34で全てのシャドウ・カウンタの値を一つ減らすと、MPU３６は次のステップである図9のステップS36へ進む。
【００５７】
ステップS36で、MPU３６は、キャッシュ・バッファ内の自由領域の残りのセクタ数が所定のセクタ数Ｘ１よりも少ないかどうかを判定する。もし少なければ、ステップS38に進んで、図5(B)に示すように、新しい自由領域探索動作を実行する。所定のセクタ数Ｘ１は図5(B)に示されている。それから、ステップS40で、新しい自由領域を得るのに成功したかどうかを判定する。新しい自由領域が得られなければ、ステップS38に戻る。
【００５８】
ステップS36においてNOであるか、ステップS40で新自由領域が得られると、MPU３６はステップS42に進む。ステップS42においては、必要なら、書き込み順序変更動作を開始し、バッファ休止優先順位を設定する。
【００５９】
書き込み順序変更動作の機能は、書き込みコマンドのディスク書き込み動作の順序を変更することである。順序変更動作の優先順位は、ディスク媒体上の書き込みコマンド内のデータの物理的位置に基いて決定される。現在ディスク書き込み動作中の書き込みコマンドのデータの物理的位置に、それ以外の書き込みコマンドのそれよりも物理的に接近しているデータに向けられた書き込みコマンドに、順序変更動作のより高い優先順位が与えられる。書き込み順序変更動作に基いて、書き込みコマンドを処理する順序を変更し、順序が変更された書き込みコマンドをディスク書き込み動作のための待ち行列テーブルに格納する。
【００６０】
バッファ休止優先順位の機能は、書き込みコマンドが書き込み順序変更動作における最も高い優先順位を有するように、その書き込みコマンドのフラグを設定することである。ステップS42が完了した後、MPU３６は、図8及び図9のルーチンに関する新しいコマンドを受け取るまで待機する。
【００６１】
図11及び図12は、図6(A)〜(C)および図7(A)〜(C)を参照して説明された第２と第3の方法に関するデータ転送動作のイベント順を示すフローチャートである。
【００６２】
ステップS50で書き込みコマンドを受け取ると、MPU３６は自由領域探索動作を実行する。探索動作を実行する間、MPU３６は、ステップS52において、メモリ媒体に書き込むデータが、データ転送が完了したその前の書き込みコマンドのデータと重なるかどうかを判定する。もし重なる場合は、新しいコマンドの要求データを、前の書き込みコマンドからの同じデータが書き込まれたキャッシュ・バッファの領域に上書きする。それから、ステップS54で、重なりデータ削除コマンドを実行し、ステップS55でデータ転送動作を実行する。ステップS52で重なりがないか、ステップS54で重なりデータを削除したならば、MPU３６は次のステップS56に進む。
【００６３】
図4(A)に示すように、自由領域探索動作において、自由領域が確保されたならば、MPU３６は、一つのページの所定セクタ数（すなわちセクタの数）に、自由領域探索動作において確保されたページの数を掛けることによって、自由領域の全セクタ数を計算する。
【００６４】
順次アクセス・ステップS56は、新しいコマンドが、新しいコマンドのすぐ前を行くコマンドと順序関係があるかどうかを判定する。もし順次アクセスがあれば、すなわち、書き込みコマンドのデータのすぐ後にもう一つの書き込みコマンドのデータがあれば、新しい書き込みコマンドのデータを前の書き込みコマンドのデータに続けるために、前の書き込みコマンドのデータのすぐ後に、新しい書き込みコマンドのデータをバッファ内の位置に転送する（すなわち、W1のすぐ後にW2を転送する）。もし順次アクセスがあれば、ステップS58において、前のコマンドのセクタ・カウントに、新しい書き込みコマンドのセクタ数を加えることによって、前の書き込みコマンドのセクタ・カウントを調節する。その後、新しい書き込みコマンドは無視される。
【００６５】
ステップS56で順次アクセスがないか、ステップS58でセクタ・カウントを調節したならば、ステップS60でキャッシュ・バッファへのデータ転送を開始する。ステップS60は、図7を参照して述べられた書き込み動作に対しては行われない。なぜなら、書き込みコマンドのデータが自由領域に格納されないかもしれないためである。
【００６６】
図4(B)に示すようにデータ転送が完了すると、MPU３６は、書き込みデータが前のステップS60で格納されたページのページ・カウントの値を一つ増やす。また、MPU３６は、受け取ったコマンドのアクセス範囲、すなわち、両方ともLBAである、データの先行アドレスおよびデータの末端アドレスと、キャッシュ・バッファ内のアドレスとを、前のステップS60において格納された書き込みデータのデータのキャッシュ情報としてキャッシュ・テーブルに保存する。MPU３６は、電源が入るとS-RAM３８内にキャッシュ・テーブルを作成し、読み出しコマンドや書き込みコマンドの処理後に、そのテーブルを更新する。
【００６７】
ステップS62において、MPU３６は、書き込みコマンドのデータの必要とするセクタを、図7(A)〜(C)の書き込み動作のための自由領域探索動作において得られた自由領域に格納することができるかどうかを判定する。すなわち、システムは、新しい書き込みコマンドに関する新しいデータを格納するために、キャッシュ・バッファ内の現在使用中の自由領域に十分な残りの記憶容量があるかどうかを判定する。もし十分な容量があれば、新しい書き込みコマンドのデータをキャッシュ・バッファ内の位置に転送する。その位置は前のコマンドのデータの次にある。このようにキャッシュ・バッファに連続してデータを書き込む。
【００６８】
図6(A)〜(C)の書き込み動作に対して、ステップS62において書き込みコマンドのデータの必要とするセクタをバッファに格納できるかどうかは、図6(A)〜(C)を参照して述べられたような数値を一つ減らす動作すなわちデクリメントを通じて判定される、確保された自由領域内にスペースがあるかどうかによっている。スペースがないと判断すると、書き込みデータの転送をデータ転送の途中で停止する。すなわち、書き込みデータの一部をキャッシュ・バッファ内の最初の自由領域に格納する。
【００６９】
ステップS62で、必要なセクタを格納できない場合は、ステップS66で自由領域探索を行う。また、ステップS62で必要なセクタを格納できない場合は、新しい書き込みコマンドのデータのためのデータ転送が停止され、MPU３６がデータ転送休止を行う。それから、ステップS72で、個々のページの自由領域が確保されたかどうかを判定する。確保されなければ、十分な自由領域がステップS72で確保されるまで、自由領域探索パターンを別の自由領域探索パターンに変更することによって、自由領域探索を続ける。
【００７０】
ステップS62で、必要な要求セクタを確保できた場合は、MPU３６は、ステップS74において、書き込みデータをキャッシュ・バッファの自由領域に格納するデータ転送動作を開始する。ステップS74においてデータ転送が完了すると、MPU３６は、ステップS76で、書き込みデータが前のステップS74で格納されたページのページ・カウンタの値を一つ増やす。また、MPU３６は、ステップS78において、図5の書き込み動作のために、受け取ったコマンドのアクセス範囲、すなわち、両方ともLBAである、データの先行アドレスおよびデータの末端アドレスと、キャッシュ・バッファ内のデータのアドレスとを、分割された書き込みデータがキャッシュ・バッファ内にあることとその位置とを示すための情報に加えて、キャッシュ・テーブル３９、またはデータのキャッシュ情報のためにS-RAM３８内に作成された別のテーブルに保存する。
【００７１】
図8、9の書き込み動作フローチャートに示されたように、データとキャッシュ情報をそれぞれキャッシュ・バッファとキャッシュ・テーブルに保存した後、ステップS80でコマンド履歴を計算する。コマンド履歴機能において、MPU３６は、ディスク・ドライブによって受け取られた、ホスト・システムから出された読み出しコマンドと書き込みコマンドのサンプル数によって、読み出しコマンドと書き込みコマンドの内の読み出しコマンドの割合を計算する。計算された割合は読み出しコマンド率と呼ぶことができる。
【００７２】
得られた割合に従って、MPU３６は、関係テーブルを参照することによって重み率を得る（図10）。ステップS82で読み出しコマンド率が変化していると、ステップS84で全てのページのシャドウ・カウンタの値を一つ減らす。ステップS82で読み出しコマンド率が変化していないと判断するか、ステップS84で全てのシャドウ・カウンタの値を一つ減らすと、MPU３６は図12のステップS86へ進む。
【００７３】
ステップS86において、MPU３６はデータ転送休止があったかどうかを判定する。もしあれば、ステップS88でデータ転送を再開する。図6(A)〜(C)の書き込み動作では、書き込みデータの残りの部分をキャッシュ・バッファの新しく得られた次の自由領域に格納するようにデータ転送動作を行う。ここでMPU３６は、図6(A)〜(C)を参照して上述されたように、最初の自由領域の書き込みデータの残りの部分が次の自由領域にあることを示すための情報を、S-RAM３８に登録する。残りの書き込みデータのデータ転送の完了に続いて、MPU３６は、ページ・カウントを一つ増やすことと、キャッシュ保存と、読み出しコマンド率の計算と、率変更の決定と、シャドウ・カウンタを減らすこととを実行する。
【００７４】
図7の書き込み動作では、MPU３６はステップS88においてステップS74〜S84と同じ動作を実行する。
【００７５】
ステップS86においてデータ転送休止がなかったならば、ステップS90において、コマンドがバッファを休止状態にするのかどうかを判定する。もしするのであれば、ステップS92で、バッファ休止優先機能を設定する。ステップS94においては、書き込みデータのディスク書き込み動作の順序を変更するために必要ならば、書き込み順序変更機能の開始と、バッファ休止優先順位機能の設定の両方を行う。
【００７６】
ステップS94が完了した後、MPU３６は、図11、12のルーチンに関する新しいコマンドを受け取るまで待機する。
【００７７】
図13はディスク書き込み動作のフローチャートである。
【００７８】
ディスク書き込み動作は、キャッシュ・バッファの中のまだ書き込まれていない書き込みデータをディスク記憶媒体に書き込む動作である。それは図8、9と図11、12の書き込み動作と共に非同期で実行される。それはS-RAM３８の待ち行列テーブルに待ち行列がある限り実行される。
【００７９】
ステップS100でディスク書き込み動作のためのディスク書き込みモジュールを開始する。MPU３６はそれからステップS102で、待ち行列テーブルの中の先頭コマンドを選択し、書き込みデータのディスク書き込み情報を得る。それからMPU３６は、ステップS104において、その情報に基いてディスク書き込みを開始する。ディスク書き込み動作が完了するまで、MPU３６は、「１」へ飛んで、ステップS106でループし、ディスク書き込み動作の終了を待つ。
【００８０】
ステップS110でディスク書き込み動作が完了すると、MPU３６は、ステップS112で、このディスク書き込み動作によって書きこまれた書き込みデータを格納するページのページ・カウンタの値をリセットする。それからMPU３６は待ち行列テーブルを探索する。ステップS114で待ち行列テーブルに待ち行列のコマンドがあると、ステップS102に戻る。待ち行列がなければ、「１」へ飛んで、次のディスク書き込み動作を待つ間、ステップS116で「１」内をループする。
【００８１】
図14及び図15は本発明のもう一つのデータ転送動作を示す。
【００８２】
図14(A)において、MPU３６は、設定を伴った自由領域探索動作を実行する。この動作において、探索のための最小ページ数は「２」であり、最大ページ数は「１０」である。MPU３６は、探索動作を実行して、図14(A)に示すように、自由領域として、それぞれ「オープン」状態にある１０の連続ページを発見する。
【００８３】
ここで、受け取るコマンドはランダム・アクセスの書き込みコマンドである。コマンドW1〜W12が受け取られる。事実上は、１０ページの自由領域が確保されている。それから、ランダムな書き込みコマンドW1〜W11を受け取り、書き込みコマンドW1〜W11の複数の書き込みデータをキャッシュ・バッファに格納する。それから、ページ０〜９の個々のページ・カウンタが、格納された書き込みデータに従ってカウント値を格納する。書き込みコマンドW11を受け取ることによって、現在使用される自由領域は、図14(B)に示すように、フル状態となる。
【００８４】
他の自由領域に次のコマンドを受け取るために、自由領域探索動作を実行する。しかし、オープン・ページがないので、次の書き込みコマンドW12の受け取りはMPU３６によって待ち状態に設定される。MPU３６はキャッシュ・バッファの中に一つのオープン・ページが使用できるようになるまで待機する。
【００８５】
待機中、書き込みコマンドW2、W5、W8、W10、およびW11のディスク書き込み動作を完了する。それから、少なくともページ７からページ９までのカウンタ値を「０」に変更する。そうすると、図14(C)に示すように、少なくともページ７〜９が「オープン」状態となる。ここで、書き込みコマンドW2、W5、W8、W10、およびW11のディスク書き込み動作が、書き込み順序変更動作とバッファ休止優先動作によって、優先されている。
【００８６】
新しい自由領域探索動作によって、図15(A)に示すように、ページ７〜９を次のコマンドのための新自由領域として選択する。それから書き込みコマンドW12を受け取る。書き込みコマンドW12の書き込みデータを、図15(B)に示すように、新しく得られた自由領域のページ７に格納する。
【００８７】
図16は読み出し動作のフローチャートである。
【００８８】
ステップS160で読み出しコマンドを受け取ると、MPU３６は、ステップS162で、前の読み出しコマンドの読み出しデータを格納しているページのシャドウ・カウンタの値を一つ減らす。それから、ステップS164で、前のコマンドが読み出しコマンドであるかどうかと、それが順次アクセスのためのものかどうかを判定する。順次アクセスのためのものであれば、ステップS166で、コマンド履歴から読み出しコマンド率を計算し、ステップS168で、読み出しコマンドの読み出しデータを格納しているページのページ・カウンタとシャドウ・カウンタを設定する。ステップS182でデータ転送動作が始まる。そして、ステップS184でデータ転送が完了したときに、アルゴリズムは終了する。
【００８９】
ステップS164において、順次アクセスでない場合、例えば、読み出しコマンドの前のコマンドが書き込みコマンドであった場合、ステップS170で、キャッシュ・データが完全にヒットしたかどうかを判定する。ヒットした場合、ステップS182でデータ転送動作がすぐに始まる。ヒットしなかった場合、ステップS172で自由領域探索を行う。ステップS174で自由領域が確保されるまでページを連続的に探索する。ステップS176で読み出しコマンド率をコマンド履歴から計算する。これは書き込み動作について述べた動作と同じである。更に、ステップS178で、記憶媒体から読み出された読み出しデータを格納しているページのページ・カウンタとシャドウ・カウンタを設定する。
【００９０】
それからステップS180で記憶媒体の読み出しを行い、ステップS182でデータを転送する。MPU３６は、記憶媒体から取得する読み出しデータのサイズを、それぞれの取得時に、一つのページの最大記憶容量よりも小さい値に制限する。従って、一つのページに格納される全ての読み出しデータは、そのページがオープンに設定されるまで有効なままで残る。
【００９１】
図10に示すテーブルから得られる率は、キャッシュ・バッファの個々のページ用に設けられたシャドウ・カウンタに与えられる。このシャドウ・カウンタによって、読み出しコマンドの中で使用されるキャッシュ・バッファのページが、次の読み出しコマンドや書き込みコマンドのための当面の使用要求から保護される。それから、ページに格納された読み出しデータがしばらくの間保護される。ページのシャドウ・カウンタがゼロ以外の値を持っていなければ、そのページに格納された読み出しキャッシュ・データは保護される。前記率はハードディスク・ドライブの性能調整によって調整可能である。
【００９２】
図17(A)〜図18(C)は、コマンド履歴動作においてシャドウ・カウンタを用いることによってキャッシュ・バッファの読み出しデータを保護する第1の方法を示す。コマンド履歴はキャッシュ機能の一つのである。重み率「２」を持ったランダム・アクセス読み出しコマンドR1、R2、およびR3を受け取るときのコマンド履歴動作を以下に説明する。
【００９３】
図17(A)〜図18(C)において、ページ０〜９がコマンド履歴動作の説明のために示されている。キャッシュ・バッファの中に１０より多いページが形成されるのは明らかである。図17(A)〜図18(C)において、ページ・カウンタとシャドウ・カウンタが各ページ用に設けられている。ページ・カウンタとシャドウ・カウンタの値が、個々のページと共にS-RAMの中に格納されて、図17(A)〜図18(C)に示すようなテーブルを形成する。図13(A)〜13(G)において、「状態」列と「コマンド」列は、説明と動作を容易に理解するためだけのものである。「状態」列と「コマンド」列は、テーブルの中に形成されていない。
【００９４】
図17(A)に示すように、読み出し動作や書き込み動作のために使用することができる三つのオープン領域がある。このオープン領域はページ１、３、および４である。従って、ページ１、３、および４のページ・カウンタの値は全て「０」でなければならない。図13(A)において、残りの領域（ページ）は、そのページ・カウントの値が「１」であるので、書き込みデータのために使用される。このことは残りのページが書き込み待ちの状態にあることを意味し、残りのページの書き込みコマンドのための待ち行列が待ち行列テーブルに格納されている。ページの待ち行列がMPU３６によって完了されないならば、ページのページ・カウンタは「１」のままであり、ページの状態は「保持」に保たれる。これらの手順は読み出しコマンドにも適用可能である。
【００９５】
それから、図17(B)に示すように、ランダム・アクセス読み出しコマンドR1を受け取る。読み出しコマンドを受け取った後、自由領域探索動作を開始し、ページ１を読み出しコマンドR1のための自由領域として確保する。ここで、読み出しコマンドR1は、図10を参照して説明され、かつ、図10に示されている重み率「２」と共に受け取られる。一つの読み出しコマンドの読み出しデータはキャッシュ・バッファの一つのページ内に格納されている。読み出しコマンドR1の受け取りに際して、MPU３６は、自由領域探索動作によって読み出しコマンドR1にページ１を割り当て、ページ・カウンタの値を「０」から「１」に変更する。従って、ページ１の状態とコマンドはそれぞれ「保持」と「R1」である。更に、重み率が現在「２」に保たれているので、値「２」がページ１のシャドウ・カウンタに設定される。
【００９６】
次の読み出しコマンドR2を受け取るときに、MPU３６は、次の読み出しコマンドR2のために、新しい自由領域探索動作によって確保されたページ３を割り当てる（図17(C)）。MPU３６は、読み出しコマンドR1のシャドウ・カウンタの値を１だけ減らす。このことはページ１のシャドウ・カウントが２から１に下がることを意味する。MPU３６はまた、図17(C)に示すように、ページ３のページ・カウンタとシャドウ・カウンタをそれぞれ「１」と「２」に設定する。
【００９７】
図17(D)に示すように、次の読み出しコマンドR3を受け取るときに、MPU３６は、次の読み出しコマンドR3のために、更なる新しい自由領域探索動作において発見したページ４を割り当てる。それから、MPU３６は、読み出しコマンドR1とR2のシャドウ・カウンタの値をそれぞれ１だけ減らす。このことはページ１のシャドウ・カウントが１から０に下がり、ページ３のシャドウ・カウントが２から１に下がることを意味する。MPU３６はまた、ページ４のページ・カウンタとシャドウ・カウンタをそれぞれ「１」と「２」に設定する。
【００９８】
ここで、もし読み出しコマンドR1の読み出しデータが、読み出しコマンドR3を受け取る前に転送されているならば、ページ１のページ・カウントは、読み出しコマンドR1の読み出しデータの転送時に、「１」から「０」に変更されるかもしれない。しかしながら、読み出しコマンドR3を受け取るまで、テーブルはページ１のシャドウ・カウンタの値を「１」に保つ。従って、読み出しコマンドR3を受け取るときに、ページ１の読み出しデータが転送されているならば、MPU３６は、ページ１のシャドウ・カウンタを１だけ減らす。読み出しデータが転送されたかどうかは、MPU３６によってS-RAM３８内の待ち行列テーブルを参照することによって判定される。
【００９９】
このタイミングで、図18(A)に示すように、ページ１に「オープン」状態が与えられ、ページ１がそのあとに続く読み出しコマンドや書き込みコマンドのために解放される。このことは、読み出しコマンドR1の読み出しデータが、次の読み出しコマンドR3がディスク・ドライブに来るまで、有効データとしてキャッシュ・バッファ内に保持されることを意味する。これは、キャッシュ・バッファに格納された読み出しデータや書き込みデータのデータ転送動作が、MPU３６の制御のもとに行われる読み出しコマンドや書き込みコマンドの処理と非同期で、HDC４０の制御のもとで行われるためである。そのようなHDCとMPUの独立制御は周知の技術であるので、両者の具体的な動作および両者の関係はここでは説明しない。
【０１００】
ランダム・アクセスの次の読み出しコマンドR4をホスト・システムが発し、ハードディスク・ドライブが受け取ると、ディスク・ドライブ内のMPU３６は、その読み出しコマンドR4のために、新しく実行した自由領域探索動作において発見したページ１を割り当てる。それから、MPU３６は、読み出しコマンドR2とR3のシャドウ・カウンタの値をそれぞれ１だけ減らす。このことは、ページ３のシャドウ・カウントが「１」から「０」に下がり、ページ４のシャドウ・カウントが「２」から「１」に下がることを意味する。MPU３６はまた、図18(B)に示すように、ページ１のページ・カウンタとシャドウ・カウンタをそれぞれ「１」と「２」に設定する。
【０１０１】
もし読み出しコマンドの読み出しデータが転送されたならば、MPU３６はまた、読み出しコマンドR4を受け取るときにページ３のページ・カウンタの値を一つ減らす。読み出しコマンドR4を受け取る前に読み出しコマンドR2の読み出しデータが転送されたとしても、図18(C)に示すように、このタイミングでページ３を「オープン」状態に変更する。
【０１０２】
上述したように、ページのシャドウ・カウンタの値が「０」に設定されていなければ、ページ内に格納された読み出しデータ全体は依然として有効である。また、キャッシュ・バッファ内の読み出しデータの保持時間によって読み出しコマンド率が変化するので、キャッシュ・ヒット率がひどく悪化することはない。
【０１０３】
図19(A)〜(D)及び図20(A)、(B)は、コマンド履歴動作においてシャドウ・カウンタを用いることによってキャッシュ・バッファの読み出しデータを保護するもう一つの方法を示す。
【０１０４】
ランダム・アクセスにおいて、読み出しコマンドR1およびR2と書き込みコマンドW1が混在しているときのコマンド履歴動作を、図19(A)〜図20(B)を参照して説明する。図19(A)〜図20(B)の方法においては、これらのコマンドは、重み率「２」と共に受け取られ、一つの読み出しコマンドのための読み出しデータが、キャッシュ・バッファの一つのページ内に格納される。
【０１０５】
図17(A)〜図18(C)と同様に、ページ０〜９が説明のために使われており、ページ・カウンタとシャドウ・カウンタが各ページ用に設けられている。ページ・カウンタとシャドウ・カウンタの値が、個々のページと共にS-RAMの中に格納されて、図19(A)に示すようなテーブルを形成する。図19(A)において、「状態」列と「コマンド」列は、説明と動作を容易に理解するためだけのものである。「状態」列と「コマンド」列は、テーブルの中に形成されていない。
【０１０６】
図17(A)と同様に、読み出し動作や書き込み動作のために使用することができる、ページ１、３、および４の三つのオープン領域があることが想定されている。また、図19(A)において、残りの領域（ページ）は、そのページ・カウントの値が「１」であるので、書き込みデータのために使用されることが想定されている。このことは残りのページが書き込み待ちの状態にあることを意味し、残りのページの書き込みコマンドのための待ち行列が待ち行列テーブルに格納されている。ページの待ち行列がMPU３６によって完了されないならば、ページのページ・カウンタは「１」のままであり、ページの状態は「保持」に保たれる。これらの手順は読み出しコマンドにも適用可能である。
【０１０７】
それから、図19(A)に示すように、ランダム・アクセス読み出しコマンドR1が受け取られる。読み出しコマンドを受け取った後、MPU３６は、自由領域探索動作を開始し、ページ１を読み出しコマンドR1のための自由領域として確保する。それから、ソフトウェア・アルゴリズムが、読み出しコマンドR1のためにページ１を割り当て、ページ１のページ・カウンタの値を「０」から「１」に変更する。従って、ページ１のための状態とコマンドはそれぞれ「保持」と「R1」になる。また、MPU３６は、ページ１のシャドウ・カウンタを「２」に設定する。
【０１０８】
次の読み出しコマンドR2を受け取るときに、ページ３が、新しい自由領域探索動作によって確保され、次の読み出しコマンドR2のために割り当てられる。プログラムは、図19(B)に示すように、読み出しコマンドR1のためのシャドウ・カウンタの値を１だけ減らし、ページ３のページ・カウンタとシャドウ・カウンタをそれぞれ「１」と「２」に設定する。
【０１０９】
図19(C)に示すように、MPU３６はランダム・アクセスの書き込みコマンドW1を受け取る。ソフトウェアは、書き込みコマンドW1のために、更なる新しい自由領域探索動作において発見したページ４を割り当てる。それから、ソフトウェアはページ１と３のシャドウ・カウンタの値をそれぞれ１だけ減らす。ソフトウェアはまた、ページ４のページ・カウンタを１だけ増やす。ページ４のシャドウ・カウンタはどの値にも設定されないので、「０」に保たれる。
【０１１０】
読み出しコマンドR1の読み出しデータが転送されたならば、図20(A)に示すように、このタイミングで、ページ１のページ・カウンタを「１」から「０」に変更する。このことは、読み出しコマンドR1の読み出しデータがそのタイミングまで有効なデータとしてキャッシュ・バッファ内に保持されることを意味する。
【０１１１】
ランダム・アクセスの次の読み出しコマンドR3を受け取ると、MPU３６は、次の読み出しコマンドR3のために、新しく実行した自由領域探索動作において発見したページ１を割り当てる。それから、プログラムは、図20(B)に示すように、ページ３のためのシャドウ・カウンタの値を１だけ減らし、ページ１のページ・カウンタとシャドウ・カウンタをそれぞれ「１」と「２」に設定する。
【０１１２】
読み出しコマンドR3を受け取る前に、ページ３の読み出しデータが転送されるならば、プログラムは、ページ３のページ・カウンタを１だけ減らす。図20(B)に示すように、このタイミングで、ページ３を「オープン」状態に変更する。
【０１１３】
読み出しコマンドと書き込みコマンドが、任意の時間枠内でランダムな順序で受け取られるページ・キャッシュにおいては、読み出しコマンドのために確保された自由領域が、書き込みコマンドのための自由領域に変更されることがままあるが、そのあと、読み出しデータは処理されず、キャッシュ・ヒット率が低下する。上記に説明したように、読み出しコマンドと書き込みコマンドが特定の時間枠内で混在しているとしても、ページの読み出しデータが、ページのシャドウ・カウンタを用いることによって、読み出しコマンド率に基いて有効に保持されるので、キャッシュ・ヒット率がひどく悪化することはない。
【０１１４】
キャッシュをバッファ休止状態にする、多くの順次アクセスが続くバッファ・フル状態を免れる方法を以下に説明する。
【０１１５】
図21(A)〜(C)及び図22(A)〜(C)は、ディスク書き込み動作の優先順位を変更することによってバッファ休止状態を免れる第1の方法を示す図である。図21(A)に示すように、MPU３６がランダム・アクセスの書き込みコマンドW1と順次アクセスの書き込みコマンドW2〜W7を順に受け取ると仮定する。図15(A)において、ページ０〜２と10〜ｎが書き込みコマンドまたは読み出しコマンドのために使用されていて、全て「保持」状態にあり、ページ３〜９の自由領域が確保されているものとする。
【０１１６】
図21(A)において、ランダム・アクセスの書き込みコマンドW1の書き込みデータを最初に処理し、キャッシュ・バッファのページ３に格納する。それから、書き込みコマンドW2〜W7の書き込みデータを処理し、その書き込みデータを、書き込みコマンドW1の書き込みデータに続くキャッシュ・バッファの自由領域内のページに格納する。ページ３〜９への書き込みコマンドW5（W5aまで）のデータ転送動作の間、自由領域に残りのスペースがなくなると、すなわち、キャッシュ・バッファ全体がフル状態になれば、バッファ・フル状態と認められ、書き込み動作はバッファ休止状態へ進む。
【０１１７】
できるだけ早くバッファ休止状態から逃れるために、書き込みコマンドW2の書き込みデータの優先順位を最高レベルに設定する。そうするために、キャッシュ機能の一つであるバッファ休止優先順位機能が、書き込みコマンドW2のディスク書き込みのための待ち行列テーブルに設けられた欄にフラグを設定する。そのフラグは、ディスク書き込みの優先順位が待ち行列テーブルの中の最高レベルに変わったことを示す。それから、書き込み順序変更機能が待ち行列テーブルの内容を見直す場合、書き込みコマンドW2のディスク書き込みの処理順序を最初の位置に動かす。従って、他のコマンド、例えばW1、のディスク書き込みの前に、書き込みコマンドW2のディスク書き込みを、上記に説明したように、ディスク書き込み動作によって行う。図21(B)に示すように、ページ３〜５のハッチング箇所を次の書き込みデータのためにオープン状態に設定し、これをS-RAM３８に保持する。
【０１１８】
それから、図21(C)に示すように、書き込みデータの残りの部分W5bを、バッファ休止優先順位機能、書き込み順序変更機能、およびディスク書き込み動作によってオープン状態となったキャッシュ・バッファのスペースに格納する。
【０１１９】
しかしながら、それに続く書き込みコマンドW6〜W7の書き込みデータを格納するためのキャッシュ・バッファ内の十分なスペースが依然としてなく、しかもバッファ・フル状態は解放されていない。その後、図22(A)と(B)に示すように、書き込みコマンドW6とW7の書き込みデータをキャッシュ・バッファの自由領域に格納するまで、上記に説明した手順を繰り返す。図22(C)に示すように、順次アクセスの最後の書き込みコマンドW7の書き込みデータが格納されると、バッファ休止状態が解放される。ここでは、自由領域のページ３〜９は、順次書き込みコマンドW2〜W7の書き込みデータを格納するとき、リングバッファのように用いられる。
【０１２０】
図23(A)〜(C)は、ディスク書き込み動作の優先順位を変更することによってバッファ休止状態を免れるもう一つの方法を示す図である。図21及び図22に示すように、MPU３６がランダム・アクセスの書き込みコマンドW1と順次アクセスの書き込みコマンドW2〜W4とランダム・アクセスの書き込みコマンドW5を順に受け取ると仮定する。図23(A)〜(C)において、ページ０〜２と10〜ｎが書き込みコマンドまたは読み出しコマンドのために使用されていて、全て「保持」状態にあり、ページ３〜９の自由領域が確保されているものとする。
【０１２１】
図23(A)において、ランダム・アクセスの書き込みコマンドW1の書き込みデータが最初に処理され、キャッシュ・バッファのページ３に格納される。それから、書き込みコマンドW2〜W4の書き込みデータが処理され、その書き込みデータが、書き込みコマンドW1の書き込みデータに続くキャッシュ・バッファの自由領域内のページに格納される。ページ３〜９への書き込みコマンドW5（W5aまで）のデータ転送動作の間、自由領域にスペースがなくなると、すなわち、キャッシュ・バッファ全体がフル状態になれば、バッファ・フル状態と認められ、バッファ休止状態が生じる。
【０１２２】
できるだけ早くバッファ休止状態から逃れるために、書き込みコマンドW2の書き込みデータの優先順位を最高レベルに設定する。そうするために、バッファ休止優先順位機能が、書き込みコマンドW2のディスク書き込みのための待ち行列テーブルに設けられた欄にフラグを設定する。そのフラグは、ディスク書き込みの優先順位が待ち行列テーブルの中の最高レベルに変わったことを示す。それから、書き込み順序変更機能が待ち行列テーブルの内容を見直す場合、書き込みコマンドW2のディスク書き込みの処理順序を最初の位置に動かす。従って、他のコマンド、例えばW1、のディスク書き込みの前に、書き込みコマンドW2のディスク書き込みを、上記に説明したように、ディスク書き込み動作によって行う。図23(B)に示すように、ページ３〜５のハッチングされたメモリ・セルを次の書き込みデータのために「書き込み」状態に設定する。メモリ・セルの再書き込み状態をS-RAM３８に保持する。
【０１２３】
それから、書き込みデータの残りの部分W5bを、図23(B)に示すように、バッファ休止優先順位機能、書き込み順序変更、およびディスク書き込み動作によってオープン状態となったキャッシュ・バッファのスペースに格納する。また、バッファ休止状態は図23(C)に示すように解放される。
【０１２４】
上述したように、たとえ、キャッシュ・バッファがデータ転送動作の間にフルになり、データ転送動作が停止したとしても、データ転送動作が停止したデータの自由領域と同じ領域に格納された書き込みデータのディスク書き込み動作を、他の書き込みデータを格納する前に実行する。従って、停止したデータ転送動作を、データ転送動作を停止した後の短時間内に再開することができる。すなわち、同じ順次書き込みコマンド内の前の書き込みコマンドの書き込みデータのためのディスク書き込み動作が、他の書き込みコマンド、例えば、別個の、あるいは、独立したランダム書き込みコマンドのそれよりも優先されるので、更に多くの時間を費やすことなく、バッファ・フル状態から抜け出すことが可能であり、従って、ディスク・ドライブの性能は低下しない。
【０１２５】
上述したように、キャッシュ・バッファは読み出しデータ転送動作と書き込みデータ転送動作の両方のために共有される。従って、多くの書き込みアクセスが短時間に集中したとしても、キャッシュ・バッファの全てのページを、自由領域がキャッシュ・バッファ内に確保される限り、書き込みアクセスのためのバッファとして使用することができる。このことは、多くの読み出しアクセスが短時間に集中する場合にも言える。従って、アクセスが短時間に集中したとしても、キャッシュ・ヒット率は悪化しない。
【０１２６】
ページが空であるか否かは、個々のページのページ・カウンタの値が「０」か否によって決まる。従って、キャッシュ・バッファ内の空きスペースの管理と探索は簡単かつ容易である。空きスペースを確保する探索速度を速くできる。
【０１２７】
更に、ページ・キャッシュは一つの読み出しデータだけに対してキャッシュ・バッファ内の一つのページを使用する。このことによって、古い読み出しキャッシュ・データを比較的長くキャッシュ・バッファ内で維持することができる。なぜなら、古いキャッシュ・データは、シャドウ・カウンタの値が規定値、例えば「０」、よりも大きい間は、維持されるからである。また、ページ・キャッシュが、キャッシュ・バッファを読み出しアクセスと書き込みアクセスの両方のために割り当て、キャッシュ・バッファの全てのスペースが、読み出しデータまたは書き込みデータだけを格納するために用いることができるので、古いデータが新しいデータによって上書きされる可能性が低下する。
【０１２８】
本発明の原理を特定の装置とアプリケーションに関して上記に説明したが、この説明は例示によってのみなされたものであり、本発明の範囲を制限するものでないことは明らかである。
【図面の簡単な説明】
【図１】コンピュータ・システムのブロック図である。
【図２】ハードディスク・ドライブの概略構造を示す図である。
【図３】本発明に従ってキャッシュ・バッファをページ・キャッシュのために管理する方法を示す図である。
【図４】  (A)〜(D)は、本発明によるデータ・パケット格納を示す図（その１）である。
【図５】  (A)〜(C)は、本発明によるデータ・パケット格納を示す図（その２）である。
【図６】  (A)〜(C)は、本発明によるデータ・パケット格納のもう一つの実施例を示す図である。
【図７】  (A)〜(C)は、本発明によるデータ・パケット格納の第３の実施例を示す図である。
【図８】図４及び図５を参照して説明された第１実施例に関するデータ転送動作のイベント順を示すフローチャート（その１）である。
【図９】図４及び図５を参照して説明された第１実施例に関するデータ転送動作のイベント順を示すフローチャート（その２）である。
【図１０】読み出しコマンド率と重み率との間の関係を格納したテーブルを示す図である。
【図１１】図６と図７を参照して説明された第２実施例と第３実施例に関するデータ転送動作のイベント順を示すフローチャート（その１）である。
【図１２】図６と図７を参照して説明された第２実施例と第３実施例に関するデータ転送動作のイベント順を示すフローチャート（その２）である。
【図１３】ディスク書き込み動作のフローチャートである。
【図１４】  (A)〜(C)は、本発明のもう一つのデータ転送動作の図（その１）である。
【図１５】  (A)〜(B)は、本発明のもう一つのデータ転送動作の図（その２）である。
【図１６】読み出し動作のフローチャートである。
【図１７】  (A)〜(D)は、本発明に従ってキャッシュ・バッファ内の読み出しデータを保護するコマンド履歴動作におけるシャドウ・カウンタの第1実施例を説明する図（その１）である。
【図１８】  (A)〜(ｃ)は、本発明に従ってキャッシュ・バッファ内の読み出しデータを保護するコマンド履歴動作におけるシャドウ・カウンタの第1実施例を説明する図（その２）である。
【図１９】  (A)〜(D)は、本発明に従ってキャッシュ・バッファ内の読み出しデータを保護するコマンド履歴動作におけるシャドウ・カウンタのもう一つの実施例を説明する図（その１）である。
【図２０】  (A)〜(B)は、本発明に従ってキャッシュ・バッファ内の読み出しデータを保護するコマンド履歴動作におけるシャドウ・カウンタのもう一つの実施例を説明する図（その２）である。
【図２１】  (A)〜(C)は、ディスク書き込み動作の優先順位を変更することによってバッファ休止状態を免れる第1の方法を示す図（その１）である。
【図２２】  (A)〜(C)は、ディスク書き込み動作の優先順位を変更することによってバッファ休止状態を免れる第1の方法を示す図（その２）である。
【図２３】  (A)〜(C)は、ディスク書き込み動作の優先順位を変更することによってバッファ休止状態を免れるもう一つの方法を示す図である。
【図２４】従来のキャッシュ・バッファ構造を示す図である。
【符号の説明】
１８…ハードディスク・ドライブ
２０…制御器
２２…不揮発性メモリ媒体
２４…読み出しチャネル
２６…ヘッドＩＣ
２８…サーボ・チャネル回路
３０…スピンドル・モータ及びボイスコイル・モータ
３２…キャッシュ・バッファ
３４…フラッシュＲＯＭ
３６…プロセッサ
３９…キャッシュ情報テーブル
４１…重み率テーブル
４０…ハードディスク制御器
４４…読み出しヘッド
４６…書き込みヘッド
【図１】
0004163461.tif 000002
【図２】
0004163461.tif 000003
【図３】
0004163461.tif 000004
【図４】
0004163461.tif 000005
【図５】
0004163461.tif 000006
【図６】
0004163461.tif 000007
【図７】
0004163461.tif 000008
【図８】
0004163461.tif 000009
【図９】
0004163461.tif 000010
【図１０】
0004163461.tif 000011
【図１１】
0004163461.tif 000012
【図１２】
0004163461.tif 000013
【図１３】
0004163461.tif 000014
【図１４】
0004163461.tif 000015
【図１５】
0004163461.tif 000016
【図１６】
0004163461.tif 000017
【図１７】
0004163461.tif 000018
【図１８】
0004163461.tif 000019
【図１９】
0004163461.tif 000020
【図２０】
0004163461.tif 000021
【図２１】
0004163461.tif 000022
【図２２】
0004163461.tif 000023
【図２３】
0004163461.tif 000024
【図２４】
0004163461.tif 000025