(57)【特許請求の範囲】
【請求項１】
メインメモリに書き込むデータをキャッシュする記憶装置であって、
複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、
キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部と
を備え、前記算出部は、
前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、
前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部と
を有する記憶装置。
【請求項２】
前記ビットマスク部は、
前記排他的論理和を配列したビット列から、前記検出範囲以外のビットをマスクする第１マスク部と、
前記第１マスク部によりマスクされたビット列から、当該ビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする第２マスク部と
を有する、請求項１に記載の記憶装置。
【請求項３】
前記ビット位置検出部は、
前記ビットマスク部によりビットマスクされた当該ビット列を入力する入力部と、
入力したそれぞれのビット列について、当該ビット列を２分割した末尾側の各ビットの論理和を算出する第１論理和算出部と、
算出したそれぞれの前記論理和の論理和を算出すると共に、入力したそれぞれの前記ビット列を２分割した各ビット列を、前記第１論理和算出部に対し出力する処理を、ビット列を分割できなくなるまで繰り返す第２論理和算出部と、
前記第２論理和算出部により順次算出される論理和を算出の順に上位側の桁から配列して、検出するべき前記ビット位置を示す数値として出力する出力部と
を有する請求項１に記載の記憶装置。
【請求項４】
前記有効性データの各ビットについて、論理値真は有効セクタを示し、論理値偽は無効セクタを示し、
前記排他的論理和算出部は、前記有効性データの先頭のビットと、論理値真の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列し、前記有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列し、
前記アドレス算出部は、前記ビット位置検出部により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出し、前記ビット位置検出部により偶数回目に検出されるビット位置に基づいて、当該領域の末尾アドレスを算出する
請求項１に記載の記憶装置。
【請求項５】
前記有効性データの各ビットについて、論理値真は有効セクタを示し、論理値偽は無効セクタを示し、
前記排他的論理和算出部は、前記有効性データの先頭のビットと、論理値偽の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列し、前記有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列し、
前記アドレス算出部は、前記ビット位置検出部により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出し、前記ビット位置検出部により奇数回目に検出されるビット位置に基づいて、当該領域の末尾アドレスを算出する
請求項１に記載の記憶装置。
【請求項６】
各キャッシュセグメントは、そのキャッシュセグメント以上のデータサイズであってメインメモリへの書込み単位であるメモリブロックの少なくとも一部に対応して割り当てられており、
前記書戻し制御部は、書き戻すキャッシュセグメントを有効セクタとすると共に、メモリブロック内の他のキャッシュセグメントに対応するデータをメインメモリから読み出して、そのキャッシュセグメントおよび読み出したデータをメモリブロックに書き戻す
請求項１に記載の記憶装置。
【請求項７】
あるセクタに対する書込みのキャッシュミスに応じ、書込みデータをキャッシュするために新たなキャッシュセグメントを割り当てて、そのキャッシュセグメント内のセクタにその書込みデータを書き込んで、書込み対象以外のセクタに対応する有効性データを無効に設定する、書込み制御部、を更に備える請求項１に記載の記憶装置。
【請求項８】
前記書込み制御部は、あるセクタに対する書込みのキャッシュヒットに応じ、そのセクタに対する書込みデータをキャッシュするために割り当てられているキャッシュセグメント内のセクタに、その書込みデータを書き込んで、そのセクタに対応する有効性データを有効に設定する、請求項７に記載の記憶装置。
【請求項９】
前記メインメモリを備える請求項１に記載の記憶装置。
【請求項１０】
前記メインメモリとして、少なくとも１つのフラッシュメモリを備える請求項９に記載の記憶装置。
【請求項１１】
メインメモリに書き込むデータをキャッシュする記憶装置であって、
複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、
キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部と
を備え、前記算出部は、
前記有効性データを示すビット列の各ビットが示す論理値を、設定に基づいて、反転し、又は、反転しないでそのまま、出力する反転制御部と、
出力された当該ビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定すると共に、前記反転制御部の反転および非反転を切り替える処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部と
を有する記憶装置。
【請求項１２】
メインメモリに書き込むデータをキャッシュする記憶装置を制御する方法であって、
前記記憶装置は、
複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリを有し、
キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するステップと、
無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻すステップと、
を備え、前記算出するステップは、
前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出するステップと、
前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするステップと、
ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するステップと、
当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として設定するステップと、
順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するステップと
を有する方法。
【請求項１３】
メインメモリに書き込むデータをキャッシュする記憶装置を制御するプログラムであって、
前記記憶装置は、
複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリを有し、
コンピュータを、
キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部
として機能させ、前記算出部を、さらに、
前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、
前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データをキャッシュする技術に関する。特に、本発明は、メインメモリに書き込むデータをキャッシュする技術に関する。
【背景技術】
【０００２】
近年、ＵＳＢメモリなどに代表されるように、フラッシュメモリデバイス（非特許文献１を参照。）を使った半導体ディスク装置が広く用いられている。半導体ディスク装置には、その用途の拡大に応じて、大容量化、高速化、および低消費電力化が益々求められるようになってきている。フラッシュメモリデバイスは、ＤＲＡＭとは異なる性質を有する場合がある。例えば、ＮＡＮＤ型フラッシュメモリデバイスは、データの書込みにおいて書込み対象となる領域を消去しなければならない。そして、その消去の処理は読出しの処理と比較してとても長い処理時間を要する。また、フラッシュメモリデバイスはアクセス回数が特定の上限に達すると使用できなくなる。
【非特許文献１】フラッシュメモリデバイスの説明、[online]、インターネットホームページ、アドレス「http://e-words.jp/w/E38395E383A9E38383E382B7E383A5E383A1E383A2E383AA.html」２００７年５月２４日検索
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このようなフラッシュメモリデバイスの性質に対応するためには、フラッシュメモリデバイスに対する複数回のアクセスをまとめて一度に行うことが望ましい。このように複数回のアクセスをまとめて一度に行うための技術として、アクセスのコマンドをバッファする技術が提案されている。即ち例えば、フラッシュメモリデバイスに対する書込みアクセスのコマンドを一旦バッファに格納したうえで、同一のセクタに対する複数の書込みコマンドは１つの書込みコマンドに併合してからフラッシュメモリに発行する方法である。しかしながら、書き込まれるデータの量は書込みコマンドに応じて異なるため、バッファの記憶容量を有効活用して数多くのコマンドを効率的に格納するように制御するのは容易ではない。
【０００４】
また、複数回のアクセスをまとめて一度に行うために、ＣＰＵのキャッシュメモリに関する技術を応用することも考えられる。しかしながら、ＣＰＵに関する技術は、主としてアクセスの高速化のみを目的としており、メインメモリへのアクセス回数を十分に低減できない場合があることから、その技術をフラッシュメモリデバイスにそのまま応用することはできない。また、ＣＰＵのキャッシュメモリに関する技術と同様に、あるいはその技術以上に、キャッシュ処理を制御するための回路には、省スペースと省電力が要求される。このため、アクセスの高速化、アクセス回数の低減と併せて、回路規模および消費電力の低減を実現することが望ましい。
【０００５】
そこで本発明は、上記の課題を解決することのできる記憶装置、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の第１の形態においては、メインメモリに書き込むデータをキャッシュする記憶装置であって、複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部とを備え、前記算出部は、前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部とを有する記憶装置を提供する。また、当該記憶装置を制御する方法およびプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００７】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００８】
図１は、本実施の形態に係るコンピュータ１０のハードウェア構成の一例を示す。コンピュータ１０は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部を備える。また、コンピュータ１０は、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、記憶装置２０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部を備える。また、コンピュータ１０は、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部を更に備えてもよい。
【０００９】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００１０】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、記憶装置２０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。記憶装置２０は、コンピュータ１０が使用するプログラム及びデータを格納する。記憶装置２０は不揮発にデータを保持することのできるデバイス、例えば、フラッシュメモリ又はハードディスクドライブであってもよい。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又は記憶装置２０に提供する。
【００１１】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、コンピュータ１０の起動時にＣＰＵ１０００が実行するブートプログラムや、コンピュータ１０のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０または記憶装置２０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００１２】
コンピュータ１０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出されコンピュータ１０にインストールされて実行される。プログラムは、ＣＰＵ１０００により実行される他、記憶装置２０に設けられたマイクロコンピュータにより実行され、記憶装置２０が有する各部を制御してもよい。以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。
【００１３】
なお、本実施の形態においては記憶装置２０を備えるものとしてコンピュータ１０を例示したが、この記憶装置２０は他の如何なる装置やシステムに備えられてもよい。記憶装置２０を備える装置・システムは、例えば、ＵＳＢメモリデバイス、携帯電話装置、ＰＤＡ装置、オーディオ・プレーヤ、またはカーナビゲーション・システムなどの、携帯型あるいは移動体に設けられた機器であってもよいし、ファイルサーバやＮＡＳなどの据置型機器であってもよい。
【００１４】
図２は、本実施の形態に係る記憶装置２０のハードウェア構成の一例を示す。記憶装置２０は、メインメモリ２００と、キャッシュメモリ２１０と、キャッシュ制御部２２０とを有する。メインメモリ２００は、例えばコンピュータ１０の電源を遮断しても記憶内容を維持することのできる、不揮発性の記憶媒体である。具体的には、メインメモリ２００は、少なくとも1つのフラッシュメモリを含んでよい。これに代えて、または、これに加えて、メインメモリ２００は、ハードディスクドライブ、光磁気ディスクドライブおよび光磁気ディスク、ならびに、テープドライブおよびテープのうちの、少なくとも1つを含んでよい。メインメモリ２００がフラッシュメモリを含む場合において、含まれるフラッシュメモリの数は２以上であることが望ましい。これにより、メインメモリ２００の記憶容量を増大させることができるばかりでなく、インターリーブのアクセスによりデータ転送のスループットを向上できる。
【００１５】
キャッシュメモリ２１０は、例えばコンピュータ１０の電源を遮断すると記憶内容を失う、揮発性の記憶媒体である。具体的には、キャッシュメモリ２１０は、ＳＤＲＡＭであってよい。キャッシュ制御部２２０は、メインメモリ２００に対するアクセスの要求を、ＣＰＵ１０００から受信する。より詳細には、キャッシュ制御部２２０は、ＣＰＵ１０００上で動作するプログラムの指令に基づいて入出力コントローラ１０８４が出力する要求を受信する。この要求は、例えばＡＴＡ（ＡＴ  Ａｔｔａｃｈｍｅｎｔ）プロトコル、または、ＳｅｒｉａｌＡＴＡプロトコルなどの、ハードディスクドライブに対し要求を転送するためのプロトコルに従うものであってよい。これに代えて、キャッシュ制御部２２０は、他の通信プロトコルに従って要求を受信してもよい。
【００１６】
受信した要求が読出し要求の場合に、キャッシュ制御部２２０は、要求されたデータがキャッシュメモリ２１０に記憶されているか判断する。記憶されていれば、キャッシュ制御部２２０は、そのデータを読み出してＣＰＵ１０００に返信する。記憶されていなければ、キャッシュ制御部２２０は、そのデータをメインメモリ２００から読み出してＣＰＵ１０００に返信する。一方、受信した要求が書込み要求の場合に、キャッシュ制御部２２０は、書込みデータをキャッシュするためのキャッシュセグメントがキャッシュメモリ２１０内に割り当てられているかどうかを判断する。割り当てられていれば、キャッシュ制御部２２０は、そこに書込みデータを書き込む。データを書き込んだキャッシュセグメントは所定の条件が成立した場合にメインメモリ２００に書き戻される。一方、キャッシュセグメントが割り当てられていなければ、キャッシュ制御部２２０は、書込みデータをキャッシュするために新たにキャッシュセグメントを割り当てる。このように、キャッシュ制御部２２０は、キャッシュメモリ２１０へのアクセスを制御する役割を果たす。
【００１７】
本実施の形態は、以上のように構成されるデータのキャッシュ技術において、メインメモリ２００としてフラッシュメモリを採用した場合に顕著に生じる課題を解決して、記憶装置２０に対するアクセスを全体として極めて効率的にすることを目的とする。以下、具体的な説明をすすめる。
【００１８】
図３は、本実施の形態に係るメインメモリ２００のデータ構造の一例を示す。メインメモリ２００は、複数のメモリブロック、たとえば８１９２個のメモリブロックを有する。メモリブロックは、メインメモリ２００へのデータの書込み単位である。即ち、１つのメモリブロックのデータサイズに満たないデータをメインメモリ２００へ書込む場合であっても、メモリブロック毎にしかメインメモリ２００へ書込みを行うことができない。したがって、少ないデータを書込む場合には、書き込み対象となるメモリブロック全体をメインメモリ２００から読み出した上で、書込みデータによりその読み出したデータを更新して、更新後のデータをメインメモリ２００に書き込む。
【００１９】
なお、フラッシュメモリの種類によっては、論理値真（１）から論理値偽（０）への変更および論理値偽（０）から論理値真（１）の変更の一方のみは、メモリブロックよりも小さい単位で行うことができる場合がある。しかしながら、この変更のみによってデータの書込みが実現されることは極めて稀である。このような稀な場合を除き、メモリブロック全体のデータを消去してからそのメモリブロックに対し書込みを行う必要がある。データの消去はメモリブロック単位であり、このことから、データの書き込みも実質的にメモリブロックが単位であることとなる場合が多い。このように、厳密には書き込みおよび消去の概念およびその単位は異なるが、本実施の形態においては実質的に同一と考えて差し支えない。したがって、本実施の形態においては、特に断りのない限り、単に「書込み」または「書戻し」と称する処理は、消去の処理を含み得るものとする。
【００２０】
各メモリブロックは、複数のページ、例えば６４個のページを含む。ページは、データの書込み（消去を含まない書込み）および読出しの単位となる。例えばあるフラッシュメモリにおいて、１ページは、２０４８バイトに６４バイトの冗長部を加えた２１１２バイトである。冗長部は、誤り訂正又は誤り検出のために符号が格納される領域である。読出しは書き込みに比べれば小さい単位で実現できるものの、読出し単位であるページもある程度のサイズのデータであることから、読出し処理についてもある程度のサイズのデータをまとめて行うことが望ましい。読出しを効率化するためにメインメモリ２００の内部に読出し専用のキャッシュメモリを設けてもよいが、その場合であっても読出し対象のアドレスはある程度連続していることが望ましい。
【００２１】
１ページは、４個のセクタを含む。セクタは、本来は、記憶装置２０に代えて用いられるハードディスクドライブの記憶単位である。本実施の形態では、記憶装置２０をあたかもハードディスクドライブであるかのように動作させるので、記憶装置２０はハードディスクドライブのセクタと同一サイズの記憶単位を有する。この記憶単位のことを本実施の形態ではセクタと呼ぶ。一例として１セクタは５１２バイトのデータを含む。なお、ブロック、ページ、または、セクタという用語は、記憶単位あるいは記憶領域を示すものであるが、以降の説明においては表現の簡潔化のため、その領域に記憶されたデータを示すものとしても用いる。
【００２２】
メインメモリ２００は、以上のような内部構造を有するものの、ハードディスクドライブのインターフェイスとの間の互換性などのため、外部からはセクタ単位でアクセスが可能なように認識されることが望ましい。例えば、メインメモリ２００は、第Ｐセクタから数えてＱ個のセクタからデータを読み出す読出コマンドを受け付けてもよい。パラメータＰ、Ｑはコマンドごとに設定可能である。このようなコマンドを受け付け可能な場合であっても、それに応じた処理の速度は内部構造に依存する。例えば、ただ１つのセクタを読み出すコマンドよりも、連続した複数のセクタを読み出すコマンドの方が、セクタあたりの処理速度は速い。内部構造からすれば、読出しはページ単位で実現されるからである。
【００２３】
図４は、本実施の形態に係るキャッシュメモリ２１０のデータ構造の一例を示す。キャッシュメモリ２１０は、複数のセグメント３００を有する。また、キャッシュメモリ２１０は、セグメント３００ごとに、そのセグメント３００の属性を示すタグ情報３１０を記憶している。セグメント３００は、複数のセクタ３２０を有する。セクタ３２０は、上記の記憶装置２０内のセクタと同一の記憶容量の領域である。各セグメント３００は、そのキャッシュセグメント以上のデータサイズであるメモリブロックの少なくとも一部に対応して割り当てられ得る。割り当てられたセグメント３００は、対応する当該メモリブロックの一部に記憶されているデータを、その後の読み出し処理の効率化のために予め読み出して記憶している。これに代えて、割り当てられたセグメント３００は、対応する当該メモリブロックの一部に記憶するべきデータを、その後にまとめて書込みを行うために一時的に記憶してもよい。
【００２４】
図５は、本実施の形態に係るタグ情報３１０のデータ構造の一例を示す。キャッシュメモリ２１０は、タグ情報３１０を記憶するためのデータフィールドとして、上位アドレスフィールド４００と、有効性データフィールド４１０と、ＬＲＵ値フィールド４２０と、状態フィールド４３０とを有する。上位アドレスフィールド４００は、対応するキャッシュセグメント３００が割り当てられているメインメモリ２００内のブロックについて、そのアドレス値のうち最上位から予め定められた桁数のアドレス値を記憶する。たとえば、メインメモリ２００内のアドレスが２４ビットで表される場合に、そのうちの下位のｎビットを除外した、上位の（２４−ｎ）ビットのアドレス値が上位アドレスフィールド４００に記憶される。このアドレス値のことを上位アドレス、または、上位アドレス値と称す。また、上位アドレスを除外したアドレスのことを下位アドレス、または、下位アドレス値と称す。
【００２５】
上位アドレス値が（２４−ｎ）ビットで表され、各セクタは下位アドレス値によって一意に定まる場合には、１つのキャッシュセグメント３００に含まれるセクタ３２０の数は２のｎ乗個である。従って、あるキャッシュセグメント３００に含まれる各セクタ３２０が有効なデータを含む有効セクタか否かは、１ビットの論理値で表される。従って、そのセグメント３００に含まれる複数のセクタ３２０が有効セクタかどうかは、２のｎ乗個のビットで表現される。この論理値をセクタの配列順に従って配列したデータを有効性データと称し、有効性データフィールド４１０はこの有効性データを記憶する。また、ＬＲＵ値フィールド４２０は、ＬＲＵ値を記憶するためのフィールドである。ＬＲＵ値は、Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄという名称のごとく、未使用の期間を示す指標値である。
【００２６】
具体的には、ＬＲＵ値は、対応するキャッシュセグメント３００についての、未使用期間の長さの順序、あるいは、未使用期間の短さの順序を示してもよい。ここで、「使用」とは、ＣＰＵ１０００による読出し、および、書込みの少なくとも１つの処理の対象となったことをいう。より詳細には、複数のキャッシュセグメント３００に未使用期間の長さまたは短さに応じて順序を付した場合において、ＬＲＵ値は、キャッシュセグメント３００の数を上限とした数値となる。従って、これを記憶するＬＲＵ値フィールド４２０は、２を底とするセグメント数Ｓの対数だけのビットが必要となる。
【００２７】
状態フィールド４３０は、対応するキャッシュセグメント３００に設定している状態を記憶している。状態は例えば３ビットで表され、各キャッシュセグメント３００は無効状態、共有状態、保護状態、変更状態、および、修正状態を含む複数の状態の何れかに設定されている。各状態の概要は次の通りである。無効状態は、含んでいる全てのセクタ３２０が無効セクタであるキャッシュセグメント３００の状態を示す。無効セクタは、メインメモリ２００と一致するデータを保持しておらず、かつ、メインメモリ２００に書込むべきとしてＣＰＵ１０００から要求されたデータの保持もしていないセクタである。コンピュータ１０を起動した場合等の初期状態において、全てのキャッシュセグメント３００は無効状態である。
【００２８】
共有状態は、有している全てのセクタ３２０が共有セクタであるが、書込みに対しリプレースされ得ることを示す、キャッシュセグメント３００の状態のことをいう。共有セクタは有効セクタであり、メインメモリ２００と一致するデータを保持している。保護状態は、有している全てのセクタ３２０が共有セクタであり、なおかつ、書き換えから保護される、キャッシュセグメント３００の状態を示す。変更状態および修正状態は、メインメモリ２００と一致しておらず、メインメモリ２００に書込むべきデータを含む状態である。変更状態のキャッシュセグメント３００は、一部のセクタ３２０に、メインメモリ２００に書込むべきデータを含むのに対し、修正状態のキャッシュセグメント３００は、有しているすべてのセクタ３２０に、メインメモリ２００に書込むべきデータを含む。このようなセクタ３２０のことを変更セクタと呼ぶ。変更セクタは有効セクタである。
【００２９】
なお、キャッシュセグメントに状態を定義して遷移させる技術一般については、例えばＭＳＩプロトコル、ＭＥＳＩプロトコル、またはＭＯＥＳＩプロトコルとして知られているように周知であるから、他の実装例やその他の詳細についてはこれらの技術のものを参照されたい。
【００３０】
図６は、本実施の形態に係るセグメント３００および有効性データフィールド４１０の具体例を示す。上記の変更状態のように、セグメント３００は一部に有効セクタを含む場合がある。図６では有効セクタに斜線を付して示す。無効セクタには斜線を付していない。有効性データフィールド４１０が記憶する有効性データは、対応するキャッシュセグメントの各セクタが有効か否かを示す論理値をセクタごとに配列したビット列である。例えば、論理値１は有効セクタを示し、論理値０は無効セクタを示す。そして、有効性データは、これらの論理値を、対応するセクタの配列順に配列している。
【００３１】
上述のように、各セクタがキャッシュセグメント中に占める位置は、そのセクタのアドレスによって一意に定まる。また、フラッシュメモリデバイスに対するアクセスを減少させる観点から、書込みのキャッシュミス時にはメインメモリ２００からキャッシュメモリ２１０にデータを読み出すことなく、書込みデータをキャッシュメモリ２１０に書込むことが望ましい。したがって、様々なアドレスに対し書込みが何度も要求されると、キャッシュセグメント内には有効セクタと無効セクタが離散的に混在することとなる場合がある。この場合、有効性データフィールド４１０に記憶される有効性データは、論理値１および論理値０が離散的に混在したデータとなる。
【００３２】
図７は、本実施の形態に係るキャッシュ制御部２２０の機能構成を示す。キャッシュ制御部２２０は、基本機能として、ＡＴＡプロトコルなどの通信プロトコルを、フラッシュメモリなどのメインメモリ２００をアクセスするためのコマンドに変換して、メインメモリ２００に送信する機能を有する。このほかに、キャッシュ制御部２２０は、キャッシュメモリ２１０へのアクセスの制御を通じて記憶装置２０全体の性能向上を図る役割を果たす。具体的には、キャッシュ制御部２２０は、読出し制御部７００と、書込み制御部７１０と、算出部７２０と、書戻し制御部７３０とを有する。これらの各部は、ハードワイヤード論理回路またはプログラマブル回路などの各種ＬＳＩによって実現されてもよいし、予め読み込んだプログラムを実行するマイクロコンピュータによって実現されてもよい。
【００３３】
読出し制御部７００は、セクタに対するデータの読出し要求をＣＰＵ１０００から受信する。読出しがキャッシュヒットした場合には、読出し制御部７００は、キャッシュメモリ２１０からそのデータを読み出してＣＰＵ１０００に返信する。読出しがキャッシュミスした場合には、読出し制御部７００は、そのデータを含むページをメインメモリ２００から読み出してキャッシュメモリ２１０に格納すると共に、そのデータをＣＰＵ１０００に返信する。キャッシュヒットおよびキャッシュミスの判断は、読出しの要求されたアドレスの上位アドレスを、各セグメント３００に対応する上位アドレスフィールド４００と順次比較することによって実現される。一致する上位アドレスがあればキャッシュヒットであり、一致する上位アドレスがなければキャッシュミスである。但し、一致する上位アドレスがあっても、読出しの対象が無効セクタであればキャッシュミスである。
【００３４】
書込み制御部７１０は、セクタに対するデータの書込み要求をＣＰＵ１０００から受信する。書込みがキャッシュミスした場合には、書込み制御部７１０は、書込みデータをキャッシュするために新たなキャッシュセグメントを割り当てる。キャッシュミス・キャッシュヒットの判断は読出しの場合と同様である。即ち、上位アドレスが一致すればキャッシュヒットであって、それ以外はキャッシュミスである。但し、読み出しとは異なり、無効セクタに対する書込みであってもキャッシュヒットである。また、キャッシュセグメントの割り当ては、書込みの要求されたアドレスの上位アドレスを、割り当てようとしているセグメント３００に対応する上位アドレスフィールド４００に格納することで実現される。また、割り当てるべきセグメント３００の選択は、各セグメント３００の状態に基づいて実現される。
【００３５】
一例として、無効状態のセグメント３００があればそのセグメント３００が、無効状態のセグメント３００がなければ共有状態のセグメント３００が選択される。同じ状態のセグメント３００が複数あればＬＲＵ値の示す未使用期間が最も長いセグメント３００がその中から選択される。選択するべき適切なセグメント３００が無い場合には、書込み制御部７１０は、書戻し制御部７３０に指示して所定のセグメント３００をメインメモリ２００に書き戻させて、そのセグメント３００を選択して新たなセグメント３００として用いる。そして、書込み制御部７１０は、その新たなセグメント３００内のセクタにその書込みデータを書き込んで、書込み対象以外のセクタに対応する有効性データを無効に設定する。
【００３６】
一方、あるセクタに対する書込みがキャッシュヒットした場合には、書込み制御部７１０は、そのセクタに対する書込みデータをキャッシュするために割り当てられているセグメント３００内のセクタに、その書込みデータを書込む。そして、書込み制御部７１０は、そのセクタに対応する有効性データを有効に設定する。書込まれたデータは、上記のように新たに割り当てるべきセグメント３００が無い場合や、その他所定の条件が成立した場合などに、書戻し制御部７３０によりメインメモリ２００に書き戻される。
【００３７】
算出部７２０は、あるセグメント３００をメインメモリ２００へ書き戻す場合に処理を開始し、そのセグメント３００に対応する有効性データにアクセスして、無効セクタが連続する領域を検出する。例えば、算出部７２０は、間に有効セクタを含むことなく連続している複数の無効セクタを、無効セクタが連続する領域として検出する。これに加えて、算出部７２０は、有効セクタと有効セクタとの間にある１つの無効セクタを、当該領域として検出してもよい。そして、算出部７２０は、検出されたこの領域ごとに、この領域に対応するメインメモリ２００のアドレスを算出する。
【００３８】
書戻し制御部７３０は、検出したその領域ごとに、その領域へデータを読み出す読出コマンドをメインメモリ２００に対し発行して、各領域を有効セクタとする。読出コマンドには、読出し範囲、例えば読み出し開始のセクタ位置および読出対象のセクタ数を設定できる。即ち、読出コマンドは無効セクタの数と同数ではなく当該領域の数だけ発行すればよい。読み出し開始のセクタ位置、および、読出対象のセクタ数は、例えば、算出部７２０によって算出されたアドレスに基づいて算出される。そして、書戻し制御部７３０は、有効セクタで満たされたそのセグメント３００内のデータをメインメモリ２００に書き戻す。
【００３９】
図８は、本実施の形態に係る算出部７２０の機能構成を示す。算出部７２０は、排他的論理和算出部８００と、ビットマスク部８１０と、ビット位置検出部８２０と、コントローラ８３０と、アドレス算出部８４０とを有する。排他的論理和算出部８００は、有効性データを示すビット列を入力する。そして、排他的論理和算出部８００は、そのビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する。詳細には、排他的論理和算出部８００は、まず、このビット列の先頭のビットと、定数の論理値真の排他的論理和を算出して、算出結果の排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部８００は、有効性データを示すビット列の他のビットと、そのビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果の排他的論理和を示すこのビット列における、その先頭のビットよりも末尾側のビットとして配列する。
【００４０】
ビットマスク部８１０は、排他的論理和を配列したこのビット列を入力する。そして、ビットマスク部８１０は、そのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。具体的には、ビットマスク部８１０は、第１マスク部８１５と、第２マスク部８１８とを有する。第１マスク部８１５は、排他的論理和を配列したこのビット列から、設定されたその検出範囲以外のビットをマスクする。そして、第２マスク部８１８は、第１マスク部８１５によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする。
【００４１】
ビット位置検出部８２０は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する。コントローラ８３０は、そのビット位置が検出される毎に、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部８１０に設定する処理を、ビット位置が検出されなくなるまで繰り返す。この結果、ビットマスク部８１０およびビット位置検出部８２０は、検出したビット位置を順次アドレス算出部８４０に出力してゆくこととなる。アドレス算出部８４０は、このように順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ２００のアドレスを算出する。
【００４２】
図９は、本実施の形態に係るビット位置検出部８２０の機能構成を示す。ビット位置検出部８２０は、入力部９００と、第１論理和算出部９１０と、第２論理和算出部９２０と、出力部９３０とを有する。入力部９００は、ビットマスク部８１０によりビットマスクされたそのビット列を入力する。第１論理和算出部９１０は、入力したそれぞれのビット列について、そのビット列を２分割した末尾側の各ビットの論理和を算出する。第２論理和算出部９２０は、算出したそれぞれの論理和の論理和を算出する。これと共に、第２論理和算出部９２０は、第１論理和算出部９１０が入力したそれぞれのビット列を２分割した各ビット列を、第１論理和算出部９１０に対し出力する。これらの処理を、第２論理和算出部９２０は、第１論理和算出部９１０が入力したビット列を分割できなくなるまで、即ち、そのビット列が１ビットのみを含むようになるまで繰り返す。出力部９３０は、第２論理和算出部９２０により順次算出される論理和を算出の順に上位側の桁から配列して、検出するべきビット位置を示す数値として出力する。
【００４３】
図１０は、本実施の形態に係るキャッシュ制御部２２０がＣＰＵ１０００からの要求に応じて行う処理の流れを示す。読出し制御部７００は、セクタに対するデータの読出し要求をＣＰＵ１０００から受信すると（Ｓ１０００：ＹＥＳ）、読出し処理を行う（Ｓ１０１０）。例えば、読出し制御部７００は、読出しがキャッシュヒットした場合には、キャッシュメモリ２１０からそのデータを読み出してＣＰＵ１０００に返信する。また、読出しがキャッシュミスした場合には、読出し制御部７００は、そのデータを含むページをメインメモリ２００から読み出してキャッシュメモリ２１０に格納すると共に、そのデータをＣＰＵ１０００に返信する。
【００４４】
書込み制御部７１０は、セクタに対するデータの書込み要求をＣＰＵ１０００から受信すると（Ｓ１０２０）、書込み処理を行う（Ｓ１０３０）。具体的には図１０を参照して後に説明する。一方、書込みまたは読出しの要求に関わらず、算出部７２０および書戻し制御部７３０は、予め定められた条件が成立した場合に（Ｓ１０４０）、有効セクタおよび無効セクタが混在するセグメント３００をメインメモリ２００へ書き戻す処理を行う（Ｓ１０５０）。例えば、算出部７２０および書戻し制御部７３０は、キャッシュメモリ２１０中のセグメント３００のうち有効セクタおよび無効セクタの双方を含むセグメント３００の割合が予め定められた基準値を超えたことを条件に、有効セクタおよび無効セクタの双方を含む何れかのセグメント３００を選択して、メインメモリ２００に書き戻す。セグメント３００の選択はＬＲＵ値に基づくことが望ましい。これにより、キャッシュミスの発生前に予め新たに割り当てることのできるセグメント３００を確保できるので、キャッシュミス発生時の処理時間を短縮できる。
【００４５】
図１１は、Ｓ１０３０における処理の詳細を示す。書込み制御部７１０は、書込みの要求されたアドレスの上位アドレスが、何れかの上位アドレスフィールド４００に記憶された上位アドレスに一致するか否かを判断する（Ｓ１１００）。一致しない場合（キャッシュミスの場合である、Ｓ１１００：ＮＯ）には、書込み制御部７１０は、書込みデータをキャッシュするために新たに割り当て可能なセグメント３００があるかどうかを判断する（Ｓ１１０２）。例えば、書込み制御部７１０は、各状態フィールド４３０を走査して、無効状態または共有状態のセグメント３００を検索する。これらのセグメント３００はメインメモリ２００に書き戻すことなく他の用途に再利用できるからである。何れかの状態のセグメント３００が検索されれば、新たに割り当て可能なセグメント３００があると判断する。
【００４６】
新たに割り当て可能なセグメント３００がない場合には（Ｓ１１０２：ＮＯ）、算出部７２０および書戻し制御部７３０は、有効セクタおよび無効セクタが混在するセグメント３００をメインメモリ２００へ書き戻す処理を行う（Ｓ１１０５）。そして、書込み制御部７１０は、書込みデータをキャッシュするために新たなセグメント３００を割り当てる（Ｓ１１１０）。セグメント３００を割り当てた後に、あるいは、上位アドレスが一致したキャッシュヒットの場合に（Ｓ１１００：ＹＥＳ）、書込み制御部７１０は、新たに割り当てたセグメント３００または上位アドレスが一致したセグメント３００に書込みデータを格納する（Ｓ１１２０）。そして、書込み制御部７１０は、新たに割り当てたセグメント３００に書込みをした場合には、書込み対象以外のセクタに対応する有効性データを無効に設定する（Ｓ１１３０）。キャッシュヒットの場合には、書込み制御部７１０は、書込んだセクタに対応する有効性データを有効に設定する。
【００４７】
その他、必要に応じて、書込み制御部７１０は、セグメント３００の状態を他の状態に遷移させるべく、対応する状態フィールド４３０を更新してよい（Ｓ１１４０）。また、書込み制御部７１０は、書込み対象のセグメント３００に対応するＬＲＵ値を変更するべく、ＬＲＵ値フィールド４２０を更新してよい（Ｓ１１５０）。
【００４８】
図１２は、Ｓ１０５０およびＳ１１０５における処理の詳細を示す。算出部７２０および書戻し制御部７３０は、あるセグメント３００をメインメモリ２００へ書き戻す場合に以下の処理を行う。まず、算出部７２０は、そのセグメント３００に対応する有効性データに基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ２００のアドレスを算出する（Ｓ１２００）。書戻し制御部７３０は、無効セクタが連続する領域ごとに、その領域へデータを読み出す読出コマンドをメインメモリ２００に対し発行して、各領域を有効セクタとする（Ｓ１２１０）。そして、書戻し制御部７３０は、有効セクタで満たされたそのセグメント３００内のデータをメインメモリ２００に書き戻す（Ｓ１２２０）。
【００４９】
１つのセグメント３００が１つのメモリブロックのサイズに満たない場合には、そのメモリブロックの他のデータを読み出す処理をあわせて行う。即ち例えば、書戻し制御部７３０は、そのメモリブロック内の他のキャッシュセグメントに対応するデータをメインメモリ２００から読み出したうえで、書き戻すべきセグメント３００および読み出したそのデータを併せてそのメモリブロックに書き戻す。
【００５０】
図１３は、Ｓ１２００における処理の詳細を示す。まず、コントローラ８３０は、論理値が真であるビットを検出する範囲を示す第１マスクデータを初期化する（Ｓ１３００）。初期化時点において、有効性データの全範囲が検出範囲に設定される。具体的には、コントローラ８３０は、有効性データを示すビット列と同じビット数であって、全てのビットが論理値真であるビット列を、第１マスクデータとして第１マスク部８１５に設定する。次に、排他的論理和算出部８００は、有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する（Ｓ１３１０）。
【００５１】
次に、ビットマスク部８１０は、排他的論理和を配列したこのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。このビットマスクは、Ｓ１３２０およびＳ１３３０により実現される。具体的には、まず、第１マスク部８１５は、排他的論理和を配列したこのビット列から、設定されたその検出範囲以外のビットをマスクする（Ｓ１３２０）。即ち、第１マスク部８１５は、このビット列と、設定された第１マスクデータの論理積を算出する。次に、第２マスク部８１８は、第１マスク部８１５によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする（Ｓ１３３０）。
【００５２】
次に、ビット位置検出部８２０は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する（Ｓ１３４０）。コントローラ８３０は、そのビット位置が検出される毎に（Ｓ１３５０：ＹＥＳ）、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部８１０に設定する（Ｓ１３６０）。具体的には、コントローラ８３０は、先頭からそのビット位置までの各ビットを論理値偽とし、検出されたそのビット位置よりも末尾側の各ビットを論理値真とするビット列を生成して、新たな第１マスクデータとして第１マスク部８１５に設定する（Ｓ１３６０）。
【００５３】
以上の処理を、算出部７２０は、ビット位置が検出されなくなるまで繰り返す。ビット位置が検出されないことは、例えば、ビットマスク部８１０により出力されるビット列の、全ビットの論理和が偽（０）であるかに基づいて判断することができる。ビット位置が検出されない場合（Ｓ１３５０：ＮＯ）、即ち有効性データの全範囲を検出し終えた場合に、アドレス算出部８４０は、以上の処理により順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ２００のアドレスを算出する。この算出の処理は、Ｓ１３１０において排他的論理和算出部８００が有効性データの先頭のビットに対しどのような演算を行ったかによって異なる。以下、その具体例を示す。
【００５４】
（１）有効性データの先頭のビットと定数の論理値真の排他的論理和を算出する場合
即ち、この場合、排他的論理和算出部８００は、有効性データを示すビット列の先頭のビットと、定数の論理値真の排他的論理和を算出して、算出結果の排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部８００は、有効性データを示すビット列の他のビットと、そのビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果の排他的論理和を示すこのビット列における、その先頭のビットよりも末尾側のビットとして配列する。
【００５５】
アドレス算出部８４０は、この場合、ビット位置検出部８２０により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出する。これは、奇数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において有効セクタの次に無効セクタが連続する境界部分を示すからである。一例として、１セクタを５１２ｂｙｔｅｓとすれば、アドレス算出部８４０は、上位の（２４−ｎ）ビットを上記の上位アドレスとし、下位のｎビットをそのビット位置を示す数値とした２４ビットの数値を、５１２倍することで、その開始アドレスを算出することができる。
【００５６】
他方、アドレス算出部８４０は、ビット位置検出部８２０により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の末尾アドレスを算出する。これは、偶数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において無効セクタの次に有効セクタが連続する境界部分を示すからである。一例として、１セクタを５１２ｂｙｔｅｓとすれば、アドレス算出部８４０は、上位の（２４−ｎ）ビットを上記の上位アドレスとし、下位のｎビットをそのビット位置を示す数値から１減じた数値とした２４ビットの数値を、５１２倍することで、その末尾アドレスを算出することができる。
【００５７】
（２）有効性データの先頭のビットと定数の論理値偽の排他的論理和を算出する場合
即ち、この場合、排他的論理和算出部８００は、有効性データの先頭のビットと、論理値偽の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部８００は、有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列する。
【００５８】
アドレス算出部８４０は、この場合、ビット位置検出部８２０により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出する。これは、偶数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において有効セクタの次に無効セクタが連続する部分を示すからである。一例として、１セクタを５１２ｂｙｔｅｓとすれば、アドレス算出部８４０は、上位の（２４−ｎ）ビットを上記の上位アドレスとし、下位のｎビットをそのビット位置を示す数値とした２４ビットの数値を、５１２倍することで、その開始アドレスを算出することができる。
【００５９】
他方、アドレス算出部８４０は、ビット位置検出部８２０により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の末尾アドレスを算出する。これは、奇数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において無効セクタの次に有効セクタが連続する部分を示すからである。一例として、１セクタを５１２ｂｙｔｅｓとすれば、アドレス算出部８４０は、上位の（２４−ｎ）ビットを上記の上位アドレスとし、下位のｎビットをそのビット位置を示す数値から１減じた数値とした２４ビットの数値を、５１２倍することで、その末尾アドレスを算出することができる。
【００６０】
なお、先頭のセクタが無効セクタの場合においては、１回目に検出されるビット位置を特別に取り扱ってもよい。具体的には、アドレス算出部８４０は、１回目に検出されるビット位置に基づいて、当該キャッシュセグメントの先頭のセクタから開始する、無効セクタが連続する領域の末尾アドレスを算出してもよい。
【００６１】
図１４は、Ｓ１３４０における処理の詳細を示す。入力部９００は、ビットマスク部８１０によりビットマスクされたビット列を入力する（Ｓ１４００）。第１論理和算出部９１０は、入力部９００から入力したそれぞれのビット列について、そのビット列を２分割した末尾側の各ビットの論理和を算出する（Ｓ１４１０）。第２論理和算出部９２０は、算出したそれぞれの論理和の論理和を算出する（Ｓ１４２０）。次に、第２論理和算出部９２０は、入力したそのビット列を分割できるかどうかを判断する（Ｓ１４３０）。例えば、ビット列の長さが１ビットの場合は分割できないが、ビット列の長さが２のべき乗の場合は分割できる。入力されるビット列の長さを２のべき乗とすれば、ビット列の長さが１ビットで無ければ必ず分割できる。
【００６２】
ビット列が分割可能な場合に（Ｓ１４３０：ＹＥＳ）、第２論理和算出部９２０は、第１論理和算出部９１０が入力したそれぞれのビット列を２分割する（Ｓ１４４０）。そして、第２論理和算出部９２０は、分割した各ビット列を、第１論理和算出部９１０に対し出力する（Ｓ１４５０）。一方、ビット列が分割可能でない場合に（Ｓ１４３０：ＮＯ）、出力部９３０は、第２論理和算出部９２０により順次算出される論理和を算出の順に上位側の桁から配列して（Ｓ１４６０）、検出するべきビット位置を示す数値として出力する（Ｓ１４７０）。
【００６３】
なお、上述の処理の流れは一例であり、多様な変形が可能である。例えば、入力される有効性データのビット列が固定長の場合において、ビット列の分割を何度繰り返せばビット列が分割できなくなるかは予め判明している。この場合には、ビット列が分割可能かどうかを判断する上述のＳ１４３０の処理は不要である。即ちこの場合、第１論理和算出部９１０および第２論理和算出部９２０は、単に、予め定められた回数だけ論理和の算出処理を交互に繰り返せばよい。
【００６４】
次に、図１５から図２０を参照して、ある有効性データを対象とした算出部７２０による処理の具体例を示す。
図１５は、ある有効性データについて処理されるＳ１３００の詳細を示す。排他的論理和算出部８００が入力する有効性データをビット列「００１１１１０００１１１００００」とする。排他的論理和算出部８００は、このビット列の各ビットと当該ビットに隣接する他のビットの排他的論理和を算出する。算出される排他的論理和を示すビット列を、近傍差分出力と呼ぶ。
【００６５】
この図１５の例で、具体的には、排他的論理和算出部８００は、まず、有効性データを示すビット列の先頭のビットと、定数の論理値偽（０）との排他的論理和を算出して、近傍差分出力の先頭のビットとして配列する。いま、有効性データの先頭は論理値偽（０）であるから、それと定数の論理値偽の排他的論理和は論理値偽（０）となる。次に、排他的論理和算出部８００は、有効性データを示す他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果を、近傍差分出力の先頭よりも末尾側に配列する。この結果、近傍差分出力は、「００１０００１００１００１０００」となる。
【００６６】
図１６ａは、ある有効性データについて１度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。１度目の処理では、第１マスクデータは、有効性データを示す何れのビットもマスクしないように設定されている。従って、第１マスク部８１５は、近傍差分出力である「００１０００１００１００１０００」をそのまま出力する。この出力において、論理値が真である先頭のビットは第３ビットである。したがって、第２マスク部８１８は、この出力のビット列のうち、第４ビット以降のビットをマスクする。この結果、第２マスク部８１８は、「００１０００００００００００００」を出力する。これに応じ、ビット位置検出部８２０は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第３ビットを示す数値の３である。
【００６７】
図１６ｂは、ある有効性データについて１度目に処理されるＳ１３４０の更なる詳細を示す。第１論理和算出部９１０が入力するビット列は、「００１０００００００００００００」である。まず、第１論理和算出部９１０は、入力したそのビット列を２分割した末尾側の各ビットの論理和を算出する。末尾側である第９ビットから第１６ビットは全て論理値偽なので、算出結果は論理値偽となる。次に、第２論理和算出部９２０は、算出したそれぞれの論理和の論理和を算出する。第１論理和算出部９１０により算出される論理和は１つだけなので、第２論理和算出部９２０により算出される論理和は第１論理和算出部９１０により算出されるその論理和そのものである。出力部９３０は、この論理和を、ビット位置を示す数値の最上位の桁に配列する。
【００６８】
次に、第２論理和算出部９２０は、入力したそのビット列を２分割した各ビット列を、第１論理和算出部９１０に対し出力する。これに応じ、第１論理和算出部９１０は、入力したそれぞれのビット列について、当該ビット列を２分割した末尾側の各ビットの論理和を算出する。末尾側である第５ビットから第８ビットは何れも論理値偽なので、第１のビット列について論理和は論理値偽である。また、末尾側である第１３から第１６ビットは何れも論理値偽なので、第２のビット列について論理和は論理値偽である。次に、第２論理和算出部９２０は、これらの論理和の論理和を算出する。算出される論理和は論理和偽である。出力部９３０は、この論理和を、ビット位置を示す数値の最上位から２桁目に配列する。
【００６９】
次に、第２論理和算出部９２０は、入力したそのビット列を２分割した各ビット列を、第１論理和算出部９１０に対し出力する。これに応じ、第１論理和算出部９１０は、入力したそれぞれのビット列について、当該ビット列を２分割した末尾側の各ビットの論理和を算出する。末尾側である第３および第４ビットのうち第３ビットは論理値真なので、それらの論理和は論理和真である。末尾側である他のビットは何れも論理値偽なので、他の何れの論理和も論理和偽となる。これを受けて、第２論理和算出部９２０は、これらの論理和の論理和を算出する。算出される論理和は論理値真である。出力部９３０は、この論理値真を、ビット位置を示す数値の最上位から３桁目に配列する。
【００７０】
次に、第２論理和算出部９２０は、入力したそのビット列を２分割した各ビット列を、第１論理和算出部９１０に対し出力する。これに応じ、第１論理和算出部９１０は、入力したそれぞれのビット列について、当該ビット列を２分割した末尾側の各ビットの論理和を算出する。末尾側である第２、第４、第６、第８、第１０、第１２、第１４および第１６ビットは何れも論理値偽である。従って、算出される論理和は何れも論理値偽である。これを受けて、第２論理和算出部９２０は、これらの論理和の論理和を算出する。算出される論理和は論理値和偽である。出力部９３０は、この論理値真を、ビット位置を示す数値の最上位から４桁目に配列する。
【００７１】
入力したビット列の長さは１ビットであって、これ以上分割できないので、第２論理和算出部９２０はこの検出の処理を終了する。この結果、出力部９３０は、ビット位置を示す２進数の数値「００１０」を出力する。この数値は１０進数の２であり、有効性データのビット位置を０から順に数えた場合の２のビット位置、即ち第３番目のビット位置を示す。
以上、図１６ｂを参照して説明したように、有効性データ中に論理値が真であるビットが１つだけ含まれている場合においては、ビット位置検出部８２０はそのビット位置を極めて迅速な処理によって検出することができる。
【００７２】
以上の検出結果を受けて、コントローラ８３０は、検出範囲を示す第１マスクデータを更新する。更新後の第１マスクデータに基づく処理を図１７に示す。
図１７は、ある有効性データについて２度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。２度目の処理では、第１マスクデータは、有効性データのうち先頭から第３ビットまでをマスクするように設定されている。従って、第１マスク部８１５は、近傍差分出力である「００１０００１００１００１０００」をマスクして、その結果として「００００００１００１００１０００」を出力する。この出力において、論理値が真である先頭のビットは第７ビットである。したがって、第２マスク部８１８は、この出力のビット列のうち、第８ビット以降のビットをマスクする。この結果、第２マスク部８１８は、「００００００１０００００００００」を出力する。これに応じ、ビット位置検出部８２０は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第７ビットを示す数値の７である。
【００７３】
図１８は、ある有効性データについて３度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。３度目の処理では、第１マスクデータは、有効性データのうち先頭から第７ビットまでをマスクするように設定されている。従って、第１マスク部８１５は、近傍差分出力である「００１０００１００１００１０００」をマスクして、その結果として「０００００００００１００１０００」を出力する。この出力において、論理値が真である先頭のビットは第１０ビットである。したがって、第２マスク部８１８は、この出力のビット列のうち、第１１ビット以降のビットをマスクする。この結果、第２マスク部８１８は、「０００００００００１００００００」を出力する。これに応じ、ビット位置検出部８２０は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第１０ビットを示す数値の１０である。
【００７４】
図１９は、ある有効性データについて４度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。４度目の処理では、第１マスクデータは、有効性データのうち先頭から第１０ビットまでをマスクするように設定されている。従って、第１マスク部８１５は、近傍差分出力である「００１０００１００１００１０００」をマスクして、その結果として「００００００００００００１０００」を出力する。この出力において、論理値が真である先頭のビットは第１３ビットである。したがって、第２マスク部８１８は、この出力のビット列のうち、第１４ビット以降のビットをマスクする。この結果、第２マスク部８１８は、「００００００００００００１０００」を出力する。これに応じ、ビット位置検出部８２０は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第１３ビットを示す数値の１３である。
【００７５】
図２０は、ある有効性データについて５度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。５度目の処理では、第１マスクデータは、有効性データのうち先頭から第１３ビットまでをマスクするように設定されている。従って、第１マスク部８１５は、近傍差分出力である「００１０００１００１００１０００」をマスクして、その結果として「００００００００００００００００」を出力する。この出力において、論理値が真であるビットは無い。したがって、第２マスク部８１８は、全てが論理値偽であるビット列を出力する。従って、ビット位置検出部８２０は、論理値が真であるビットのビット位置を検出できない。
【００７６】
なお、ビット位置検出部８２０は、図１６ｂに例示した処理に代えて、または、その処理に加えて、第２マスク部８１８が出力するビット列の全ビットの論理和を算出し、その論理和が論理値偽である場合に、ビット位置を検出できないと判断してもよい。図では検出できないことを「ＮＯ」というシンボルで示したが、これに代えて、ビット位置検出部８２０は、検出できないことを示す所定の数値、たとえば０や−１を出力してもよい。これにより、算出部７２０は、無効セクタの連続する領域を検出し終えたものとして処理を終了することができる。
【００７７】
次に、有効性データが４ビットのビット列である場合を例に、算出部７２０を実現する回路の構成の具体例を示す。
図２１は、本実施の形態に係る算出部７２０の回路構成の具体例を示す。算出部７２０は、排他的論理和算出部８００として機能する回路と、第１マスク部８１５として機能する回路と、第２マスク部８１８として機能する回路と、ビット位置検出部８２０として機能する回路と、コントローラ８３０として機能する回路とを備える。排他的論理和算出部８００として機能する回路は、排他的論理和を算出する、２入力の論理ゲートを４つ有する。まず、第１の論理ゲートは、定数（Ｆｉｘ  Ｖａｌｕｅ）の論理値（Ｘ（−１））と、有効性データの先頭のビット（Ｘ（０））の排他的論理和を算出する。第２の論理ゲートは、有効性データの先頭のビット（Ｘ（０））と、２番目のビット（Ｘ（１））の排他的論理和を算出する。第３の論理ゲートは、有効性データの２番目のビット（Ｘ（１））と、３番目のビット（Ｘ（２））の排他的論理和を算出する。第４の論理ゲートは、有効性データの３番目のビット（Ｘ（２））と、４番目のビット（Ｘ（３））の排他的論理和を算出する。
【００７８】
それぞれの論理ゲートから出力される論理値を配列したビット列が、近傍差分出力（ＥＸ（０…３））となる。この例では、有効性データが００１１であって、先頭のビットと定数の論理値偽の排他的論理和が算出されるので、近傍差分出力は「００１０」となる。
続いて、第１マスク部８１５として機能する回路は、この近傍差分出力（ＥＸ（０…３））を、第１マスクデータ（ＬＭ（０…３））である「００１１」によりマスクする。このマスクの処理は、例えば、各ビットに対応付けられた論理積ゲートにより実現される。この結果、マスクされたビット列（ＬＭＯ（０…３））である「００１０」が出力される。
【００７９】
第２マスク部８１８として機能する回路は、このビット列（ＬＭＯ（０…３））に基づいて、このビット列のうち論理値が真である先頭のビットより末尾側の各ビットをマスクする第２マスクデータ（ＵＭ（０…３））を生成する。この回路は、例えば、３つの論理積ゲート、および、３つのインバータにより実現される。具体的には、第２マスク部８１８として機能する回路は、定数（Ｆｉｘ  Ｖａｌｕｅ）である論理値の真を、そのまま、第２マスクデータの先頭に配列する。また、第２マスク部８１８として機能する回路は、定数（Ｆｉｘ  Ｖａｌｕｅ）である論理値の真と、ビット列（ＬＭＯ）の先頭のビットの否定との論理積を算出する。この算出されたこの論理積が、第２マスクデータの２番目のビットとして配列される。
【００８０】
また、第２マスク部８１８として機能する回路は、この論理積と、ビット列（ＬＭＯ）の２番目のビットの否定との論理積を算出する。この算出されたこの論理積が、第２マスクデータの３番目のビットとして配列される。また、第２マスク部８１８として機能する回路は、この論理積と、ビット列（ＬＭＯ）の３番目のビットの否定との論理積を算出する。この算出されたこの論理積が、第２マスクデータの４番目のビットとして配列される。このようにして生成される第２マスクデータは、例えば、「１１１０」となる。そして、第２マスク部８１８は、この第２マスクデータにより、ビット列（ＬＭＯ）をマスクする。この結果、第２マスク部８１８は、ビット列（ＬＵＭＯ（０…３））として、「００１０」を出力する。
【００８１】
次に、ビット位置検出部８２０は、このビット列から論理値が真であるビットのビット位置を検出する。この図２１の例では、ビット位置検出部８２０は、このビット列の第３および第４ビットの論理和を上位に、このビット列の第２および第４ビットの論理和を下位に配列した、２ビットの数値を出力する。例えば、この数値は２進数の「１０」であり、ビット位置が０から数えた２の位置、即ち３番目であることを示す。この出力は、コントローラ８３０に入力される。コントローラ８３０は、ビット位置を示すこの出力に基づいて、第１マスクデータを更新する。例えば、コントローラ８３０は、上位ビットの否定および下位ビットの否定の論理積、上位ビットおよび下位ビットの論理和、下位ビットの論理値それ自体、および、上位ビットおよび下位ビットの論理積を、この順に先頭から配列することで、第１マスクデータを生成することができる。
【００８２】
図２２は、有効性データから検出される、無効セクタが連続する領域の具体例を示す。本実施の形態に係る算出部７２０によれば、図２２において斜線の無い領域として示したように、無効セクタの連続する領域ごとに、その開始セクタおよび終了セクタの組を特定することができる。例えば図２２では、第４セクタから８セクタ、第１４セクタから５セクタ、第２０セクタから４セクタ、および、第２２２セクタから４セクタが、それぞれ無効セクタの連続する領域であることが検出された。
【００８３】
以上、図１から図２２を参照して説明した実施形態によれば、無効セクタが連続する領域に対応するメインメモリ２００のアドレスを、有効性データを専用の回路によって処理することにより、極めて迅速に算出することができる。実際に、この回路の動作の所要時間は、例えば１００Ｍｈｚ程度のクロックで動作する場合における１サイクル以内で実行可能なことが確かめられた。さらに、この回路は、無効セクタが連続する領域の境界を示すビット以外をマスクする機能（排他的論理和算出部８００およびビットマスク部８１０）を設けることで、ビット列をエンコードしてビット位置を算出する機能（ビット位置検出部８２０）の回路構成を簡略化して、回路規模を全体として縮小することができる。実際に、この回路の規模は、フラッシュメモリへのアクセスを制御する回路として充分に小規模であり、設置面積、費用および消費電力の観点からも実用的な規模であることが確かめられた。
【００８４】
なお、このような回路による検出は１つの実施の形態に過ぎず、これに多様な変形を加えまたは代替を使用し得ることが当業者にとって明らかである。例えば、無効セクタの連続領域の検出は、上記の図１３および図１４に示す処理の流れに沿って動作するプログラムを、マイクロプロセッサが実行することによっても実現されうる。このほかに、回路を用いて実現する場合であっても、各種の事情に適合させるために様々な変形が可能である。その一例について図２３および図２４を参照して説明する。
【００８５】
図２３は、本実施の形態に係る算出部７２０の第１変形例の機能構成を示す。第１変形例に係る算出部７２０は、図８に示した実施形態における排他的論理和算出部８００に代えて、反転制御部２２００を有する。また、第１変形例に係る算出部７２０は、それぞれ、図８に示した実施形態と略同一であるが異なる符号を付した機能構成要素である、ビットマスク部２２１０、ビット位置検出部２２２０と、コントローラ２２３０と、アドレス算出部２２４０とを有する。以下、図８との相違点を中心に説明する。
【００８６】
反転制御部２２００は、有効性データを示すビット列の各ビットが示す論理値を、コントローラ２２３０からの設定に基づいて、反転し、または、反転しないでそのまま、ビットマスク部２２１０に対し出力する。初期状態において、反転制御部２２００は、論理値を反転するように設定されている。ビットマスク部２２１０は、ビットマスク部８１０と略同一である。即ち、ビットマスク部２２１０は、第１マスク部２２１５および第２マスク部２２１８を有する。第１マスク部２２１５は、出力されたそのビット列から、コントローラ２２３０から設定された検出範囲以外のビットをマスクする。そして、第２マスク部２２１８は、第１マスク部２２１５によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする。
【００８７】
ビット位置検出部２２２０およびアドレス算出部２２４０は、ビット位置検出部８２０およびアドレス算出部８４０と略同一であるから説明を省略する。コントローラ２２３０は、ビット位置検出部２２２０によりビット位置が検出される毎に、そのビット位置よりも末尾側のビット位置を検出範囲として第１マスク部２２１５に設定する。そしてさらに、コントローラ２２３０は、ビット位置検出部２２２０によりビット位置が検出される毎に、反転制御部２２００の反転および非反転を切り替える。コントローラ２２３０は、これらの処理を、ビット位置がビット位置検出部２２２０により検出されなくなるまで繰り返す。
なお、算出部７２０以外の構成は、図１から図２２を参照して説明した実施形態と略同一であるから説明を省略する。
【００８８】
図２４は、本実施の形態の第１変形例に係る算出部７２０の処理の流れを示す。まず、コントローラ２２３０は、論理値が真であるビットを検出する範囲を示す第１マスクデータを初期化する（Ｓ２３００）。初期化された時点において有効性データの全範囲が検出範囲に設定される。具体的には、コントローラ２２３０は、有効性データを示すビット列と同じビット数であって、全てのビットが論理値真であるビット列を、第１マスクデータとして第１マスク部２２１５に設定する。次に、コントローラ２２３０は、反転制御部２２００を反転状態に設定する（Ｓ２３１０）。
【００８９】
そして、反転制御部２２００は、有効性データを示すビット列の各ビットが示す論理値を、コントローラ２２３０からの設定に基づいて、反転し、または、反転しないでそのまま、ビットマスク部２２１０に対し出力する（Ｓ２３１５）。次に、ビットマスク部２２１０は、出力されたこのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。このビットマスクは、Ｓ２３２０およびＳ２３３０により実現される。具体的には、まず、第１マスク部２２１５は、出力されたこのビット列から、設定されたその検出範囲以外のビットをマスクする（Ｓ２３２０）。即ち、第１マスク部２２１５は、このビット列と、設定された第１マスクデータの論理積を算出する。次に、第２マスク部２２１８は、第１マスク部２２１５によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする（Ｓ２３３０）。
【００９０】
次に、ビット位置検出部２２２０は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する（Ｓ２３４０）。コントローラ２２３０は、そのビット位置が検出される毎に（Ｓ２３５０：ＹＥＳ）、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部８１０に設定する（Ｓ２３６０）。具体的には、コントローラ８３０は、先頭からそのビット位置までの各ビットを論理値偽とし、検出されたそのビット位置よりも末尾側の各ビットを論理値真とするビット列を生成して、新たな第１マスクデータとして第１マスク部２２１５に設定する（Ｓ２３６０）。そして、コントローラ２２３０は、反転制御部２２００の反転および非反転を切り替える（Ｓ２３７０）。
【００９１】
以上の処理を、ビット位置検出部２２２０は、ビット位置が検出されなくなるまで繰り返す。ビット位置が検出されない場合（Ｓ２３５０：ＮＯ）、即ち有効性データの全範囲を検出し終えた場合に、アドレス算出部２２４０は、以上の処理により順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ２００のアドレスを算出する。アドレスを算出する処理は、上述のアドレス算出部８４０における、「（２）有効性データの先頭のビットと定数の論理値偽の排他的論理和を算出する場合」の例と略同一であるから説明を省略する。
【００９２】
以上、この第１変形例においても、図１から図２２に示す実施形態と同様の迅速な処理によって、かつ、同程度の回路規模によって、無効セクタが連続する領域を検出することができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を更に加えることのできることが当業者にとって明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００９３】
【図１】図１は、本実施の形態に係るコンピュータ１０のハードウェア構成の一例を示す。
【図２】図２は、本実施の形態に係る記憶装置２０のハードウェア構成の一例を示す。
【図３】図３は、本実施の形態に係るメインメモリ２００のデータ構造の一例を示す。
【図４】図４は、本実施の形態に係るキャッシュメモリ２１０のデータ構造の一例を示す。
【図５】図５は、本実施の形態に係るタグ情報３１０のデータ構造の一例を示す。
【図６】図６は、本実施の形態に係るセグメント３００および有効性データフィールド４１０の具体例を示す。
【図７】図７は、本実施の形態に係るキャッシュ制御部２２０の機能構成を示す。
【図８】図８は、本実施の形態に係る算出部７２０の機能構成を示す。
【図９】図９は、本実施の形態に係るビット位置検出部８２０の機能構成を示す。
【図１０】図１０は、本実施の形態に係るキャッシュ制御部２２０がＣＰＵ１０００からの要求に応じて行う処理の流れを示す。
【図１１】図１１は、Ｓ１０３０における処理の詳細を示す。
【図１２】図１２は、Ｓ１０５０およびＳ１１０５における処理の詳細を示す。
【図１３】図１３は、Ｓ１２００における処理の詳細を示す。
【図１４】図１４は、Ｓ１３４０における処理の詳細を示す。
【図１５】図１５は、ある有効性データについて処理されるＳ１３００の詳細を示す。
【図１６ａ】図１６ａは、ある有効性データについて１度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。
【図１６ｂ】図１６ｂは、ある有効性データについて１度目に処理されるＳ１３４０の更なる詳細を示す。
【図１７】図１７は、ある有効性データについて２度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。
【図１８】図１８は、ある有効性データについて３度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。
【図１９】図１９は、ある有効性データについて４度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。
【図２０】図２０は、ある有効性データについて５度目に処理されるＳ１３２０〜Ｓ１３４０の詳細を示す。
【図２１】図２１は、本実施の形態に係る算出部７２０の回路構成の具体例を示す。
【図２２】図２２は、有効性データから検出される、無効セクタが連続する領域の具体例を示す。
【図２３】図２３は、本実施の形態に係る算出部７２０の第1変形例の機能構成を示す。
【図２４】図２４は、本実施の形態の第１変形例に係る算出部７２０の処理の流れを示す。
【符号の説明】
【００９４】
１０  コンピュータ
２０  記憶装置
２００  メインメモリ
２１０  キャッシュメモリ
２２０  キャッシュ制御部
３００  セグメント
３１０  タグ情報
３２０  セクタ
４００  上位アドレスフィールド
４１０  有効性データフィールド
４２０  ＬＲＵ値フィールド
４３０  状態フィールド
７００  読出し制御部
７１０  書込み制御部
７２０  算出部
７３０  書戻し制御部
８００  排他的論理和算出部
８１０  ビットマスク部
８１５  第１マスク部
８１８  第２マスク部
８２０  ビット位置検出部
８３０  コントローラ
８４０  アドレス算出部
９００  入力部
９１０  第１論理和算出部
９２０  第２論理和算出部
９３０  出力部
１０００  ＣＰＵ
２２００  反転制御部
２２１０  ビットマスク部
２２１５  第１マスク部
２２１８  第２マスク部
２２２０  ビット位置検出部
２２３０  コントローラ
２２４０  アドレス算出部
【図１】
0004963088.tif 000002
【図２】
0004963088.tif 000003
【図３】
0004963088.tif 000004
【図４】
0004963088.tif 000005
【図５】
0004963088.tif 000006
【図６】
0004963088.tif 000007
【図７】
0004963088.tif 000008
【図８】
0004963088.tif 000009
【図９】
0004963088.tif 000010
【図１０】
0004963088.tif 000011
【図１１】
0004963088.tif 000012
【図１２】
0004963088.tif 000013
【図１３】
0004963088.tif 000014
【図１４】
0004963088.tif 000015
【図１５】
0004963088.tif 000016
【図１６ａ】
0004963088.tif 000017
【図１６ｂ】
0004963088.tif 000018
【図１７】
0004963088.tif 000019
【図１８】
0004963088.tif 000020
【図１９】
0004963088.tif 000021
【図２０】
0004963088.tif 000022
【図２１】
0004963088.tif 000023
【図２２】
0004963088.tif 000024
【図２３】
0004963088.tif 000025
【図２４】
0004963088.tif 000026