JP2009020833A - データをキャッシュする技術 - Google Patents

データをキャッシュする技術 Download PDF

Info

Publication number
JP2009020833A
JP2009020833A JP2007184806A JP2007184806A JP2009020833A JP 2009020833 A JP2009020833 A JP 2009020833A JP 2007184806 A JP2007184806 A JP 2007184806A JP 2007184806 A JP2007184806 A JP 2007184806A JP 2009020833 A JP2009020833 A JP 2009020833A
Authority
JP
Japan
Prior art keywords
bit
data
main memory
cache
area
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007184806A
Other languages
English (en)
Other versions
JP4963088B2 (ja
Inventor
Nobuyuki Harada
信之 原田
Takeo Nakada
武男 中田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2007184806A priority Critical patent/JP4963088B2/ja
Priority to US12/172,553 priority patent/US20090019235A1/en
Publication of JP2009020833A publication Critical patent/JP2009020833A/ja
Application granted granted Critical
Publication of JP4963088B2 publication Critical patent/JP4963088B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)

Abstract

【課題】キャッシュメモリからメインメモリへ効率的にデータを書き戻す。
【解決手段】各セクタが有効セクタかどうかを示す論理値を配列した有効性データについて、その有効性データの各ビットとそれに隣接する他のビットの排他的論理和を算出し、その排他的論理和を配列したビット列を、設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外してビットマスクし、そのビット列のうち論理値が真であるビットのビット位置を検出し、当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として設定する処理を、当該ビット位置が検出されなくなるまで繰り返し、順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応するメインメモリのアドレスを算出し、その算出されたアドレスに対し読出コマンドを発行してから、キャッシュセグメントを書き戻す、記憶装置を提供する。
【選択図】図8

Description

