(57)【要約】【課題】本発明の目的は、データ書込領域とエラー訂正符号書込領域を備えた複数の記憶領域を有する記憶媒体に、各記憶領域に対応したエラー訂正符号長のエラー訂正符号を記憶媒体のデータ書込領域の変更なく記憶可能にする記憶装置を提供することである。【解決手段】上記の課題を解決するため、記憶装置は、データ書込領域とエラー訂正符号書込領域を備えた複数の記憶領域を有する記憶媒体と、該記憶領域ごとのエラーレートに応じたエラー訂正符号長を記憶するエラー訂正符号長記憶メモリと、データが書き込まれる該記憶領域を特定し、特定した該記憶領域に対応するエラー訂正符号長を該エラー訂正符号長記憶メモリから参照して決定し、該データおよび決定した該エラー訂正符号長に基づいてエラー訂正符号を生成し、生成された該エラー訂正符号を該エラー訂正符号書込領域に記憶すると共に該データを該データ書込領域へ記憶し、該エラー訂正符号記憶領域を超えた該エラー訂正符号を該エラー訂正符号長記憶メモリへ記憶する制御部とを有する。【選択図】図１
2009238320.tif 000002
【特許請求の範囲】
【請求項１】
データ書込領域とエラー訂正符号書込領域を備えた複数の記憶領域を有する記憶媒体と、
該記憶領域ごとのエラーレートに応じたエラー訂正符号長を記憶するエラー訂正符号長記憶メモリと、
データが書き込まれる該記憶領域を特定し、特定した該記憶領域に対応するエラー訂正符号長を該エラー訂正符号長記憶メモリから参照して決定し、該データおよび決定した該エラー訂正符号長に基づいてエラー訂正符号を生成し、生成された該エラー訂正符号を該エラー訂正符号書込領域に記憶すると共に該データを該データ書込領域へ記憶し、該エラー訂正符号記憶領域を超えた該エラー訂正符号を該エラー訂正符号長記憶メモリへ記憶する制御部と
を有することを特徴とする記憶装置。
【請求項２】
該エラー訂正符号長記憶メモリは、該データを記憶する該記憶媒体の記憶領域と、該記憶領域に対応するエラー訂正符号長と、該データおよび該エラー訂正符号長に基づいて生成されたエラー訂正符号とを符号長テーブルとして記憶することを特徴とする請求項１に記載の記憶装置。
【請求項３】
該制御部は、該記憶媒体に記憶する前のテストデータと該記憶媒体に記憶した後のテストデータとが異なるビットの数であるエラービット数に基づいて該テストデータをエラー訂正するエラー訂正符号長を決定することを特徴とする請求項１に記載の記憶装置。
【請求項４】
該エラー訂正符号長テーブルは、該エラービット数が所定値以上である記憶領域を使用不可領域として設定することを特徴とする請求項３に記載の記憶装置。
【請求項５】
該記憶媒体は複数の記憶領域をグループ化した１以上のグループを有しており、
該制御部は、該グループに属する複数の記憶領域に対し同一のエラー訂正符号長を設定することを特徴とする請求項１に記載の記憶装置。
【請求項６】
データ書込領域とエラー訂正符号書込領域とを備えた複数の記憶領域を有する記憶媒体と、該記憶領域ごとのエラーレートに応じたエラー訂正符号長を記憶するエラー訂正符号長記憶メモリとを有する記憶装置の記憶方法であって、
データが書き込まれる該記憶媒体の記憶領域を特定し、
特定した該記憶領域に対応するエラー訂正符号長をエラー訂正符号長記憶メモリから参照して決定し、
該データおよび該エラー訂正符号長に基づいてエラー訂正符号生成部によりエラー訂正符号を生成し、
生成された該エラー訂正符号を該記憶領域のエラー訂正符号書込領域に記憶すると共に該データを該記憶領域のデータ書込領域へ記憶し、
該エラー訂正符号記憶領域を超えた該エラー訂正符号を該エラー訂正符号長記憶メモリへ記憶する
ことを特徴とする記憶装置の記憶方法。
【請求項７】
該エラー訂正符号長記憶メモリは、該データを記憶する該記憶媒体の記憶領域と、該記憶領域に対応するエラー訂正符号長と、該データおよび該エラー訂正符号長に基づいて生成されたエラー訂正符号とを符号長テーブルとして記憶することを特徴とする請求項６に記載の記憶装置の記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの記憶装置およびその記憶方法に関するものである。
【背景技術】
【０００２】
磁気ディスク装置などの記憶装置は、記録データを読み取る際に読み取りエラーが発生することを想定し、エラー訂正符号によるエラー訂正を行っている。エラー訂正符号は、データを記憶装置へ書き込む際に生成され、データと共に記憶装置の記憶媒体へ書き込まれる。
【０００３】
エラー訂正符号の符号長が長いほどエラーレートの高いデータのエラー訂正が可能となる。しかし、エラー訂正符号長を必要以上に長くすると、本来記憶すべきデータの記憶領域が小さくなる。ここでエラーレートとは、データに含まれるエラー量の割合のことである。
【０００４】
エラー訂正符号長を最適化する方法として、記憶媒体の分割された領域ごとに複数の段階で信頼性を設定し、記憶データの重要度に応じて記憶領域を選んで記憶する技術が知られている。また、セクタデータがデータ領域に書き込まれる磁気ディスクと、パリティセクタが格納される磁気ディスク以外の格納手段とを具備する技術が知られている。
【特許文献１】特開２００３−３３１５２７号公報
【特許文献２】特開２００２−２１６４２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、データ書込領域とエラー訂正符号書込領域を備えた複数の記憶領域を有する記憶媒体に、各記憶領域に対応したエラー訂正符号長のエラー訂正符号を記憶媒体のデータ書込領域の変更なく記憶可能にする記憶装置を提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決するため、記憶装置は、データ書込領域とエラー訂正符号書込領域を備えた複数の記憶領域を有する記憶媒体と、該記憶領域ごとのエラーレートに応じたエラー訂正符号長を記憶するエラー訂正符号長記憶メモリと、データが書き込まれる該記憶領域を特定し、特定した該記憶領域に対応するエラー訂正符号長を該エラー訂正符号長記憶メモリから参照して決定し、該データおよび決定した該エラー訂正符号長に基づいてエラー訂正符号を生成し、生成された該エラー訂正符号を該エラー訂正符号書込領域に記憶すると共に該データを該データ書込領域へ記憶し、該エラー訂正符号記憶領域を超えた該エラー訂正符号を該エラー訂正符号長記憶メモリへ記憶する制御部とを有する。
【発明の効果】
【０００７】
本発明によれば、記憶媒体の記憶領域ごとのエラーレートに応じたエラー訂正符号を生成しこれを記憶媒体上のエラー訂正符号書込領域およびエラー訂正符号長記憶メモリに分割して記憶する。これにより、記憶媒体の記憶領域を変更することなく、記憶媒体の記憶領域ごとに最適なエラー訂正符号長を有するエラー訂正符号を記憶しておくことができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について説明する。
［装置全体構成］
図１は記憶装置９０の全体構成図であり、記憶装置９０の一例であるハイブリッドハードドライブの構成を表している。ハイブリッドハードドライブは通常の磁気記録装置に磁気記録以外の記憶領域を実装したものである。記憶装置９０は不揮発メモリ１００、揮発メモリ１０２、メモリコントローラ１０４、制御部１１０、エラー訂正符号生成部１０８、エラー訂正部１０６、記憶媒体１１６、および磁気ヘッド１１４で構成されている。後述するエラー訂正符号生成部１０８およびエラー訂正部１０６の機能は、制御部１１０の機能の一部としてもよい。
【０００９】
記憶媒体１１６はデータやエラー訂正符号等を記憶する。通常記憶媒体は複数のディスクを有しており、磁気ヘッド１１４はそれぞれのディスクごとに存在する。ディスクを同心円状の記憶領域に分割したものをトラックといい、トラックを放射状に等分したものをセクタという。また、同じ大きさのトラックがディスクの数だけ同筒状に集まったものをシリンダという。記憶媒体のデータの参照は磁気ヘッドの番号、シリンダの番号、およびセクタの番号を指定することにより行う。それぞれの記憶領域の長さは各記憶領域へのアクセスを容易にするため同じにすることが望ましい。記憶領域の長さを可変にすると、各記憶領域へのアクセス制御が複雑になるためである。
【００１０】
また、各記憶領域はデータを書き込むためのデータ書込領域と、エラー訂正符号を書き込むためのエラー訂正符号書込領域を有する。データ書込領域およびエラー訂正符号書込領域は固定長である。データ書込領域に書き込まれるデータのデータ長は固定であり、エラー訂正符号書込領域に書き込まれるエラー訂正符号のデータ長は可変である。エラー訂正符号のデータ長がエラー訂正符号書込み領域よりも短い場合は、余った領域をデータ等の記憶領域として使ってもよい。
【００１１】
また、各記憶領域はデータのエラー検出を行うＣＲＣデータを記憶する領域を有してもよい。ＣＲＣデータのデータ長はデータのデータ長によって決まる。したがって本実施例の通りデータのデータ長が固定の場合、ＣＲＣデータのデータ長も固定となる。
【００１２】
不揮発メモリ１００は記憶領域のひとつであり、フラッシュメモリなど記憶装置の電源供給を止めても記憶したデータを保持するメモリである。不揮発メモリ１００はエラー訂正符号長テーブル１０１および符号長決定テーブル２００を記憶している。不揮発メモリ１００はエラー訂正符号長記憶メモリとして機能する。
【００１３】
揮発メモリ１０２は上位装置１２０からの書き込みデータや読み出し命令、上位装置１２０への読み出しデータ等を一時的に保持する。揮発メモリ１０２に保持された情報は記憶装置への電源供給が止まると消滅する。
【００１４】
メモリコントローラ１０４は不揮発メモリ１００へのデータの書き込みまたは不揮発メモリ１００からのデータの読み出しを行う。
【００１５】
エラー訂正符号生成部１０８は記憶媒体１１６にデータを書き込む際にエラー訂正符号を生成する。生成されたエラー訂正符号は、記憶媒体１１６や不揮発メモリ１００に書き込まれる。エラー訂正符号生成部１０８はまた、ＣＲＣデータ生成機能を有している。
【００１６】
一時メモリ領域１０９は上位装置１２０から書き込まれたデータ等を保持する。エラー訂正符号生成部１０８は保持されたデータに対してエラー訂正符号データやＣＲＣデータの生成を行う。エラー訂正符号生成部１０８は制御部１１０の機能の一部として実装してもよい。
【００１７】
エラー訂正部１０６は後述する記憶媒体１１６からデータを読み出す際にＥＣＣデータを用いてエラー訂正を行う。ここでＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）データとはエラー訂正符号のことである。
【００１８】
エラー訂正部１０６はまた、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）データによる誤り検出機能を有する。ＣＲＣデータとは、記憶媒体１１６から読み出したデータが書き込み時と異なっていることを検出するためのデータである。
【００１９】
一時メモリ領域１０７は記憶媒体１１６から読み出したデータ、ＥＣＣデータ、ＣＲＣデータ等を保持する。保持されたデータはエラー訂正部１０６によりエラー訂正処理やエラー検出処理に用いられる。エラー訂正部１０６は、制御部１１０の機能の一部として実装してもよい。
【００２０】
制御部１１０はメモリコントローラ１０４、エラー訂正部１０６、エラー訂正符号生成部１０８等を制御する。高速メモリ１１２は制御部１１０に実装されたメモリであり、制御部１１０の処理に必要なファームウェア等を格納する。制御部１１０はＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの演算装置により実現することができる。
【００２１】
磁気ヘッド１１４は記憶媒体１１６の所定の位置にデータを書き込んだり、所定の位置からデータを読み込んだりするのに用いる。
【００２２】
上位装置１２０は記憶装置９０に対してデータの書き込み命令や読み込み命令を行うホストシステムである。上位装置１２０は記憶装置９０の外部に存在する。
【００２３】
記憶装置９０が上位装置１２０から送信された書き込み命令を受信すると、制御部１１０は、書き込み命令に書かれたアドレス情報に基づいて、データが書き込まれる記憶媒体１１６のアドレスを特定する。上位装置１２０から送信される書き込み命令は、それが書き込み命令であること、データの書き込み先アドレス、書き込みデータの長さなどの情報を有している。制御部１１０は、エラー訂正符号長テーブルに基づいて、データの書き込み先アドレスに対応するエラー訂正符号長を参照し、エラー訂正符号生成部１０８に通知する。エラー訂正符号生成部１０８は、通知されたエラー訂正符号長に基づいて書き込みデータのエラー訂正符号を生成する。制御部１１０は書き込みデータを記憶媒体の記憶領域におけるデータ書込領域へ記憶すると共に、エラー訂正符号を記憶領域のエラー訂正符号書込領域に記憶する。データ書込領域およびエラー訂正符号書込領域は固定長である。制御部１１０はさらに、エラー訂正符号書込領域を超えるエラー訂正符号を不揮発メモリ１００に記憶する。
【００２４】
記憶媒体１１６の記憶領域は固定長である。このため、記憶媒体１１６へのアクセス制御を複雑にすることなく、記憶媒体の記憶領域ごとに最適なエラー訂正符号長を有するエラー訂正符号を記憶しておくことができる。さらに、不揮発メモリ１００におけるエラー訂正符号長テーブル１０１の記憶容量を小さくすることができる。
【００２５】
記憶装置９０が上位装置１２０からデータの読み出し命令を受けると、制御部１１０は読み出し命令に対応する記憶媒体１１６の記憶領域からデータおよびエラー訂正符号の固定長部分を読み出し、それをエラー訂正部１０６に送信する。読み出し命令はデータの読み出し先アドレス情報、読み出しデータの長さなどの情報を有している。制御部１１０は読み出し先アドレス情報に対応するエラー訂正符号の可変長部分をエラー訂正符号長テーブル１０１から読み出し、エラー訂正部１０６に送信する。エラー訂正部１０６は受信したエラー訂正符号を用いてデータのエラー訂正を行う。制御部１１０はデータを上位装置１２０に送信する。これにより、読み出し命令されたデータを最適なエラー訂正符号で訂正し、上位装置へ送信することができる。
【００２６】
上述の通り、制御部１１０はエラー訂正符号を記憶媒体１１６とエラー訂正符号長テーブル１０１へ分割して書き込んでいる。この場合、エラー訂正部１０６は記憶媒体１１６のエラー訂正符号およびエラー訂正符号長テーブル１０１のエラー訂正符号を読み込んで結合する。エラー訂正部１０６は結合後のエラー訂正符号を用いてデータのエラー訂正を行うことにより、上記と同様に読み出し命令されたデータを最適なエラー訂正符号で訂正し、上位装置へ送信することができる。
［エラー訂正符号長の決定］
記憶媒体１１６のセクタごとのエラー訂正符号は、記憶媒体１１６にデータを書き込む際に付加される。したがって、各セクタのエラー訂正符号長は、記憶媒体１１６にデータを書き込む前に決定している必要がある。記憶媒体１１６のデータのアドレスは、セクタ単位で定めることができる。ここで、セクタは記憶媒体１１６の記憶領域の名称のひとつである。
【００２７】
エラー訂正符号長の決定は記憶媒体１１６の各セクタに対しデータの書き込みおよび読み出し処理を行い、書き込んだデータと読み込んだデータとの比較によりセクタごとのエラーレートを求めることによりおこなう。ここではエラーレートを書き込みデータ長に対するエラービット数として説明する。エラービット数とは、書き込んだデータと読み込んだデータとを比較した場合に値が異なっているビットの数をいう。
【００２８】
図２はあるエラービット数を有するデータをエラー訂正するのに必要なエラー訂正符号長を決定するための符号長決定テーブル２００である。符号長決定テーブル２００は、エラービット数２１０と、それに対応するエラー訂正符号長２１２により構成されている。
【００２９】
符号長決定テーブル２００は、高速メモリ１１２や不揮発メモリ１００などの不揮発領域に記憶されている。制御部１１０は、符号長決定テーブル２００に従い、記憶媒体１１６の各セクタのエラービット数２１０に対応するエラー訂正符号長２１２を決定する。また、図２の通りデータのエラービット数２１０が０であっても、最低限のデータ訂正ができるようにエラー訂正符号長２１２の最小値を決めてもよい。また、セクタのエラービット数２１０が符号長決定テーブル２００の最大値を超えた場合、このセクタは使用不可セクタとしてもよい。ここではデータ長を固定長とし、エラー訂正符号長を可変長としている。エラー訂正符号長は、データ長とエラービット数との比率であるエラーレートに応じて決定してもよい。
【００３０】
図３はエラー訂正符号長を決めるための第一のフローチャートである。
【００３１】
制御部１１０はエラービット数を求めるためのテストデータを生成し（Ｓ１００）、記憶媒体１１６の１つのセクタに生成したテストデータを書き込み（Ｓ１０２）、このセクタへ書き込んだテストデータを読み込み（Ｓ１０４）、書き込んだデータと読み込んだデータとの比較をする（Ｓ１０６）。ステップＳ１００で生成されるテストデータは何種類かあり、比較していないテストデータがある場合は（Ｓ１０８、ＮＯ）残りのテストデータについて同様の処理を行う。すべてのテストデータについて比較が完了している場合は（Ｓ１０８、ＹＥＳ）もっともエラービット数の多かったテストデータに対応するエラー訂正符号長をエラー訂正符号長テーブルに登録する（Ｓ１１０）。以上の処理をセクタごとに実行し、その実行結果をエラー訂正符号長テーブルに登録する。図３のステップＳ１１０において、ＥＣＣ長とはエラー訂正符号長のことである。
【００３２】
テストデータを複数用意するのは、テストデータごとにデータのマッチングが取れない確率が異なる可能性があるからである。制御部１１０が生成するテストデータはどのようなものであってもよい。また、テストデータの書き込みまたは読み出しの際に温度条件を変え、記憶媒体１１６や磁気ヘッド１１４の温度による影響を考慮してエラー訂正符号長を決定してもよい。
【００３３】
図４はエラー訂正符号長を決めるための第二のフローチャートである。
【００３４】
制御部１１０は各セクタにおいて、固定長のデータに対し、エラー訂正符号長を徐々に長くしていきながら記憶媒体１１６への書き込みおよび読み出しを行う。制御部１１０は正しくデータの読み出しができた時点のエラー訂正符号長を、このセクタのエラー訂正符号長としてエラー訂正符号長テーブルに登録する。
【００３５】
制御部１１０は初期値として処理対象のセクタのエラー訂正符号長ｎを３とする（Ｓ２００）。制御部１１０はテストデータを生成し（Ｓ２０２）、生成したテストデータに対応するＣＲＣデータを生成するとともに、ｎバイトのエラー訂正符号を生成するようエラー訂正符号生成部１０８に指示する（Ｓ２０４）。
【００３６】
制御部１１０は記憶媒体１１６の処理対象のセクタにデータを書き込み（Ｓ２０８）、書き込んだデータを読み出す（Ｓ２１０）。制御部１１０はエラー訂正部１０６に対し、読み出したデータをエラー訂正符号でエラー訂正処理し、さらにエラー訂正後のデータに対してＣＲＣデータにより誤り検出処理を行うよう指示する（Ｓ２１２）。データに誤りがあると判断された場合（Ｓ２１４、ＹＥＳ）、ｎが９より小さければ（Ｓ２２０、ＹＥＳ）、ｎを１大きくし（Ｓ２２４）、誤り検出処理を再度実行する。
【００３７】
制御部１１０はデータに誤りが無く（Ｓ２１４、ＮＯ）、すべてのテストデータを実行している場合は（Ｓ２１６、ＹＥＳ）現在のｎの値をこのセクタのエラー訂正符号長としてエラー訂正符号長テーブルに登録する（Ｓ２１８）。すべてのテストデータを実行していない場合は（Ｓ２１６、ＮＯ）再度テストデータ生成（Ｓ２０２）から処理する。
【００３８】
制御部１１０はエラー訂正符号長ｎが９以上の場合は（Ｓ２２０、ＮＯ）このセクタを使用不可セクタとして後述するエラー訂正符号長テーブルに登録する（Ｓ２２２）。例えばエラー訂正符号長として数字ではなく文字列をエラー訂正符号長テーブルに登録する。これにより上位装置１２０から書き込み対象のセクタを指定した時点で、実際にデータを書き込む前にそのセクタが使用不可であることを判断することができる。
【００３９】
テストデータを複数用意するのは、テストデータごとにデータのマッチングが取れない確率が異なる可能性があるためである。また、テストデータの書き込みまたは読み出しの際に温度条件を変え、記憶媒体１１６や磁気ヘッド１１４の温度による影響を考慮してエラー訂正符号長を決定してもよい。
【００４０】
図４において、エラー訂正符号長の決定を、セクタ単位ではなくトラック単位、ヘッド単位またはシリンダ単位で行うこともできる。セクタよりも大きな記憶領域単位でエラー訂正符号長を決定することにより、後述するエラー訂正符号長テーブルにエラー訂正符号を書き込む際の制御部１１０の負荷を軽減することができる。シリンダ単位のように、複数のセクタを含む記憶領域単位をグループと呼ぶ。
［エラー訂正符号長テーブルの構成］
記憶媒体１１６は通常複数のディスクより構成される。各ディスクにはそれぞれ磁気ヘッド１１４がある。ディスクを同心円状の領域に分割したものをトラックといい、トラックを放射状に等分したものをセクタという。また、同じ大きさのトラックがディスクの数だけ同筒状に集まったものをシリンダという。このように記憶媒体１１６の記憶領域は階層構造となっている。それぞれのシリンダ、磁気ヘッド、セクタに固有の番号を割り当てたものをシリンダ番号、ヘッド番号、セクタ番号という。記憶媒体１１６の任意のセクタはシリンダ番号、ヘッド番号、およびセクタ番号から特定することができる。なお、記憶媒体１１６に存在するすべてのセクタに通し番号をつけることにより、セクタ番号のみで任意のセクタを特定することもできる。
【００４１】
図５はセクタ単位でエラー訂正符号長を決定した場合の、エラー訂正符号長テーブル１０１ａの構成図である。
【００４２】
列５００はヘッド番号をあらわしている。列５００の１行目から６行目にはヘッド番号“１”が、列５００の７行目から９行目にはヘッド番号“２”が記憶されている。ヘッドは記憶媒体１１６のディスクごとに存在するので、エラー訂正符号長テーブル１０１ａの場合、記憶媒体１１６は少なくとも２枚のディスクを有することがわかる。
【００４３】
列５０２はシリンダ番号をあらわしている。列５０２の１行目から３行目にはヘッド番号“１”に対応するシリンダ番号“１”が、列５０２の４行目から６行目にはヘッド番号“１”に対応するシリンダ番号“２”が記憶されている。列５０２の７行目から９行目にはヘッド番号“２”に対応するシリンダ番号“１”が記憶されている。シリンダはディスクごとの同心円状の領域である。エラー訂正符号長テーブル１０１ａの場合、記憶媒体１１６は１枚のディスクに少なくとも２つのシリンダ領域を有することが分かる。
【００４４】
列５０４はセクタ番号をあらわしている。列５０４の１行目から３行目、４行目から６行目、７行目から９行目には各シリンダ番号に対応したセクタ番号“１”、“２”、“３”が記憶されている。セクタは各シリンダを放射上に等分した領域である。エラー訂正符号長テーブル１０１ａの場合、記憶媒体１１６は１つのシリンダに少なくとも３つのセクタ領域を有することが分かる。
【００４５】
列５０８は各セクタに割り当てられたＥＣＣ長をあらわしている。例えばヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”の記憶領域のデータをエラー訂正するのに必要なＥＣＣ長は３となる。一方、ヘッド番号“２”、シリンダ番号“１”、セクタ番号“３”の記憶領域のＥＣＣ長は“Ｅ”である。これは、ヘッド番号“２”、シリンダ番号“１”、セクタ番号“３”の記憶領域が書き込み不可領域であることをあらわしている。各領域のＥＣＣ長は図３または図４の処理にしたがって計算され、記憶領域ごとに列５０８に記憶される。
【００４６】
列５０９は各セクタに割り当てられたＥＣＣ長および書き込みデータを用いてエラー訂正符号生成部１０８により生成されたＥＣＣデータの一部をあらわしている。エラー訂正符号生成部１０８により生成されたＥＣＣデータは、後述の通り記憶媒体１１６の記憶領域とエラー訂正符号長テーブル１０１ａの列５０９とに分割して記憶することができる。ヘッド番号“２”、シリンダ番号“１”、セクタ番号“３”に対応するＥＣＣデータは“ＮＵＬＬ”となっている。これは、このセクタが書き込み不可領域であるためＥＣＣデータが存在しないことを表している。
【００４７】
エラー訂正符号長テーブル１０１ａを用いることにより、制御部１１０は記憶媒体１１６のすべてのセクタに対する列５０８のＥＣＣ長および列５０９のＥＣＣデータを別個に設定することができる。ここでＥＣＣデータとはエラー訂正符号のことであり、ＥＣＣ長とはエラー訂正符号長のことである。
【００４８】
図６はシリンダ単位でエラー訂正符号長を決定した場合の、エラー訂正符号長テーブル１０１ｂの構成図である。
【００４９】
列６００はヘッド番号をあらわしている。列６００にはヘッド番号“１”および“２”が記憶されている。ヘッドは記憶媒体１１６のディスクごとに存在する。エラー訂正符号長テーブル１０１ｂの場合、記憶媒体１１６は少なくとも２枚のディスクを有することが分かる。
【００５０】
列６０２はシリンダ番号をあらわしている。列６０２にはシリンダ番号“１”、“２”が記憶されている。シリンダはディスクごとの同心円状の領域であり、エラー訂正符号長テーブル１０１ｂに対応する記憶媒体１１６は１枚のディスクに２つのシリンダ領域を有する。
【００５１】
列６０４はセクタ番号をあらわしている。列６０４にはセクタ番号“１”、“２”、“３”が記憶されている。セクタは各シリンダを放射上に等分した領域である。エラー訂正符号長テーブル１０１ｂの場合、記憶媒体１１６は１つのシリンダに３つのセクタ領域を有することが分かる。
【００５２】
列６０８は各シリンダに割り当てられたＥＣＣ長をあらわしている。例えばヘッド番号“１”、シリンダ番号“１”の記憶領域のデータをエラー訂正するのに必要なＥＣＣ長は列６０４のセクタ番号にかかわらず４Ｂｙｔｅとなる。各シリンダのＥＣＣ長の決め方は以下の通りである。例えば、制御部１１０は図３または図４の処理に基づいてヘッド番号“１”、シリンダ番号“１”に属するセクタ“１”、“２”、“３”のＥＣＣ長をそれぞれ求める。そしてＥＣＣ長の最大値が４Ｂｙｔｅであった場合、ヘッド“１”、シリンダ“１”に対応するそれぞれのセクタのＥＣＣ長をすべて４Ｂｙｔｅとする。これにより、各セクタのＥＣＣ長をシリンダ単位で最適化することができる。
【００５３】
一方、ヘッド番号“２”、シリンダ番号“１”に属する各セクタのＥＣＣ長は“Ｅ”である。これはヘッド番号“２”、シリンダ番号“１”に属する各セクタが書き込み不可領域であることをあらわしている。ヘッド番号“２”、シリンダ番号“１”に属するセクタのうち一つでも書き込み不可領域がある場合、同一シリンダ内の他のセクタも書き込み不可領域とするのが望ましい。また、同一シリンダ内の各セクタにおけるＥＣＣ長は同一なので、各シリンダの先頭セクタ番号に対応する行にのみＥＣＣ長を記憶しても良い。例えば列６０８の１行目、４行目、７行目にのみＥＣＣ長を記憶してもよい。これによりＥＣＣ長を記憶するための記憶領域を削減することができる。
【００５４】
列６０９は各セクタに割り当てられたＥＣＣ長および書き込みデータを用いてエラー訂正符号生成部１０８により生成されたＥＣＣデータの一部をあらわしている。エラー訂正符号生成部１０８により生成されたＥＣＣデータは、記憶媒体１１６の記憶領域とエラー訂正符号長テーブル１０１ｂの列６０９とに分割して記憶される。
【００５５】
エラー訂正符号長の決定は、シリンダ単位に限らず、トラック単位、ヘッド単位で行うこともできる。セクタよりも上位階層である記憶領域単位でエラー訂正符号長を決定することにより、制御部１１０はセクタごとにエラー訂正符号長を変更する必要が無くなる。この結果、制御部１１０はエラー訂正符号生成処理を簡略化することができる。簡略化の理由については後述する。
【００５６】
図７は、所定の固定長を有するＥＣＣデータの一部を記憶媒体１１６に記憶し、固定長を超える長さのＥＣＣデータの残りの部分を不揮発メモリ１００に記憶した場合のデータ構成図である。エラー訂正符号生成部１０８の一時メモリ領域１０９には、書き込まれたデータ７００と、データ７００に対応するＥＣＣデータ７０２が保持されているとする。記憶媒体１１６に記憶するＥＣＣデータの一部を固定部、不揮発メモリ１００に記憶するＥＣＣデータの残りの部分を可変部とする。
【００５７】
記憶媒体１１６の各記憶領域は、データを記憶するためのデータ書込領域５２０と、所定の長さのＥＣＣデータを記憶するためのエラー訂正符号書込領域５２２を有する。不揮発メモリ１００の記憶領域５２４には、エラー訂正符号書込み領域５２２に書ききれなかったＥＣＣデータの残りの部分が記憶される。ここで記憶領域５２４は、不揮発メモリ１００のＥＣＣ長テーブル１０１ａの列５０９または１０１ｂの列６０９である。一時メモリ領域１０９のデータ７００はデータ書込み領域５２０に記憶される。一時メモリ領域１０９のＥＣＣデータ７０２のうち、エラー訂正符号書込み領域５２２に書込み可能な長さのＥＣＣデータはエラー訂正符号書込み領域５２２に記憶される。
【００５８】
エラー訂正符号書込み領域５２２を超えるＥＣＣデータの一部は先頭ビットから順にエラー訂正符号書込み領域５２２に記憶されるようにしてもよい。またＥＣＣデータの残りのビットはＥＣＣ長テーブル１０１の記憶領域５２４に記憶される。
【００５９】
ＥＣＣ長を決める際にエラーが発生しない場合でも、その後の使用によりエラーが発生することがある。必要最小限のＥＣＣデータを記憶媒体１１６に記憶させておくことにより、ＥＣＣ長の設定時にはエラーが生じなかった記憶領域において、データの信頼性を向上させることができる。また、記憶媒体１１６に記憶するエラー訂正符号書込み領域５２２を固定長とすることにより、記憶媒体１１６へのアクセス制御が複雑になることも無い。また、エラー訂正符号書込領域５２２に記憶されたＥＣＣデータの一部を記憶媒体１１６に分割して記憶することにより、不揮発メモリ１００におけるＥＣＣデータの残りの部分の記憶容量を小さくすることができる。
［データの書き込み］
図８は記憶媒体１１６にデータを記憶すると共に、データの記憶位置に対応するＥＣＣデータを不揮発メモリ１００に記憶する場合のデータの書き込みフローである。図５のＥＣＣ長テーブル１０１ａの１行目から３行目、または図６のＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合を例にデータおよびＥＣＣデータの書き込み処理を説明する。
【００６０】
上位装置１２０はデータを書き込む前に書き込み命令を出し、記憶媒体１１６の記憶領域であるセクタを指定する。したがって、ＥＣＣ長テーブル１０１ａの１行目から３行目、またはＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合、ＥＣＣ長テーブル１０１ａまたは１０１ｂの１行目であるヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタが指定されると、制御部１１０はデータを記憶媒体に書き込むための準備として磁気ヘッド１１４をそのセクタへ移動する（Ｓ３００）。
【００６１】
ＥＣＣ長テーブル１０１ａまたは１０１ｂを記憶する不揮発メモリ１００の書き込み速度が遅い場合、セクタ単位で不揮発メモリ１００に書き込むのは次のセクタの処理の遅延の原因となる。そこで、ＥＣＣデータの書き込み処理の効率化のため、制御部１１０はＥＣＣ長テーブル１０１ａまたは１０１ｂからのＥＣＣ長の読み出し、およびＥＣＣ長テーブルへの書き込み処理をシリンダ単位で行う。したがって、ＥＣＣ長テーブル１０１ａの１行目から３行目のセクタを書込み対象とした場合、列５０８の１行目から３行目のＥＣＣ長を不揮発メモリ１００から読み出し、揮発メモリ１０２に記憶させる。一方、ＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合、ＥＣＣ長はシリンダ単位で同一なので、制御部１１０はシリンダ“１”の先頭セクタであるセクタ“１”のＥＣＣ長のみを不揮発メモリ１００から読み出し、揮発メモリ１０２に記憶させる（Ｓ３０２）。
【００６２】
上位装置１２０からデータの書き込み命令を受けて記憶装置９０が書き込み可能な状態になると、制御部１１０は上位装置１２０に対し書き込み許可信号を送る。上位装置１２０は書き込み許可信号を受けると、書き込みデータを記憶装置９０に送信する。制御部１１０は上位装置１２０から送信された書き込みデータを揮発メモリ１０２に書き込む。制御部１１０はＥＣＣデータ作成対象の書き込みデータをエラー訂正符号生成部１０８に送信する。したがって、ＥＣＣ長テーブル１０１ａの１行目から３行目、またはＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合、制御部１１０はヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタへ書き込むデータを揮発メモリ１０２から読み出し、エラー訂正符号生成部１０８の一時メモリ領域１０９に書き込む（Ｓ３０４）。
【００６３】
制御部１１０はエラー訂正符号生成部１０８の一時メモリ領域１０９に書き込んだデータに対応するＥＣＣ長を揮発メモリ１０２から読み出す。ＥＣＣ長テーブル１０１ａの１行目から３行目のセクタを書込み対象とした場合、制御部１１０はヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタに対応するＥＣＣ長３Ｂｙｔｅを揮発メモリ１０２から読み出し、エラー訂正符号生成部１０８の一時メモリ領域１０９に書き込む。ＥＣＣ長はセクタごとに異なる値となる。このため制御部１１０はデータを書き込むセクタが変わるごとにＥＣＣ長を揮発メモリ１０２から読み出し、一時メモリ領域１０９に書き込む必要がある。
【００６４】
一方、ＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合、同一シリンダ内であればＥＣＣ長は同じである。このため制御部１１０は同一シリンダであれば、データを書き込むセクタが変わっても再度ＥＣＣ長を揮発メモリ１０２から読み出し、一時メモリ領域１０９に書き込まなくてもよい。したがって、この例においては、制御部１１０はヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタに対応するＥＣＣ長４Ｂｙｔｅを一時メモリ領域１０９に書き込めば、同一シリンダのセクタ番号“２”に対応するＥＣＣ長を再度書き込まずに４Ｂｙｔｅとして処理を進めることができる（Ｓ３０６）。
【００６５】
エラー訂正符号生成部１０８は一時メモリ領域１０９に書き込まれたデータに対し、一時メモリ領域１０９に書き込まれたＥＣＣ長を有するＥＣＣデータの生成処理を行う。ＥＣＣデータの生成処理はＥＣＣ長によって異なる。またエラー訂正符号生成部１０８は生成したＥＣＣデータを一時メモリ領域１０９に書き込む。ＥＣＣ長テーブル１０１ａの１行目から３行目のセクタを書込み対象とした場合、エラー訂正符号生成部１０８は書き込みデータに対し、ヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタに対応するＥＣＣ長が３ＢｙｔｅのＥＣＣデータを生成し、一時メモリ領域１０９に書き込む（Ｓ３０８）。
【００６６】
エラー訂正符号生成部１０８は書き込みデータに対応するＣＲＣデータを生成し、エラー訂正符号生成部１０８の一時メモリ領域１０９に書き込む（Ｓ３１０）。
【００６７】
制御部１１０はエラー訂正符号生成部１０８の一時メモリ領域１０９に書き込んだデータ、よびＣＲＣデータを記憶媒体１１６に書き込む。ＥＣＣ長テーブル１０１ａの１行目から３行目のセクタを書込み対象とした場合、制御部１１０は一時メモリ領域１０９に書き込んだデータ、よびＣＲＣデータをこのデータに対応する記憶媒体１１６の記憶領域であるヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタに書き込む。
【００６８】
また制御部１１０はあらかじめ設定したエラー訂正符号書込領域５２２のサイズと、生成し一時メモリ領域１０９に保持しているＥＣＣ長とを比較し、サイズが等しいかＥＣＣ長の方が小さい場合は生成したＥＣＣデータを記憶媒体１１６に書き込む。エラー訂正符号書き込み領域５２２のサイズが３Ｂｙｔｅであるとすると、ＥＣＣ長テーブル１０１ａの１行目セクタを書込み対象とした場合、制御部１１０は生成したＥＣＣ長３ＢｙｔｅのＥＣＣデータをヘッド番号“１”、シリンダ番号“１”、セクタ番号“１”のセクタにあるエラー訂正符号書込領域５２２に書き込む。
【００６９】
一方、制御部１１０はエラー訂正符号書込領域５２２のサイズに対し、ＥＣＣ長のほうが大きい場合には、生成し一時メモリ領域１０９に保持しているＥＣＣデータをエラー訂正符号書込領域５２２の大きさに等しいＢｙｔｅ数の固定部と、その残りの部分である可変部に分割する。エラー訂正符号書込領域５２２のサイズが３Ｂｙｔｅであるとすると、ＥＣＣ長テーブル１０１ａの２行目のセクタを書込み対象とした場合、制御部１１０は生成した４ＢｙｔｅのＥＣＣデータを３Ｂｙｔｅの固定部と１Ｂｙｔｅの可変部に分割する。制御部１１０は固定部をヘッド番号“１”、シリンダ番号“１”、セクタ番号“２”のセクタにあるエラー訂正符号書込領域５２２に書き込む。また制御部１１０は可変部をヘッド番号“１”、シリンダ番号“１”、セクタ番号“２”に対応する可変部として揮発メモリ１０２に書き込む（Ｓ３１２）。
【００７０】
同一シリンダ内にあるすべてのセクタに対して上記の処理が終了している場合、制御部１１０はセクタごとの可変部を不揮発メモリ１００のＥＣＣ長テーブル１０１に書き込む。ＥＣＣ長テーブル１０１ａの１行目から３行目、またはＥＣＣ長テーブル１０１ｂの１行目から３行目のセクタを書込み対象とした場合について説明する。ＥＣＣ長テーブル１０１ａまたは１０１ｂの１行目から３行目のセクタに対し、データ書込領域５２０へのデータの書込み、およびエラー訂正符号書込領域５２２への固定部の書き込みがすべて終了している場合（Ｓ３１４、ＹＥＳ）、制御部１１０は揮発メモリ１０２に書き込んだセクタごとの可変部を不揮発メモリ１００の記憶領域５２４であるＥＣＣ長テーブル１０１ａまたは１０１ｂの列５０９または６０９に書き込み（Ｓ３１６）書き込み処理を終了する。シリンダ単位で不揮発メモリ１００への書き込み処理を行うことにより書き込み回数を減らし、書込み速度が遅い不揮発メモリ１００に対しても書き込み効率を向上させることができる。このシリンダの各セクタへの書き込みがすべて終了していない場合は（Ｓ３１４、ＮＯ）残りのセクタに対して書き込み処理を続行する。
【００７１】
ＣＲＣデータのデータ長は、書込みデータのデータ長により決まるため、書込みデータが固定長のときはＣＲＣデータも固定長となる。したがって、データと共にＣＲＣデータを記憶媒体１１６に書き込んでも記憶領域は固定長となり、記憶媒体１１６からのデータ読み出し制御が複雑になることは無い。また、ＣＲＣデータはＥＣＣデータの可変部と共に不揮発メモリ１００に書き込んでもよい。記憶媒体１１６以外の領域にＣＲＣデータを記憶することにより、ＣＲＣデータの信頼性を向上させることができる。
［データの読み出し］
図９は記憶媒体１１６に記憶したデータに対応するＥＣＣデータが不揮発メモリ１００に記憶されている場合のデータの読み出しフローである。
【００７２】
上位装置１２０からデータの読み出し命令が来ると、制御部１１０は、読み出し命令のアドレス情報に基づいて読み出し対象のデータが記憶されているシリンダを特定し、磁気ヘッド１１４を移動する（Ｓ４００）。
【００７３】
制御部１１０は不揮発メモリ１００に記憶されたＥＣＣ長テーブル１０１からこのシリンダに対応するエラー訂正符号書込領域５２２の大きさを超えたＥＣＣデータの残りのビットを読み出し、揮発メモリ１０２に展開する（Ｓ４０２）。１つのシリンダに対応する複数セクタのデータをまとめて読み出すことにより不揮発メモリ１００へのアクセス回数を減らし、読み出し効率を上げることができる。
【００７４】
制御部１１０はデータ読み出し処理の対象であるシリンダに含まれる各セクタのデータおよびエラー訂正符号書込領域５２２に先頭ビットから順に書き込んだＥＣＣデータの一部を磁気ヘッド１１４により読み出し、エラー訂正部１０６に実装された一時メモリ領域１０７に保持する（Ｓ４０４）。
【００７５】
制御部１１０は、各セクタに対応するＣＲＣデータを磁気ヘッド１１４により読み出し、エラー訂正部１０６に実装された一時メモリ領域１０７に保持する（Ｓ４０６）。
【００７６】
制御部１１０は各セクタのＥＣＣ長を読み取る（Ｓ４０８）。ＥＣＣデータによるエラー訂正処理は、ＥＣＣ長によって異なるため、エラー訂正部１０６で処理する際にＥＣＣ長が必要となる。また、制御部１１０は、各セクタに対応するエラー訂正符号書込領域５２２の大きさを超えたＥＣＣデータの残りのビットを揮発メモリ１０２から読み出し、エラー訂正部１０６の一時メモリ領域１０７に保持する（Ｓ４１０）。エラー訂正部１０６は、一時メモリ領域１０７に保持されたエラー訂正符号書込領域５２２に先頭ビットから順に書き込んだＥＣＣデータの一部とエラー訂正符号書込領域５２２の大きさを超えたＥＣＣデータの残りのビットとを結合する。
【００７７】
エラー訂正部１０６は記憶媒体１１６から読み出したデータを、ＥＣＣデータを用いてエラー訂正処理する（Ｓ４１２）。また、エラー訂正部１０６は、エラー訂正実行後のデータに対し、ＣＲＣデータを用いてエラー検出を実行する（Ｓ４１４）。
【００７８】
制御部１１０はエラー訂正部１０６によるエラー訂正の結果、正しくデータの読み出しができたと判断した場合は（Ｓ４１６、ＹＥＳ）揮発メモリ１０２を介して上位装置１２０へデータを転送する。一方、制御部１１０は、正しくエラーの読み出しができなかったと判断した場合は（Ｓ４１６、ＮＯ）エラーリカバリ処理を実行する（Ｓ４２０）。具体的には、同じセクタに対して上記読み出し処理を何度か実行したり、記憶媒体１１６からデータを読み出す際の磁気ヘッド１１４の位置をずらすことによりエラーリカバリ処理を実行する。以上の処理により、読み出し命令されたデータを最適なエラー訂正符号で訂正し、上位装置へ送信することができる。
【００７９】
なお、上記の実施の形態で図示した記憶装置の記憶方法は、記憶媒体にアクセス可能な装置によっても提供可能である。記憶媒体にアクセス可能な装置は上位装置のほか、試験装置、生産設備、ネットワーク上に配置された装置を含む。記憶媒体は磁気ディスクのほか、不揮発メモリ、ＣＤ−ＲＯＭ、フレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、ネットワーク上に配置された記憶媒体を含む。
【図面の簡単な説明】
【００８０】
【図１】装置全体構成図
【図２】エラー訂正符号長決定テーブル
【図３】エラー訂正符号長決定フローチャート
【図４】エラー訂正符号長決定フローチャート
【図５】エラー訂正符号長テーブルの構成図
【図６】エラー訂正符号長テーブルの構成図
【図７】エラー訂正符号長テーブルの構成図
【図８】データの書き込みフローチャート
【図９】データの読み込みフローチャート
【符号の説明】
【００８１】
９０          記憶装置
１００        不揮発メモリ
１０１        エラー訂正符号長テーブル
１０２        揮発メモリ
１０４        メモリコントローラ
１０６        エラー訂正部
１０８        エラー訂正符号生成部
１１０        制御部
１１２        高速メモリ
１１４        磁気ヘッド
１１６        記憶媒体
１２０        上位装置
２００        符号長決定テーブル
５２０        データ書込領域
５２２        エラー訂正符号書込領域
【図１】
2009238320.tif 000003
【図２】
2009238320.tif 000004
【図３】
2009238320.tif 000005
【図４】
2009238320.tif 000006
【図５】
2009238320.tif 000007
【図６】
2009238320.tif 000008
【図７】
2009238320.tif 000009
【図８】
2009238320.tif 000010
【図９】
2009238320.tif 000011