RAMディスク
RAMディスク(ラムディスク)は、Random Access Memory(ランダムアクセスメモリ、RAM)によるストレージである。
ディスクメディアではないが、ディスクドライブをエミュレートすることから「〜ディスク」と呼称される。
実現の仕方により、大きく2種類に分かれる。
RAMを搭載した専用のハードウェアを用意し、オペレーティングシステム (OS) からはハードディスクドライブ (HDD) 等の通常の外部記憶装置とまったく同じに見える(実際は追加のデバイスドライバを必要とする製品もある)。ソリッドステートドライブ(半導体ディスク)の一種であり、近年のフラッシュメモリを使ったFlash SSDと同じ原理である。
専用のハードウェアは持たず、デバイスドライバにより主記憶装置(メインメモリ)の一部を仮想化した外部記憶装置として使う。仮想ディスク(VDISK, Virtual Disk)の一種である。
データレコーダ、フロッピーディスク、ハードディスクドライブなどの装置には、媒体の回転やアクセスヘッドの移動など機械的な駆動部が多く、振動、騒音、発熱、摩耗などの問題がある。また、ヘッドを目的の位置に移動するのに時間を要する点や読み書き自体の速度において主記憶に比べると遅い装置だと言える。
RAMディスクは、揮発性を持つ半導体メモリを使い、非常に高速で、振動、騒音、摩耗などの欠点を持たない記憶機能を提供する。
また、発熱についてもHDDに比べれば小さい。一方、RAMを用いることから記録した情報を保持するには常に外部からの電源供給が必要であり、また磁気ならびに光を用いる各種記録媒体に比べると情報量当たりの価格(容量単価)が高いという欠点がある。よって、アプリケーションの作業領域といった一時的な記憶媒体として用いるのが一般的である。
なお、フラッシュディスクや各種メモリーカードなども同様に半導体メモリを記憶媒体として利用しているが、それらは不揮発性のフラッシュメモリを採用しており、電源を切っても情報が保持される点でRAMディスクと区別される。
工業用コンピューターシステムにおいて、HDDのような機械的な駆動部を持つ装置は耐久性などの問題が大きかった。こういった分野に対して、対振動性や防塵密封運用での耐熱性の高い装置として、半導体だけでファイルシステムを提供する装置が生まれた。半導体と言うことで「シリコンディスク」と呼ばれる事もある。
IDE (ATA)、SATAやSCSIに対応した装置もあり、コンピュータ側からは、単にHDDと同様に認識され、システムの起動装置としても問題なく利用できる。RAMであるため、高い書き換え性能と書き換え耐久性を実現している。
ただし、HDDなどと比べると、生産数の少なさもあり、ビット単価は非常に高価なものとなっている。
SRAM以外のメモリーを利用するものもあるが、それぞれに長所短所がある。本来HDD代替として作られていないメモリーを流用するためのIDE変換といった技術もある。一般市場向けにも、汎用拡張スロットに増設するRAMディスク専用の拡張メモリ製品が古くから存在している。別途購入という点で割高感があることや、近年ではHDDやキャッシュメモリ、OSのキャッシュ技術の進歩によって十分実用的な性能が得られることから、あまり広く普及してはいない。
一方で、1998年3月にヤノ電器がパソコン用のDIMMを搭載できるPCI接続のRAMディスクYR833を発売している(現在は生産停止)。近年では、2005年にGIGABYTEがDDR SDRAMを搭載できるシリアルATA接続のRAMディスク製品i-RAMを発売している(現在は販売中止)。2008年にはACARD TechnologyからDDR2 SDRAMに対応したシリアルATA接続のRAMディスク製品ANS-9010シリーズが発売された。
20MB程度の3.5インチ外付けHDD(SASI)で20万円ほどした時代、黎明期のノートパソコン(当時は「ラップトップ」)では、技術的な制約によりHDDもCD-ROMもなく、その殆どがFDD1基を備えるのみであった(一部の上級機ではFDD2基仕様も存在した)。
しかし、当時のMS-DOS用のアプリケーションはFDD2基を前提としているものも多く、日本語環境の場合はかな漢字変換辞書の存在もあり、機能の増加と共にFDD1基ですべてをまかなうことは困難になりつつあった。
1989年、今日のノートパソコンに近い商品として販売された東芝・ダイナブック(J-3100SS)では、
メインメモリを標準で1.5MB搭載し、うち記憶用に896KB確保された領域はRAMドライブとして確保され、漢字変換システムやソフトウェアを保存する領域として用いられていた。PC-9801シリーズでも、同様の仕組みを持っており、当時FDDが2基存在することを前提としたアプリケーションの動作環境を構築したり、RAMドライブからオペレーションシステムを起動するため用意された。PC-9801シリーズの場合は、BIOS画面において、FDDからの相互コピーをサポートしていた。
後にノートパソコンでも80286、80386機が登場すると、以下に述べる主記憶を使ったより一般的なRAMディスクへと移行したが、HDDを持つものが増えていった。
古いMacintoshでは、本体メモリの一部をRAMディスクとして使用することができた。このRAMディスクは、ファームウェアレベルでサポートされているため、起動ディスクとして使用することもできた。しかし、Power Macintosh G3以降のGrackleメモリコントローラを採用した機種では、再起動時にRAMディスクの内容が保存されなくなり、起動ディスクとして使用することができなくなった。現行機種は、ファームウェアレベルでのRAMディスク機能は持っていない。
OSが起動した後、あるいは起動過程において、専用のデバイスドライバ等が主記憶の一部を確保し、OSが利用可能なとして利用する仕組みのことで、一般ユーザにおいて単にRAMディスクと言えばこれを意味する。
外部記憶装置であるFDDやHDDなどに比べた場合、主記憶を利用したRAMディスクのほうが大幅に高速に動作する。このため、FDDからMS-DOSを起動して利用していた時代には、RAMディスクにかな漢字変換の辞書を置くことが一般的だった。これはMS-DOSが直接利用できるメモリーが1MBでしかなく、追加されたメモリーの多くを間接的に利用せざるを得なかった影響もある。
その後、高速なHDDとキャッシュメモリの普及によって、RAMディスクを使わずとも問題なく快適に利用できるため、上記のようなRAMディスクの利用は廃れた。しかしながらRAMディスクの利便性(高速なアクセス、HDDの消耗や系ファイルシステムでの断片化の抑制)などを認識し、細々とながら利用するユーザーがいた。さらに2008年頃からメモリの価格下落により大容量化が進み、一部では脚光を浴びるようになってきた。
揮発する領域であるため、保存領域としてはドライバによるファイル保存等の処理が必要となる。
一プロセスであるため、プログラムの干渉や、誤動作などの影響を受けるほか、保存が可能になっているソフトウェアであっても、使用中のハングアップなど、二次記憶装置への保存が行われる前のタイミングで、システムが停止した場合、そのデータを喪失することとなる。
反面、ランダムアクセスを含む高速な入出力が可能である特性から、圧縮や、展開等の一時ファイル、作業ファイルの作成場所として指定することで、処理時間を短縮することも可能である。
また、二次記憶装置への書き込みが行われない(電源を切ればデータが残らない)という点が評価され、パスワードのような機密情報をファイル上でやり取りする際に用いられることがある。Kubernetesにおいては、機密情報を扱う用途のSecretリソースをファイルシステムにマウントする場合にRAMディスク(後述するLinuxのtmpfs)が使用される。
8ビットのパソコンの中には、RAMディスクを実現できる拡張ボードをオプションで備えるものがあった、また、グラフィック画面を低解像度に制限する替わりにグラフィックVRAMの一部をRAMディスク化する手法も存在した。シャープのX1シリーズや、MSXシリーズのサードパーティー製がその一例。
グラフィックスを使用しないS-OS"SWORD"では、グラフィックスVRAMをRAMDISKに割り当てるプログラムもシステム拡張の一環として公開されている。
ROM-BASIC環境でROMと重複するアドレスに配置された通常使用されないRAM領域を、RAMディスクとして使用可能にする試みもあった。MSX2のBASIC等が該当するが、容量としては然程大きなものではなく、アクセス手順の煩雑さから処理速度も低速であり、多くのRAMDISKが持つ高速性というメリットは存在しない。
後にMSXでは、メモリマッパを介した領域を使用するRAMDISKが別途実装されている。
8ビットパソコンでは、通常利用されていたDISK-BASIC環境ではファイル管理が貧弱で、またドライバの組み込みなどの柔軟性がほとんどないことから、RAMディスクはCP/Mなどの汎用OS環境で利用することが一般的であった。
マルチメディアの為に用意されたものの、アプリケーションで使用されないVRAMをRAMディスクとして使用される試みもあった。
基本的には、デバイスドライバの読み込みをCONFIG.SYSなどに記述してシステム起動時にRAMディスクを設定する。
バンクメモリやハードウェアEMSメモリなどの頃から、大手サードパーティーがPC-9800シリーズ用に提供するメモリモジュールには、それを管理するためのソフトウェアが付属していた。
その中にそのメモリモジュールやメモリ増設ボードに合わせたRAMディスクドライバも含まれていた。
MS-DOSバージョン4や5の時代になると、386機が一般的となり、プロテクトメモリを利用するRAMディスクドライバが標準で付属するようになった。
FMRシリーズ、FM TOWNSではRAMディスクドライバはIO.SYSに予め組み込まれており、SETUP.EXEでRAMディスクドライブを設定するだけでRAMディスクが利用できた。
LinuxでRAMディスク機能を提供するカーネルモジュールはtmpfsやramfsである。
Linuxでは、起動時の初期段階で、RAMディスクイメージをマウントすることで、起動処理のために必要なデバイスドライバを読み込んだりする仕組みを持っている。
この仕組みは、FDやCDから起動するLinuxシステムでも重要な役割りを持っている。
ファイルシステムのイメージファイルを圧縮する。
圧縮済みのイメージファイルをFDに保存する。
圧縮済みのイメージファイルをラムディスクに展開する。
この手順によって、FDに収まらないシステムを問題無く稼働させることができる。
また、システムのルートファイルシステムをRAMディスクに移すことによって、起動に使ったFDやCD-ROMを抜き取ってしまうこともできる。
FreeBSDにも、主記憶をRAMディスク化するドライバが標準で備わっている。
MFS (Memory File System) - 古くからあるもの。FreeBSD 5.0で廃止。
md (memory disk) - FreeBSD 4.0で導入。なおFreeBSD 5.0では主記憶の他にスワップ領域も指定可能となり、またvnドライバの統合により通常ファイルをマウントする機能も備えた。
mdの大規模使用の実例として、2ちゃんねるの実況系掲示板で特定スレッド(すなわち1つのdatファイル)に対する大量の細切れアクセスを捌く用途で用いられている。
Microsoft製のWindows 2000/XP用サンプルドライバや、アイ・オー・データ機器のRamPhantom3の様に比較的簡単に導入できるソフトウェアが有償無償問わず登場した。
Windows VistaまでのWindowsは32bit版が主流だったが、GBクラスのメモリが安価に入手できるようになると4GBのメインメモリーを搭載するコンピューターが登場するようになった。しかし個人向け32bitOSでは3.2GBを超えるメモリを認識できない
ため、OS管理外領域をRAMディスクとして有効利用する動きが活発化した。
Windows 7以降は4GB以上のメモリを扱える64bit版OSの普及により、余剰領域を利用する理由が薄れたため、当時に比べると話題は沈静化した。また、HDDのデータをメモリへ自動的にキャッシュするWindows SuperFetchの効果も向上したため、RAMディスクを利用する意識も一旦は薄れた。
更にSSDの登場により記憶媒体へのアクセス速度は飛躍的に向上したが、SSDのハードウェア寿命は記憶領域の書き換え回数に比例するため、WebブラウザーのキャッシュをRAMディスクに変更することでSSDの寿命をのばす動きが広がった。