本発明は、データをキャッシュする技術に関する。特に、本発明は、メインメモリに書き込むデータをキャッシュする技術に関する。
近年、USBメモリなどに代表されるように、フラッシュメモリデバイス(非特許文献1を参照。)を使った半導体ディスク装置が広く用いられている。半導体ディスク装置には、その用途の拡大に応じて、大容量化、高速化、および低消費電力化が益々求められるようになってきている。フラッシュメモリデバイスは、DRAMとは異なる性質を有する場合がある。例えば、NAND型フラッシュメモリデバイスは、データの書込みにおいて書込み対象となる領域を消去しなければならない。そして、その消去の処理は読出しの処理と比較してとても長い処理時間を要する。また、フラッシュメモリデバイスはアクセス回数が特定の上限に達すると使用できなくなる。
フラッシュメモリデバイスの説明、[online]、インターネットホームページ、アドレス「http://e-words.jp/w/E38395E383A9E38383E382B7E383A5E383A1E383A2E383AA.html」2007年5月24日検索
このようなフラッシュメモリデバイスの性質に対応するためには、フラッシュメモリデバイスに対する複数回のアクセスをまとめて一度に行うことが望ましい。このように複数回のアクセスをまとめて一度に行うための技術として、アクセスのコマンドをバッファする技術が提案されている。即ち例えば、フラッシュメモリデバイスに対する書込みアクセスのコマンドを一旦バッファに格納したうえで、同一のセクタに対する複数の書込みコマンドは1つの書込みコマンドに併合してからフラッシュメモリに発行する方法である。しかしながら、書き込まれるデータの量は書込みコマンドに応じて異なるため、バッファの記憶容量を有効活用して数多くのコマンドを効率的に格納するように制御するのは容易ではない。
また、複数回のアクセスをまとめて一度に行うために、CPUのキャッシュメモリに関する技術を応用することも考えられる。しかしながら、CPUに関する技術は、主としてアクセスの高速化のみを目的としており、メインメモリへのアクセス回数を十分に低減できない場合があることから、その技術をフラッシュメモリデバイスにそのまま応用することはできない。また、CPUのキャッシュメモリに関する技術と同様に、あるいはその技術以上に、キャッシュ処理を制御するための回路には、省スペースと省電力が要求される。このため、アクセスの高速化、アクセス回数の低減と併せて、回路規模および消費電力の低減を実現することが望ましい。
そこで本発明は、上記の課題を解決することのできる記憶装置、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明の第1の形態においては、メインメモリに書き込むデータをキャッシュする記憶装置であって、複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部とを備え、前記算出部は、前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部とを有する記憶装置を提供する。また、当該記憶装置を制御する方法およびプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、本実施の形態に係るコンピュータ10のハードウェア構成の一例を示す。コンピュータ10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部を備える。また、コンピュータ10は、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、記憶装置20、及びCD−ROMドライブ1060を有する入出力部を備える。また、コンピュータ10は、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部を更に備えてもよい。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、記憶装置20、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。記憶装置20は、コンピュータ10が使用するプログラム及びデータを格納する。記憶装置20は不揮発にデータを保持することのできるデバイス、例えば、フラッシュメモリ又はハードディスクドライブであってもよい。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又は記憶装置20に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、コンピュータ10の起動時にCPU1000が実行するブートプログラムや、コンピュータ10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020または記憶装置20に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
コンピュータ10に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出されコンピュータ10にインストールされて実行される。プログラムは、CPU1000により実行される他、記憶装置20に設けられたマイクロコンピュータにより実行され、記憶装置20が有する各部を制御してもよい。以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。
なお、本実施の形態においては記憶装置20を備えるものとしてコンピュータ10を例示したが、この記憶装置20は他の如何なる装置やシステムに備えられてもよい。記憶装置20を備える装置・システムは、例えば、USBメモリデバイス、携帯電話装置、PDA装置、オーディオ・プレーヤ、またはカーナビゲーション・システムなどの、携帯型あるいは移動体に設けられた機器であってもよいし、ファイルサーバやNASなどの据置型機器であってもよい。
図2は、本実施の形態に係る記憶装置20のハードウェア構成の一例を示す。記憶装置20は、メインメモリ200と、キャッシュメモリ210と、キャッシュ制御部220とを有する。メインメモリ200は、例えばコンピュータ10の電源を遮断しても記憶内容を維持することのできる、不揮発性の記憶媒体である。具体的には、メインメモリ200は、少なくとも1つのフラッシュメモリを含んでよい。これに代えて、または、これに加えて、メインメモリ200は、ハードディスクドライブ、光磁気ディスクドライブおよび光磁気ディスク、ならびに、テープドライブおよびテープのうちの、少なくとも1つを含んでよい。メインメモリ200がフラッシュメモリを含む場合において、含まれるフラッシュメモリの数は2以上であることが望ましい。これにより、メインメモリ200の記憶容量を増大させることができるばかりでなく、インターリーブのアクセスによりデータ転送のスループットを向上できる。
キャッシュメモリ210は、例えばコンピュータ10の電源を遮断すると記憶内容を失う、揮発性の記憶媒体である。具体的には、キャッシュメモリ210は、SDRAMであってよい。キャッシュ制御部220は、メインメモリ200に対するアクセスの要求を、CPU1000から受信する。より詳細には、キャッシュ制御部220は、CPU1000上で動作するプログラムの指令に基づいて入出力コントローラ1084が出力する要求を受信する。この要求は、例えばATA(AT Attachment)プロトコル、または、SerialATAプロトコルなどの、ハードディスクドライブに対し要求を転送するためのプロトコルに従うものであってよい。これに代えて、キャッシュ制御部220は、他の通信プロトコルに従って要求を受信してもよい。
受信した要求が読出し要求の場合に、キャッシュ制御部220は、要求されたデータがキャッシュメモリ210に記憶されているか判断する。記憶されていれば、キャッシュ制御部220は、そのデータを読み出してCPU1000に返信する。記憶されていなければ、キャッシュ制御部220は、そのデータをメインメモリ200から読み出してCPU1000に返信する。一方、受信した要求が書込み要求の場合に、キャッシュ制御部220は、書込みデータをキャッシュするためのキャッシュセグメントがキャッシュメモリ210内に割り当てられているかどうかを判断する。割り当てられていれば、キャッシュ制御部220は、そこに書込みデータを書き込む。データを書き込んだキャッシュセグメントは所定の条件が成立した場合にメインメモリ200に書き戻される。一方、キャッシュセグメントが割り当てられていなければ、キャッシュ制御部220は、書込みデータをキャッシュするために新たにキャッシュセグメントを割り当てる。このように、キャッシュ制御部220は、キャッシュメモリ210へのアクセスを制御する役割を果たす。
本実施の形態は、以上のように構成されるデータのキャッシュ技術において、メインメモリ200としてフラッシュメモリを採用した場合に顕著に生じる課題を解決して、記憶装置20に対するアクセスを全体として極めて効率的にすることを目的とする。以下、具体的な説明をすすめる。
図3は、本実施の形態に係るメインメモリ200のデータ構造の一例を示す。メインメモリ200は、複数のメモリブロック、たとえば8192個のメモリブロックを有する。メモリブロックは、メインメモリ200へのデータの書込み単位である。即ち、1つのメモリブロックのデータサイズに満たないデータをメインメモリ200へ書込む場合であっても、メモリブロック毎にしかメインメモリ200へ書込みを行うことができない。したがって、少ないデータを書込む場合には、書き込み対象となるメモリブロック全体をメインメモリ200から読み出した上で、書込みデータによりその読み出したデータを更新して、更新後のデータをメインメモリ200に書き込む。
なお、フラッシュメモリの種類によっては、論理値真(1)から論理値偽(0)への変更および論理値偽(0)から論理値真(1)の変更の一方のみは、メモリブロックよりも小さい単位で行うことができる場合がある。しかしながら、この変更のみによってデータの書込みが実現されることは極めて稀である。このような稀な場合を除き、メモリブロック全体のデータを消去してからそのメモリブロックに対し書込みを行う必要がある。データの消去はメモリブロック単位であり、このことから、データの書き込みも実質的にメモリブロックが単位であることとなる場合が多い。このように、厳密には書き込みおよび消去の概念およびその単位は異なるが、本実施の形態においては実質的に同一と考えて差し支えない。したがって、本実施の形態においては、特に断りのない限り、単に「書込み」または「書戻し」と称する処理は、消去の処理を含み得るものとする。
各メモリブロックは、複数のページ、例えば64個のページを含む。ページは、データの書込み(消去を含まない書込み)および読出しの単位となる。例えばあるフラッシュメモリにおいて、1ページは、2048バイトに64バイトの冗長部を加えた2112バイトである。冗長部は、誤り訂正又は誤り検出のために符号が格納される領域である。読出しは書き込みに比べれば小さい単位で実現できるものの、読出し単位であるページもある程度のサイズのデータであることから、読出し処理についてもある程度のサイズのデータをまとめて行うことが望ましい。読出しを効率化するためにメインメモリ200の内部に読出し専用のキャッシュメモリを設けてもよいが、その場合であっても読出し対象のアドレスはある程度連続していることが望ましい。
1ページは、4個のセクタを含む。セクタは、本来は、記憶装置20に代えて用いられるハードディスクドライブの記憶単位である。本実施の形態では、記憶装置20をあたかもハードディスクドライブであるかのように動作させるので、記憶装置20はハードディスクドライブのセクタと同一サイズの記憶単位を有する。この記憶単位のことを本実施の形態ではセクタと呼ぶ。一例として1セクタは512バイトのデータを含む。なお、ブロック、ページ、または、セクタという用語は、記憶単位あるいは記憶領域を示すものであるが、以降の説明においては表現の簡潔化のため、その領域に記憶されたデータを示すものとしても用いる。
メインメモリ200は、以上のような内部構造を有するものの、ハードディスクドライブのインターフェイスとの間の互換性などのため、外部からはセクタ単位でアクセスが可能なように認識されることが望ましい。例えば、メインメモリ200は、第Pセクタから数えてQ個のセクタからデータを読み出す読出コマンドを受け付けてもよい。パラメータP、Qはコマンドごとに設定可能である。このようなコマンドを受け付け可能な場合であっても、それに応じた処理の速度は内部構造に依存する。例えば、ただ1つのセクタを読み出すコマンドよりも、連続した複数のセクタを読み出すコマンドの方が、セクタあたりの処理速度は速い。内部構造からすれば、読出しはページ単位で実現されるからである。
図4は、本実施の形態に係るキャッシュメモリ210のデータ構造の一例を示す。キャッシュメモリ210は、複数のセグメント300を有する。また、キャッシュメモリ210は、セグメント300ごとに、そのセグメント300の属性を示すタグ情報310を記憶している。セグメント300は、複数のセクタ320を有する。セクタ320は、上記の記憶装置20内のセクタと同一の記憶容量の領域である。各セグメント300は、そのキャッシュセグメント以上のデータサイズであるメモリブロックの少なくとも一部に対応して割り当てられ得る。割り当てられたセグメント300は、対応する当該メモリブロックの一部に記憶されているデータを、その後の読み出し処理の効率化のために予め読み出して記憶している。これに代えて、割り当てられたセグメント300は、対応する当該メモリブロックの一部に記憶するべきデータを、その後にまとめて書込みを行うために一時的に記憶してもよい。
図5は、本実施の形態に係るタグ情報310のデータ構造の一例を示す。キャッシュメモリ210は、タグ情報310を記憶するためのデータフィールドとして、上位アドレスフィールド400と、有効性データフィールド410と、LRU値フィールド420と、状態フィールド430とを有する。上位アドレスフィールド400は、対応するキャッシュセグメント300が割り当てられているメインメモリ200内のブロックについて、そのアドレス値のうち最上位から予め定められた桁数のアドレス値を記憶する。たとえば、メインメモリ200内のアドレスが24ビットで表される場合に、そのうちの下位のnビットを除外した、上位の(24−n)ビットのアドレス値が上位アドレスフィールド400に記憶される。このアドレス値のことを上位アドレス、または、上位アドレス値と称す。また、上位アドレスを除外したアドレスのことを下位アドレス、または、下位アドレス値と称す。
上位アドレス値が(24−n)ビットで表され、各セクタは下位アドレス値によって一意に定まる場合には、1つのキャッシュセグメント300に含まれるセクタ320の数は2のn乗個である。従って、あるキャッシュセグメント300に含まれる各セクタ320が有効なデータを含む有効セクタか否かは、1ビットの論理値で表される。従って、そのセグメント300に含まれる複数のセクタ320が有効セクタかどうかは、2のn乗個のビットで表現される。この論理値をセクタの配列順に従って配列したデータを有効性データと称し、有効性データフィールド410はこの有効性データを記憶する。また、LRU値フィールド420は、LRU値を記憶するためのフィールドである。LRU値は、Least Recently Usedという名称のごとく、未使用の期間を示す指標値である。
具体的には、LRU値は、対応するキャッシュセグメント300についての、未使用期間の長さの順序、あるいは、未使用期間の短さの順序を示してもよい。ここで、「使用」とは、CPU1000による読出し、および、書込みの少なくとも1つの処理の対象となったことをいう。より詳細には、複数のキャッシュセグメント300に未使用期間の長さまたは短さに応じて順序を付した場合において、LRU値は、キャッシュセグメント300の数を上限とした数値となる。従って、これを記憶するLRU値フィールド420は、2を底とするセグメント数Sの対数だけのビットが必要となる。
状態フィールド430は、対応するキャッシュセグメント300に設定している状態を記憶している。状態は例えば3ビットで表され、各キャッシュセグメント300は無効状態、共有状態、保護状態、変更状態、および、修正状態を含む複数の状態の何れかに設定されている。各状態の概要は次の通りである。無効状態は、含んでいる全てのセクタ320が無効セクタであるキャッシュセグメント300の状態を示す。無効セクタは、メインメモリ200と一致するデータを保持しておらず、かつ、メインメモリ200に書込むべきとしてCPU1000から要求されたデータの保持もしていないセクタである。コンピュータ10を起動した場合等の初期状態において、全てのキャッシュセグメント300は無効状態である。
共有状態は、有している全てのセクタ320が共有セクタであるが、書込みに対しリプレースされ得ることを示す、キャッシュセグメント300の状態のことをいう。共有セクタは有効セクタであり、メインメモリ200と一致するデータを保持している。保護状態は、有している全てのセクタ320が共有セクタであり、なおかつ、書き換えから保護される、キャッシュセグメント300の状態を示す。変更状態および修正状態は、メインメモリ200と一致しておらず、メインメモリ200に書込むべきデータを含む状態である。変更状態のキャッシュセグメント300は、一部のセクタ320に、メインメモリ200に書込むべきデータを含むのに対し、修正状態のキャッシュセグメント300は、有しているすべてのセクタ320に、メインメモリ200に書込むべきデータを含む。このようなセクタ320のことを変更セクタと呼ぶ。変更セクタは有効セクタである。
なお、キャッシュセグメントに状態を定義して遷移させる技術一般については、例えばMSIプロトコル、MESIプロトコル、またはMOESIプロトコルとして知られているように周知であるから、他の実装例やその他の詳細についてはこれらの技術のものを参照されたい。
図6は、本実施の形態に係るセグメント300および有効性データフィールド410の具体例を示す。上記の変更状態のように、セグメント300は一部に有効セクタを含む場合がある。図6では有効セクタに斜線を付して示す。無効セクタには斜線を付していない。有効性データフィールド410が記憶する有効性データは、対応するキャッシュセグメントの各セクタが有効か否かを示す論理値をセクタごとに配列したビット列である。例えば、論理値1は有効セクタを示し、論理値0は無効セクタを示す。そして、有効性データは、これらの論理値を、対応するセクタの配列順に配列している。
上述のように、各セクタがキャッシュセグメント中に占める位置は、そのセクタのアドレスによって一意に定まる。また、フラッシュメモリデバイスに対するアクセスを減少させる観点から、書込みのキャッシュミス時にはメインメモリ200からキャッシュメモリ210にデータを読み出すことなく、書込みデータをキャッシュメモリ210に書込むことが望ましい。したがって、様々なアドレスに対し書込みが何度も要求されると、キャッシュセグメント内には有効セクタと無効セクタが離散的に混在することとなる場合がある。この場合、有効性データフィールド410に記憶される有効性データは、論理値1および論理値0が離散的に混在したデータとなる。
図7は、本実施の形態に係るキャッシュ制御部220の機能構成を示す。キャッシュ制御部220は、基本機能として、ATAプロトコルなどの通信プロトコルを、フラッシュメモリなどのメインメモリ200をアクセスするためのコマンドに変換して、メインメモリ200に送信する機能を有する。このほかに、キャッシュ制御部220は、キャッシュメモリ210へのアクセスの制御を通じて記憶装置20全体の性能向上を図る役割を果たす。具体的には、キャッシュ制御部220は、読出し制御部700と、書込み制御部710と、算出部720と、書戻し制御部730とを有する。これらの各部は、ハードワイヤード論理回路またはプログラマブル回路などの各種LSIによって実現されてもよいし、予め読み込んだプログラムを実行するマイクロコンピュータによって実現されてもよい。
読出し制御部700は、セクタに対するデータの読出し要求をCPU1000から受信する。読出しがキャッシュヒットした場合には、読出し制御部700は、キャッシュメモリ210からそのデータを読み出してCPU1000に返信する。読出しがキャッシュミスした場合には、読出し制御部700は、そのデータを含むページをメインメモリ200から読み出してキャッシュメモリ210に格納すると共に、そのデータをCPU1000に返信する。キャッシュヒットおよびキャッシュミスの判断は、読出しの要求されたアドレスの上位アドレスを、各セグメント300に対応する上位アドレスフィールド400と順次比較することによって実現される。一致する上位アドレスがあればキャッシュヒットであり、一致する上位アドレスがなければキャッシュミスである。但し、一致する上位アドレスがあっても、読出しの対象が無効セクタであればキャッシュミスである。
書込み制御部710は、セクタに対するデータの書込み要求をCPU1000から受信する。書込みがキャッシュミスした場合には、書込み制御部710は、書込みデータをキャッシュするために新たなキャッシュセグメントを割り当てる。キャッシュミス・キャッシュヒットの判断は読出しの場合と同様である。即ち、上位アドレスが一致すればキャッシュヒットであって、それ以外はキャッシュミスである。但し、読み出しとは異なり、無効セクタに対する書込みであってもキャッシュヒットである。また、キャッシュセグメントの割り当ては、書込みの要求されたアドレスの上位アドレスを、割り当てようとしているセグメント300に対応する上位アドレスフィールド400に格納することで実現される。また、割り当てるべきセグメント300の選択は、各セグメント300の状態に基づいて実現される。
一例として、無効状態のセグメント300があればそのセグメント300が、無効状態のセグメント300がなければ共有状態のセグメント300が選択される。同じ状態のセグメント300が複数あればLRU値の示す未使用期間が最も長いセグメント300がその中から選択される。選択するべき適切なセグメント300が無い場合には、書込み制御部710は、書戻し制御部730に指示して所定のセグメント300をメインメモリ200に書き戻させて、そのセグメント300を選択して新たなセグメント300として用いる。そして、書込み制御部710は、その新たなセグメント300内のセクタにその書込みデータを書き込んで、書込み対象以外のセクタに対応する有効性データを無効に設定する。
一方、あるセクタに対する書込みがキャッシュヒットした場合には、書込み制御部710は、そのセクタに対する書込みデータをキャッシュするために割り当てられているセグメント300内のセクタに、その書込みデータを書込む。そして、書込み制御部710は、そのセクタに対応する有効性データを有効に設定する。書込まれたデータは、上記のように新たに割り当てるべきセグメント300が無い場合や、その他所定の条件が成立した場合などに、書戻し制御部730によりメインメモリ200に書き戻される。
算出部720は、あるセグメント300をメインメモリ200へ書き戻す場合に処理を開始し、そのセグメント300に対応する有効性データにアクセスして、無効セクタが連続する領域を検出する。例えば、算出部720は、間に有効セクタを含むことなく連続している複数の無効セクタを、無効セクタが連続する領域として検出する。これに加えて、算出部720は、有効セクタと有効セクタとの間にある1つの無効セクタを、当該領域として検出してもよい。そして、算出部720は、検出されたこの領域ごとに、この領域に対応するメインメモリ200のアドレスを算出する。
書戻し制御部730は、検出したその領域ごとに、その領域へデータを読み出す読出コマンドをメインメモリ200に対し発行して、各領域を有効セクタとする。読出コマンドには、読出し範囲、例えば読み出し開始のセクタ位置および読出対象のセクタ数を設定できる。即ち、読出コマンドは無効セクタの数と同数ではなく当該領域の数だけ発行すればよい。読み出し開始のセクタ位置、および、読出対象のセクタ数は、例えば、算出部720によって算出されたアドレスに基づいて算出される。そして、書戻し制御部730は、有効セクタで満たされたそのセグメント300内のデータをメインメモリ200に書き戻す。
図8は、本実施の形態に係る算出部720の機能構成を示す。算出部720は、排他的論理和算出部800と、ビットマスク部810と、ビット位置検出部820と、コントローラ830と、アドレス算出部840とを有する。排他的論理和算出部800は、有効性データを示すビット列を入力する。そして、排他的論理和算出部800は、そのビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する。詳細には、排他的論理和算出部800は、まず、このビット列の先頭のビットと、定数の論理値真の排他的論理和を算出して、算出結果の排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部800は、有効性データを示すビット列の他のビットと、そのビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果の排他的論理和を示すこのビット列における、その先頭のビットよりも末尾側のビットとして配列する。
ビットマスク部810は、排他的論理和を配列したこのビット列を入力する。そして、ビットマスク部810は、そのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。具体的には、ビットマスク部810は、第1マスク部815と、第2マスク部818とを有する。第1マスク部815は、排他的論理和を配列したこのビット列から、設定されたその検出範囲以外のビットをマスクする。そして、第2マスク部818は、第1マスク部815によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする。
ビット位置検出部820は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する。コントローラ830は、そのビット位置が検出される毎に、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部810に設定する処理を、ビット位置が検出されなくなるまで繰り返す。この結果、ビットマスク部810およびビット位置検出部820は、検出したビット位置を順次アドレス算出部840に出力してゆくこととなる。アドレス算出部840は、このように順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ200のアドレスを算出する。
図9は、本実施の形態に係るビット位置検出部820の機能構成を示す。ビット位置検出部820は、入力部900と、第1論理和算出部910と、第2論理和算出部920と、出力部930とを有する。入力部900は、ビットマスク部810によりビットマスクされたそのビット列を入力する。第1論理和算出部910は、入力したそれぞれのビット列について、そのビット列を2分割した末尾側の各ビットの論理和を算出する。第2論理和算出部920は、算出したそれぞれの論理和の論理和を算出する。これと共に、第2論理和算出部920は、第1論理和算出部910が入力したそれぞれのビット列を2分割した各ビット列を、第1論理和算出部910に対し出力する。これらの処理を、第2論理和算出部920は、第1論理和算出部910が入力したビット列を分割できなくなるまで、即ち、そのビット列が1ビットのみを含むようになるまで繰り返す。出力部930は、第2論理和算出部920により順次算出される論理和を算出の順に上位側の桁から配列して、検出するべきビット位置を示す数値として出力する。
図10は、本実施の形態に係るキャッシュ制御部220がCPU1000からの要求に応じて行う処理の流れを示す。読出し制御部700は、セクタに対するデータの読出し要求をCPU1000から受信すると(S1000:YES)、読出し処理を行う(S1010)。例えば、読出し制御部700は、読出しがキャッシュヒットした場合には、キャッシュメモリ210からそのデータを読み出してCPU1000に返信する。また、読出しがキャッシュミスした場合には、読出し制御部700は、そのデータを含むページをメインメモリ200から読み出してキャッシュメモリ210に格納すると共に、そのデータをCPU1000に返信する。
書込み制御部710は、セクタに対するデータの書込み要求をCPU1000から受信すると(S1020)、書込み処理を行う(S1030)。具体的には図10を参照して後に説明する。一方、書込みまたは読出しの要求に関わらず、算出部720および書戻し制御部730は、予め定められた条件が成立した場合に(S1040)、有効セクタおよび無効セクタが混在するセグメント300をメインメモリ200へ書き戻す処理を行う(S1050)。例えば、算出部720および書戻し制御部730は、キャッシュメモリ210中のセグメント300のうち有効セクタおよび無効セクタの双方を含むセグメント300の割合が予め定められた基準値を超えたことを条件に、有効セクタおよび無効セクタの双方を含む何れかのセグメント300を選択して、メインメモリ200に書き戻す。セグメント300の選択はLRU値に基づくことが望ましい。これにより、キャッシュミスの発生前に予め新たに割り当てることのできるセグメント300を確保できるので、キャッシュミス発生時の処理時間を短縮できる。
図11は、S1030における処理の詳細を示す。書込み制御部710は、書込みの要求されたアドレスの上位アドレスが、何れかの上位アドレスフィールド400に記憶された上位アドレスに一致するか否かを判断する(S1100)。一致しない場合(キャッシュミスの場合である、S1100:NO)には、書込み制御部710は、書込みデータをキャッシュするために新たに割り当て可能なセグメント300があるかどうかを判断する(S1102)。例えば、書込み制御部710は、各状態フィールド430を走査して、無効状態または共有状態のセグメント300を検索する。これらのセグメント300はメインメモリ200に書き戻すことなく他の用途に再利用できるからである。何れかの状態のセグメント300が検索されれば、新たに割り当て可能なセグメント300があると判断する。
新たに割り当て可能なセグメント300がない場合には(S1102:NO)、算出部720および書戻し制御部730は、有効セクタおよび無効セクタが混在するセグメント300をメインメモリ200へ書き戻す処理を行う(S1105)。そして、書込み制御部710は、書込みデータをキャッシュするために新たなセグメント300を割り当てる(S1110)。セグメント300を割り当てた後に、あるいは、上位アドレスが一致したキャッシュヒットの場合に(S1100:YES)、書込み制御部710は、新たに割り当てたセグメント300または上位アドレスが一致したセグメント300に書込みデータを格納する(S1120)。そして、書込み制御部710は、新たに割り当てたセグメント300に書込みをした場合には、書込み対象以外のセクタに対応する有効性データを無効に設定する(S1130)。キャッシュヒットの場合には、書込み制御部710は、書込んだセクタに対応する有効性データを有効に設定する。
その他、必要に応じて、書込み制御部710は、セグメント300の状態を他の状態に遷移させるべく、対応する状態フィールド430を更新してよい(S1140)。また、書込み制御部710は、書込み対象のセグメント300に対応するLRU値を変更するべく、LRU値フィールド420を更新してよい(S1150)。
図12は、S1050およびS1105における処理の詳細を示す。算出部720および書戻し制御部730は、あるセグメント300をメインメモリ200へ書き戻す場合に以下の処理を行う。まず、算出部720は、そのセグメント300に対応する有効性データに基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ200のアドレスを算出する(S1200)。書戻し制御部730は、無効セクタが連続する領域ごとに、その領域へデータを読み出す読出コマンドをメインメモリ200に対し発行して、各領域を有効セクタとする(S1210)。そして、書戻し制御部730は、有効セクタで満たされたそのセグメント300内のデータをメインメモリ200に書き戻す(S1220)。
1つのセグメント300が1つのメモリブロックのサイズに満たない場合には、そのメモリブロックの他のデータを読み出す処理をあわせて行う。即ち例えば、書戻し制御部730は、そのメモリブロック内の他のキャッシュセグメントに対応するデータをメインメモリ200から読み出したうえで、書き戻すべきセグメント300および読み出したそのデータを併せてそのメモリブロックに書き戻す。
図13は、S1200における処理の詳細を示す。まず、コントローラ830は、論理値が真であるビットを検出する範囲を示す第1マスクデータを初期化する(S1300)。初期化時点において、有効性データの全範囲が検出範囲に設定される。具体的には、コントローラ830は、有効性データを示すビット列と同じビット数であって、全てのビットが論理値真であるビット列を、第1マスクデータとして第1マスク部815に設定する。次に、排他的論理和算出部800は、有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する(S1310)。
次に、ビットマスク部810は、排他的論理和を配列したこのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。このビットマスクは、S1320およびS1330により実現される。具体的には、まず、第1マスク部815は、排他的論理和を配列したこのビット列から、設定されたその検出範囲以外のビットをマスクする(S1320)。即ち、第1マスク部815は、このビット列と、設定された第1マスクデータの論理積を算出する。次に、第2マスク部818は、第1マスク部815によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする(S1330)。
次に、ビット位置検出部820は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する(S1340)。コントローラ830は、そのビット位置が検出される毎に(S1350:YES)、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部810に設定する(S1360)。具体的には、コントローラ830は、先頭からそのビット位置までの各ビットを論理値偽とし、検出されたそのビット位置よりも末尾側の各ビットを論理値真とするビット列を生成して、新たな第1マスクデータとして第1マスク部815に設定する(S1360)。
以上の処理を、算出部720は、ビット位置が検出されなくなるまで繰り返す。ビット位置が検出されないことは、例えば、ビットマスク部810により出力されるビット列の、全ビットの論理和が偽(0)であるかに基づいて判断することができる。ビット位置が検出されない場合(S1350:NO)、即ち有効性データの全範囲を検出し終えた場合に、アドレス算出部840は、以上の処理により順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ200のアドレスを算出する。この算出の処理は、S1310において排他的論理和算出部800が有効性データの先頭のビットに対しどのような演算を行ったかによって異なる。以下、その具体例を示す。
(1)有効性データの先頭のビットと定数の論理値真の排他的論理和を算出する場合
即ち、この場合、排他的論理和算出部800は、有効性データを示すビット列の先頭のビットと、定数の論理値真の排他的論理和を算出して、算出結果の排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部800は、有効性データを示すビット列の他のビットと、そのビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果の排他的論理和を示すこのビット列における、その先頭のビットよりも末尾側のビットとして配列する。
アドレス算出部840は、この場合、ビット位置検出部820により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出する。これは、奇数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において有効セクタの次に無効セクタが連続する境界部分を示すからである。一例として、1セクタを512bytesとすれば、アドレス算出部840は、上位の(24−n)ビットを上記の上位アドレスとし、下位のnビットをそのビット位置を示す数値とした24ビットの数値を、512倍することで、その開始アドレスを算出することができる。
他方、アドレス算出部840は、ビット位置検出部820により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の末尾アドレスを算出する。これは、偶数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において無効セクタの次に有効セクタが連続する境界部分を示すからである。一例として、1セクタを512bytesとすれば、アドレス算出部840は、上位の(24−n)ビットを上記の上位アドレスとし、下位のnビットをそのビット位置を示す数値から1減じた数値とした24ビットの数値を、512倍することで、その末尾アドレスを算出することができる。
(2)有効性データの先頭のビットと定数の論理値偽の排他的論理和を算出する場合
即ち、この場合、排他的論理和算出部800は、有効性データの先頭のビットと、論理値偽の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列する。そして、排他的論理和算出部800は、有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列する。
アドレス算出部840は、この場合、ビット位置検出部820により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出する。これは、偶数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において有効セクタの次に無効セクタが連続する部分を示すからである。一例として、1セクタを512bytesとすれば、アドレス算出部840は、上位の(24−n)ビットを上記の上位アドレスとし、下位のnビットをそのビット位置を示す数値とした24ビットの数値を、512倍することで、その開始アドレスを算出することができる。
他方、アドレス算出部840は、ビット位置検出部820により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の末尾アドレスを算出する。これは、奇数回目に検出されるビット列は、有効性データを先頭から順次走査した場合において無効セクタの次に有効セクタが連続する部分を示すからである。一例として、1セクタを512bytesとすれば、アドレス算出部840は、上位の(24−n)ビットを上記の上位アドレスとし、下位のnビットをそのビット位置を示す数値から1減じた数値とした24ビットの数値を、512倍することで、その末尾アドレスを算出することができる。
なお、先頭のセクタが無効セクタの場合においては、1回目に検出されるビット位置を特別に取り扱ってもよい。具体的には、アドレス算出部840は、1回目に検出されるビット位置に基づいて、当該キャッシュセグメントの先頭のセクタから開始する、無効セクタが連続する領域の末尾アドレスを算出してもよい。
図14は、S1340における処理の詳細を示す。入力部900は、ビットマスク部810によりビットマスクされたビット列を入力する(S1400)。第1論理和算出部910は、入力部900から入力したそれぞれのビット列について、そのビット列を2分割した末尾側の各ビットの論理和を算出する(S1410)。第2論理和算出部920は、算出したそれぞれの論理和の論理和を算出する(S1420)。次に、第2論理和算出部920は、入力したそのビット列を分割できるかどうかを判断する(S1430)。例えば、ビット列の長さが1ビットの場合は分割できないが、ビット列の長さが2のべき乗の場合は分割できる。入力されるビット列の長さを2のべき乗とすれば、ビット列の長さが1ビットで無ければ必ず分割できる。
ビット列が分割可能な場合に(S1430:YES)、第2論理和算出部920は、第1論理和算出部910が入力したそれぞれのビット列を2分割する(S1440)。そして、第2論理和算出部920は、分割した各ビット列を、第1論理和算出部910に対し出力する(S1450)。一方、ビット列が分割可能でない場合に(S1430:NO)、出力部930は、第2論理和算出部920により順次算出される論理和を算出の順に上位側の桁から配列して(S1460)、検出するべきビット位置を示す数値として出力する(S1470)。
なお、上述の処理の流れは一例であり、多様な変形が可能である。例えば、入力される有効性データのビット列が固定長の場合において、ビット列の分割を何度繰り返せばビット列が分割できなくなるかは予め判明している。この場合には、ビット列が分割可能かどうかを判断する上述のS1430の処理は不要である。即ちこの場合、第1論理和算出部910および第2論理和算出部920は、単に、予め定められた回数だけ論理和の算出処理を交互に繰り返せばよい。
次に、図15から図20を参照して、ある有効性データを対象とした算出部720による処理の具体例を示す。
図15は、ある有効性データについて処理されるS1300の詳細を示す。排他的論理和算出部800が入力する有効性データをビット列「0011110001110000」とする。排他的論理和算出部800は、このビット列の各ビットと当該ビットに隣接する他のビットの排他的論理和を算出する。算出される排他的論理和を示すビット列を、近傍差分出力と呼ぶ。
この図15の例で、具体的には、排他的論理和算出部800は、まず、有効性データを示すビット列の先頭のビットと、定数の論理値偽(0)との排他的論理和を算出して、近傍差分出力の先頭のビットとして配列する。いま、有効性データの先頭は論理値偽(0)であるから、それと定数の論理値偽の排他的論理和は論理値偽(0)となる。次に、排他的論理和算出部800は、有効性データを示す他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を算出して、算出結果を、近傍差分出力の先頭よりも末尾側に配列する。この結果、近傍差分出力は、「0010001001001000」となる。
図16aは、ある有効性データについて1度目に処理されるS1320〜S1340の詳細を示す。1度目の処理では、第1マスクデータは、有効性データを示す何れのビットもマスクしないように設定されている。従って、第1マスク部815は、近傍差分出力である「0010001001001000」をそのまま出力する。この出力において、論理値が真である先頭のビットは第3ビットである。したがって、第2マスク部818は、この出力のビット列のうち、第4ビット以降のビットをマスクする。この結果、第2マスク部818は、「0010000000000000」を出力する。これに応じ、ビット位置検出部820は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第3ビットを示す数値の3である。
図16bは、ある有効性データについて1度目に処理されるS1340の更なる詳細を示す。第1論理和算出部910が入力するビット列は、「0010000000000000」である。まず、第1論理和算出部910は、入力したそのビット列を2分割した末尾側の各ビットの論理和を算出する。末尾側である第9ビットから第16ビットは全て論理値偽なので、算出結果は論理値偽となる。次に、第2論理和算出部920は、算出したそれぞれの論理和の論理和を算出する。第1論理和算出部910により算出される論理和は1つだけなので、第2論理和算出部920により算出される論理和は第1論理和算出部910により算出されるその論理和そのものである。出力部930は、この論理和を、ビット位置を示す数値の最上位の桁に配列する。
次に、第2論理和算出部920は、入力したそのビット列を2分割した各ビット列を、第1論理和算出部910に対し出力する。これに応じ、第1論理和算出部910は、入力したそれぞれのビット列について、当該ビット列を2分割した末尾側の各ビットの論理和を算出する。末尾側である第5ビットから第8ビットは何れも論理値偽なので、第1のビット列について論理和は論理値偽である。また、末尾側である第13から第16ビットは何れも論理値偽なので、第2のビット列について論理和は論理値偽である。次に、第2論理和算出部920は、これらの論理和の論理和を算出する。算出される論理和は論理和偽である。出力部930は、この論理和を、ビット位置を示す数値の最上位から2桁目に配列する。
次に、第2論理和算出部920は、入力したそのビット列を2分割した各ビット列を、第1論理和算出部910に対し出力する。これに応じ、第1論理和算出部910は、入力したそれぞれのビット列について、当該ビット列を2分割した末尾側の各ビットの論理和を算出する。末尾側である第3および第4ビットのうち第3ビットは論理値真なので、それらの論理和は論理和真である。末尾側である他のビットは何れも論理値偽なので、他の何れの論理和も論理和偽となる。これを受けて、第2論理和算出部920は、これらの論理和の論理和を算出する。算出される論理和は論理値真である。出力部930は、この論理値真を、ビット位置を示す数値の最上位から3桁目に配列する。
次に、第2論理和算出部920は、入力したそのビット列を2分割した各ビット列を、第1論理和算出部910に対し出力する。これに応じ、第1論理和算出部910は、入力したそれぞれのビット列について、当該ビット列を2分割した末尾側の各ビットの論理和を算出する。末尾側である第2、第4、第6、第8、第10、第12、第14および第16ビットは何れも論理値偽である。従って、算出される論理和は何れも論理値偽である。これを受けて、第2論理和算出部920は、これらの論理和の論理和を算出する。算出される論理和は論理値和偽である。出力部930は、この論理値真を、ビット位置を示す数値の最上位から4桁目に配列する。
入力したビット列の長さは1ビットであって、これ以上分割できないので、第2論理和算出部920はこの検出の処理を終了する。この結果、出力部930は、ビット位置を示す2進数の数値「0010」を出力する。この数値は10進数の2であり、有効性データのビット位置を0から順に数えた場合の2のビット位置、即ち第3番目のビット位置を示す。
以上、図16bを参照して説明したように、有効性データ中に論理値が真であるビットが1つだけ含まれている場合においては、ビット位置検出部820はそのビット位置を極めて迅速な処理によって検出することができる。
以上の検出結果を受けて、コントローラ830は、検出範囲を示す第1マスクデータを更新する。更新後の第1マスクデータに基づく処理を図17に示す。
図17は、ある有効性データについて2度目に処理されるS1320〜S1340の詳細を示す。2度目の処理では、第1マスクデータは、有効性データのうち先頭から第3ビットまでをマスクするように設定されている。従って、第1マスク部815は、近傍差分出力である「0010001001001000」をマスクして、その結果として「0000001001001000」を出力する。この出力において、論理値が真である先頭のビットは第7ビットである。したがって、第2マスク部818は、この出力のビット列のうち、第8ビット以降のビットをマスクする。この結果、第2マスク部818は、「0000001000000000」を出力する。これに応じ、ビット位置検出部820は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第7ビットを示す数値の7である。
図18は、ある有効性データについて3度目に処理されるS1320〜S1340の詳細を示す。3度目の処理では、第1マスクデータは、有効性データのうち先頭から第7ビットまでをマスクするように設定されている。従って、第1マスク部815は、近傍差分出力である「0010001001001000」をマスクして、その結果として「0000000001001000」を出力する。この出力において、論理値が真である先頭のビットは第10ビットである。したがって、第2マスク部818は、この出力のビット列のうち、第11ビット以降のビットをマスクする。この結果、第2マスク部818は、「0000000001000000」を出力する。これに応じ、ビット位置検出部820は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第10ビットを示す数値の10である。
図19は、ある有効性データについて4度目に処理されるS1320〜S1340の詳細を示す。4度目の処理では、第1マスクデータは、有効性データのうち先頭から第10ビットまでをマスクするように設定されている。従って、第1マスク部815は、近傍差分出力である「0010001001001000」をマスクして、その結果として「0000000000001000」を出力する。この出力において、論理値が真である先頭のビットは第13ビットである。したがって、第2マスク部818は、この出力のビット列のうち、第14ビット以降のビットをマスクする。この結果、第2マスク部818は、「0000000000001000」を出力する。これに応じ、ビット位置検出部820は、この出力のうち論理値が真であるビットのビット位置を検出する。検出されるビット位置は、例えば、第13ビットを示す数値の13である。
図20は、ある有効性データについて5度目に処理されるS1320〜S1340の詳細を示す。5度目の処理では、第1マスクデータは、有効性データのうち先頭から第13ビットまでをマスクするように設定されている。従って、第1マスク部815は、近傍差分出力である「0010001001001000」をマスクして、その結果として「0000000000000000」を出力する。この出力において、論理値が真であるビットは無い。したがって、第2マスク部818は、全てが論理値偽であるビット列を出力する。従って、ビット位置検出部820は、論理値が真であるビットのビット位置を検出できない。
なお、ビット位置検出部820は、図16bに例示した処理に代えて、または、その処理に加えて、第2マスク部818が出力するビット列の全ビットの論理和を算出し、その論理和が論理値偽である場合に、ビット位置を検出できないと判断してもよい。図では検出できないことを「NO」というシンボルで示したが、これに代えて、ビット位置検出部820は、検出できないことを示す所定の数値、たとえば0や−1を出力してもよい。これにより、算出部720は、無効セクタの連続する領域を検出し終えたものとして処理を終了することができる。
次に、有効性データが4ビットのビット列である場合を例に、算出部720を実現する回路の構成の具体例を示す。
図21は、本実施の形態に係る算出部720の回路構成の具体例を示す。算出部720は、排他的論理和算出部800として機能する回路と、第1マスク部815として機能する回路と、第2マスク部818として機能する回路と、ビット位置検出部820として機能する回路と、コントローラ830として機能する回路とを備える。排他的論理和算出部800として機能する回路は、排他的論理和を算出する、2入力の論理ゲートを4つ有する。まず、第1の論理ゲートは、定数(Fix Value)の論理値(X(−1))と、有効性データの先頭のビット(X(0))の排他的論理和を算出する。第2の論理ゲートは、有効性データの先頭のビット(X(0))と、2番目のビット(X(1))の排他的論理和を算出する。第3の論理ゲートは、有効性データの2番目のビット(X(1))と、3番目のビット(X(2))の排他的論理和を算出する。第4の論理ゲートは、有効性データの3番目のビット(X(2))と、4番目のビット(X(3))の排他的論理和を算出する。
それぞれの論理ゲートから出力される論理値を配列したビット列が、近傍差分出力(EX(0…3))となる。この例では、有効性データが0011であって、先頭のビットと定数の論理値偽の排他的論理和が算出されるので、近傍差分出力は「0010」となる。
続いて、第1マスク部815として機能する回路は、この近傍差分出力(EX(0…3))を、第1マスクデータ(LM(0…3))である「0011」によりマスクする。このマスクの処理は、例えば、各ビットに対応付けられた論理積ゲートにより実現される。この結果、マスクされたビット列(LMO(0…3))である「0010」が出力される。
第2マスク部818として機能する回路は、このビット列(LMO(0…3))に基づいて、このビット列のうち論理値が真である先頭のビットより末尾側の各ビットをマスクする第2マスクデータ(UM(0…3))を生成する。この回路は、例えば、3つの論理積ゲート、および、3つのインバータにより実現される。具体的には、第2マスク部818として機能する回路は、定数(Fix Value)である論理値の真を、そのまま、第2マスクデータの先頭に配列する。また、第2マスク部818として機能する回路は、定数(Fix Value)である論理値の真と、ビット列(LMO)の先頭のビットの否定との論理積を算出する。この算出されたこの論理積が、第2マスクデータの2番目のビットとして配列される。
また、第2マスク部818として機能する回路は、この論理積と、ビット列(LMO)の2番目のビットの否定との論理積を算出する。この算出されたこの論理積が、第2マスクデータの3番目のビットとして配列される。また、第2マスク部818として機能する回路は、この論理積と、ビット列(LMO)の3番目のビットの否定との論理積を算出する。この算出されたこの論理積が、第2マスクデータの4番目のビットとして配列される。このようにして生成される第2マスクデータは、例えば、「1110」となる。そして、第2マスク部818は、この第2マスクデータにより、ビット列(LMO)をマスクする。この結果、第2マスク部818は、ビット列(LUMO(0…3))として、「0010」を出力する。
次に、ビット位置検出部820は、このビット列から論理値が真であるビットのビット位置を検出する。この図21の例では、ビット位置検出部820は、このビット列の第3および第4ビットの論理和を上位に、このビット列の第2および第4ビットの論理和を下位に配列した、2ビットの数値を出力する。例えば、この数値は2進数の「10」であり、ビット位置が0から数えた2の位置、即ち3番目であることを示す。この出力は、コントローラ830に入力される。コントローラ830は、ビット位置を示すこの出力に基づいて、第1マスクデータを更新する。例えば、コントローラ830は、上位ビットの否定および下位ビットの否定の論理積、上位ビットおよび下位ビットの論理和、下位ビットの論理値それ自体、および、上位ビットおよび下位ビットの論理積を、この順に先頭から配列することで、第1マスクデータを生成することができる。
図22は、有効性データから検出される、無効セクタが連続する領域の具体例を示す。本実施の形態に係る算出部720によれば、図22において斜線の無い領域として示したように、無効セクタの連続する領域ごとに、その開始セクタおよび終了セクタの組を特定することができる。例えば図22では、第4セクタから8セクタ、第14セクタから5セクタ、第20セクタから4セクタ、および、第222セクタから4セクタが、それぞれ無効セクタの連続する領域であることが検出された。
以上、図1から図22を参照して説明した実施形態によれば、無効セクタが連続する領域に対応するメインメモリ200のアドレスを、有効性データを専用の回路によって処理することにより、極めて迅速に算出することができる。実際に、この回路の動作の所要時間は、例えば100Mhz程度のクロックで動作する場合における1サイクル以内で実行可能なことが確かめられた。さらに、この回路は、無効セクタが連続する領域の境界を示すビット以外をマスクする機能(排他的論理和算出部800およびビットマスク部810)を設けることで、ビット列をエンコードしてビット位置を算出する機能(ビット位置検出部820)の回路構成を簡略化して、回路規模を全体として縮小することができる。実際に、この回路の規模は、フラッシュメモリへのアクセスを制御する回路として充分に小規模であり、設置面積、費用および消費電力の観点からも実用的な規模であることが確かめられた。
なお、このような回路による検出は1つの実施の形態に過ぎず、これに多様な変形を加えまたは代替を使用し得ることが当業者にとって明らかである。例えば、無効セクタの連続領域の検出は、上記の図13および図14に示す処理の流れに沿って動作するプログラムを、マイクロプロセッサが実行することによっても実現されうる。このほかに、回路を用いて実現する場合であっても、各種の事情に適合させるために様々な変形が可能である。その一例について図23および図24を参照して説明する。
図23は、本実施の形態に係る算出部720の第1変形例の機能構成を示す。第1変形例に係る算出部720は、図8に示した実施形態における排他的論理和算出部800に代えて、反転制御部2200を有する。また、第1変形例に係る算出部720は、それぞれ、図8に示した実施形態と略同一であるが異なる符号を付した機能構成要素である、ビットマスク部2210、ビット位置検出部2220と、コントローラ2230と、アドレス算出部2240とを有する。以下、図8との相違点を中心に説明する。
反転制御部2200は、有効性データを示すビット列の各ビットが示す論理値を、コントローラ2230からの設定に基づいて、反転し、または、反転しないでそのまま、ビットマスク部2210に対し出力する。初期状態において、反転制御部2200は、論理値を反転するように設定されている。ビットマスク部2210は、ビットマスク部810と略同一である。即ち、ビットマスク部2210は、第1マスク部2215および第2マスク部2218を有する。第1マスク部2215は、出力されたそのビット列から、コントローラ2230から設定された検出範囲以外のビットをマスクする。そして、第2マスク部2218は、第1マスク部2215によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする。
ビット位置検出部2220およびアドレス算出部2240は、ビット位置検出部820およびアドレス算出部840と略同一であるから説明を省略する。コントローラ2230は、ビット位置検出部2220によりビット位置が検出される毎に、そのビット位置よりも末尾側のビット位置を検出範囲として第1マスク部2215に設定する。そしてさらに、コントローラ2230は、ビット位置検出部2220によりビット位置が検出される毎に、反転制御部2200の反転および非反転を切り替える。コントローラ2230は、これらの処理を、ビット位置がビット位置検出部2220により検出されなくなるまで繰り返す。
なお、算出部720以外の構成は、図1から図22を参照して説明した実施形態と略同一であるから説明を省略する。
図24は、本実施の形態の第1変形例に係る算出部720の処理の流れを示す。まず、コントローラ2230は、論理値が真であるビットを検出する範囲を示す第1マスクデータを初期化する(S2300)。初期化された時点において有効性データの全範囲が検出範囲に設定される。具体的には、コントローラ2230は、有効性データを示すビット列と同じビット数であって、全てのビットが論理値真であるビット列を、第1マスクデータとして第1マスク部2215に設定する。次に、コントローラ2230は、反転制御部2200を反転状態に設定する(S2310)。
そして、反転制御部2200は、有効性データを示すビット列の各ビットが示す論理値を、コントローラ2230からの設定に基づいて、反転し、または、反転しないでそのまま、ビットマスク部2210に対し出力する(S2315)。次に、ビットマスク部2210は、出力されたこのビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクする。このビットマスクは、S2320およびS2330により実現される。具体的には、まず、第1マスク部2215は、出力されたこのビット列から、設定されたその検出範囲以外のビットをマスクする(S2320)。即ち、第1マスク部2215は、このビット列と、設定された第1マスクデータの論理積を算出する。次に、第2マスク部2218は、第1マスク部2215によりマスクされたビット列から、そのビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする(S2330)。
次に、ビット位置検出部2220は、ビットマスクされたそのビット列のうち論理値が真であるビットのビット位置を検出する(S2340)。コントローラ2230は、そのビット位置が検出される毎に(S2350:YES)、そのビット位置よりも末尾側のビット位置を検出範囲としてビットマスク部810に設定する(S2360)。具体的には、コントローラ830は、先頭からそのビット位置までの各ビットを論理値偽とし、検出されたそのビット位置よりも末尾側の各ビットを論理値真とするビット列を生成して、新たな第1マスクデータとして第1マスク部2215に設定する(S2360)。そして、コントローラ2230は、反転制御部2200の反転および非反転を切り替える(S2370)。
以上の処理を、ビット位置検出部2220は、ビット位置が検出されなくなるまで繰り返す。ビット位置が検出されない場合(S2350:NO)、即ち有効性データの全範囲を検出し終えた場合に、アドレス算出部2240は、以上の処理により順次検出されるビット位置に基づいて、無効セクタが連続する領域ごとに、その領域に対応するメインメモリ200のアドレスを算出する。アドレスを算出する処理は、上述のアドレス算出部840における、「(2)有効性データの先頭のビットと定数の論理値偽の排他的論理和を算出する場合」の例と略同一であるから説明を省略する。
以上、この第1変形例においても、図1から図22に示す実施形態と同様の迅速な処理によって、かつ、同程度の回路規模によって、無効セクタが連続する領域を検出することができる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を更に加えることのできることが当業者にとって明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
図1は、本実施の形態に係るコンピュータ10のハードウェア構成の一例を示す。 図2は、本実施の形態に係る記憶装置20のハードウェア構成の一例を示す。 図3は、本実施の形態に係るメインメモリ200のデータ構造の一例を示す。 図4は、本実施の形態に係るキャッシュメモリ210のデータ構造の一例を示す。 図5は、本実施の形態に係るタグ情報310のデータ構造の一例を示す。 図6は、本実施の形態に係るセグメント300および有効性データフィールド410の具体例を示す。 図7は、本実施の形態に係るキャッシュ制御部220の機能構成を示す。 図8は、本実施の形態に係る算出部720の機能構成を示す。 図9は、本実施の形態に係るビット位置検出部820の機能構成を示す。 図10は、本実施の形態に係るキャッシュ制御部220がCPU1000からの要求に応じて行う処理の流れを示す。 図11は、S1030における処理の詳細を示す。 図12は、S1050およびS1105における処理の詳細を示す。 図13は、S1200における処理の詳細を示す。 図14は、S1340における処理の詳細を示す。 図15は、ある有効性データについて処理されるS1300の詳細を示す。 図16aは、ある有効性データについて1度目に処理されるS1320〜S1340の詳細を示す。 図16bは、ある有効性データについて1度目に処理されるS1340の更なる詳細を示す。 図17は、ある有効性データについて2度目に処理されるS1320〜S1340の詳細を示す。 図18は、ある有効性データについて3度目に処理されるS1320〜S1340の詳細を示す。 図19は、ある有効性データについて4度目に処理されるS1320〜S1340の詳細を示す。 図20は、ある有効性データについて5度目に処理されるS1320〜S1340の詳細を示す。 図21は、本実施の形態に係る算出部720の回路構成の具体例を示す。 図22は、有効性データから検出される、無効セクタが連続する領域の具体例を示す。 図23は、本実施の形態に係る算出部720の第1変形例の機能構成を示す。 図24は、本実施の形態の第1変形例に係る算出部720の処理の流れを示す。
符号の説明
10 コンピュータ
20 記憶装置
200 メインメモリ
210 キャッシュメモリ
220 キャッシュ制御部
300 セグメント
310 タグ情報
320 セクタ
400 上位アドレスフィールド
410 有効性データフィールド
420 LRU値フィールド
430 状態フィールド
700 読出し制御部
710 書込み制御部
720 算出部
730 書戻し制御部
800 排他的論理和算出部
810 ビットマスク部
815 第1マスク部
818 第2マスク部
820 ビット位置検出部
830 コントローラ
840 アドレス算出部
900 入力部
910 第1論理和算出部
920 第2論理和算出部
930 出力部
1000 CPU
2200 反転制御部
2210 ビットマスク部
2215 第1マスク部
2218 第2マスク部
2220 ビット位置検出部
2230 コントローラ
2240 アドレス算出部

