(57)【要約】      （修正有）【課題】効率的にリード処理が可能な磁気ディスク装置及びリード方法を提供する。【解決手段】磁気ディスク装置１は、ディスク１０と、ディスク１０からデータをリードするヘッド１５と、リードデータを記録するバッファメモリ８０と、管理テーブルを有し、リードゲートが開かれたタイミングで、第１データの第１情報を記録した管理テーブルの第１領域の第１領域番号と、リードゲートが開かれたときに付与した第１データの第１通し番号と、第１データの第１カウント値とを第１領域に記録するシステムコントローラ１３０とを備える。【選択図】図１
2019040656.tif 000002
【特許請求の範囲】
【請求項１】
ディスクと、
前記ディスクからデータをリードするヘッドと、
データを記録するメモリと、
テーブルを有し、リードゲートが開かれたタイミングで、第１データの第１情報を記録した前記テーブルの第１領域の第１領域番号と、リードゲートが開かれたときに付与した前記第１データの第１通し番号と、前記第１データの第１カウント値とを前記第１領域に記録するコントローラとを備える、磁気ディスク装置。
【請求項２】
前記コントローラは、前記第１通し番号の直前の第２通し番号の第２データの第２情報を記録した前記テーブルの第２領域の第２領域番号を前記第１領域に記録する、請求項１に記載の磁気ディスク装置。
【請求項３】
前記コントローラは、前記第１通し番号の直後の第３通し番号の第３データの第３情報を記録した前記テーブルの第３領域の第３領域番号を前記第１領域に記録する、請求項２に記載の磁気ディスク装置。
【請求項４】
前記コントローラは、前記メモリに前記第１データを転送するタイミングで、前記テーブルにおいて、前記第２領域に記録した前記第２データの第２カウント値に前記第１カウント値を組み合せる、請求項２又は３に記載の磁気ディスク装置。
【請求項５】
前記コントローラは、前記メモリに前記第１データを転送するタイミングで、前記テーブルにおいて、前記第１通し番号が最も新しいか新しくないかを判定し、最も新しいと判定した場合、前記第２領域に記録した前記第１通し番号を更新する、請求項４に記載の磁気ディスク装置。
【請求項６】
前記コントローラは、前記メモリに前記第１データを転送するタイミングで、前記テーブルにおいて、前記第１通し番号が最も古くないと判定し、且つ最も新しくないと判定した場合、前記第２領域に記録した前記第１通し番号を前記第３通し番号に変更し、前記第３領域に記録した前記第１通し番号を前記第２通し番号に変更する、請求項３に記載の磁気ディスク装置。
【請求項７】
前記コントローラは、リードゲートが開かれたタイミングで、前記第１データを記録した前記第１領域に空いていないことを示す第１フラグを記録する、請求項１に記載の磁気ディスク装置。
【請求項８】
前記コントローラは、前記メモリに前記第１データを転送するタイミングで、前記第１領域に空いていることを示す第２フラグを記録する、請求項４に記載の磁気ディスク装置。
【請求項９】
ディスクと、
前記ディスクからデータをリードするヘッドと、
データを記録するメモリと、
リードゲートが開かれたときに付与した第１データの第１通し番号と前記第１データの第１カウント値とを記録した第１領域と、前記第１データの直前にリードゲートが開かれた第２データの第２通し番号と前記第２データの第２カウント値とを記録した第２領域とを有するテーブルを有し、前記メモリに前記第１データを転送するタイミングで、前記テーブルにおいて、前記第２カウント値に前記第１カウント値を組み合せる、コントローラとを備える磁気ディスク装置。
【請求項１０】
ディスクと、前記ディスクからデータをリードするヘッドと、データを記録するメモリと、テーブルを有するコントローラとを備える磁気ディスク装置に適用されるリード方法であって、
リードゲートが開かれたタイミングで、第１データの第１情報を記録した前記テーブルの第１領域の第１領域番号と、リードゲートが開かれたときに付与された前記第１データの第１通し番号と、前記第１データの第１カウント値とを第１領域に記録する、リード方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、磁気ディスク装置及びリード方法に関する。
【背景技術】
【０００２】
磁気ディスク装置は、ディスクからリードしたリードデータに誤り訂正（Error Checking and Correcting:ECC）処理を実行する。例えば、磁気ディスク装置は、リードデータに低密度パリティチェック（Low Density Parity Check : LDPC）を用いて復号化処理を実行する。磁気ディスク装置は、復号化処理に失敗したデータ（エラーデータ）について、何度も繰り返し復号化処理を実行し得る。この場合、磁気ディスク装置は、エラーデータよりも先にエラーのないデータをバッファメモリ転送する処理（Out Of Order）を実行する。近年、磁気ディスク装置のOut Of Order処理において、エラーデータがバッファメモリに転送されるまでの時間（レイテンシ）が増大している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１５／００４９７７１号明細書
【特許文献２】米国特許７７３０２３８号明細書
【特許文献３】米国特許７１３９８７３号明細書
【特許文献４】米国特許８６３８５２０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の実施形態が解決しようとする課題は、効率的にリード処理が可能な磁気ディスク装置及びリード方法を提供することである。
【課題を解決するための手段】
【０００５】
本実施形態に係る磁気ディスク装置は、ディスクと、前記ディスクからデータをリードするヘッドと、データを記録するメモリと、テーブルを有し、リードゲートが開かれたタイミングで、第１データの第１情報を記録した前記テーブルの第１領域の第１領域番号と、リードゲートが開かれたときに付与した第１データの第１通し番号と、第１データの第１カウント値とを前記第１領域に記録するコントローラとを備えている。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態に係る磁気ディスク装置の構成を示すブロック図である。
【図２】図２は、実施形態に係る磁気ディスク装置のリード系の構成例を示すブロック図である。
【図３Ａ】図３Ａは、実施形態に係る管理テーブルの一例を示す概要図である。
【図３Ｂ】図３Ｂは、実施形態に係る管理テーブルの一例を示す概要図である。
【図３Ｃ】図３Ｃは、実施形態に係る管理テーブルの一例を示す概要図である。
【図４Ａ】図４Ａは、実施形態に係る管理テーブルの一例を示す概要図である。
【図４Ｂ】図４Ｂは、実施形態に係る管理テーブルの一例を示す概要図である。
【図５】図５は、実施形態に係るリードゲートがアサートされた時のリード処理のフローチャートである。
【図６】図６は、実施形態に係るリードデータがバッファメモリに転送された時のリード処理のフローチャートである。
【発明を実施するための形態】
【０００７】
以下、実施の形態について図面を参照して説明する。なお、図面は、一例であって、発明の範囲を限定するものではない。
【０００８】
（実施形態）  
図１は、実施形態に係る磁気ディスク装置１の構成を示すブロック図である。  
【０００９】
磁気ディスク装置１は、後述するヘッドディスクアセンブリ（ＨＤＡ）と、ドライバＩＣ２０と、ヘッドアンプ集積回路（以下、ヘッドアンプＩＣ、又はプリアンプ）３０と、揮発性メモリ７０と、バッファメモリ（バッファ）８０と、不揮発性メモリ９０と、１チップの集積回路であるシステムコントローラ１３０とを備える。また、磁気ディスク装置１は、ホストシステム（ホスト）１００と接続される。
【００１０】
ＨＤＡは、磁気ディスク（以下、ディスク）１０と、スピンドルモータ（ＳＰＭ）１２と、ヘッド１５を搭載しているアーム１３と、ボイスコイルモータ（ＶＣＭ）１４とを有する。ディスク１０は、スピンドルモータ１２により回転する。アーム１３及びＶＣＭ１４は、アクチュエータを構成している。アクチュエータは、ＶＣＭ１４の駆動により、アーム１３に搭載されているヘッド１５をディスク１０上の目標位置まで移動制御する。ディスク１０およびヘッド１５は、２つ以上の数が設けられてもよい。
【００１１】
ディスク１０は、その記録領域に、ユーザから利用可能な記録領域１０ａと、システム管理に必要な情報をライトするシステムエリア１０ｂとが割り当てられている。  
【００１２】
ヘッド１５は、スライダを本体として、当該スライダに実装されているライトヘッド１５Ｗ、及びリードヘッド１５Ｒを備える。ライトヘッド１５Ｗは、ディスク１０上にデータをライトする。リードヘッド１５Ｒは、ディスク１０上のデータトラックに記録されているデータをリードする。ヘッド１５は、少なくとも１つのセクタを含むブロック単位でデータをディスク１０上にライトし、ブロック単位でデータをリードする。ここで、セクタは、ディスク１０にライト又はディスク１０からリードするデータの最小の単位のデータである。  
【００１３】
ドライバＩＣ２０は、システムコントローラ１３０（詳細には、後述するＭＰＵ４０）の制御に従って、ＳＰＭ１２およびＶＣＭ１４の駆動を制御する。
【００１４】
ヘッドアンプＩＣ３０は、リードアンプ及びライトドライバを備えている。リードアンプは、ディスク１０からリードされたリード信号を増幅して、システムコントローラ１３０（詳細には、後述するリード／ライト（Ｒ／Ｗ）チャネル５０）に出力する。ライトドライバは、Ｒ／Ｗチャネル５０から出力されるライトデータに応じたライト電流をヘッド１５に出力する。
【００１５】
揮発性メモリ７０は、電力供給が断たれると保存しているデータが失われる半導体メモリである。揮発性メモリ７０は、磁気ディスク装置１の各部での処理に必要なデータ等を格納する。揮発性メモリ７０は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）、又はＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）である。
【００１６】
バッファメモリ８０は、磁気ディスク装置１とホスト１００との間で送受信されるデータ等を一時的に記録する半導体メモリである。なお、バッファメモリ８０は、揮発性メモリ７０と一体に構成されていてもよい。バッファメモリ８０は、例えば、ＤＲＡＭ、ＳＲＡＭ（Static Random Access Memory）、ＳＤＲＡＭ、ＦｅＲＡＭ（Ferroelectric Random Access memory）、又はＭＲＡＭ（Magnetoresistive Random Access Memory）等である。
【００１７】
不揮発性メモリ９０は、電力供給が断たれても保存しているデータを記録する半導体メモリである。不揮発性メモリ９０は、例えば、ＮＯＲ型またはＮＡＮＤ型のフラッシュＲＯＭ（Flash Read Only Memory :ＦＲＯＭ）である。
【００１８】
システムコントローラ（コントローラ）１３０は、例えば、複数の素子が単一チップに集積されたSystem-on-a-Chip(ＳｏＣ)と称される大規模集積回路（ＬＳＩ）を用いて実現される。システムコントローラ１３０は、マイクロプロセッサ（ＭＰＵ）４０と、リード／ライト（Ｒ／Ｗ）チャネル５０と、ハードディスクコントローラ（ＨＤＣ）６０と、を含む。システムコントローラ１３０は、ドライバＩＣ２０、ヘッドアンプＩＣ３０、揮発性メモリ７０、バッファメモリ８０、不揮発性メモリ９０、及びホストシステム１００に接続されている。
【００１９】
ＭＰＵ４０は、磁気ディスク装置１の各部を制御するメインコントローラである。ＭＰＵ４０は、ドライバＩＣ２０を介してＶＣＭ１４を制御し、ヘッド１５の位置決めを行なうサーボ制御を実行する。また、ＭＰＵ４０は、ディスク１０へのデータのライト動作を制御すると共に、ホスト１００から転送されるライトデータの保存先を選択する。ＭＰＵ４０は、ファームウェアに基づいて処理を実行する。ＭＰＵ４０は、磁気ディスク装置１の各部に接続されている。ＭＰＵ４０は、Ｒ／Ｗチャネル５０、及びＨＤＣ６０に接続されている。
【００２０】
Ｒ／Ｗチャネル５０は、ＭＰＵ４０からの指示に応じて、リードデータ及びライトデータの信号処理を実行する。以下、リードデータ及びライトデータを単にデータを称する場合もある。Ｒ／Ｗチャネル５０は、リードデータの信号品質を測定する回路、又は機能を有している。例えば、Ｒ／Ｗチャネル５０は、ディスク１０からリードされたリードデータに対する誤り訂正（又は、エラー訂正）処理（Error Checking and Correcting:ECC）を実行する機能を有している。また、Ｒ／Ｗチャネル５０は、信号処理、例えば、復号化処理に失敗したデータ（以下、エラーデータと称する）よりも先にエラーのないデータをバッファメモリ転送する処理（Out Of Order）する機能も有している。Ｒ／Ｗチャネル５０は、ヘッドアンプＩＣ３０、ＭＰＵ４０、及びＨＤＣ６０に接続されている。
【００２１】
Ｒ／Ｗチャネル５０は、誤り訂正部５１０を備えている。誤り訂正部５１０は、データに誤り訂正処理を実行する。例えば、誤り訂正部５１０は、低密度パリティチェック(Low Density Parity Check : LDPC)復号化処理を実行する。誤り訂正部５１０は、ディスク１０からリードしたリードデータにＬＤＰＣ復号化処理を実行する。なお、誤り訂正部５１０は、後述するＨＤＣ６０に備えられていてもよい。
【００２２】
ＨＤＣ６０は、ＭＰＵ４０からの指示に応じて、ホスト１００とＲ／Ｗチャネル５０との間のデータ転送を制御する。例えば、ＨＤＣ６０は、ホスト１００から転送されるユーザデータをバッファメモリ８０に一旦格納し、Ｒ／Ｗチャネル５０に出力する。また、ＨＤＣ６０は、ディスク１０からリードしたリードデータをバッファメモリ８０に一旦格納し、ホスト１００に出力する。ＨＤＣ６０は、ＭＰＵ４０、Ｒ／Ｗチャネル５０、揮発性メモリ７０、バッファメモリ８０、不揮発性メモリ９０、及びホスト１００に接続されている。
【００２３】
以下で、ヘッド１５、ヘッドアンプＩＣ３０、及びコントローラ１３０において、ディスク１０からリードしたリードデータをホスト１００に転送する系をリード系と称する。  
【００２４】
図２は、実施形態に係る磁気ディスク装置１のリード系の構成例を示すブロック図である。なお、図２には、説明に必要な構成のみを図示している。
【００２５】
システムコントローラ１３０は、リード系として、誤り訂正部５１０と、ディスク制御部６１０と、バッファ制御部６２０と、ホスト制御部６３０とを備えている。  
【００２６】
誤り訂正部５１０は、メモリ５１３を備えている。誤り訂正部５１０は、メモリ５１３に、管理テーブルＴＢを有している。管理テーブルＴＢは、復号化処理を実行し、バッファメモリ８０に転送するリードデータの情報（以下、単に、リードデータ情報と称する）を含む。誤り訂正部５１０は、リードゲートがアサート（assert）されたタイミングと、復号化処理が完了したリードデータをバッファメモリ８０に転送するタイミングとに動的に管理テーブルＴＢを更新する。なお、「リードゲートがアサートされる」ことを「リードゲートが開く」と表現する場合や、「リードゲートが発行される」と表現する場合もある。
【００２７】
ディスク制御部６１０は、Ｒ／Ｗチャネル５０とＨＤＣ６０との連携体であり、Ｒ／Ｗチャネル５０とＨＤＣ６０との間のデータ転送を制御する。例えば、ディスク制御部６１０は、誤り訂正部５１０で復号化処理が完了したリードデータをブロック単位、又はセクタ単位でバッファ制御部６２０に出力する。バッファ制御部６２０は、ＨＤＣ６０とバッファメモリ８０との間のデータ転送を制御する。例えば、バッファ制御部６２０は、ディスク制御部６１０から入力されたリードデータをバッファメモリ８０に一旦格納し、バッファメモリ８０に格納したデータをホスト制御部６３０に出力する。また、バッファ制御部６２０は、バッファメモリ８０内に記録したデータを管理する。一例として、バッファ制御部６２０は、バッファメモリ８０内に記録したデータのブロック単位、又はセクタ単位でカウントし、データに紐付けられた情報からディスク１０からリードされた順番と復号化処理が完了した順番との整合性等を管理する。ホスト制御部６３０は、ＨＤＣ６０とホスト１００との間のデータ転送を制御する。例えば、ホスト制御部６３０は、バッファ制御部６２０から入力されたリードデータをブロック単位、又はセクタ単位でホスト１００に出力する。
【００２８】
図３Ａ、図３Ｂ、及び図３Ｃは、実施形態に係る管理テーブルＴＢの一例を示す概要図である。図３Ａ乃至図３Ｃは、リードゲートがアサートされたタイミングにおけるリードデータ情報の一連のリード処理の一例を示している。図３Ａ乃至図３Ｃにおいて、「ＥＮＴＲＹ」は、リードデータ情報を記録する管理テーブルＴＢの記録領域（以下、エントリと称する）を示す領域番号（以下、エントリ番号と称する）を示し、「ＶＬＤ」は、エントリが空いていない（以下、有効（Vaild）と表現する）か、空いている（以下、無効（non-valid）と表現する）かを示し、「ＴＡＧ」は、リードゲートがアサートされたときに付与するリードデータの順番（通し番号）を示す。「ＶＬＤ」は、有効である場合、有効であることを示すフラグ（第１フラグ）、例えば、１であり、無効である場合、無効であることを示すフラグ（第２フラグ）、例えば、０である。「ＴＡＧ」は、例えば、磁気ディスク装置１が起動してから初めてリードゲートがアサートされたデータには１が付与され、その後、リードゲートがアサートされる度に１ずつ加算される。また、「Ｆ＿ＥＮＴ」は、現在対象としているリードデータのＴＡＧ（以下、対象ＴＡＧと称する）の直前のＴＡＧに対応するリードデータ情報が記録されたエントリのエントリ番号を示し、「Ｌ＿ＥＮＴ」は、対象ＴＡＧの直後のＴＡＧに対応するリードデータ情報が記録されたエントリのエントリ番号を示し、「ＢＡＤＲ」は、リードデータを記録するバッファメモリ８０の記録領域のアドレス（又は、ポインタと称する場合もある）を示し、「Ｃ＿ＳＩＺＥ」は、バッファメモリ８０にリードデータを記録したときに、コントローラ１３０がカウントするリードデータのカウント値を示す。例えば、カウント値は、磁気ディスク装置１内で転送されるデータの単位、例えば、セクタ数（又は、ブロック数）である。一例として、Ｃ＿ＳＩＺＥは、各ＴＡＧのリードデータで１である。なお、コントローラ１３０は、カウントしたカウント値の総数（以下、カウント数と称する場合もある）をメモリ、例えば、不揮発性メモリ９０等に保持していてもよい。
【００２９】
管理テーブルＴＢは、リードデータ情報として、ＥＮＴＲＹと、ＶＬＤと、ＴＡＧと、Ｆ＿ＥＮＴと、Ｌ＿ＥＮＴと、ＢＡＤＲと、Ｃ＿ＳＩＺＥと、を含む。図示した例では、管理テーブルＴＢにおいて、エントリ番号２３、２９、及び３１のエントリが無効であるとものとする。管理テーブルＴＢは、所定のブロック単位（又は、セクタ単位）のリードデータのリードデータ情報を各エントリに記録する。なお、図３Ａ乃至図３Ｃにおいて、エントリは、エントリ番号２３、２９、及び３１の３つのみしか示していないが、３つ以上あってもよいし、３つより少なくともよい。また、管理テーブルＴＢは、リードデータ情報として、ＥＮＴＲＹ、ＶＬＤ、ＴＡＧ、Ｆ＿ＥＮＴ、Ｌ＿ＥＮＴ、ＢＡＤＲ、及びＣ＿ＳＩＺＥの全てを含んでいなくともよいし、これら以外の情報を含んでいてもよい。
【００３０】
リードゲートがアサートされた場合、コントローラ１３０は、例えば、エントリ番号２３のエントリに現在対象としているリードデータ（以下、対象リードデータと称する）、例えば、ＴＡＧ５０のリードデータのリードデータ情報を記録する。図３Ａに示すように、コントローラ１３０は、エントリ番号２３のエントリのＶＬＤを０から１に変更する。コントローラ１３０は、エントリ番号２３のエントリのＴＡＧに５０を記録する。コントローラ１３０は、ＴＡＧ５０の直前のＴＡＧのリードデータのリードデータ情報が管理テーブルＴＢ内にない場合、エントリ番号２３のエントリのＦ＿ＥＮＴにＮＵＬＬを記録する。コントローラ１３０は、ＴＡＧ５０の直後のＴＡＧのリードデータのリードデータ情報が管理テーブルＴＢ内にない場合、エントリ番号２３のエントリのＬ＿ＥＮＴにＮＵＬＬを記録する。コントローラ１３０は、例えば、エントリ番号２３のエントリのＢＡＤＲにＡＤＲ３を記録し、エントリ番号２３のエントリのＣ＿ＳＩＺＥに１を記録する。コントローラ１３０は、対象リードデータのＴＡＧ５０を管理テーブルＴＢ内で最も新しいＴＡＧとして保持する。また、管理テーブル内に他のリードデータのリードデータ情報を記録していない場合、コントローラ１３０は、ＴＡＧ５０を管理テーブルＴＢ内で最も古いＴＡＧとしても保持する。コントローラ１３０は、最も新しいＴＡＧや、最も古いＴＡＧの情報をメモリ、例えば、揮発性メモリ７０、バッファメモリ８０や、不揮発性メモリ９０に保持してもよい。
【００３１】
次に、リードゲートがアサートされた場合、コントローラ１３０は、例えば、エントリ番号２９のエントリに対象リードデータ、例えば、ＴＡＧ５１のリードデータのリードデータ情報を記録する。図３Ｂに示すように、コントローラ１３０は、エントリ番号２９のエントリのＶＬＤを０から１に変更する。コントローラ１３０は、エントリ番号２９のエントリのＴＡＧに５１を記録する。コントローラ１３０は、ＴＡＧ５１の直前のＴＡＧ５０のリードデータのリードデータ情報がエントリ番号２３のエントリに記録されているため、エントリ番号２９のエントリのＦ＿ＥＮＴに２３を記録する。また、コントローラ１３０は、ＴＡＧ５０の直後のＴＡＧ５１のリードデータのリードデータ情報がエントリ番号２９のエントリに記録されているため、エントリ番号２３のエントリのＬ＿ＥＮＴをＮＵＬＬから２９に変更する。コントローラ１３０は、例えば、エントリ番号２９のエントリのＢＡＤＲにＡＤＲ５を記録し、エントリ番号２９のエントリのＣ＿ＳＩＺＥに１を記録する。コントローラ１３０は、管理テーブルＴＢ内で最も新しいＴＡＧをＴＡＧ５０からＴＡＧ５１に変更する。また、コントローラ１３０は、ＴＡＧ５０を管理テーブルＴＢ内で最も古いＴＡＧとして保持する。
【００３２】
さらに、リードゲートがアサートされた場合、コントローラ１３０は、例えば、エントリ番号３１のエントリに対象リードデータ、例えば、ＴＡＧ５２のリードデータのリードデータ情報を記録する。図３Ｃに示すように、コントローラ１３０は、エントリ番号３１のエントリのＶＬＤを０から１に変更する。コントローラ１３０は、エントリ番号３１のエントリのＴＡＧに５２を記録する。コントローラ１３０は、ＴＡＧ５２の直前のＴＡＧ５１のリードデータのリードデータ情報がエントリ番号２９のエントリに記録されているため、エントリ番号３１のエントリのＦ＿ＥＮＴに２９を記録する。コントローラ１３０は、ＴＡＧ５２の直後のＴＡＧのリードデータのリードデータ情報が管理テーブルＴＢ内にない場合、エントリ番号３１のエントリのＬ＿ＥＮＴにＮＵＬＬを記録する。また、コントローラ１３０は、ＴＡＧ５１の直後のＴＡＧのリードデータのリードデータ情報がエントリ番号３１のエントリに記録されているため、エントリ番号２９のエントリのＬ＿ＥＮＴをＮＵＬＬから３１に変更する。コントローラ１３０は、例えば、エントリ番号３１のエントリのＢＡＤＲにＡＤＲ１８を記録し、エントリ番号３１のエントリのＣ＿ＳＩＺＥに１を記録する。コントローラ１３０は、管理テーブルＴＢ内で最も新しいＴＡＧをＴＡＧ５１からＴＡＧ５２を変更する。また、コントローラ１３０は、ＴＡＧ５０を管理テーブルＴＢ内で最も古いＴＡＧとして保持する。  
【００３３】
図示した例では、管理テーブルＴＢにおいてエントリ番号２３、２９、及び３１のエントリが無効であるとしたが、管理テーブルＴＢの全てのエントリが有効である場合、コントローラ１３０は、リード処理をエラー停止する。
【００３４】
図４Ａ及び図４Ｂは、管理テーブルＴＢの一例を示す概要図である。図４Ａ及び図４Ｂは、復号化処理が完了したリードデータをバッファメモリ８０に転送するタイミングにおけるリードデータ情報の一連のリード処理の一例を示している。  
【００３５】
例えば、図３Ｃに示すように管理テーブルＴＢのエントリ番号２３、２９、及び３１のエントリが有効である場合、コントローラ１３０は、エントリ番号２９のエントリにリードデータ情報を記録したＴＡＧ５１のリードデータの復号化処理を完了し、バッファメモリ８０にＴＡＧ５１のリードデータを転送する。コントローラ１３０は、バッファメモリ８０のアドレスＡＤＲ５の記録領域にＴＡＧ５１のリードデータを記録する。コントローラ１３０は、図４Ａに示すように、エントリ番号２９のエントリのＶＬＤを１から０に変更する。管理テーブルＴＢにおいてＴＡＧ５０の直後のＴＡＧがＴＡＧ５２になるため、コントローラ１３０は、図４Ａに示すように、ＴＡＧ５０のリードデータのリードデータ情報を記録したエントリ番号２３のエントリのＬ＿ＥＮＴを２９からＴＡＧ５２のリードデータのリードデータ情報を記録したエントリ番号の３１に変更する。管理テーブルＴＢにおいてＴＡＧ５２の直前のＴＡＧがＴＡＧ５０になるため、コントローラ１３０は、図４Ａに示すように、ＴＡＧ５２のリードデータのリードデータ情報を記録したエントリ番号３１のエントリのＦ＿ＥＮＴをＴＡＧ５０のリードデータのリードデータ情報を２９から記録したエントリ番号の２３に変更する。また、コントローラ１３０は、ＴＡＧ５０のリードデータのリードデータ情報を記録したエントリ番号２３のエントリのＣ＿ＳＩＺＥにバッファメモリ８０に転送したＴＡＧ５１のリードデータのリードデータ情報を記録したエントリ番号２９のエントリのＣ＿ＳＩＺＥを組み合せる（マージ）する。エントリ番号２３のエントリのＣ＿ＳＩＺＥにエントリ番号２９のエントリのＣ＿ＳＩＺＥをマージすることで、ＴＡＧ５０のリードデータをバッファメモリ８０に転送した場合に、コントローラ１３０は、ＴＡＧ５０のリードデータとＴＡＧ５１のリードデータとを連続的にバッファメモリ８０に転送したものとして処理できる。つまり、エントリ番号２３のエントリのＣ＿ＳＩＺＥにエントリ番号２９のエントリのＣ＿ＳＩＺＥをマージすることで、コントローラ１３０は、ディスク１０からリードした順番と復号化処理が完了した順番との整合性を維持できる。コントローラ１３０は、ＴＡＧ５２を管理テーブルＴＢ内で最も新しいＴＡＧとして保持する。また、コントローラ１３０は、ＴＡＧ５０を管理テーブルＴＢ内で最も古いＴＡＧとして保持する。
【００３６】
次に、コントローラ１３０は、エントリ番号３１のエントリにリードデータ情報を記録したＴＡＧ５２のリードデータの復号化処理を完了し、バッファメモリ８０にＴＡＧ５２のリードデータを転送する。コントローラ１３０は、バッファメモリ８０のアドレスＡＤＲ１８の記録領域にＴＡＧ５２のリードデータを記録する。コントローラ１３０は、図４Ｂに示すように、エントリ番号３１のエントリのＶＬＤを１から０に変更する。管理テーブルＴＢにおいてＴＡＧ５０の直後のＴＡＧのリードデータのリードデータ情報が管理テーブルＴＢ内にないため、コントローラ１３０は、図４Ｂに示すように、ＴＡＧ５０のリードデータのリードデータ情報を記録したエントリ番号２３のエントリのＬ＿ＥＮＴを３１からＮＵＬＬに変更する。また、コントローラ１３０は、ＴＡＧ５０のリードデータのリードデータ情報を記録したエントリ番号２３のエントリのＣ＿ＳＩＺＥにバッファメモリ８０に転送したＴＡＧ５２のリードデータのリードデータ情報を記録したエントリ番号３１のエントリのＣ＿ＳＩＺＥをマージする。エントリ番号２３のエントリのＣ＿ＳＩＺＥにエントリ番号３１のＣ＿ＳＩＺＥをマージすることで、ＴＡＧ５０のリードデータをバッファメモリ８０に転送した場合に、コントローラ１３０は、ＴＡＧ５０のリードデータ、ＴＡＧ５１のリードデータ、及びＴＡＧ５２のリードデータを連続的にバッファメモリ８０に転送したものとして処理できる。コントローラ１３０は、管理テーブルＴＢ内で最も新しいＴＡＧをＴＡＧ５２からＴＡＧ５０に変更する。また、コントローラ１３０は、ＴＡＧ５０を管理テーブルＴＢ内で最も古いＴＡＧとしても保持する。
【００３７】
図５は、実施形態に係るリードゲートがアサートされた時のリード処理のフローチャートである。  
【００３８】
リードゲートがアサートされた場合、コントローラ１３０は、管理テーブルＴＢの全てのエントリが有効か有効ではないか判定する（Ｂ５０１）。管理テーブルＴＢの全てのエントリが有効であると判定した場合（Ｂ５０１のＹＥＳ）、コントローラ１３０は、オーバーフローと判定する（Ｂ５０２）。例えば、管理テーブルＴＢの全てのエントリが有効であると判定した場合、コントローラ１３０は、オーバーフローと判定し、リード処理をエラー停止する。管理テーブルＴＢ内に１つでも有効なエントリがあると判定した場合（Ｂ５０１のＮＯ）、コントローラ１３０は、管理テーブルＴＢのエントリの内の無効なエントリの１つに対象リードデータのリードデータ情報を記録する（Ｂ５０３）。コントローラ１３０は、管理テーブルＴＢ内に対象ＴＡＧの直前のＴＡＧのリードデータ（以下、直前リードデータと称する）のリードデータ情報があるかないかを判定する（Ｂ５０４）。管理テーブルＴＢ内に対象ＴＡＧの直前リードデータのリードデータ情報があると判定した場合（Ｂ５０４のＹＥＳ）、コントローラ１３０は、対象リードデータのリードデータ情報を記録したエントリ（以下、対象エントリと称する）のＦ＿ＥＮＴに対象ＴＡＧの直前リードデータのリードデータ情報を記録したエントリ（以下、直前エントリと称する）のエントリ番号を記録する（Ｂ５０５）。コントローラ１３０は、直前エントリのＬ＿ＥＮＴに対象エントリのエントリ番号を記録し（Ｂ５０６）、Ｂ５０９の処理に進む。管理テーブルＴＢ内に直前リードデータのリードデータ情報がないと判定した場合（Ｂ５０４のＮＯ）、コントローラ１３０は、対象エントリのＦ＿ＥＮＴにＮＵＬＬを記録する（Ｂ５０７）。コントローラ１３０は、対象ＴＡＧを管理テーブルＴＢ内で最も古いＴＡＧとして保持する（Ｂ５０８）。コントローラ１３０は、対象エントリのＬ＿ＥＮＴにＮＵＬＬを記録する（Ｂ５０９。コントローラ１３０は、対象ＴＡＧを管理テーブルＴＢ内で最も新しいＴＡＧとして保持し（Ｂ５１０）、次のリードゲートがアサートされるのを待つ。
【００３９】
図６は、実施形態に係るリードデータがバッファメモリ８０に転送された時のリード処理のフローチャートである。  
【００４０】
対象リードデータがバッファメモリ８０に転送された場合、コントローラ１３０は、対象ＴＡＧが管理テーブル内で最も古いか古くないかを判定する（Ｂ６０１）。対象ＴＡＧが最も古くないと判定した場合（Ｂ６０１のＮＯ）、コントローラ１３０は、対象ＴＡＧが管理テーブルＴＢ内で最も新しいか新しくないかを判定する（Ｂ６０２）。対象ＴＡＧが管理テーブルＴＢ内で最も新しくないと判定した場合（Ｂ６０２のＮＯ）、コントローラ１３０は、直前エントリのＬ＿ＥＮＴを変更する（Ｂ６０３）。例えば、ＴＡＧが最も新しくないと判定した場合、コントローラ１３０は、直前エントリのＬ＿ＥＮＴを対象ＴＡＧの直後のＴＡＧのリードデータ（以下、直後リードデータと称する）のリードデータ情報を記録したエントリ（以下、直後エントリと称する）のエントリ番号に変更する。コントローラ１３０は、直後エントリのＦ＿ＥＮＴを変更（Ｂ６０４）し、Ｂ６０７の処理へ進む。例えば、コントローラ１３０は、直後エントリのＦ＿ＥＮＴを直前エントリのエントリ番号に変更し、Ｂ６０７の処理へ進む。
【００４１】
対象ＴＡＧが管理テーブルＴＢ内で最も新しいと判定した場合（Ｂ６０２のＹＥＳ）、コントローラ１３０は、直前エントリのＬ＿ＥＮＴにＮＵＬＬを記録する（Ｂ６０５）。コントローラ１３０は、管理テーブルＴＢ内で最も新しいＴＡＧを変更する（Ｂ６０６）。例えば、コントローラ１３０は、管理テーブルＴＢ内で最も新しいＴＡＧを対象ＴＡＧから対象ＴＡＧの直前のＴＡＧに変更する。コントローラ１３０は、直前エントリのＣ＿ＳＩＺＥを更新し（Ｂ６０７）、Ｂ６１０の処理へ進む。例えば、コントローラ１３０は、直前エントリのＣ＿ＳＩＺＥに対象エントリのＣ＿ＳＩＺＥをマージし、Ｂ６１０の処理へ進む。
【００４２】
対象ＴＡＧが管理テーブルＴＢ内で最も古いと判定した場合（Ｂ６０１のＹＥＳ）、コントローラ１３０は、直後エントリのＦ＿ＥＮＴにＮＵＬＬを記録する（Ｂ６０８）。コントローラ１３０は、対象エントリのＣ＿ＳＩＺＥをカウントする（Ｂ６０９）。コントローラ１３０は、管理テーブルＴＢ内で最も古いＴＡＧを変更する（Ｂ６１０）。例えば、コントローラ１３０は、管理テーブルＴＢ内で最も古いＴＡＧを対象ＴＡＧから対象ＴＡＧの直後のＴＡＧに変更する。コントローラ１３０は、対象エントリを無効にし（Ｂ６１１）、次のリードデータをバッファメモリ８０に転送するタイミングを待つ。例えば、コントローラ１３０は、対象エントリのＶＬＤを１から０に変更し、次のリードデータをバッファメモリ８０に転送するタイミングを待つ。
【００４３】
本実施形態によれば、磁気ディスク装置１は、リードゲートがアサートされたタイミングと、復号化処理が完了したリードデータをバッファメモリ８０に転送するタイミングとで動的に管理テーブルＴＢを更新する。磁気ディスク装置１は、リードゲートがアサートされたタイミングで、例えば、対象リードデータの通し番号（ＴＡＧ）と、対象ＴＡＧの直前のＴＡＧのリードデータの情報を記録したエントリのエントリ番号と、対象ＴＡＧの直後のＴＡＧのリードデータの情報を記録したエントリのエントリ番号と、対象リードデータを記録するバッファメモリ８０の記録領域のアドレスと、対象リードデータをバッファメモリ８０に記録したときにカウントするカウント値と、を管理テーブルＴＢの空いている記録領域（無効なエントリ）に記録する。磁気ディスク装置１は、対象ＴＡＧの直前のＴＡＧのリードデータの情報を記録したエントリのエントリ番号と対象ＴＡＧの直後のＴＡＧのリードデータの情報を記録したエントリのエントリ番号とにより、管理テーブルＴＢ内でリードデータ情報同士を紐付けしている。また、磁気ディスク装置１は、対象リードデータをバッファメモリ８０に転送するタイミングで、管理テーブルＴＢにおいて、対象エントリのＣ＿ＳＩＺＥを直前エントリのＣ＿ＳＩＺＥにマージする。このように管理テーブルＴＢにおいて対象エントリのＣ＿ＳＩＺＥを直前エントリのＣ＿ＳＩＺＥにマージすることで、磁気ディスク装置１は、古いＴＡＧのリードデータの復号化処理が完了していなかったとしても、復号化処理が完了したこの古いＴＡＧよりも新しいＴＡＧのリードデータをバッファメモリ８０に転送することができる。つまり、このように管理テーブルＴＢにおいて対象エントリのＣ＿ＳＩＺＥを直前エントリのＣ＿ＳＩＺＥにマージすることで、磁気ディスク装置１は、管理テーブルＴＢ内のエントリ数を抑制することができる。そのため、磁気ディスク装置１は、復号化処理に失敗したリードデータがバッファメモリ８０に転送されるまでの時間（レイテンシ）が増大したとしても、管理テーブルＴＢの容量を抑制することができる。すなわち、磁気ディスク装置１は、効率的にリード処理が可能である。
【００４４】
いくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４５】
１…磁気ディスク装置、１０…磁気ディスク、１０ａ…記録領域、１０ｂ…システムエリア、１２…スピンドルモータ（ＳＰＭ）、１３…アーム、１４…ボイスコイルモータ（ＶＣＭ）、１５…ヘッド、１５Ｗ…ライトヘッド、１５Ｒ…リードヘッド、２０…ドライバＩＣ、３０…ヘッドアンプＩＣ、４０…マイクロプロセッサ（ＭＰＵ）、５０…リード／ライト（Ｒ／Ｗ）チャネル、６０…ハードディスクコントローラ（ＨＤＣ）、７０…揮発性メモリ、８０…バッファメモリ、９０…不揮発性メモリ、１００…ホストシステム（ホスト）、１３０…システムコントローラ。
【図１】
2019040656.tif 000003
【図２】
2019040656.tif 000004
【図３Ａ】
2019040656.tif 000005
【図３Ｂ】
2019040656.tif 000006
【図３Ｃ】
2019040656.tif 000007
【図４Ａ】
2019040656.tif 000008
【図４Ｂ】
2019040656.tif 000009
【図５】
2019040656.tif 000010
【図６】
2019040656.tif 000011