メモリ・リフレッシュ
メモリ・リフレッシュ(Memory_refresh)とは、情報を保存する目的で、コンピューター・メモリのある領域から定期的に情報を読み出し、読み出した情報を修正することなく直ちに同じ領域に書き換えるプロセスのことである[1]。
コンピューター・メモリの中で最も広く使用されているタイプの半導体ダイナミック・ランダム・アクセス・メモリ(DRAM)の動作中に必要とされるバックグラウンド・メンテナンス・プロセスであり、実際、このクラスのメモリを特徴づけるものである[2]。
概要
DRAMチップでは、メモリデータの各ビットは、チップ上の小さなコンデンサ上の電荷の有無として記憶される[2][3]。時間が経つにつれて、メモリセルの電荷は漏れ出すため、リフレッシュされなければ、記憶されたデータは最終的に失われる。これを防ぐため、外部回路が定期的に各セルを読み出して書き換え、コンデンサの電荷を元のレベルに戻す。各メモリ・リフレッシュ・サイクルは、メモリセルの後続領域をリフレッシュするため、連続したサイクルですべてのセルを繰り返しリフレッシュすることになる。このプロセスは通常、メモリ回路によってバックグラウンドで自動的に実行され、ユーザーに意識されることは無い。リフレッシュ・サイクルが発生している間、メモリは通常の読み出しおよび書き込み動作に使用できないが、最新のメモリでは、このオーバーヘッド (コンピュータ)はメモリ動作を大幅に遅くするほど大きくない。
リフレッシュを必要としないメモリは、スタティック・ランダム・アクセス・メモリ(SRAM)と呼ばれる[2]。SRAMメモリセルには4~6個のトランジスタが必要なのに対し、DRAMはトランジスタ1個とキャパシター1個であるため、SRAM回路はチップ上でより多くの面積を必要とする[2]。その結果、SRAMチップのデータ密度はDRAMよりはるかに低くなり、SRAMのビット単価は高くなる。そのため、DRAMはコンピュータ、ビデオゲーム機、グラフィックカード、および大容量と低コストを必要とするアプリケーションのメインメモリに使用されている[4]。メモリ・リフレッシュの必要性により、DRAMのタイミングと回路はSRAM回路よりもかなり複雑になるが、DRAMの密度とコストの利点はこの複雑さを正当化するものである。
DRAMリフレッシュの仕組み
メモリが動作している間、各メモリセルは、メーカーが指定した最大リフレッシュ間隔(通常はミリ秒領域)内で、繰り返しリフレッシュされなければならない。リフレッシュは、データ・アクセスに使用される通常のメモリ動作(読み出しと書き込みのサイクル)ではなく、リフレッシュ・サイクルと呼ばれる特殊なサイクルを使用します。このサイクルは、メモリ回路内の別のカウンタ回路によって生成され、通常のメモリ・アクセスの間に挟まれる[5][6]。
メモリチップ上の記憶セルは、行と列の矩形アレイに並べられている。DRAMの読み出しプロセスは破壊的で、行全体のメモリセルの電荷を除去するため、データを一時的に保持するために、センスアンプと呼ばれる専用のラッチ回路が、メモリセルの列ごとに1つずつチップ上に並んでいる。通常の読み出し動作では、データを読み出して保持した後、センスアンプがアクセスされた行[2][7] のデータを書き換えてから、1列のビットを出力に送る。つまり、チップ上の通常のリード動作は、メモリの行全体を並列にリフレッシュすることができ、リフレッシュ・プロセスを大幅に高速化することができる。通常の読み出しまたは書き込みサイクルはメモリ行をリフレッシュするが、通常のメモリ・アクセスは必要な時間内にすべての行をヒットさせることができないため、別のリフレッシュ・プロセスが必要になる。リフレッシュ処理では、通常の読み出しサイクルを使用するのではなく、時間を節約するために、リフレッシュ・サイクルと呼ばれる短縮サイクルが使用される。リフレッシュ・サイクルはリード・サイクルと似ているが、次の2つの理由により高速に実行される:
リフレッシュ回路は、各セルが確実にリフレッシュされるように、リフレッシュ時間間隔内にチップ上の各行に対してリフレッシュ・サイクルを実行しなければならない。
リフレッシュ回路の種類
初期のシステムでは、リフレッシュを実行するサブルーチンを実行する定期的な割り込みを起動するタイマーを使用して、マイクロプロセッサがリフレッシュを制御するものもあったが、これは、リフレッシュプロセスを停止してメモリ内のデータを失うことなく、マイクロプロセッサを一時停止したり、シングルステップにしたり、省エネのハイバネーションにしたりできないことを意味していた[6]。そのため、最新のシステムでは、リフレッシュはメモリコントローラ[2]内の回路によって処理され、チップ自体に組み込まれている場合もある。擬似スタティックRAM(PSRAM)などの一部の DRAM チップは、すべてのリフレッシュ回路がチップ上にあり、コンピュータの他の部分に関してはスタティック RAM のように機能する[8]。
通常、リフレッシュ回路は、チップのロウ・アドレス・ラインに適用されるリフレッシュすべきロウのアドレスを含むリフレッシュ・カウンタと、ロウをステップ・スルーするためにカウンタをインクリメントするタイマーから構成される[5]。次の2つのスケジューリング戦略が使用されている[6]。
- バースト・リフレッシュ - すべての行がリフレッシュされるまで、一連のリフレッシュ・サイクルが次々と実行される。
- 分散リフレッシュ - リフレッシュ・サイクルは、メモリ・アクセスの間に一定間隔で実行される。
バースト・リフレッシュでは、メモリが利用できない期間が長くなるため、分散リフレッシュが最近のほとんどのシステム、特にリアルタイムシステムで使用されている[5]。分散リフレッシュでは、リフレッシュ・サイクルの間隔は
- メモリースクラビング
- ロウハンマー