Claims (13)

  1. メインメモリに書き込むデータをキャッシュする記憶装置であって、
    複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、
    キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
    無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部と
    を備え、前記算出部は、
    前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、
    前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
    ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
    当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
    順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部と
    を有する記憶装置。
  2. 前記ビットマスク部は、
    前記排他的論理和を配列したビット列から、前記検出範囲以外のビットをマスクする第1マスク部と、
    前記第1マスク部によりマスクされたビット列から、当該ビット列のうち論理値が真である先頭のビットよりも末尾側の各ビットをマスクする第2マスク部と
    を有する、請求項1に記載の記憶装置。
  3. 前記ビット位置検出部は、
    前記ビットマスク部によりビットマスクされた当該ビット列を入力する入力部と、
    入力したそれぞれのビット列について、当該ビット列を2分割した末尾側の各ビットの論理和を算出する第1論理和算出部と、
    算出したそれぞれの前記論理和の論理和を算出すると共に、入力したそれぞれの前記ビット列を2分割した各ビット列を、前記第1論理和算出部に対し出力する処理を、ビット列を分割できなくなるまで繰り返す第2論理和算出部と、
    前記第2論理和算出部により順次算出される論理和を算出の順に上位側の桁から配列して、検出するべき前記ビット位置を示す数値として出力する出力部と
    を有する請求項1に記載の記憶装置。
  4. 前記有効性データの各ビットについて、論理値真は有効セクタを示し、論理値偽は無効セクタを示し、
    前記排他的論理和算出部は、前記有効性データの先頭のビットと、論理値真の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列し、前記有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列し、
    前記アドレス算出部は、前記ビット位置検出部により奇数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出し、前記ビット位置検出部により偶数回目に検出されるビット位置に基づいて、当該領域の末尾アドレスを算出する
    請求項1に記載の記憶装置。
  5. 前記有効性データの各ビットについて、論理値真は有効セクタを示し、論理値偽は無効セクタを示し、
    前記排他的論理和算出部は、前記有効性データの先頭のビットと、論理値偽の排他的論理和を算出して、排他的論理和を示すビット列の先頭に配列し、前記有効性データの他のビットと当該ビットの末尾側に隣接するビットの排他的論理和を、排他的論理和を示すビット列におけるその先頭のビットよりも末尾側のビットとして配列し、
    前記アドレス算出部は、前記ビット位置検出部により偶数回目に検出されるビット位置に基づいて、無効セクタが連続する領域の開始アドレスを算出し、前記ビット位置検出部により奇数回目に検出されるビット位置に基づいて、当該領域の末尾アドレスを算出する
    請求項1に記載の記憶装置。
  6. 各キャッシュセグメントは、そのキャッシュセグメント以上のデータサイズであってメインメモリへの書込み単位であるメモリブロックの少なくとも一部に対応して割り当てられており、
    前記書戻し制御部は、書き戻すキャッシュセグメントを有効セクタとすると共に、メモリブロック内の他のキャッシュセグメントに対応するデータをメインメモリから読み出して、そのキャッシュセグメントおよび読み出したデータをメモリブロックに書き戻す
    請求項1に記載の記憶装置。
  7. あるセクタに対する書込みのキャッシュミスに応じ、書込みデータをキャッシュするために新たなキャッシュセグメントを割り当てて、そのキャッシュセグメント内のセクタにその書込みデータを書き込んで、書込み対象以外のセクタに対応する有効性データを無効に設定する、書込み制御部、を更に備える請求項1に記載の記憶装置。
  8. 前記書込み制御部は、あるセクタに対する書込みのキャッシュヒットに応じ、そのセクタに対する書込みデータをキャッシュするために割り当てられているキャッシュセグメント内のセクタに、その書込みデータを書き込んで、そのセクタに対応する有効性データを有効に設定する、請求項7に記載の記憶装置。
  9. 前記メインメモリを備える請求項1に記載の記憶装置。
  10. 前記メインメモリとして、少なくとも1つのフラッシュメモリを備える請求項9に記載の記憶装置。
  11. メインメモリに書き込むデータをキャッシュする記憶装置であって、
    複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリと、
    キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
    無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部と
    を備え、前記算出部は、
    前記有効性データを示すビット列の各ビットが示す論理値を、設定に基づいて、反転し、又は、反転しないでそのまま、出力する反転制御部と、
    出力された当該ビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
    ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
    当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定すると共に、前記反転制御部の反転および非反転を切り替える処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
    順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部と
    を有する記憶装置。
  12. メインメモリに書き込むデータをキャッシュする記憶装置を制御する方法であって、
    前記記憶装置は、
    複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリを有し、
    キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するステップと、
    無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻すステップと、
    を備え、前記算出するステップは、
    前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出するステップと、
    前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするステップと、
    ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するステップと、
    当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として設定するステップと、
    順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するステップと
    を有する方法。
  13. メインメモリに書き込むデータをキャッシュする記憶装置を制御するプログラムであって、
    前記記憶装置は、
    複数のキャッシュセグメントを有し、キャッシュセグメントごとに、当該キャッシュセグメントに含まれる各セクタが有効なデータを含む有効セクタか否かを示す論理値を、当該セクタの配列順に従って配列した有効性データを記憶しているキャッシュメモリを有し、
    コンピュータを、
    キャッシュセグメントをメインメモリへ書き戻す場合に、当該キャッシュセグメントに対応する有効性データに基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出する算出部と、
    無効セクタが連続する領域ごとに、当該領域へ前記メインメモリの前記アドレスからデータを読み出す読出コマンドを発行して、各領域を有効セクタとしてから、当該キャッシュセグメント内のデータをメインメモリに書き戻す書戻し制御部
    として機能させ、前記算出部を、さらに、
    前記有効性データを示すビット列の各ビットについて、当該ビットと当該ビットに隣接する他のビットの排他的論理和を算出する排他的論理和算出部と、
    前記排他的論理和を配列したビット列を、予め設定された検出範囲にある論理値が真のビットのうち先頭のビットを除外して、ビットマスクするビットマスク部と、
    ビットマスクされた当該ビット列のうち論理値が真であるビットのビット位置を検出するビット位置検出部と、
    当該ビット位置が検出される毎に、当該ビット位置よりも末尾側のビット位置を前記検出範囲として前記ビットマスク部に設定する処理を、当該ビット位置が検出されなくなるまで繰り返すコントローラと、
    順次検出される当該ビット位置に基づいて、無効セクタが連続する領域ごとに、当該領域に対応する前記メインメモリのアドレスを算出するアドレス算出部
    として機能させるプログラム。
