Random Access Memory

Random-access memory（ランダムアクセスメモリ、RAM、ラム）とは、コンピュータで使用するメモリの一分類である。本来は、格納されたデータに任意の順序でアクセスできる（ランダムアクセス）メモリといった意味で、かなりの粗粒度で「端から順番に」からしかデータを読み書きできない「シーケンシャルアクセスメモリ」(SAM)と対比した意味を持つ語であった。しかし本来の意味からズレて、電源を落としても記録が消えないROM（これも本来の読み出し専用メモリからは意味がズレてきている。）に対して、電源が落ちれば記憶内容が消えてしまう短期メモリの意で使われていることが専らである。 本来の「ランダムアクセス・メモリ」とは、任意のアドレスの記憶素子に対して随時、アクセスパターンに依存した待ち時間などを要することなく、読み出しや書き込みといった操作ができるメモリを指す語である。磁気テープのように記憶情報が順番に格納されていて所要の番地への操作を行なうには順番待ちをしなければならないメモリを指す「シーケンシャルアクセス・メモリ」に対比した語であって、RAMという言葉には読み書き (Read/Write) 可能という意味は（本来は）ない。 読み書き (Read/Write) 可能という意味ではRWM (Read write memory) という表現がある。しかし実際上はほとんど全く使われていない。 厳密にはこれらも、半導体チップによるものだけを指す語ではないが、ここでは専ら半導体チップによるものについて述べる。 半導体DRAMは、記憶データをコンデンサ（キャパシタ）の電荷として蓄えているため、一定時間経つと自然放電によりデータが消えてしまう。そのため、定期的に情報を読み出し、再度書き込みをする必要がある。この動作を「リフレッシュ」といい、記憶を保持するためには1秒間に数十回の頻度で繰り返しリフレッシュを行う必要がある。一般にそのようなメモリをダイナミックメモリといい、ダイナミックなRAMということでDRAMと呼ばれている。DRAMは、アドレスを指定してからデータを読み出すまでの時間がSRAMよりも若干遅いものの、記憶部の構造が単純であるため、容量あたりのコストが低いという特徴がある。また、常にリフレッシュを行っているため、消費電力が大きい。DRAMのアクセス方式によってさまざまな種類のものが市販されている。 半導体SRAMは、記憶部にフリップフロップを用いており、リフレッシュ動作を必要としない。また、DRAMより高速動作させることができるが、記憶部の回路が複雑になるため、容量あたりのコストが高い。リフレッシュ動作を必要としないため、リフレッシュ動作による電力の消費が無い。 半導体DRAMも半導体SRAMも揮発性メモリである。揮発性でないメモリとして、不揮発性メモリがある。 最初期（1940年代）の電子計算機の時点で、当時の主力素子である真空管で1ビット1ビットメモリを作っていたのでは高価につきすぎることから、いくつかの記憶装置に特化した素子や機器が考案された。アタナソフ&ベリー・コンピュータではリフレッシュ操作を機械的に行う、キャパシタによる一種のDRAMのような装置が考案された。1949年に稼働したEDSACで使われた水銀遅延記憶装置などの信号の遅延を利用するものは、原理上シーケンシャルアクセスである。EDSACは初の「実用的な」プログラム内蔵方式のコンピュータだとされているが、プログラム内蔵方式の実用性のためにはある程度多くのメモリが必要であり（EDSACでは1024短語）、水銀遅延記憶装置は同機の成功の重要な要素であった。当時の他の素子では、ブラウン管面の帯電を利用するウィリアムス管は、ランダムアクセスでリフレッシュを必要とするなどDRAMに近い性格を持つ。 以降には「ランダムアクセス」メモリに関する話題は特に無い。 その後、1949年から1952年に磁気コアを用いた磁気コアメモリが開発された。コアメモリでは、格子状に配置した磁気コアと呼ばれるリング状の磁性体に、縦と横方向から電線を貫いた構造をしていた。磁気コアメモリは、集積回路による半導体メモリが登場する1960年代末から1970年代初頭まで、広く使われていた。特には、放射線などの影響を受けにくいという特性から、宇宙機用などでは1980年代でも用いられていた例がある。また、破壊読み出しなので読み出したら書き戻す必要がある一方、ドーナツ状のフェライトコアの磁性を利用しているため不揮発という特性がある。 21世紀の現在では、コンピュータの主記憶装置は、すべてDRAMになっている。原理的にSRAMは容量あたりの単価が高くならざるをえないため、（何らかのブレークスルーがないかぎり）主記憶装置をSRAMで構成するようになるとは考えられていない。いっぽうで、何らかの不揮発性メモリがDRAMを置き換える可能性はあるものと考えられており、研究開発がおこなわれている。例えば、カーボンナノチューブを使ったものや、トンネル磁気抵抗効果を使ったMRAMがある。また、2004年には、インフィニオン・テクノロジーズが16MiBのMRAM試作品を公開した。現在開発が進んでいる第二世代の技術は、Thermal Assisted Switching (TAS) 方式と Spin Torque Transfer (STT) 方式がある。前者はベンチャー企業が単独で開発しているが、後者はIBMなどを含め複数の企業が開発に乗り出している。ただし、これらが今後の主流となるかどうかは、まだ不透明である。 主記憶装置において、アクセススピードや容量あたりコストと並んで重要なのは、消費電力である。過去の組み込みシステムにおいては、消費電力を抑えるためにSRAMが用いられていたが、近年では低消費電力に特化したDRAMが使われている。例えば、サーバファームなどでは、高速性よりも消費電力を抑えることに重点を置いた、"EcoRAM" と呼ばれるRAMも登場している。 SRAM (Static RAM) DRAM (Dynamic RAM) FPM DRAM (First Page Mode DRAM) EDO DRAM (Extended Data Out DRAM) SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DDR2 SDRAM DDR3 SDRAM DDR4 SDRAM DDR5 SDRAM GDDR3 GDDR4 GDDR5 GDDR6 RDRAM (Rambus DRAM) DRDRAM (Direct RDRAM) 擬似SRAM FeRAM (Ferroelectric RAM) MRAM (Magnetoresistive RAM) ReRAM (Resistive RAM) PRAM (Phase change RAM) 理論的にはRandom Access Machine（理論の文脈では、RAMという略語はこちらのこともある）といって、全てのメモリに一定時間でランダムアクセスできるような機械のモデルなどもあるが、現実のコンピュータでは一般に「早くて小さい」メモリと「遅くて大きい」メモリを組み合わせて使う。 多くのコンピュータシステムは、レジスタを頂点として、マイクロプロセッサチップ上のSRAMキャッシュ、外部キャッシュメモリ、主記憶装置、補助記憶装置等々といったようなメモリ階層を持っている。DRAMという階層だけを見てもアクセス時間にはバラつきがあるが、その範囲は回転式の電子媒体や磁気テープほど大きくはない。メモリ階層を使う目的は、メモリシステム全体のコストを最小化しつつ、平均的なアクセス性能を向上させることにある。一般に、レイテンシ・スループット・アクセス単位といった点で、レジスタが最も高速・細粒度であり、階層を下に行くほど低速・粗粒度となる。 マイクロプロセッサの速度（ここでは、周辺の速度によって待たされることが無かった場合の単位時間あたりのデータ処理量）とその向上に対して、メモリの速度（レイテンシとスループット）とその向上を比較すると、メモリの方が遅いという傾向は、マイクロプロセッサの誕生以来一貫して続いている。最大の問題は、チップとチップの間のデータ転送帯域幅に限界があることである。1986年から2000年まで、CPUの性能向上は年率平均で55%であったのに対して、メモリの性能向上は年率平均で10%ほどであった。この傾向から、メモリレイテンシがコンピュータ全体の性能においてボトルネックになるだろうと予想されていた。 その後、CPUの性能向上は鈍化した。これには、微細化により性能向上が物理的限界に近づいていることや発熱の問題もあるが、同時にメモリとの速度差を考慮した結果でもある。インテルは、その原因について次のように分析している。 第一に、チップが微細化しクロック周波数が上がると、個々のトランジスタのリーク電流が増大し、消費電力の増大と発熱量の増大を招く（中略）、第二にクロック高速化による利点はメモリレイテンシによって一部相殺される。つまり、メモリアクセス時間は、クロック周波数の向上に合わせて短縮することができなかった。第三に、これまでの逐次的アーキテクチャでは、ある種のアプリケーションは、プロセッサが高速化したほど性能が向上しなくなっている（フォン・ノイマン・ボトルネック）。さらに、集積回路の微細化が進行したことにより、インダクタンスの付与が難しく、信号伝送におけるRC遅延が大きくなる。これも周波数向上を阻害するボトルネックの一つである。 信号伝送におけるRC遅延については Clock Rate versus IPC: The End of the Road for Conventional Microarchitectures にもあり、2000年から2014年のCPUの性能向上は、最大でも年率平均で12.5%という見積もりが示されていた。インテルのデータを見ても、2000年から2004年の間、CPUの速度の向上は鈍化している。 しかし、この見積もりはCPUの性能向上があくまで「クロック周波数の向上によって」高性能化するという前提に立っていた。だが、2004年に AMDがK8アーキテクチャを発表すると、パイプラインバーストによる処理遅延を抑え単位クロック数あたりの命令実行数を向上することがトレンドとなり、クロック周波数のむやみな向上は止まったが、処理能力の向上はむしろ激化した。さらに、この頃から1つのプロセッサダイに複数の主演算コアを搭載し、さらにそれを仮想的に複数のコアとするスレッディング技術を搭載することが主流となった。AMDの製品では、2005年のAthlon64 X2 3800+ では約7.31GFLOPS相当だったが、2017年のRyzen 7 1800Xでは約42.53GFLOPSにも達しており、これは年率平均にすると約50%程度の性能向上と、2000年以前とさして変わっていない。 一般にRAMという語は、主記憶装置寄りのそれを指し、補助記憶装置寄りのそれは指さないことが多い。しかし、DVD-RAMのような例外もある。 DVD-RAMは文字通りランダムアクセスを重視して設計されており、DVD-RWや他のDVDと比べてランダムアクセス性能が高い。 RAMディスクという語は2通りに使われている。どちらも「論理的には超高速のハードディスクのように見える」という点は共通である。 1種類目は、SCSIなどのインタフェースでアクセスできる、外からはハードディスクのように見える装置だが、内部は(D)RAMで構成されているというもので、バッテリーバックアップ等により記憶が保持できるようにしたものも多いが、そうでないものもある。 2種類目は、オペレーティングシステムのデバイスドライバとして、ユーザーのプログラムからはストレージ（ブロックデバイス）のように見えるが、実際にはメインメモリに確保した領域に記録している、というもので、当然ながらシャットダウンにより情報は失われる。テンポラリファイル等の置き場等として使われることが意図されている。 ROMの内容をRAMにコピーしてアクセス時間を短縮することがある（ROMは一般に低速である）。コンピュータの電源投入時、メモリを初期化した後、ROMの配置されていたアドレス範囲をコピーしたRAMに切り替える。これをシャドウRAMと呼ぶ。これは組み込みシステムでもよく行われる技法である。 典型例として、パーソナルコンピュータのBIOSがあり、ファームウェアのなんらかのオプション設定でBIOSをシャドウRAMにコピーして使うことができる（システム内の他のROMをRAMにコピーして使うオプションもある）。それによって性能向上する場合もあるし、非互換問題が発生する場合もある。例えば、ある種のハードウェアはシャドウRAMが使われているとオペレーティングシステムにアクセスできない。また、ブート後は全くBIOSを使わないシステムなら、性能は向上しない。当然ながらシャドウRAMを使うと、主記憶の空き容量が少なくなる。