(57)【要約】【課題】書き込みデータを保証しつつ、ホストへのステータスの報告時期を早めることができるようにする。【解決手段】実施形態によれば、磁気ディスク装置のコントローラは、ホストからの第１のライトコマンドで指定された第１のデータの受領を開始し、前記第１のライトコマンドに従い、ディスクへの前記第１のデータの書き込みを開始する。前記コントローラは、前記ディスクへの前記第１のデータの書き込みに伴って減少する前記ディスクに未書き込みのデータの第２の容量が、前記磁気ディスク装置の主電源の遮断に応じてバックアップ電源によって電力が供給可能な第１の期間にデータをセーブするのに利用可能な不揮発性キャッシュ内の第１の空き領域の第１の容量以下であるか否かに応じて前記ホストにステータスを報告する。【選択図】      図１
2016021133.tif 000002
【特許請求の範囲】
【請求項１】
磁気ディスク装置において、
ディスクと、
不揮発性キャッシュと、
コントローラと、
前記磁気ディスク装置の主電源が遮断した場合に、少なくとも前記不揮発性キャッシュ及び前記コントローラに供給される電力を一時的に生成するバックアップ電源とを具備し、
前記コントローラは、
ホストから第１のライトコマンドを受領した場合、当該第１のライトコマンドで指定されたデータ長の第１のデータの受領を開始し、
前記第１のライトコマンドに従い、前記ディスクへの前記第１のデータの書き込みを開始し、
前記ディスクへの前記第１のデータの書き込みに伴って減少する前記ディスクに未書き込みのデータの第２の容量が、前記バックアップ電源によって電力が供給可能な第１の期間にデータをセーブするのに利用可能な前記不揮発性キャッシュ内の第１の空き領域の第１の容量以下であるか否かに応じて前記ホストに前記第１のライトコマンドの実行に関するステータスを報告する
磁気ディスク装置。
【請求項２】
前記コントローラは、
前記第１の期間に前記不揮発性キャッシュに書き込むことが可能なデータの容量Ｑｄ、及び前記不揮発性キャッシュ内の物理的な空き領域の容量ＦＳを比較し、
ＱｄがＦＳ以上である場合、ＦＳに一致する容量を前記第１の容量として決定し、
ＱｄがＦＳ未満である場合、Ｑｄに一致する容量を前記第１の容量として決定する
請求項１記載の磁気ディスク装置。
【請求項３】
前記コントローラは、前記ディスクへの前記第１のデータの書き込みを開始するよりも前に、前記ホストに前記第１のライトコマンドの実行に関するステータスを報告する請求項１または２に記載の磁気ディスク装置。
【請求項４】
前記コントローラは、前記第２の容量が前記第１の容量より大きく、且つ前記ディスクへのデータ書き込みの実行中でない場合、前記ディスクへの前記第１のデータの書き込みを開始する請求項１または２に記載の磁気ディスク装置。
【請求項５】
前記コントローラは、前記第２の容量が前記第１の容量より大きく、且つ前記第１のライトコマンドとは異なる第２のライトコマンドに従って前記ディスクへの前記第２のライトコマンドで指定された第２のデータの書き込みの実行中に前記第１のライトコマンドを受領した場合、前記２のデータの書き込みの完了後に、前記ディスクへの前記第１のデータの書き込みを開始する請求項１または２に記載の磁気ディスク装置。
【請求項６】
前記ホストから受領されたライトコマンドが一時格納されるコマンドバッファを更に具備し、
前記コントローラは、
前記第１のライトコマンドを含む新たに実行されるべき複数のライトコマンドが前記コマンドバッファに格納されている場合、前記複数のライトコマンドを、前記複数のライトコマンドによってそれぞれ指定される書き込み範囲に基づいて並べ替えられた前記複数のライトコマンドに従い、次に実行されるべきライトコマンドの指定するデータの前記ディスクへの書き込みを開始する請求項５記載の磁気ディスク装置。
【請求項７】
前記コントローラは、前記複数のライトコマンドが実行された場合に前記ディスクへのアクセスの効率が最も良くなるように、前記複数のライトコマンドを並び替える請求項６記載の磁気ディスク装置。
【請求項８】
前記コントローラは、前記ステータスの報告後に前記主電源が遮断した場合、前記ディスクに未書き込みのデータを前記バックアップ電源により前記不揮発性キャッシュにセーブする請求項１記載の磁気ディスク装置。
【請求項９】
揮発性キャッシュを更に具備し、
前記コントローラは、
前記第１のデータを前記揮発性キャッシュに格納し、
前記揮発性キャッシュに格納された前記第１のデータを前記ディスクに書き込み、
前記ステータスの報告後に前記主電源が遮断した場合、前記揮発性キャッシュに残されている前記ディスクに未書き込みのデータを前記バックアップ電源により前記不揮発性キャッシュにセーブする
請求項８記載の磁気ディスク装置。
【請求項１０】
ディスクと、不揮発性キャッシュと、バックアップ電源とを備えた磁気ディスク装置において、ライトコマンドを実行する方法であって、
ホストから第１のライトコマンドを受領した場合、当該第１のライトコマンドで指定されたデータ長の第１のデータの受領を開始することと、
前記第１のライトコマンドに従い、前記ディスクへの前記第１のデータの書き込みを開始することと、
前記ディスクへの前記第１のデータの書き込みに伴って減少する前記ディスクに未書き込みのデータの第２の容量が、前記バックアップ電源によって電力が供給可能な第１の期間にデータをセーブするのに利用可能な前記不揮発性キャッシュ内の第１の空き領域の第１の容量以下であるか否かを判定することと、
前記判定の結果に応じて前記ホストに前記第１のライトコマンドの実行に関するステータスを報告することと
を具備する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、磁気ディスク装置、及びライトコマンドを実行する方法に関する。
【背景技術】
【０００２】
一般に磁気ディスク装置では、ホスト装置からのライトコマンドに応じて、当該ライトコマンドで指定されたデータ長のデータ（つまり、書き込みデータ）がディスクに書かれる。しかし、このディスクへの書き込みデータの書き込みが完了する前に、磁気ディスク装置の電源（より詳細には、主電源）が遮断することがある。この場合、書き込みデータの一部（より詳細には、ディスクに未書き込みのデータ）が失われる可能性がある。
【０００３】
そこで、近年の磁気ディスク装置は、電源の遮断が発生した場合でも、書き込みデータを保証するパワーロス保護（ＰＬＰ）機能を有している。ＰＬＰ機能とは、電源が遮断した場合に、ディスクに未書き込みのデータを不揮発性キャッシュに高速で保存する機能を指す。この保存動作は、バックアップ電源により一時的に供給される電力を受けて実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−３４８６００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ＰＬＰ機能で保証できる書き込みデータの量は、例えば不揮発性キャッシュの容量に依存する。つまり、ＰＬＰ機能で保証できる書き込みデータの量には限りがある。このため磁気ディスク装置は、ライトコマンドで指定されたディスク上の領域に書き込みデータが全て書き込まれた後に、当該ライトコマンドの実行に関するステータス（例えば、書き込み完了を示すグッドステータス）をホストに報告するのが一般的である。この場合、ホストは、磁気ディスク装置からステータスが報告されるのを待って、次のコマンドを当該磁気ディスク装置に発行する。このことは、磁気ディスク装置の性能低下を招く。
【０００６】
本発明が解決しようとする課題は、書き込みデータを保証しつつ、ホストへのステータスの報告時期を早めることができる、磁気ディスク装置、及びライトコマンドを実行する方法を提供することにある。
【課題を解決するための手段】
【０００７】
実施形態によれば、磁気ディスク装置は、ディスクと、不揮発性キャッシュと、コントローラと、バックアップ電源とを具備する。前記バックアップ電源は、前記磁気ディスク装置の主電源が遮断した場合に、少なくとも前記不揮発性キャッシュ及び前記コントローラに供給される電力を一時的に生成する。前記コントローラは、ホストから第１のライトコマンドを受領した場合、当該第１のライトコマンドで指定されたデータ長の第１のデータの受領を開始する。前記コントローラは、前記第１のライトコマンドに従い、前記ディスクへの前記第１のデータの書き込みを開始する。前記コントローラは、前記ディスクへの前記第１のデータの書き込みに伴って減少する前記ディスクに未書き込みのデータの第２の容量が、前記バックアップ電源によって電力が供給可能な第１の期間にデータをセーブするのに利用可能な前記不揮発性キャッシュ内の第１の空き領域の第１の容量以下であるか否かに応じて前記ホストに前記第１のライトコマンドの実行に関するステータスを報告する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係る磁気ディスク装置の典型的な構成を示すブロック図。
【図２】同実施形態における書き込み処理の典型的な手順を説明するためのフローチャート。
【図３】同実施形態において電源が遮断された場合に実行される第１のパワーロス保護（ＰＬＰ）動作の典型的な手順を説明するためのフローチャート。
【図４】同実施形態において電源が投入された場合に実行される第２のＰＬＰ動作の典型的な手順を説明するためのフローチャート。
【図５】同実施形態において単一のライトコマンドが受領された場合の動作の概要を説明するための図。
【図６】同実施形態において３つのライトコマンドが順次受領された場合の動作の概要を説明するための図。
【発明を実施するための形態】
【０００９】
以下、実施の形態につき図面を参照して説明する。  
図１は実施形態に係る磁気ディスク装置の典型的な構成を示すブロック図である。磁気ディスク装置は、ハードディスクドライブ（ＨＤＤ）とも呼ばれている。そこで以下の説明では、磁気ディスク装置をＨＤＤと表記する。図１に示されるＨＤＤは、ディスク（磁気ディスク）１１と、ヘッド（磁気ヘッド）１２と、スピンドルモータ（ＳＰＭ）１３と、アクチュエータ１４と、ドライバＩＣ１５と、ヘッドＩＣ１６と、温度センサ１７と、コントローラ１８とを備えている。
【００１０】
ディスク１１は、例えばその一方の面に、データが磁気記録される記録面を備える磁気記録媒体である。ディスク１１はＳＰＭ１３によって高速に回転させられる。ＳＰＭ１３は、ドライバＩＣ１５から供給される駆動電流（または駆動電圧）により駆動される。
【００１１】
ディスク１１（より詳細には、ディスク１１の記録面）は、例えば同心円状の複数のトラックを備えている。なお、ディスク１１が、スパイラル状に配置される複数のトラックを備えていても構わない。ヘッド１２はディスク１１の記録面に対応して配置される。ヘッド１２は、アクチュエータ１４の先端に取り付けられている。ヘッド１２は、ディスク１１が高速に回転することにより当該ディスク１１上を浮上する。アクチュエータ１４は、当該アクチュエータ１４の駆動源となるボイスコイルモータ（ＶＣＭ）１４０を有している。ＶＣＭ１４０は、ドライバＩＣ１５から供給される駆動電流（電圧）により駆動される。ヘッド１２は、アクチュエータ１４がＶＣＭ１４０によって駆動されることにより、ディスク１１上を当該ディスク１１の半径方向に、円弧を描くように移動する。
【００１２】
なお、図１に示される構成と異なって、ＨＤＤが複数のディスクを備えていても構わない。また、図１に示されるディスク１１が、その両方の面に記録面を備え、当該記録面のそれぞれに対応してヘッドが配置されていても構わない。
【００１３】
ドライバＩＣ１５は、コントローラ１８（より詳細には、コントローラ１８内のＣＰＵ１８４）の制御に従い、ＳＰＭ１３とＶＣＭ１４０とを駆動する。ドライバＩＣ１５は、バックアップ電源１５０を含む。
【００１４】
バックアップ電源１５０は、ＨＤＤの電源（以下、主電源と称する）が遮断した場合に、当該主電源に代わって電力を生成する。即ちバックアップ電源１５０は、主電源が遮断した場合に、ＨＤＤの必要最小限の動作を維持するのに用いられる電力を生成する。生成された電力は、ＨＤＤ内の少なくともコントローラ１８（より詳細には、ＨＤＣ１８２、バッファメモリ１８３、ＣＰＵ１８４、不揮発性メモリ１８５及びコントロールメモリ１８６）に供給される。バックアップ電源１５０は、この電力の生成に、ＳＰＭ１３の逆起電力を用いる。主電源が遮断した場合に、バックアップ電源１５０によって電力供給が可能な第１の期間Ｔ１は、一般に、ＨＤＤにおいて必要最小限の動作を維持するために消費される電力と、当該ＨＤＤの環境温度とに依存する。ＨＤＤの環境温度は、後述するように、温度センサ１７によって検出される。
【００１５】
必要最小限の動作は、ヘッド１２がディスク１１上を浮上している状態であれば、コントローラ１８によって制御されるヘッドアンロード動作を含む。ヘッドアンロード動作とは、ヘッド１２をディスク１１の外周から外れたランプと呼ばれる特定の箇所にアンロード（つまり、退避）するための動作を指す。このヘッドアンロード動作が必要な場合、バックアップ電源１５０によって生成される電力は、コントローラ１８に加えて、少なくともドライバＩＣ１５に供給される。また、必要最小限の動作は、コントローラ１８によって実行される第１のＰＬＰ動作を含む。第１のＰＬＰ動作については後述する。
【００１６】
ヘッドＩＣ１６はヘッドアンプを含んでおり、ヘッド１２（より詳細には、ヘッド１２のリード素子）によりリードされた信号（つまりリード信号）を増幅する。ヘッドＩＣ１６は更にライトドライバを含んでおり、コントローラ１８（より詳細には、コントローラ１８内のＲ／Ｗチャネル１８１）によって送出されるライトデータをライト電流に変換して、当該ライト電流をヘッド１２（より詳細には、ヘッド１２のライト素子）に送出する。温度センサ１７は、図１に示されるＨＤＤの温度（環境温度）を検出する。
【００１７】
コントローラ１８は、例えば、複数の素子が単一チップに集積されたSystem-on-Chip（ＳＯＣ）と呼ばれる大規模集積回路（ＬＳＩ）を用いて実現される。コントローラ１８は、リード／ライトチャネル（Ｒ／Ｗチャネル）１８１、ハードディスクコントローラ（ＨＤＣ）１８２、バッファメモリ１８３、ＣＰＵ１８４、不揮発性メモリ１８５及びコントロールメモリ１８６を備えている。
【００１８】
Ｒ／Ｗチャネル１８１は、リード／ライトに関連する信号を処理する。Ｒ／Ｗチャネル１８１は、リード信号をデジタル化し、このデジタル化されたデータからリードデータを復号する。Ｒ／Ｗチャネル１８１はまた、デジタル化されたデータからヘッド１２の位置決めに必要なサーボデータを抽出する。Ｒ／Ｗチャネル１８１はまた、ライトデータを符号化する。
【００１９】
ＨＤＣ１８２は、ホストインタフェース１９を介してホストと接続されている。ＨＤＣ１８２は、ホストから転送されるコマンド（ライトコマンド、リードコマンド等）を受領する。ＨＤＣ１８２は、ホストと当該ＨＤＣ１８２との間のデータ転送を制御する。ＨＤＣ１８２はＦＩＦＯバッファ（以下、受領ＦＩＦＯと称する）１８２ａを含む。受領ＦＩＦＯ１８２ａは、ホストからのライトコマンドで指定されるデータ（書き込みデータ）を当該ホストから受領するのに用いられる、ＨＤＣ１８２は更に、当該ＨＤＣ１８２とバッファメモリ１８３との間のデータ転送、及び当該ＨＤＣ１８２とＲ／Ｗチャネル１８１との間のデータ転送を制御する。
【００２０】
バッファメモリ１８３は、ダイナミックＲＡＭ（ＤＲＡＭ）のような揮発性メモリを用いて構成される。バッファメモリ１８３は、ディスク１１に書き込まれるべきデータ（書き込みデータ）及びディスク１１から読み出されたデータを一時格納するのに用いられる。バッファメモリ１８３の記憶領域の一部は、揮発性キャッシュ（以下、第１のキャッシュと称する）１８３ａとして用いられる。第１のキャッシュ１８３ａは、ＨＤＣ１８２の受領ＦＩＦＯ１８２ａを介して受領された書き込みデータを一時的に格納するのに用いられる。
【００２１】
ＣＰＵ１８４は、図１に示されるＨＤＤの主コントローラとして機能する。ＣＰＵ１８４は制御プログラムに従ってＨＤＤ内の他の少なくとも一部の要素を制御する。本実施形態において制御プログラムは、ディスク１１の特定の領域に格納されており、主電源が投入された場合に、当該制御プログラムの少なくとも一部がコントロールメモリ１８６にロードされて用いられる。
【００２２】
不揮発性メモリ１８５は、ＮＡＮＤフラッシュメモリのような書き換え可能な不揮発性メモリである。不揮発性メモリ１８５の記憶領域の一部はシステム領域１８５ａとして用いられる。本実施形態において、システム領域１８５ａの一部には、イニシャルプログラムローダ（ＩＰＬ）が予め格納されている。ＣＰＵ１８４は、例えば主電源が投入された際にＩＰＬを実行することにより、ディスク１１に格納されている制御プログラムの少なくとも一部をコントロールメモリ１８６にロードする。システム領域１８５ａの他の一部は、主電源が遮断した場合に、管理テーブル１８６ａのようなシステム情報を保存するのに用いられる。
【００２３】
不揮発性メモリ１８５の記憶領域の他の一部は、不揮発性キャッシュ（以下、第２のキャッシュと称する）１８５ｂとして用いられる。第２のキャッシュ１８５ｂは、主電源が遮断した場合に、第１のキャッシュ１８３ａに残されている、ディスク１１に未書き込みのデータをセーブするのに用いられる。第２のキャッシュ１８５ｂの容量は、第１のキャッシュ１８３ａのそれよりも小さいのが一般的である。本実施形態では、第２のキャッシュ１８５ｂの容量は１メガバイト（ＭＢ）であり、第１のキャッシュ１８３ａの容量は６４ＭＢ（または１２８ＭＢ）であるものとする。
【００２４】
コントロールメモリ１８６は、例えばＤＲＡＭのような揮発性メモリである。コントロールメモリ１８６の記憶領域の一部は、制御プログラムの少なくとも一部を格納するのに用いられる。コントロールメモリ１８６の記憶領域の他の一部は管理テーブル１８６ａを格納するのに用いられる。管理テーブル１８６ａは、第１のキャッシュ１８３ａ及び第２のキャッシュ１８５ｂ内のデータの所在を一定サイズのブロックを単位に管理するのに用いられる第１のキャッシュディレクトリ情報及び第２のキャッシュディレクトリ情報を含む。コントロールメモリ１８６の記憶領域の更に他の一部はコマンドバッファ１８６ｂとして用いられる。コマンドバッファ１８６ｂは、ＨＤＣ１８２で受領されたライトコマンドの待ち行列を格納するのに用いられる。
【００２５】
次に、本実施形態の動作について、ディスク１１へのデータの書き込みを含む書き込み処理を例に、図２を参照して説明する。図２は、書き込み処理の典型的な手順を説明するためのフローチャートである。今、ライトコマンドがコマンドバッファ１８６ｂに格納されていないものとする。この状態で、ホストから図１に示されるＨＤＤにライトコマンド（第１のライトコマンド）ＣＭＤが発行され、当該ライトコマンドＣＭＤをＨＤＤ内のＨＤＣ１８２が受領したものとする。ＣＰＵ１８４は、ＨＤＣ１８２によって受領されたライトコマンドＣＭＤをコマンドバッファ１８６ｂに格納する。
【００２６】
ここで、書き込み処理について説明する前に、ライトキャッシュイネーブル（ＷＣＥ）ビットについて説明する。ＨＤＣ１８２によって受領されたライトコマンドＣＭＤは、一般にＷＣＥビットを含む。ＷＣＥビットが“１”の場合、ライトコマンドＣＭＤは、当該ライトコマンドＣＭＤによって指定されたデータ長のデータの受領が完了した時点でステータス（つまり、ライトコマンドＣＭＤの実行に関するステータス）をホストに報告することを、ＨＤＤに要求する。以下の説明では、ライトコマンドＣＭＤによって指定されたデータ長のデータをＤ［ＣＭＤ］と表記し、ステータスをＳ［ＣＭＤ］と表記する。
【００２７】
データＤ［ＣＭＤ］の受領の完了とは、当該データＤ［ＣＭＤ］がＨＤＣ１８２によって受領され、受領されたデータＤ［ＣＭＤ］がＨＤＣ１８２によって第１のキャッシュ１８３ａに全て格納されることを指す。第１のキャッシュ１８３ａが本実施形態のように揮発性キャッシュの場合、ステータスＳ［ＣＭＤ］が報告された後、受領されたデータＤ［ＣＭＤ］のディスク１１への書き込みが完了する前に主電源が遮断したならば、受領されたデータＤ［ＣＭＤ］の一部が失われる可能性がある。
【００２８】
これに対してＷＣＥビットが“０”の場合、従来技術では、ライトコマンドＣＭＤは、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了した時点でステータスＳ［ＣＭＤ］をホストに報告することを、ＨＤＤに要求する。この場合、第１のキャッシュ１８３ａが本実施形態のように揮発性キャッシュであり、且つステータスＳ［ＣＭＤ］が報告された後に主電源が遮断したとしても、受領されたデータＤ［ＣＭＤ］が失われる可能性はない。但し、ＷＣＥビットが“１”の場合と比べて、ホストへのステータスＳ［ＣＭＤ］の報告が遅れるため、当該ホストからＨＤＤへの次のコマンドの発行が遅れる。このことは、ＨＤＤの性能低下を招く。
【００２９】
本実施形態では、ＷＣＥビットが“０”である場合を想定する。但し本実施形態では、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了する前に、ＨＤＤからホストにステータスＳ［ＣＭＤ］が報告される新規な構成を適用する。
【００３０】
さて本実施形態では、図１に示されるＨＤＤが通常の動作状態にある場合、図２のフローチャートで示される書き込み処理が定常的に実行される。まず書き込み処理の先頭で、ＣＰＵ１８４は、新たにライトコマンドが受領されたかを判定する（Ｂ２０１）。この例のようにライトコマンドＣＭＤが受領された場合（Ｂ２０１のＹｅｓ）、ＣＰＵ１８４は、ライトコマンドＣＭＤで指定されたデータ長のデータ（つまり書き込みデータ）Ｄ［ＣＭＤ］を受領するようにＨＤＣ１８２に要求する。するとＨＤＣ１８２は、受領ＦＩＦＯ１８２ａを介して、ホストからデータ（第１のデータ）Ｄ［ＣＭＤ］を受領する動作を開始する（Ｂ２０２）。Ｂ２０２においてＨＤＣ１８２は、受領されたデータを例えばブロック単位に第１のキャッシュ１８３ａに格納する動作も開始する。Ｂ２０２においてＣＰＵ１８４は、上述のＨＤＣ１８２の動作に応じて管理テーブル１８６ａ（より詳細には、管理テーブル１８６ａに含まれる第１のキャッシュディレクトリ情報）を更新する動作を開始する。
【００３１】
次にＣＰＵ１８４は、ＰＬＰ動作でデータをセーブするのに利用可能な、第２のキャッシュ１８５ｂ内の第１の空き領域（以下、ＰＬＰ空き領域と称する）の容量（以下、ＰＬＰ空き容量と称する）ＦＳ＿ＰＬＰをチェックする（Ｂ２０３）。ＰＬＰ空き容量（第１の容量）ＦＳ＿ＰＬＰは、ＰＬＰ動作で保証可能なデータの量といえる。Ｂ２０３においてＣＰＵ１８４は、ＰＬＰ空き容量ＦＳ＿ＰＬＰに基づき、現在のＰＬＰ空き領域に格納可能なデータのブロック数Ｎ＿ＰＬＰを算出する。つまり、Ｂ２０３においてＣＰＵ１８４は、ＰＬＰ空き領域のブロック数Ｎ＿ＰＬＰをチェックする。
【００３２】
ここで、ＰＬＰ空き領域及びＰＬＰ空き容量ＦＳ＿ＰＬＰについて説明する。まず、前述の第１の期間Ｔ１に不揮発性メモリ１８５（より詳細には、不揮発性メモリ１８５内の第２のキャッシュ１８５ｂ）に書き込むことが可能なデータの量をＱｄと表記する。Ｑｄは、第１の期間Ｔ１と、ＨＤＤの環境温度における不揮発性メモリ１８５の書き込み速度とに依存する。説明の簡略化のために、Ｑｄは、Ｎブロックの容量であるものとする。但し、Ｎは１以上の整数である。また、第２のキャッシュ１８５ｂの物理的な空き領域の容量をＦＳと表記する。
【００３３】
上述の物理的な空き領域の容量ＦＳは、後述のＰＬＰ領域が予約されていない状態では、第２のキャッシュ１８５ｂの容量に一致する。これに対して、ＰＬＰ領域が予約されている状態では、物理的な空き領域の容量は、予約されている容量だけ、第２のキャッシュ１８５ｂの容量よりも減少する。
【００３４】
本実施形態においてＣＰＵ１８４は、ＰＬＰ空き容量ＦＳ＿ＰＬＰを、Ｑｄ及びＦＳに基づいて次のように決定する。まず、ＱｄがＦＳ以上であるものとする。この場合、ＣＰＵ１８４は、第２のキャッシュ１８５ｂの物理的な空き領域をＰＬＰ空き領域として決定し、ＦＳに一致する容量をＰＬＰ空き容量ＦＳ＿ＰＬＰとして決定する。これに対し、ＱｄがＦＳ未満であるならば、ＣＰＵ１８４は、第２のキャッシュ１８５ｂの物理的な空き領域のうち容量がＱｄに一致する部分をＰＬＰ空き領域として決定する。この場合、ＣＰＵ１８４は、Ｑｄに一致する容量をＰＬＰ空き容量ＦＳ＿ＰＬＰとして決定する。
【００３５】
例えば、第２のキャッシュ１８５ｂの現在の物理的な空き領域の容量ＦＳが１ＭＢで、Ｑｄが１．５ＭＢの場合（ＦＳ＜Ｑｄ）、ＰＬＰ空き容量ＦＳ＿ＰＬＰはＦＳに一致する１ＭＢ（ＦＳ＿ＰＬＰ＝ＦＳ＝１ＭＢ）に制限される。これに対し、ＦＳが１ＭＢでも、Ｑｄが例えば０．８ＭＢの場合（ＦＳ＞Ｑｄ）、ＰＬＰ空き容量ＦＳ＿ＰＬＰはＱｄに一致する０．８ＭＢ（ＦＳ＿ＰＬＰ＝Ｑｄ＝０．８ＭＢ）に制限される。
【００３６】
ＣＰＵ１８４は、Ｂ２０３を実行するとＢ２０４に進む。Ｂ２０４においてＣＰＵ１８４は、ライトコマンドＣＭＤで指定されたディスク１１へのデータＤ［ＣＭＤ］の書き込みにおいて未だ当該ディスク１１に書かれていないデータのブロックの数Ｎ＿ＮＷＢをチェックする（Ｂ２０４）。ここでは、ディスク１１へのデータＤ［ＣＭＤ］の書き込みはまだ開始されていない。この場合、Ｎ＿ＮＷＢは、ライトコマンドＣＭＤによって指定されたデータ長の示すブロック数に一致する。
【００３７】
次にＣＰＵ１８４は、Ｎ＿ＮＷＢ（第２の量）をＮ＿ＰＬＰ（第１の容量）と比較することにより、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であるかを判定する（Ｂ２０５）。この例では、Ｎ＿ＮＷＢがＮ＿ＰＬＰよりも大きいものとする。つまり、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下である状態（以下、第１の状態と称する）を、ＣＰＵ１８４が検出しなかったものとする（Ｂ２０５のＮｏ）。この場合、ＣＰＵ１８４は、Ｎ＿ＮＷＢ＞Ｎ＿ＰＬＰの状態で主電源の遮断が発生したならば、ＰＬＰ機能を発揮できないと判断する。そこで、ＣＰＵ１８４はＢ２０６に進む。
【００３８】
Ｂ２０６においてＣＰＵ１８４は、フラグＦがセットされているかを判定する。フラグＦは、ディスク１１へのデータ書き込みが実行されていない状態ではリセットされており、ディスク１１へのデータ書き込み開始に応じてセットされる。またフラグＦは、ディスク１１へのデータ書き込みの完了が確認された場合にリセットされる。つまり、フラグＦは、ディスク１１へのデータ書き込みが実行されているか否かを示す。
【００３９】
この例では、ディスク１１へのデータ書き込みは実行されておらず、したがってフラグＦはリセットされているものとする。このように、フラグＦがリセットされている場合（Ｂ２０６のＮｏ）、ＣＰＵ１８４はＢ２０７乃至Ｂ２０９をスキップしてＢ２１０に進む。Ｂ２１０においてＣＰＵ１８４は、少なくとも１つの実行されるべきライトコマンドがコマンドバッファ１８６ｂに存在するかを判定する。
【００４０】
実行されるべきライトコマンドとは、当該ライトコマンドによって指定されるディスク１１への書き込みが開始されていない場合における、当該ライトコマンド（つまり、未だ実行されていないコマンド）を指す。本実施形態では、コマンドバッファ１８６ｂに格納されているコマンドが実行されるべきライトコマンドであるかを示すのに、フラグＦ１が用いられる。
【００４１】
フラグＦ１は、例えば、ＨＤＣ１８２によって受領されたライトコマンドがコマンドバッファ１８６ｂに格納される際に、当該受領されたライトコマンドに対応付けて当該コマンドバッファ１８６ｂに格納される。このときフラグＦ１は、当該フラグＦ１に対応するライトコマンドが、実行されるべき状態（つまり、未実行の状態）にあることを示す。フラグＦ１は、対応するライトコマンドの実行が開始されると、実行中を示す状態に変更される。以下の説明では、例えばライトコマンドＣＭＤに対応付けられたフラグＦ１を、フラグＦ１［ＣＭＤ］と表記する。
【００４２】
もし、少なくとも１つの実行されるべきライトコマンドが存在するならば（Ｂ２１０のＹｅｓ）、ＣＰＵ１８４はＢ２１１に進む。Ｂ２１１における処理の内容は、以下に述べるように、実行されるべき複数のライトコマンドまたは実行されるべき単一のライトコマンドのいずれがコマンドバッファ１８６ｂに存在するかによって異なる。
【００４３】
実行されるべき複数のライトコマンドが存在する場合、ＣＰＵ１８４は、当該実行されるべき複数のライトコマンドを、当該実行されるべき複数のライトコマンドによってそれぞれ指定される書き込み範囲に基づいて並べ替える（Ｂ２１１）。この並べ替えは、並び替え後の実行されるべき複数のライトコマンドの並びの順に当該実行されるべき複数のライトコマンドが実行された場合に、ディスク１１へのアクセスの効率が最も良くなるように行われる。つまり、実行されるべきライトコマンドの切り替え時におけるディスクの回転待ち時間（またはシーク時間）が最小となるように、実行されるべき複数のライトコマンドが並べ替えられる。これに対し、実行されるべき単一のライトコマンドが存在する場合、上述の並べ替えは行われない。この場合、Ｂ２１１がスキップされるのと等価である。
【００４４】
Ｂ２１１において並び替えが行われた場合、ＣＰＵ１８４は、並び替えられた実行されるべき複数のライトコマンドの並びに従い、次に実行されるべきライトコマンドを選択する（Ｂ２１２）。これに対し、Ｂ２１１において並び替えが行われなかった場合、ＣＰＵ１８４は、実行されるべき単一のライトコマンドを選択する（Ｂ２１２）。
【００４５】
ここでは、ライトコマンドＣＭＤのみがコマンドバッファ１８６ｂに存在し、当該ライトコマンドＣＭＤが実行されるべきライトコマンドとして選択されたものとする。この場合、ＣＰＵ１８４は、ＨＤＣ１８２によって受領されて、第１のキャッシュ１８３ａに格納されたデータＤ［ＣＭＤ］を、選択されたライトコマンドＣＭＤで指定されたディスク１１上の領域に書き込む動作を開始する（Ｂ２１３）。
【００４６】
一般に、ライトコマンドは、開始論理ブロックアドレスＬＢＡとデータ長とにより、データが書き込まれるべき領域を指定する。データ長は、一般にブロックの数によって示される。例えば、開始論理ブロックアドレスＬＢＡがＬＢＡ０であり、データ長がＬである場合、ライトコマンドＣＭＤは、ＬＢＡ０から始まるＬブロックの領域にデータを書き込むことを指示する。但し、ライトコマンドＣＭＤによって指定されるＬブロックの領域は、ホストから認識される論理的な領域であり、ディスク１１上の物理的な領域でない。そこでＣＰＵ１８４は、例えば周知のアドレス変換テーブルに基づき、開始論理ブロックアドレスＬＢＡを、ディスク１１上の物理アドレスに変換する。この物理アドレスは、一般に、ヘッド番号、シリンダ番号及びセクタ番号から構成される。ＣＰＵ１８４は、この物理アドレスに基づいて、ディスク１１へのデータＤ［ＣＭＤ］の書き込みを開始する。但し以下の説明では、簡略化のために、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが論理ブロックアドレスＬＢＡに基づいて行われるものとする。
【００４７】
ＣＰＵ１８４は、上述のようにディスク１１へのデータＤ［ＣＭＤ］の書き込みを開始すると（Ｂ２１３）、フラグＦをセットする（Ｂ２１４）。これによりフラグＦは、現在ディスク１１へのデータ書き込みが実行されていることを示す。またＢ２１４においてＣＰＵ１８４は、ライトコマンドＣＭＤに対応付けてコマンドバッファ１８６ｂに格納されているフラグＦ１［ＣＭＤ］を当該ライトコマンドＣＭＤの実行中を示す状態に変更する。
【００４８】
次にＣＰＵ１８４は、コマンドバッファ１８６ｂ内に、ステータスが未だ報告されていないライトコマンドが存在するかを判定する（Ｂ２１５）。本実施形態では、コマンドバッファ１８６ｂに存在するライトコマンドに関するステータスが報告されているか否かを示すのに、フラグＦ２が用いられる。
【００４９】
フラグＦ２は、例えば、ＨＤＣ１８２によって受領されたライトコマンドがコマンドバッファ１８６ｂに格納される際に、当該受領されたライトコマンドに対応付けて当該コマンドバッファ１８６ｂに格納される。このときフラグＦ２は、当該フラグＦ２に対応するライトコマンドの実行に関するステータスが未報告であることを示す。フラグＦ２は、対応するライトコマンドの実行に関するステータスがホストに報告されると、ステータス報告済みを示す状態に変更される。以下の説明では、例えばライトコマンドＣＭＤに対応付けられたフラグＦ２を、フラグＦ２［ＣＭＤ］と表記する。
【００５０】
もし、ステータスが未だ報告されていないライトコマンドがコマンドバッファ１８６ｂ内に存在しないならば（Ｂ２１５のＮｏ）、ＣＰＵ１８４は、Ｂ２０１（つまり、書き込み処理の先頭）に戻る。本実施形態において書き込み処理は、ＨＤＤの主電源が遮断された場合、或いはＨＤＤが特定のパワーセーブモードに移行した場合に終了する。特定のパワーセーブモードとは、例えば、ヘッド１２が前述のランプに退避されるモード、またはヘッド１２がランプに退避された後、ＳＰＭ１３の回転が停止されるモードを指す。
【００５１】
一方、ステータスが未だ報告されていないライトコマンドがコマンドバッファ１８６ｂ内に存在するならば（Ｂ２１５のＹｅｓ）、ＣＰＵ１８４はＢ２０４に戻る。ここでは、テータスが未だ報告されていないライトコマンドＣＭＤがコマンドバッファ１８６ｂ内に存在する。そこで、ＣＰＵ１８４はＢ２０４に戻って、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが開始された後の、現在のディスク１１に未書き込みのデータのブロック数Ｎ＿ＮＷＢを再びチェックする。そしてＣＰＵ１８４は、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であるかを判定する（Ｂ２０５）。
【００５２】
この例では、依然としてＮ＿ＮＷＢがＮ＿ＰＬＰよりも大きいものとする（Ｂ２０５のＮｏ）。この場合、ＣＰＵ１８４は前述したように、フラグＦがセットされているかを判定する（Ｂ２０６）。この例では、フラグＦはセットされている（Ｂ２０６のＹｅｓ）。この場合、ＣＰＵ１８４は、Ｂ２０７に進む。Ｂ２０７においてＣＰＵ１８４は、Ｂ２１３で開始されたディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了したかを判定する。もし、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが未完了であるならば（Ｂ２０７のＮｏ）、ＣＰＵ１８４は、Ｂ２１５を経由してＢ２０４に戻り、現在のディスク１１に未書き込みのデータのブロック数Ｎ＿ＮＷＢをチェックする。そしてＣＰＵ１８４は、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であるかを判定する（Ｂ２０５）。つまりＣＰＵ１８４は、現在実行されているディスク１１へのデータＤ［ＣＭＤ］の書き込みが進んで、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下になるのを待つ。
【００５３】
やがて、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下（つまり第１の状態）となったものとする（Ｂ２０５のＹｅｓ）。この場合、ＣＰＵ１８４は、ディスク１１へのデータ書き込みが完了する前にＨＤＤの主電源の遮断が発生したとしても、ディスク１１に未書き込みのデータを、第２のキャッシュ１８５ｂのＰＬＰ空き領域に確実に書き込むことが可能であると判断する。そこで、ＣＰＵ１８４はＢ２１６に進む。即ちＣＰＵ１８４は、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下となる特定の状態（第１の状態）を検出したならば、Ｂ２１６に進む。(Ｂ２１６においてＣＰＵ１８４は、Ｂ２０２で開始されたデータＤ［ＣＭＤ］の受領が完了しているかを判定する。
【００５４】
この例では、データＤ［ＣＭＤ］の受領は完了しているものとする（Ｂ２１６のＹｅｓ）。これに対して、データＤ［ＣＭＤ］の受領が完了していないならば（Ｂ２１６のＮｏ）、ＣＰＵ１８４はデータＤ［ＣＭＤ］の受領が完了するのを待つ。
【００５５】
ＣＰＵ１８４は、データＤ［ＣＭＤ］の受領が完了しているのを確認すると（Ｂ２１６のＹｅｓ）、Ｂ２１７に進む。Ｂ２１７においてＣＰＵ１８４は、ライトコマンドＣＭＤの実行に関するステータスＳ［ＣＭＤ］を、ＨＤＣ１８２によってホストに報告させる。即ちＣＰＵ１８４は、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下となる状態を検出した場合、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了するのを待つことなく、ステータスＳ［ＣＭＤ］（より詳細には、書き込み完了を示すステータスＳ［ＣＭＤ］）を、ＨＤＣ１８２によってホストに報告させる。
【００５６】
これにより本実施形態によれば、ステータスＳ［ＣＭＤ］が報告された後、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了する前に電源遮断が発生しても、書き込みデータを保証することができる。即ち本実施形態によれば、ホストへのステータスの報告時期を早めているにも拘わらずに、電源遮断が発生した場合において書き込みデータを保証することができる。Ｂ２１７においてＣＰＵ１８４は、ライトコマンドＣＭＤに対応付けてコマンドバッファ１８６ｂに格納されているフラグＦ２［ＣＭＤ］を、ステータス報告済みを示す状態に変更する。
【００５７】
次にＣＰＵ１８４は、ＰＬＰ空き領域内のＮ＿ＮＷＢに相当する部分を、ＰＬＰ動作に必要な領域（以下、ＰＬＰ領域と称する）として、管理テーブル１８６ａ（より詳細には、第２のキャッシュディレクトリ情報）を用いてライトコマンドＣＭＤに対応付けて予約する（Ｂ２１８）。この予約により、Ｎ＿ＰＬＰはＮ＿ＮＷＢだけ減少する（Ｎ＿ＰＬＰ＝Ｎ＿ＰＬＰ − Ｎ＿ＮＷＢ）。なお、Ｂ２１８がＢ２１７の前に実行されても構わない。
【００５８】
ＣＰＵ１８４は、Ｂ２１７及びＢ２１８を実行すると、Ｂ２０６に戻る（または進む）。Ｂ２０６においてＣＰＵ１８４は、フラグＦがセットされているかを判定する。この例のようにフラグＦがセットされている場合（Ｂ２０６のＹｅｓ）、ＣＰＵ１８４はディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了したかを判定する（Ｂ２０７）。
【００５９】
もし、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが未完了であるならば（Ｂ２０７のＮｏ）、ＣＰＵ１８４はＢ２１５に進む。Ｂ２１５においてＣＰＵ１８４は、コマンドバッファ１８６ｂ内に、ステータスが未だ報告されていないライトコマンドが存在するかを判定する。この例では、コマンドバッファ１８６ｂ内には、ステータスが未だ報告されていないライトコマンドは存在しない（Ｂ２１５のＮｏ）。この場合、ＣＰＵ１８４はＢ２０１に戻る。
【００６０】
Ｂ２０１においてＣＰＵ１８４は、前述したように、新たなライトコマンドが受領されたかを判定する。この例では、ライトコマンドコマンドＣＭＤに続く新たなライトコマンドは受領されていないものとする（Ｂ２０１のＮｏ）。この場合、ＣＰＵ１８４はＢ２０６に進み、フラグＦがセットされているかを判定する。この例のようにフラグＦがセットされている場合（Ｂ２０６のＹｅｓ）、ＣＰＵ１８４はＢ２０７に進む。Ｂ２０７においてＣＰＵ１８４は、前述したように、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了したかを判定する。もし、データＤ［ＣＭＤ］の書き込みが完了していないならば（Ｂ２０７のＮｏ）、ＣＰＵ１８４はＢ２１５，Ｂ２０１及びＢ２０６を経由してＢ２０７に戻る。つまりＣＰＵ１８４は、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了するのを待つ。
【００６１】
やがて、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了したものとする（Ｂ２０７のＹｅｓ）。この場合、ＣＰＵ１８４は、Ｂ２１８でなされたＰＬＰ領域の予約を解除する（Ｂ２０８）。この予約の解除により、Ｎ＿ＰＬＰは解除されたＰＬＰ領域のブロック数だけ増加する。Ｂ２０８においてＣＰＵ１８４は、コマンドバッファ１８６ｂからライトコマンドＣＭＤ（より詳細には、ライトコマンドＣＭＤ、フラグＦ１［ＣＭＤ］及びフラグＦ２［ＣＭＤ］の組）を削除する。次にＣＰＵ１８４は、フラグＦをリセットする（Ｂ２０９）。なお、Ｂ２０９がＢ２０８の前に実行されても構わない。
【００６２】
ＣＰＵ１８４は、Ｂ２０８及びＢ２０９を実行すると、Ｂ２１０に進む。Ｂ２１０においてＣＰＵ１８４は、実行されるべきライトコマンドがコマンドバッファ１８６ｂに存在するかを判定する。もし、実行されるべきライトコマンドが存在しないならば（Ｂ２１０のＮｏ）、ＣＰＵ１８４はＢ２０１に戻る。
【００６３】
Ｂ２０１においてＣＰＵ１８４は、前述したように、新たなライトコマンドが受領されたかを判定する。この例では、ライトコマンドコマンドＣＭＤに続く新たなライトコマンドは受領されていないものとする（Ｂ２０１のＮｏ）。この場合、ＣＰＵ１８４は、Ｂ２０６に進み、フラグＦがセットされているかを判定する。この例のようにフラグＦがリセットされている場合（Ｂ２０６のＮｏ）、ＣＰＵ１８４はＢ２１０に進む。Ｂ２１０においてＣＰＵ１８４は、前述したように、実行されるべきライトコマンドがコマンドバッファ１８６ｂに存在するかを判定する。もし、実行されるべきライトコマンドが存在しないならば（Ｂ２１０のＮｏ）、ＣＰＵ１８４はＢ２０１に戻る。つまり、ＣＰＵ１８４は、実行されるべきライトコマンドがコマンドバッファ１８６ｂに存在しない場合、ライトコマンドが受領されるのを待つ。
【００６４】
さて、ライトコマンドＣＭＤの受領が判定された後（Ｂ２０１のＹｅｓ）、最初のＢ２０５でＮ＿ＮＷＢがＮ＿ＰＬＰ以下であると判定されたものとする（Ｂ２０５のＹｅｓ）。このような状態は、例えば、ライトコマンドＣＭＤの指定するデータ長が短い場合、つまりデータＤ［ＣＭＤ］の量（ブロック数）が少ない場合に発生する。この場合、データＤ［ＣＭＤ］の受領が完了した段階で（Ｂ２１６のＹｅｓ）、直ちにステータスＳ［ＣＭＤ］がホストに報告される（Ｂ２１７）。
【００６５】
次に、主電源が遮断した場合に実行される第１のＰＬＰ動作について図３を参照して説明する。図３は、第１のＰＬＰ動作の典型的な手順を説明するためのフローチャートである。主電源が遮断した場合、ＣＰＵ１８４はバックアップ電源１５０により一時的に供給される電力を受けて、ＨＤＤにおいて必要最小限の動作を実行する。具体的には、ヘッド１２がディスク１１上を浮上している状態であれば、ＣＰＵ１８４はヘッドアンロード動作を実行し、しかる後に第１のＰＬＰ動作を次のように実行する。
【００６６】
まずＣＰＵ１８４は、ディスク１１に未書き込みのデータが第１のキャッシュ１８３ａに存在するかを、管理テーブル１８６ａに基づいて判定する（Ｂ３０１）。この例では、ホストにステータスＳ［ＣＭＤ］が報告され、且つＰＬＰ領域が予約された後（Ｂ２１７及びＢ２１８）、ディスク１１へのデータＤ［ＣＭＤ］の書き込みが完了する前に、主電源が遮断したものとする。この場合、ディスク１１に未書き込みのデータ（いわゆるダーティデータ）が第１のキャッシュ１８３ａに存在する（Ｂ３０１のＹｅｓ）。この未書き込みデータは、管理テーブル１８６ａ（より詳細には、管理テーブル１８６ａに含まれる第１のキャッシュディレクトリ情報）に基づいて特定される。
【００６７】
そこで、ＣＰＵ１８４は、ディスク１１に未書き込みのデータを第１のキャッシュ１８３ａから読み出して、当該読み出された未書き込みのデータを第２のキャッシュ１８５ｂ（より詳細には、不揮発性メモリ１８５内の第２のキャッシュ１８５ｂ）のＰＬＰ空き領域に高速でセーブする（Ｂ３０２）。また、Ｂ３０２においてＣＰＵ１８４は、未書き込みのデータのセーブに基づき、管理テーブル１８６ａ（より詳細には、管理テーブル１８６ａに含まれる第２のキャッシュディレクトリ情報）を更新する。Ｂ３０２においてＣＰＵ１８４は更に、更新された管理テーブル１８６ａ（より詳細には、少なくとも第２のキャッシュディレクトリ情報）を不揮発性メモリ１８５内のシステム領域１８５ａにセーブする。
【００６８】
ここで、主電源が遮断した時点で第１のキャッシュ１８３ａに残っている未書き込みのデータのブロック数は、直近のＢ２０４でチェックされたブロック数Ｎ＿ＮＷＢ以下であり、したがってＮ＿ＰＬＰ以下である。よって、第１のキャッシュ１８３ａから読み出されたディスク１１への未書き込みのデータは、バックアップ電源１５０によって電力供給が可能な第１の期間Ｔ１に確実に第２のキャッシュ１８５ｂにセーブされる。
【００６９】
ＣＰＵ１８４は、Ｂ３０２を実行すると、第１のＰＬＰ動作を終了する。一方、ディスク１１に未書き込みのデータが第１のキャッシュ１８３ａに存在しない場合（Ｂ３０１のＮｏ）、ＣＰＵ１８４はＢ３０２をスキップして第１のＰＬＰ動作を終了する。
【００７０】
次に、主電源が投入された場合に実行される第２のＰＬＰ動作について図４を参照して説明する。図４は、第２のＰＬＰ動作の典型的な手順を説明するためのフローチャートである。主電源が投入された（または復帰した）場合、ＣＰＵ１８４は、不揮発性メモリ１８５のシステム領域１８５ａに格納されているＩＰＬを実行し、当該ＩＰＬに基づいてドライバＩＣ１５を制御する。これによりＣＰＵ１８４は、ＳＰＭ１３及びＶＣＭ１４０をドライバＩＣ１５によって駆動させて、ヘッド１２をディスク１１上にロードさせる。この状態で、ＣＰＵ１８４はＩＰＬに基づいて、ディスク１１に格納されている制御プログラムの少なくとも一部を、コントロールメモリ１８６にロードする。そしてＣＰＵ１８４は制御プログラムに基づいて、第２のＰＬＰ動作を次のように実行する。
【００７１】
まずＣＰＵ１８４は、第２のキャッシュ１８５ｂにデータ（より詳細には、有効なデータ）があるかを判定する（Ｂ４０１）。もし、第２のキャッシュ１８５ｂのデータがイレーズされていないならば、ＣＰＵ１８４は、第２のキャッシュ１８５ｂにデータがあると判定する（Ｂ４０１のＹｅｓ）。この場合、ＣＰＵ１８４はＢ４０２に進む。Ｂ４０２においてＣＰＵ１８４は、不揮発性メモリ１８５のシステム領域１８５ａにセーブされている管理テーブル１８６ａを読み出して、当該読み出された管理テーブル１８６ａをコントロールメモリ１８６に格納する。
【００７２】
次にＣＰＵ１８４は、不揮発性メモリ１８５の第２のキャッシュ１８５ｂにセーブされているデータ、つまり主電源の遮断時においてディスク１１に未書き込みのデータを、ディスク１１に書き込むための書き込み動作を実行する（Ｂ４０３）。この書き込み動作（Ｂ４０３）を開始するに際し、ＣＰＵ１８４は、ディスク１１に未書き込みのデータがセーブされている第２のキャッシュ１８５ｂ内の領域と、当該データが書かれるべきディスク１１上の領域とを、コントロールメモリ１８６に格納された管理テーブル１８６ａ（より詳細には、第２のキャッシュディレクトリ情報）に基づいて特定する。
【００７３】
ＣＰＵ１８４は、Ｂ４０３を実行すると、第２のキャッシュ１８５ｂ内のデータをイレーズし（Ｂ４０４）、しかる後にＢ４０５に進む。一方、第２のキャッシュ１８５ｂにデータがないならば（Ｂ４０１のＮｏ）、ＣＰＵ１８４はＢ４０２乃至Ｂ４０４をスキップしてＢ４０５に進む。Ｂ４０５においてＣＰＵ１８４は、ＨＤＤを、ホストからのコマンドを受領可能なレディ状態（いわゆるドライブレディ状態）に移行する。これによりＣＰＵ１８４は、第２のＰＬＰ動作を終了する。
【００７４】
なお、第１のＰＬＰ動作において、ディスク１１に未書き込みのデータが第１のキャッシュ１８３ａに存在しない場合（Ｂ３０１のＮｏ）、ＣＰＵ１８４が、管理テーブル１８６ａ（より詳細には、少なくとも第２のキャッシュディレクトリ情報）を不揮発性メモリ１８５内のシステム領域１８５ａにセーブしても構わない。この場合、ＣＰＵ１８４は第２のＰＬＰ動作において、Ｂ４０１及びＢ４０２の実行順を逆にしても良い。即ちＣＰＵ１８４は、不揮発性メモリ１８５のシステム領域１８５ａにセーブされている管理テーブル１８６ａを、第２のＰＬＰ動作の先頭で読み出して、当該読み出された管理テーブル１８６ａをコントロールメモリ１８６に格納しても良い。そして、コントロールメモリ１８６に格納された管理テーブル１８６ａに基づいて、第２のキャッシュ１８５ｂにデータがあるかを判定しても良い。
【００７５】
次に、本実施形態の動作の具体例について説明する。図５は、本実施形態において、単一のライトコマンドＣＭＤ０が受領された場合の動作の概要を説明するための図である。図５において、時刻ｔ１乃至ｔ６の間には、次のような関係
ｔ１＜ｔ２＜ｔ３＜ｔ４＜ｔ５＜ｔ６
があるものとする。
【００７６】
ライトコマンドＣＭＤ０は、例えば、論理ブロックアドレスＬＢＡが０ｘ０００の位置（ＬＢＡ＝０ｘ０００）から始まり、０ｘ８００で示される数のブロックの領域（つまり、０ｘ０００乃至０ｘ７ＦＦの範囲の領域）に、データＤ［ＣＭＤ０］を書くことを指定する。ここで、０ｘ０００及び０ｘ８００における０ｘは、後続の０００及び８００が１６進表記であることを示す。
【００７７】
まず、コマンドバッファ１８６ｂにライトコマンドが存在しない状態で、時刻ｔ１において、ホストからのライトコマンドＣＭＤ０がＨＤＣ１８２によって受領されて、コマンドバッファ１８６ｂに格納されたものとする。この場合、ライトコマンドＣＭＤ０の受領が確認されたならば（Ｂ２０１のＹｅｓ）、データＤ［ＣＭＤ０］の受領が時刻ｔ２で開始される（Ｂ２０２）。図５の例では、データＤ［ＣＭＤ０］の受領は、時刻ｔ４で完了する。
【００７８】
さて、データＤ［ＣＭＤ０］の受領が開始されると、ＰＬＰ動作で保証可能なデータのブロック数、つまりＰＬＰ空き領域のブロック数Ｎ＿ＰＬＰが、ＣＰＵ１８４によってチェックされる（Ｂ２０３）。この例では、Ｎ＿ＰＬＰが０ｘ１００であるものとする。続いて、ディスク１１へのデータＤ［ＣＭＤ０］の書き込みにおいて未だ当該ディスク１１に書かれていないデータのブロックの数Ｎ＿ＮＷＢが、ＣＰＵ１８４によってチェックされる（Ｂ２０４）。このとき、ディスク１１へのデータＤ［ＣＭＤ０］の書き込みは開始されておらず、したがってＮ＿ＮＷＢは０ｘ８００である。また、ディスク１１への他のデータの書き込みも行われていない。つまり、Ｎ＿ＮＷＢはＮ＿ＰＬＰ以下でなく（Ｂ２０５のＮｏ）、フラグＦはリセットされている（Ｂ２０６のＮｏ）。この場合、ディスク１１へのデータＤ［ＣＭＤ０］の書き込みが、時刻ｔ３で開始されて、フラグＦがセットされる（Ｂ２１０乃至Ｂ２１４）。
【００７９】
さて、ディスク１１へのデータＤ［ＣＭＤ０］の書き込みが進み、これにより時刻ｔ５において、ディスク１１への未書き込みのデータのブロック数Ｎ＿ＮＷＢが、Ｎ＿ＰＬＰに一致する０ｘ１００まで減少したものとする。すると、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であると判定されて（Ｂ２０５のＹｅｓ）、ホストにステータスＳ［ＣＭＤ０］が報告される（Ｂ２１７）。ディスク１１へのデータＤ［ＣＭＤ０］の書き込みは、ステータスＳ［ＣＭＤ０］の報告の後も続けられる。図５に示される例では、ディスク１１へのデータＤ［ＣＭＤ０］の書き込みは、時刻ｔ６で完了する。
【００８０】
ここで、図５に示される例と異なり、時刻ｔ５よりも後で且つ時刻ｔ６よりも前に、主電源の遮断が発生したものとする。この時点におけるディスク１１に未書き込みのデータのブロック数は、０ｘ１００（Ｎ＿ＰＬＰ）以下である。したがってＣＰＵ１８４は、ディスク１１に未書き込みのデータの全てを、第２のキャッシュ１８５ｂのＰＬＰ空き領域にセーブすることができる（Ｂ３０２）。
【００８１】
図６は、本実施形態において、シーケンシャルライトのための３つのライトコマンドＣＭＤ１，ＣＭＤ２及びＣＭＤ３が順に受領された場合の動作の概要を説明するための図である。図６において、時刻ｔ１１乃至ｔ２４の間には、次のような関係
ｔ１１＜ｔ１２＜ｔ１３＜ｔ１４＜ｔ１５＜ｔ１６＜ｔ１７＜ｔ１８＜ｔ１９＜ｔ２０＜ｔ２１＜ｔ２２＜ｔ２３＜ｔ２４
があるものとする。
【００８２】
ライトコマンドＣＭＤ１は、例えば、ＬＢＡ＝０ｘ０００から始まる、ブロック数が０ｘ４００の領域（つまり、０ｘ０００乃至０ｘ３ＦＦの範囲の領域）に、データＤ［ＣＭＤ１］を書くことを指定する。ライトコマンドＣＭＤ２は、例えば、ＬＢＡ＝０ｘ４００から始まる、ブロック数が０ｘ４００の領域（つまり、０ｘ４００乃至０ｘ７ＦＦの範囲の領域）に、データＤ［ＣＭＤ２］を書くことを指定する。ライトコマンドＣＭＤ３は、ＬＢＡ＝０ｘ８００から始まる、ブロック数が０ｘ４００の領域（つまり、０ｘ８００乃至０ｘＢＦＦの範囲の領域）に、データＤ［ＣＭＤ３］を書くことを指定する。この場合、以下に述べるように、ライトコマンドＣＭＤ１，ＣＭＤ２及びＣＭＤ３が順次実行されることにより、０ｘ０００乃至０ｘＢＦＦの範囲の領域に、データがシーケンシャルに書き込まれる。
【００８３】
まず、コマンドバッファ１８６ｂにライトコマンドが存在しない状態で、時刻ｔ１１において、ホストからのライトコマンドＣＭＤ１がＨＤＣ１８２によって受領されて、コマンドバッファ１８６ｂに格納されたものとする。この場合、ライトコマンドＣＭＤ１の受領が確認されたならば（Ｂ２０１のＹｅｓ）、データＤ［ＣＭＤ１］の受領が時刻ｔ１２で開始される（Ｂ２０２）。図６の例では、データＤ［ＣＭＤ１］の受領は、時刻ｔ１４で完了する。
【００８４】
さて、データＤ［ＣＭＤ１］の受領が開始されると、ＰＬＰ空き領域のブロック数Ｎ＿ＰＬＰが、ＣＰＵ１８４によってチェックされる（Ｂ２０３）。この例では、Ｎ＿ＰＬＰが０ｘ１００であるものとする。続いて、Ｎ＿ＮＷＢがチェックされる（Ｂ２０４）。このとき、ディスク１１へのデータＤ［ＣＭＤ１］の書き込みは開始されておらず、したがってＮ＿ＮＷＢは０ｘ４００である。また、ディスク１１への他のデータの書き込みも行われていない。つまり、Ｎ＿ＮＷＢはＮ＿ＰＬＰ以下でなく（Ｂ２０５のＮｏ）、フラグＦはリセットされている（Ｂ２０６のＮｏ）。この場合、ディスク１１へのデータＤ［ＣＭＤ１］の書き込みが、時刻ｔ１３で開始されて、フラグＦがセットされる（Ｂ２１０乃至Ｂ２１４）。
【００８５】
さて、ディスク１１へのデータＤ［ＣＭＤ１］の書き込み（つまり、０ｘ０００乃至０ｘ３ＦＦの範囲の領域へのデータＤ［ＣＭＤ１］の書き込み）が、時刻ｔ１５においてＬＢＡ＝０ｘ２ＦＦまで進んだものとする。この場合、Ｎ＿ＮＷＢは、Ｎ＿ＰＬＰに一致する０ｘ１００まで減少する。すると、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であると判定されて（Ｂ２０５のＹｅｓ）、ホストにステータスＳ［ＣＭＤ１］が報告される（Ｂ２１７）。このとき、ブロック数が０ｘ１００のＰＬＰ領域が、管理テーブル１８６ａを用いてライトコマンドＣＭＤ１に対応付けて予約される。この場合、Ｎ＿ＰＬＰは０ｘ１００から０ｘ０００に減少する。ディスク１１へのデータＤ［ＣＭＤ１］の書き込みは、ステータスＳ［ＣＭＤ１］の報告の後も続けられる。
【００８６】
ここで、ステータスＳ［ＣＭＤ１］の報告を受けてホストからＨＤＤに次のライトコマンドＣＭＤ２が発行された結果、当該ライトコマンドＣＭＤ２が時刻ｔ１６でＨＤＣ１８２によって受領されたものとする。この場合、ライトコマンドＣＭＤ２の受領が確認されたならば（Ｂ２０１のＹｅｓ）、データＤ［ＣＭＤ２］の受領が時刻ｔ１７で開始される（Ｂ２０２）。図６の例では、データＤ［ＣＭＤ２］の受領は、時刻ｔ１８で完了する。
【００８７】
さて、データＤ［ＣＭＤ２］の受領が開始されると、ＰＬＰ空き領域のブロック数Ｎ＿ＰＬＰが、ＣＰＵ１８４によってチェックされる（Ｂ２０３）。このとき、Ｎ＿ＰＬＰは０ｘ０００である。続いて、Ｎ＿ＮＷＢがチェックされる（Ｂ２０４）。このとき、ディスク１１へのデータＤ［ＣＭＤ２］の書き込みは開始されておらず、したがってＮ＿ＮＷＢは０ｘ４００である。つまり、Ｎ＿ＮＷＢはＮ＿ＰＬＰ以下でない（Ｂ２０５のＮｏ）。また、ディスク１１へのデータＤ［ＣＭＤ１］の書き込み中であり、フラグＦがセットされている（Ｂ２０６のＹｅｓ）。この場合、ディスク１１へのデータＤ［ＣＭＤ２］の書き込み、及びステータスＳ［ＣＭＤ２］の報告は待たされる。
【００８８】
やがて、時刻ｔ１９において、ディスク１１へのデータＤ［ＣＭＤ１］の書き込みが完了したものとする（Ｂ２０７のＹｅｓ）。この場合、ライトコマンドＣＭＤ１に対応付けられたＰＬＰ領域（つまり、ブロック数が０ｘ１００のＰＬＰ領域）の予約が解除され、且つフラグＦがリセットされる（Ｂ２０８及びＢ２０９）。これにより、Ｎ＿ＰＬＰは、０ｘ０００から０ｘ１００に増加する。
【００８９】
すると、コマンドバッファ１８６ｂからライトコマンドＣＭＤ２が選択される（Ｂ２１０乃至Ｂ２１２）。そして、ディスク１１へのデータＤ［ＣＭＤ２］の書き込みが、時刻ｔ１９で開始されて、フラグＦが再びセットされる（Ｂ２１３及びＢ２１４）。
【００９０】
このように本実施形態によれば、ＬＢＡ＝０ｘ０００からＬＢＡ＝０ｘ３ＦＦまでの範囲の領域へのデータＤ［ＣＭＤ１］の書き込みの完了と同時に、ＬＢＡ＝０ｘ４００からＬＢＡ＝０ｘ７ＦＦまでの範囲の領域へのデータＤ［ＣＭＤ２］の書き込みを開始することができる。よってデータＤ［ＣＭＤ２］の書き込みを開始するのに、ディスクの回転待ち時間を必要としない。
【００９１】
これに対して従来技術では、時刻ｔ１９でステータスＳ［ＣＭＤ１］が報告される。この場合、データＤ［ＣＭＤ２］の受領は時刻ｔ１９よりも後に開始され、ディスク１１へのデータＤ［ＣＭＤ２］の書き込みは更に遅れて開始される。よって従来技術では、データＤ［ＣＭＤ２］の書き込みを開始するのに、ディスクの回転待ち時間を必要とする。
【００９２】
さて、ディスク１１へのデータＤ［ＣＭＤ２］の書き込み（つまり、０ｘ４００乃至０ｘ７ＦＦの範囲の領域へのデータＤ［ＣＭＤ２］の書き込み）が、時刻ｔ２０においてＬＢＡ＝０ｘ６ＦＦまで進んだものとする。この場合、Ｎ＿ＮＷＢは、Ｎ＿ＰＬＰに一致する０ｘ１００まで減少する。すると、Ｎ＿ＮＷＢがＮ＿ＰＬＰ以下であると判定されて（Ｂ２０５のＹｅｓ）、ホストにステータスＳ［ＣＭＤ２］が報告される（Ｂ２１７）。このとき、ブロック数が０ｘ１００のＰＬＰ領域が、管理テーブル１８６ａを用いてライトコマンドＣＭＤ２に対応付けて予約される。この場合、Ｎ＿ＰＬＰは０ｘ１００から０ｘ０００に再び減少する。ディスク１１へのデータＤ［ＣＭＤ２］の書き込みは、ステータスＳ［ＣＭＤ２］の報告の後も続けられる。
【００９３】
ここで、ステータスＳ［ＣＭＤ２］の報告を受けてホストからＨＤＤに次のライトコマンドＣＭＤ３が発行された結果、当該ライトコマンドＣＭＤ３が時刻ｔ２１でＨＤＣ１８２によって受領されたものとする。この場合、ライトコマンドＣＭＤ３の受領が確認されたならば（Ｂ２０１のＹｅｓ）、データＤ［ＣＭＤ３］の受領が時刻ｔ２２で開始される（Ｂ２０２）。図６の例では、データＤ［ＣＭＤ３］の受領は、時刻ｔ２３で完了する。
【００９４】
さて、データＤ［ＣＭＤ３］の受領が開始されると、ＰＬＰ空き領域のブロック数Ｎ＿ＰＬＰが、ＣＰＵ１８４によってチェックされる（Ｂ２０３）。このとき、Ｎ＿ＰＬＰは０ｘ０００である。続いて、Ｎ＿ＮＷＢがチェックされる（Ｂ２０４）。このときＮ＿ＮＷＢはＮ＿ＰＬＰ以下でなく（Ｂ２０５のＮｏ）、フラグＦはセットされている（Ｂ２０６のＹｅｓ）。この場合、ディスク１１へのデータＤ［ＣＭＤ３］の書き込み、及びステータスＳ［ＣＭＤ３］の報告は待たされる。
【００９５】
やがて、時刻ｔ２４において、ディスク１１へのデータＤ［ＣＭＤ２］の書き込みが完了したものとする（Ｂ２０７のＹｅｓ）。この場合、ライトコマンドＣＭＤ２に対応付けられたＰＬＰ領域（つまり、ブロック数が０ｘ１００のＰＬＰ領域）の予約が解除され、且つフラグＦがリセットされる（Ｂ２０８及びＢ２０９）。これにより、Ｎ＿ＰＬＰは、０ｘ０００から０ｘ１００に増加する。
【００９６】
すると、コマンドバッファ１８６ｂからライトコマンドＣＭＤ３が選択される（Ｂ２１０乃至Ｂ２１２）。そして、ディスク１１へのデータＤ［ＣＭＤ３］の書き込みが、時刻ｔ２４で開始されて、フラグＦがセットされる（Ｂ２１３及びＢ２１４）。
【００９７】
このように本実施形態によれば、ＬＢＡ＝０ｘ４００からＬＢＡ＝０ｘ７ＦＦまでの範囲の領域へのデータＤ［ＣＭＤ２］の書き込みの完了と同時に、ＬＢＡ＝０ｘ８００からＬＢＡ＝０ｘＢＦＦまでの範囲の領域へのデータＤ［ＣＭＤ３］の書き込みを開始することができる。よってデータＤ［ＣＭＤ３］の書き込みを開始するのに、ディスクの回転待ち時間を必要としない。
【００９８】
前記実施形態においてバックアップ電源１５０は、ＳＰＭ１３の逆起電力を用いて電力を生成する。しかし、バックアップ電源１５０が、主電源により印加される電源電圧によって充電されるキャパシタを用いて電力を生成しても良い。
【００９９】
以上説明した少なくとも１つの実施形態によれば、書き込みデータを保証しつつ、ホストへのステータスの報告時期を早めることができる。
【０１００】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０１】
１１…ディスク、１２…ヘッド、１８…コントローラ、１５０…バックアップ電源、１８２…ハードディスクコントローラ（ＨＤＣ）、１８３…バッファメモリ、１８３ａ…第１のキャッシュ（揮発性キャッシュ）、１８４…ＣＰＵ（メインコントローラ）、１８５…不揮発性メモリ、１８５ａ…第２のキャッシュ（不揮発性キャッシュ）、１８６…コントロールメモリ、１８６ａ…管理テーブル、１８６ｂ…コマンドバッファ
【図１】
2016021133.tif 000003
【図２】
2016021133.tif 000004
【図３】
2016021133.tif 000005
【図４】
2016021133.tif 000006
【図５】
2016021133.tif 000007
【図６】
2016021133.tif 000008