JP2007184806A 2007-07-13 2007-07-13 データをキャッシュする技術 Expired - Fee Related JP4963088B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007184806A JP4963088B2 (ja) 2007-07-13 2007-07-13 データをキャッシュする技術
US12/172,553 US20090019235A1 (en) 2007-07-13 2008-07-14 Apparatus and method for caching data in a computer memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007184806A JP4963088B2 (ja) 2007-07-13 2007-07-13 データをキャッシュする技術

Publications (2)

Publication Number Publication Date
JP2009020833A true JP2009020833A (ja) 2009-01-29
JP4963088B2 JP4963088B2 (ja) 2012-06-27

Family

ID=40254088

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007184806A Expired - Fee Related JP4963088B2 (ja) 2007-07-13 2007-07-13 データをキャッシュする技術

Country Status (2)

Country Link
US (1) US20090019235A1 (ja)
JP (1) JP4963088B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009211226A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8055816B2 (en) 2009-04-09 2011-11-08 Micron Technology, Inc. Memory controllers, memory systems, solid state drives and methods for processing a number of commands
WO2011128867A1 (en) 2010-04-15 2011-10-20 Ramot At Tel Aviv University Ltd. Multiple programming of flash memory without erase
CN105808153B (zh) * 2014-12-31 2018-11-13 深圳市硅格半导体有限公司 存储系统及其读写操作方法
US10439639B2 (en) * 2016-12-28 2019-10-08 Intel Corporation Seemingly monolithic interface between separate integrated circuit die
CN112256617B (zh) * 2020-10-23 2021-04-20 福州富昌维控电子科技有限公司 一种提升设备串口通信效率的方法及终端

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0628261A (ja) * 1992-04-17 1994-02-04 Hitachi Ltd データ転送方法及び装置
JPH06162786A (ja) * 1992-11-18 1994-06-10 Hitachi Ltd フラッシュメモリを用いた情報処理装置
JPH06349286A (ja) * 1993-06-04 1994-12-22 Matsushita Electric Ind Co Ltd フラッシュメモリ用書き込み制御方法および制御装置
JPH0784886A (ja) * 1993-09-13 1995-03-31 Matsushita Electric Ind Co Ltd キャッシュメモリ制御方法およびキャッシュメモリ制御装置
JPH10312279A (ja) * 1997-05-12 1998-11-24 Ricoh Co Ltd ビット検索回路およびこれを有するマイクロプロセッサ
JP2002281504A (ja) * 2001-03-19 2002-09-27 Nec Eng Ltd 0/1検出回路
JP2006163474A (ja) * 2004-12-02 2006-06-22 Fujitsu Ltd 記憶装置、その制御方法及びプログラム
JP2007528079A (ja) * 2004-03-08 2007-10-04 サンディスク コーポレイション フラッシュコントローラのキャッシュ構造
JP2008299530A (ja) * 2007-05-30 2008-12-11 Internatl Business Mach Corp <Ibm> メインメモリに書き込むデータをキャッシュする技術

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274799A (en) * 1991-01-04 1993-12-28 Array Technology Corporation Storage device array architecture with copyback cache
US6883131B2 (en) * 2001-09-28 2005-04-19 Sun Microsystems, Inc. XOR processing incorporating error correction code data protection

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0628261A (ja) * 1992-04-17 1994-02-04 Hitachi Ltd データ転送方法及び装置
JPH06162786A (ja) * 1992-11-18 1994-06-10 Hitachi Ltd フラッシュメモリを用いた情報処理装置
JPH06349286A (ja) * 1993-06-04 1994-12-22 Matsushita Electric Ind Co Ltd フラッシュメモリ用書き込み制御方法および制御装置
JPH0784886A (ja) * 1993-09-13 1995-03-31 Matsushita Electric Ind Co Ltd キャッシュメモリ制御方法およびキャッシュメモリ制御装置
JPH10312279A (ja) * 1997-05-12 1998-11-24 Ricoh Co Ltd ビット検索回路およびこれを有するマイクロプロセッサ
JP2002281504A (ja) * 2001-03-19 2002-09-27 Nec Eng Ltd 0/1検出回路
JP2007528079A (ja) * 2004-03-08 2007-10-04 サンディスク コーポレイション フラッシュコントローラのキャッシュ構造
JP2006163474A (ja) * 2004-12-02 2006-06-22 Fujitsu Ltd 記憶装置、その制御方法及びプログラム
JP2008299530A (ja) * 2007-05-30 2008-12-11 Internatl Business Mach Corp <Ibm> メインメモリに書き込むデータをキャッシュする技術

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009211226A (ja) * 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
JP4691122B2 (ja) * 2008-03-01 2011-06-01 株式会社東芝 メモリシステム

