メモリの詳細

はじめに

メモリについてすこし詳しくお話しします。

メインメモリーの役割

パソコンには、ビデオメモリやキャッシュメモリなど多数のメモリが搭載されていますが、単にメモリと言った場合はほとんどの場合はこのメインメモリをさします。

パソコンのデータはハードディスク他に保存されています。このハードディスクという装置は記憶媒体として優秀なのですが、CPUに比べて非常に低速です。その為、必要なデータをいちいちHDDから読み込んでいてはデータの読み込みが間に合わず、CPUの処理は中断して著しく性能が低下します。また、データを読み込む以外でもアプリケーションが計算や一次的な記憶保持に使う領域としてHDDを使っていたらそれこそ時間がかかって仕方がありません。

よってPC/AT互換機ではメモリという一時的に記憶する装置を搭載して、使うデータやアプリケーションの記憶保持に使うようになっています。ちなみにHDDとメインメモリの速度差は、例えば440BX世代のパソコンにおける平均的なインターフェースの理論値はHDDが33MB/sでメインメモリが800MB/sですからその差は歴然ですね。

メモリの種類

メモリは大きくわけてDRAMとSRAMと呼ばれるものがあります。DRAM=Dynamic Random Access Memory Memoryは通常コンデンサ一個とトランジスタ一個で出来ていて安価に製造できる反面、コンデンサに蓄えられた電荷によってデータが保持されるので時間がたつと記憶が飛ぶので記憶保持動作をする必要があります(これがDynamic=動的の名前の由来。)。

逆にとSRAM=Static Random AccessSRAMは通常六個のトランジスタからなり、DRAMに比べて高価ですがが記憶保持動作をする必要がなくDRAMよりも高速になります。

現在のPC/AT互換機では一部のデータのみを頻繁に使う性質を利用して、低容量で高速なキャッシュと高容量で低速なメインメモリを上手に利用して全体的な速さを向上させています。一部を除いて今は二次キャッシュまで搭載するのが一般的で、ともにCPUにコアに内臓されています。

メインメモリの形状

メインメモリをコントロールするのはノースブリッジです。したがってノースブリッジがどのメモリタイプに対応するかによって、搭載できるメインメモリの種類が限られます。

メインメモリには一般にSIMM=Single Inline Memory ModuleとDIMM=Dual Inline Memory Moduleがあります。

パソコンの初期の頃、メモリチップの足(金属の配線)が少し長めになっていて(ゲジゲジみたいな形)それを一個ずつ増設していました。それだと一つ一つの容量が少ないのでたくさん取り付けなくてはならなくて不便でした。

そこで基板上の両面に複数のメモリチップ(ゲジゲジ?)を搭載して基盤に接続用のコネクタを配置してそれをスロットに差し込むだけで一気に複数(合計で高い容量)をつけられるようにしました。これがモジュール構造で、最初は両面に同じ信号を出すコネクタ形状でした。これがSIMMで16bitのデータバス幅を持つタイプと32bitのデータバス幅をもつタイプがパソコンでは主に使われました。

Pentiumのデータバスが64bitになったため32bitのSIMMでは二枚ずつ刺さなければ使えないという不便な状況になりました。実は32bitになった時も16bitのSIMMを二枚ずつ増設しなければならなくなって不便になったことがあり、その対策として32bitのメモリが登場しています。ところが、SIMM構造のまま64bit以上のデータバスを確保する為にはコネクタの各ピンの間隔をものすごく狭くするか、メモリモジュールを長くする必要がありました。そこで、エッジの片面ずつに別々の信号線を引いてSIMMを二枚刺したのと同じデータバス幅を一枚で実現したのがDIMMなのです。

メインメモリの仕組み

さてデータの読み込み手順は、まずCPUは一次キャッシュを参照しなければ二次キャッシュを参照します。それでもない場合は、チップセットを通してメインメモリを参照し存在すれば読み込まれまし、存在しなければHDDからメモリに読み込まれCPUに送られます。CPUからメインメモリにデータを書き込む場合はその反対で、チップセットを経由してメインメモリに書き込まれます。メモリにはアドレスという値で場所を管理しています。要は住所ですが、CPUはこの住所に対して読み込みや書き込みを指示します。

アドレスの仕組み

DRAMでは内部のデータに読み出す際にデータの場所を指定して読み出しています。その場所をアドレスと呼び、カタカナで書くと仰々しいパソコン用語になりますが日本語訳は住所となります。

さて、アドレスは行と列の番号からなっています。将棋の台のように番号を振っておけば場所を簡単にしていできるワケです。この行をRowと呼び列をColumnと呼び、それぞれのアドレスをRAS=RowAddress StrobeとCAS=Column Address Strobeと呼びます。メモリにアクセスするにはこのRASとCASをしていして目当てのデータの位置を指定して読み出すのです。