ダイレクトマップ方式 (ダイレクトマップホウシキ) とは | 意味や読み方など丁寧でわかりやすい用語解説
ダイレクトマップ方式 (ダイレクトマップホウシキ) の読み方
日本語表記
ダイレクトマップ方式 (ダイレクトマップホウシキ)
英語表記
Direct mapping (ダイレクトマッピング)
ダイレクトマップ方式 (ダイレクトマップホウシキ) の意味や用語解説
ダイレクトマップ方式は、コンピュータのキャッシュメモリにおけるデータ管理(マッピング)方式の一つである。CPUの高速な処理能力と主記憶(メインメモリ)の比較的遅いアクセス速度との間のギャップを埋め、システム全体の性能向上を図るためにキャッシュメモリは導入されている。キャッシュメモリは主記憶のデータを一時的に保持する小容量で高速なメモリであり、CPUが次に必要とするデータを予測してあらかじめ読み込んでおくことで、CPUの待ち時間を短縮する。ダイレクトマップ方式は、このキャッシュメモリの基本的なデータ配置ルールを定めるもので、その仕組みの単純さから、初期のコンピュータシステムや、特定のキャッシュレベル(例:一次キャッシュ)で採用されることが多い。 ダイレクトマップ方式におけるデータ配置の基本的な考え方は、主記憶上の特定のアドレスのデータが、キャッシュメモリ内の特定の一箇所にしか格納されないという厳格なルールに基づく。主記憶は「ブロック」と呼ばれる固定サイズのデータ単位に分割され、キャッシュメモリもまた「キャッシュライン」と呼ばれる同サイズの領域に分割されている。主記憶のブロックは、計算によって導き出されるキャッシュメモリの特定の一つのキャッシュラインに直接マッピングされる。 このマッピングを実現するため、主記憶のアドレスは通常、三つの部分に分割される。一つは「オフセット部」、もう一つは「インデックス部」、そして最後に「タグ部」である。オフセット部は、キャッシュライン内のどこにデータが格納されているかを示す。例えば、キャッシュラインのサイズが64バイトであれば、オフセット部はそのキャッシュライン内の0番目から63番目のバイトを示すのに使われる。 インデックス部は、主記憶ブロックがキャッシュメモリのどのキャッシュラインに格納されるかを決定する部分である。ダイレクトマップ方式では、主記憶ブロックのアドレスからインデックス部を抽出するだけで、キャッシュメモリ内の格納位置が一意に決まる。例えば、キャッシュメモリに1024個のキャッシュラインがある場合、インデックス部はそれらを識別するための値となる。この仕組みにより、データの検索時にキャッシュメモリ全体を探し回る必要がなく、指定されたインデックス位置のキャッシュラインだけを確認すればよいという利点がある。 タグ部は、キャッシュメモリに格納されているデータが、主記憶のどのブロックからのものかを識別するために用いられる。同じインデックス値を持つ主記憶ブロックは複数存在する可能性があるため、実際にキャッシュラインに格納されているデータが、CPUが要求している主記憶ブロックと一致するかどうかは、このタグ部を比較することで確認する。キャッシュラインには、データ本体とともに、そのデータのタグと、そのデータが有効であるかどうかを示す「有効ビット(Valid Bit)」が格納されている。 CPUが主記憶上のデータを要求する際、その物理アドレスがキャッシュコントローラに送られる。キャッシュコントローラは、受け取った物理アドレスをオフセット部、インデックス部、タグ部に分解する。まず、インデックス部を用いてキャッシュメモリ内の対応するキャッシュラインを特定する。次に、そのキャッシュラインに格納されているタグと、分解したアドレスのタグ部を比較し、さらに有効ビットがセットされているかを確認する。 もしタグが一致し、かつ有効ビットがセットされていれば、それは「キャッシュヒット」である。つまり、CPUが要求するデータは既にキャッシュメモリ内に存在しているため、オフセット部を使ってそのキャッシュライン内の該当データを直接CPUに渡す。これにより、主記憶へのアクセスを省き、高速にデータを提供できる。 一方で、タグが一致しない、または有効ビットがセットされていない場合は「キャッシュミス」となる。この場合、要求されたデータはキャッシュメモリに存在しないか、古くなっていることを意味する。キャッシュコントローラは主記憶にアクセスし、要求されたデータブロックを読み込む。読み込まれたデータブロックは、インデックス部が示すキャッシュラインに書き込まれる。この際、新しいデータブロックのタグもそのキャッシュラインに書き込まれ、有効ビットがセットされる。もし既存のデータがあった場合、それは新しいデータに上書きされ、破棄される。 ダイレクトマップ方式の最大の利点は、その単純さにある。アドレスから直接キャッシュラインの位置を決定できるため、ハードウェアの実装が容易であり、データ検索のための回路も複雑にならず、非常に高速なアクセスが可能である。そのため、アクセス速度が特に重視される一次キャッシュなどで利用されることがある。 しかし、この単純さは同時に大きな欠点も抱えている。それが「コンフリクトミス(衝突ミス)」と呼ばれる問題である。異なる主記憶ブロックが、偶然にも同じインデックス値を持つ(つまり、キャッシュメモリ内の同じキャッシュラインにマッピングされる)場合、それらのブロックが交互に頻繁にアクセスされると、キャッシュラインの内容が絶えず上書きされ、追い出されるデータが次回のアクセスで再度必要になり、繰り返しキャッシュミスが発生してしまう。これにより、キャッシュメモリの容量が十分に大きくても、その有効活用が阻害され、実際のキャッシュヒット率が低くなってしまう可能性がある。このような状況は、プログラムのデータアクセスパターンによっては頻繁に発生し得るため、性能のボトルネックとなることがある。 ダイレクトマップ方式は、キャッシュメモリの基本的な動作原理を理解する上で重要であり、その単純さから高速アクセスを実現する一方で、特定のデータアクセスパターンにおける効率の悪さという課題を持つ。この課題を克服するために、より柔軟なデータ配置を可能にするセットアソシアティブ方式やフルアソシアティブ方式といった、他のキャッシュマッピング方式が考案されている。