Also Published As

Publication number Publication date
US20090019235A1 (en) 2009-01-15
JP4963088B2 (ja) 2012-06-27

Similar Documents

Publication Publication Date Title
JP4412676B2 (ja) メインメモリに書き込むデータをキャッシュする技術
US9811456B2 (en) Reliable wear-leveling for non-volatile memory and method therefor
US20180239697A1 (en) Method and apparatus for providing multi-namespace using mapping memory
TWI709854B (zh) 資料儲存裝置及用於存取邏輯至物理位址映射表之方法
US10437737B2 (en) Data storage device
JP4963088B2 (ja) データをキャッシュする技術
KR102679985B1 (ko) 메모리 시스템 및 메모리 시스템의 동작방법
US20100161884A1 (en) Nonvolatile Semiconductor Memory Drive, Information Processing Apparatus and Management Method of Storage Area in Nonvolatile Semiconductor Memory Drive
US8112589B2 (en) System for caching data from a main memory with a plurality of cache states
US20140317337A1 (en) Metadata management and support for phase change memory with switch (pcms)
US10990536B2 (en) Memory controller, operating method of the memory controller, and storage device including the memory controller
TW201007451A (en) Block management method for flash memory and storage system and controller using the same
JP2013097416A (ja) 記憶装置および計算機
WO2018063479A1 (en) Storage device with fine grained search capability
CN115809018A (zh) 改善系统的读取性能的设备和方法
CN113407111B (zh) 闪存控制器、闪存控制器的方法及记忆装置
TWI749903B (zh) 快閃記憶體控制器、記憶體裝置以及存取快閃記憶體模組之方法
JP5025670B2 (ja) 情報処理装置およびデータ記憶装置
JP6254986B2 (ja) 情報処理装置、アクセスコントローラ、および情報処理方法
JP2010176305A (ja) 情報処理装置およびデータ記憶装置
CN113504880A (zh) 存储器缓冲区管理方法、存储器控制电路单元与存储装置
Huang et al. TieredHM: Hotspot-Optimized Hash Indexing for Memory Semantic SSD Based Hybrid Memory
US11941246B2 (en) Memory system, data processing system including the same, and operating method thereof
JP2014197285A (ja) 半導体メモリ装置
US8631187B2 (en) Dual-scope directory for a non-volatile memory storage system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100423

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120111

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120306

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120321

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150406

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees