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