記憶階層 (キオクカイソウ) とは | 意味や読み方など丁寧でわかりやすい用語解説
記憶階層 (キオクカイソウ) の読み方
日本語表記
記憶階層 (キオクカイソウ)
英語表記
Memory Hierarchy (メモリヒエラルキー)
記憶階層 (キオクカイソウ) の意味や用語解説
コンピュータの性能を考える上で、CPUの処理速度だけでなく、データを保存し読み書きする記憶装置の性能も極めて重要である。この記憶装置には、速度、容量、そして価格(ビット単価)という三つの重要な指標が存在する。一般的に、アクセス速度が速い記憶装置は容量が小さく高価であり、逆に容量が大きい記憶装置はアクセス速度が遅く安価であるというトレードオフの関係にある。もし、コンピュータの全ての記憶領域を最も高速な装置で構成しようとすれば、コストが天文学的な数値になり現実的ではない。一方で、安価で大容量な装置だけを使うと、CPUの高速な処理能力を全く活かせず、システム全体の性能が著しく低下してしまう。このトレードオフを解消し、システム全体として高い性能と十分な容量を、現実的なコストで両立させるために考案された設計思想が「記憶階層」である。記憶階層とは、特性の異なる複数の記憶装置を、CPUからの距離に応じて階層的に配置し、連携させて動作させる仕組みのことである。 記憶階層は、CPUに最も近い階層を頂点とするピラミッドのような構造で表現される。頂点に近いほど高速・小容量・高コストであり、底辺に近づくほど低速・大容量・低コストになる。最上位に位置するのは、CPUの内部に組み込まれた「レジスタ」である。レジスタはCPUが演算を行う際に、命令やデータを直接保持するための記憶領域であり、アクセス速度はCPUの動作クロックと同期しているため、全ての記憶装置の中で最も高速である。しかし、その容量は極めて小さく、キロバイト単位に留まる。次に位置するのが「キャッシュメモリ」である。これはCPUと主記憶装置の間に配置される高速なメモリで、CPUが頻繁に使用するデータを主記憶装置から一時的にコピーして保持する役割を担う。主記憶装置よりも格段に高速なため、CPUが必要とするデータがキャッシュメモリ上に存在すれば(これをキャッシュヒットと呼ぶ)、主記憶装置へのアクセスを待つことなく高速に処理を継続できる。キャッシュメモリはさらに、CPUに近い順にL1、L2、L3といった複数のレベルに分かれている場合が多い。その下には「主記憶装置(メインメモリ)」が存在する。これはコンピュータの主要な作業領域であり、実行中のプログラムや処理対象のデータがロードされる。キャッシュメモリよりは低速だが、後述する補助記憶装置よりは遥かに高速である。一般的にDRAMという種類の半導体メモリが用いられ、電源が供給されている間だけデータを保持できる揮発性メモリである。容量はギガバイト単位が主流である。そして、階層の最も下位に位置するのが「補助記憶装置(ストレージ)」である。これにはSSDやHDDが含まれる。主記憶装置とは異なり、電源を切ってもデータが消えない不揮発性という特徴を持ち、プログラムやファイルを永続的に保存する役割を持つ。アクセス速度は主記憶装置に比べて大幅に遅いが、大容量でビット単価が安い。 この記憶階層が効率的に機能する背景には、「局所性の原理」というプログラムの動作特性がある。局所性の原理には二つの側面がある。一つは「時間的局所性」で、一度アクセスしたデータは近い将来に再びアクセスされる可能性が高いという性質である。もう一つは「空間的局所性」で、あるデータにアクセスした場合、その周辺のデータも続けてアクセスされる可能性が高いという性質である。記憶階層は、この原理を巧みに利用している。CPUがデータを必要とすると、まず最も高速なキャッシュメモリ内を探す。データが見つかれば、それを即座に使用する。見つからなかった場合(キャッシュミス)、次に低速な主記憶装置にアクセスする。そして、主記憶装置から目的のデータを読み出す際に、そのデータ単体だけでなく、周辺のデータもまとめてブロック単位でキャッシュメモリにコピーする。これにより、空間的局所性に基づき、次以降に必要となるであろうデータが予めキャッシュメモリに配置され、高速にアクセスできる可能性が高まる。また、一度使われたデータがキャッシュメモリに残ることで、時間的局所性にも対応できる。この仕組みにより、CPUからのメモリアクセスの大部分は、低速な主記憶装置や補助記憶装置ではなく、高速なキャッシュメモリに対して行われることになり、平均メモリアクセス時間を大幅に短縮できる。結果として、システム全体として、あたかも高速で大容量な一つの記憶装置が存在するかのような性能を実現することが可能となる。 このように、記憶階層は、速度、容量、コストの異なる記憶装置を階層的に組み合わせ、データの局所性を利用して連携させることで、コンピュータシステムの性能と経済性を両立させるための根幹的なアーキテクチャである。システムエンジニアは、アプリケーションの性能チューニングやインフラ設計において、データがどの階層にどのように配置され、アクセスされているかを意識することが重要であり、記憶階層の深い理解は必須の知識と言える。