記憶装置

記憶装置（きおくそうち）は、コンピュータが処理すべきデジタルデータをある期間保持するのに使う、部品、装置、電子媒体の総称。「記憶」という語の一般的な意味にも対応する英語としてはメモリ（英: memory）である。記憶装置は「情報の記憶」を行う。他に「記憶装置」に相当する英語としてはストレージ デバイス（英: Storage Device）というものもある。 ディジタルコンピュータは、二進法（バイナリ）のデータ、すなわちビットを扱う。テキストも数値も画像もコンピュータの内部ではビットである。ビットは、それがいくつか集まった単位でまとまって扱われることも多い。よく使われる単位にバイトがある。バイトはほとんどの場合、8ビットである。 コンピュータが情報処理するには、一般にデータを一時的に保持する必要があり、そのための機構がメモリである。メモリがないと、コンピュータは決められた処理を行って結果を即座に出力することしかできない。 たとえば電卓は、ごくわずかなメモリしか持っていない（ディスプレイに表示される桁数の数値の2個ぶん、あるいは3個ぶん程度）。DSPでは、プログラムと、相関を取るなどの期間の情報さえ保持できれば良い。それに対して汎用のコンピュータは、いわゆるプログラム内蔵方式であり、理論でいう「計算可能」なあらゆる「計算」を処理できるが、それに対応するプログラムを保持するだけのメモリが必要であり、計算の途中経過を保持するためのメモリも必要である。 理想を言えば、最高速のメモリがたっぷりあることが好ましいわけであるが、コスト上の理由や物理的な実装の制約、インタフェースの限界などにより、小容量で高速のメモリと、大容量で低速のメモリを組み合わせ、それらを適宜やりくりしなくてはならない。またインタフェースについても、レイテンシ（遅延）およびスループット（帯域）の両者の点で、高性能な接続と低性能な接続がある。結果として、一般的に、CPUを頂点としたピラミッド状のモデルとなる。 レジスタはプロセッサ内部にある、最高速だが数がごく限られた記憶装置である。 一次記憶装置または主記憶装置という語は、「プロセッサが直接アクセスできる記憶装置」を指す、大雑把な分類である。プロセッサはそこに格納されている命令を常に読み取り、実行している。頻繁に操作しているデータも同様の方法でそこに格納されている。 初期のコンピュータでは、水銀遅延線、ウィリアムス管、磁気ドラムメモリが一次記憶装置として使用された。1954年ごろ、磁気コアメモリがそれら信頼性の低い手法に取って代わった。集積回路の集積度の向上により半導体メモリが実用的になり、磁気コアメモリに代わって主流となった。IBMのメインフレームの場合、1964年発表のSystem/360ではまだコアメモリ、1970年リリースのSystem/370では半導体メモリである。また、現在の Random Access Memory（RAM）は、ほぼ全て半導体メモリである。 レジスタ (コンピュータ): レジスタを一次記憶装置に分類することもある。各レジスタは一般に1ワードのデータ（32ビットや64ビット）を格納する。CPUの命令は、演算装置にレジスタ上のデータを使った計算や他の操作をさせるものである（それ以外の補助的な命令もある）。プログラミングにおいて、レジスタは特別である（また、一部のレジスタは内部的なもので、プログラマからは「見えない」）。レジスタは記憶装置の中でも最速であり、フリップフロップで構成されている。一時記憶装置という語もあるが「一次」と「一時」でまぎらわしい。 キャッシュメモリ: 超高速なレジスタと若干遅いメインメモリの中間にある。一般にプログラマから見て、速度以外は通常のメインメモリと同様に扱える対象となっている（正確に言うなら、通常のメインメモリのつもりでアクセスすると、「キャッシュにヒット」すれば、なぜか速い、という感じである）。キャッシュメモリはメインメモリより高速だが、容量は小さい。また、レジスタに比べると低速だが容量は大きい。キャッシュメモリ自体も階層化されることが多く、一次キャッシュは最も小さいが最速で、プロセッサに最も近い位置に配置される。二次キャッシュはそれよりも大きく低速である。さらに三次キャッシュがある場合もある。 ワーキングメモリ: ハードウェア的にはキャッシュメモリに相当するメモリを、プログラマが意識して扱う必要があるような形で持っているコンピュータもある。Emotion Engineの「データスクラッチパッドRAM」など。 メインメモリは、メモリバス経由でCPUと直接または間接に接続される。メモリバスは実際にはアドレスバスとデータバスで構成される。CPUはまず、アドレスバスにメモリアドレスと呼ばれる数値を送り、アクセスしたいデータの位置を指定する。次にデータ本体の読み書きをデータバスで行う。場合によってはCPUと一次記憶装置の間にメモリ管理ユニット (MMU) があり、仮想記憶という抽象化などのタスクを実施する。 一次記憶装置で使うRAMは揮発性であるため、それだけでは電源を入れたときにCPUが実行する命令を読み出すことができない。そこで、小さな立ち上げプログラム（BIOS）の格納された不揮発性メモリを使ってブート処理を行う。ブート処理では、不揮発性の二次記憶装置からより大きなプログラムをメインメモリに持ってきて、それを実行する。ここで使われる不揮発性メモリを Read Only Memory (ROM) と呼ぶ。 "ROM" と呼ばれるメモリは実際には「リードオンリー」ではないことが多く、更新が可能である。しかし、書き込みは遅く、再書き込みの前に消去する必要がある。組み込みシステムではプログラムを書き換えることが少ないため、ROM上のプログラムを直接実行することがある。普通のコンピュータではROMにBIOSなどの単純なプログラム以外を置くことはなく、プログラムは不揮発性の二次記憶装置に記憶しておくのが一般的である。 前述したとおり、英語では「一次記憶装置」は primary storage だが、最近では storage の意味が日本語での用法に近い場合があるため、primary storage が本項目で言うところの「二次記憶装置」を意味する場合も出てきている。 二次記憶装置または補助記憶装置は、入出力チャネル等を使ってアクセスされる記憶装置を指す、大雑把な分類である。データは一次記憶のバッファとの間で転送され、利用される。二次記憶装置は電源が切れてもデータが失われない、不揮発性である。また、価格も一次記憶装置に比べると桁違いに安価である。結果として、現在のコンピュータは一次記憶装置よりも大容量の二次記憶装置を備え、そこにデータを長期間記憶しておくことが多い。 現在のコンピュータは、二次記憶装置としてハードディスクドライブを使うのが一般的である。ハードディスク上のデータアクセスにかかる時間はミリ秒単位である。一方、RAM上のデータアクセスにかかる時間はナノ秒単位である。これはハードディスクが機械的に可動（回転）する装置であるためで、メインメモリと比較すると約100万倍遅い。CDやDVDなどの光学ドライブはさらにアクセス時間が長い。 二次記憶装置に使われる他の技術としては、フラッシュメモリ（USBメモリなど）、フロッピーディスク、磁気テープ、紙テープ、パンチカード、メインメモリとは異なるRAMディスク、ZIPドライブなどがある。 三次記憶装置は、記憶装置の第三の階層である。典型的な例として、ロボット機構を使って必要に応じて記憶媒体をドライブに挿入したり除去したりする装置がある。データは使用する前に二次記憶装置にコピーすることが多い。これは主に滅多に使わないデータの保管に使う（三次記憶装置は二次記憶装置よりもさらに遅く、アクセス時間は数十秒レベルである）。 コンピュータが三次記憶装置から情報を読み取る必要が生じると、まずカタログデータベースを参照して、必要な情報を格納しているテープやディスクを特定する。次に、ロボットアームにコンピュータが指示して、その媒体をドライブに挿入させる。コンピュータが情報の読み取りを終えると、ロボットアームが媒体を元の場所に戻す。 オフラインストレージとは、CPUの制御下にないストレージである。その記憶媒体は二次記憶装置か三次記憶装置として書き込まれ、物理的に外されたり、除去されたものである。つまり、再びアクセスするには、人間が媒体をドライブに挿入したり、装置を接続したりする必要がある。三次記憶装置とは異なり、人間が介在しないとアクセスできない。 オフラインストレージは、物理的なデータ転送手段としてよく利用される。また、ディザスタリカバリのためにバックアップを遠隔地に保管する手段としても有効である。オフラインストレージは情報セキュリティの観点からも重要であり、物理的に即座に内容にアクセスできず、コンピュータを使った悪意ある攻撃からも安全である。また、保管目的で情報を記憶させる場合、ほとんど滅多にアクセスすることがないなら、三次記憶装置よりもずっと安価に保管できる。 最近のパーソナルコンピュータでは、二次記憶装置や三次記憶装置として利用される記憶媒体は、オフラインストレージとしても利用できるものが多い。光ディスクやフラッシュメモリが代表的だが、リムーバブルのハードディスクドライブもある。企業においては磁気テープが比較的多く利用されている。古くは、フロッピーディスク、ZIP、光磁気ディスク、紙テープ、パンチカードなどがあった。 記憶装置を分類するいくつかの特性がある。特性には、揮発性/不揮発性、ダイナミック/スタティック、書き換え可能/不可能、破壊読み出し/非破壊読み出し、アクセス方式、アドレス指定方式、などがある。また、容量と性能は重要なスペックである。 不揮発性メモリ 電力を供給しなくとも格納した情報を保持できる。長期間の記憶に適している。現在は主に二次/三次記憶装置やオフラインストレージで使われている。1950年代から1960年代にかけては、磁気コアメモリが一次記憶装置にも使われていた。 揮発性メモリ 情報を保持するには、電力供給が必要である。現在最も高速なメモリ技術は揮発性である（普遍的法則ではない）。一次記憶装置は高速性を求められるため、揮発性メモリを使うことが多い。 ダイナミックメモリ DRAMなど。揮発性メモリのうち、定期的な再読み取りと再書き込み（メモリリフレッシュ）をしないと格納してある情報が消えてしまうもの。 スタティックメモリ SRAMなど。揮発性メモリのうち、リフレッシュを必要としないもの。 読み書き可能（リードライト） 情報をいつでも上書きできる。一次記憶装置としてある程度の容量の読み書き可能ストレージを持たないコンピュータは、ほとんどの場合役に立たない。現在のコンピュータは通常、二次記憶装置にも読み書き可能ストレージを使っている。言葉の文字通りの意味とはズレるのだがRAMと呼ばれている。 読み取り専用（リードオンリー） ROM。媒体製造時に情報を記憶させる。組込みコンピュータや、起動時のためのプログラムを書き込むためや、三次記憶装置やオフラインストレージに使う。例えば、CD-ROMがある。 一度だけ書き込み可能（ライトワンス） 製造後に一度だけ書き込むことができる。WORMとも言う。ROMを少数生産する目的や、三次記憶装置やオフラインストレージに使う。例えば、PROMやCD-Rがある。 リライタブル 読み出しは自由にできるが、上書きは自由にできず、ブロック単位で一旦消去が必要であったり書き込み操作が読み取り操作よりも遥かに低速であったりする。例えば、EPROMやフラッシュメモリやCD-RWなどがある。 破壊読み出し 書き込まれたデータを読み出す時に、内容を破壊してしまうものが破壊読み出しである。読み出し後も元の内容が以後も必要なのであれば、書き戻して（再生、等と言う）やらなければならない。代表的なものはDRAMや磁気コアメモリなど。DRAMは静電容量に記憶しているので原理的には破壊読み出しだが、普通はチップ内部の読み出し動作の中で書き戻しまでやってしまうので、ユーザーは指定されたタイミングで信号を与えて内容を読み出すだけでよい。 非破壊読み出し 書き込まれたデータを読み出す時に、内容を残したまま読み出せるものが非破壊読み出しである。代表的なものはSRAMである。 ランダムアクセス 任意の位置へのアクセスをほぼ一定の時間で行える。一次記憶装置や二次記憶装置に適している。 シーケンシャルアクセス 決められた先頭位置から逐次的にしかアクセスできない。従って、ある情報へのアクセスにかかる時間は、先頭位置からの距離に依存する。磁気テープなどの特性で、オフラインストレージに適している。 なお、RAM（Random Access Memory）は、本来は上記のランダムアクセスのメモリという意味だが、もっぱらROM（Read only memory）に対するものとして「（ランダムアクセスで）書き込み可能」という意味で使われている。本来の書き込み可能という意味ではRWM（Read Write Memory）という表現もあるが、ほとんど使われない。 SRAMチップでは、8ビットや16ビット単位のチップが多い。それに対し、古くはDRAMチップは1ビット単位であり、8個や16個並べて実際のメモリを構成していた（そのため、コンピュータ業界ではバイト単位がもっぱらであるのに対し、メモリ業界ではビット単位が使われることも多い）。現在でもDRAMチップは4ビットか8ビット程度と、比較的少ないビット数のものを並べて利用している。 また、データの転送方法についてもバリエーションがある所で、非同期SRAMのように単純にアドレスを印加すればデータが出てくるといったものから、DDR SDRAMのように複雑なプロトコルを持つものまで、色々のものがある。 位置による指定 0番地（あるいは1番地）から順番に振られたメモリアドレスで位置を指定する。主記憶ではもっぱらバイト単位、補助記憶ではブロック単位でアドレスが振られる（後者は以前はシリンダ・サーフェス・ヘッド、というような物理機構に依った構造のアドレスだったが、基本的には同様） ファイルシステムによる指定 可変な大きさのサイズなどを持つファイルとして補助記憶に情報が格納されているものである。ほとんどのシステムがファイル名を使ってファイルを指定できる。さらに現代の多くのシステムは階層型ディレクトリなどによって木構造（ツリー状）の名前空間も提供しており、ファイル以外のシステム資源や情報にアクセスできるものもある（伝統的な /dev や、Linuxの /proc や /sys など）。ファイルシステムは、一般にオペレーティングシステムによって提供されている。またオープンされたファイルという形で、主記憶の管理も一部行われる。 データベース 何らかのDBMSにより管理する。 連想メモリ 連想記憶（associative memory、他に Content-Addressable Memory, CAM とも）、記憶内容自体によってアクセスしアドレスを得る、あるいは記憶内容の一部でアクセスし、その全体を読み出す、といったことができる。例えば、キャッシュメモリには、本体の記憶装置のあるアドレスの内容がキャッシュに入っているか、ということを問い合わせる必要があり、一種の連想メモリが使われる。ソフトウェアで実装したもの、あるいは抽象データ構造としては「連想配列」と呼ばれている。 容量単位は一般的な距離や速度を表すものと異なる特殊な単位と使われ方をする 記憶容量 デバイスまたは媒体が記憶できる全容量。ビット数やバイト数で表される。 記憶密度 情報をどれだけコンパクトに記憶できるかの尺度。単位長、単位面積、単位体積あたりの記憶容量。 レイテンシ ストレージの特定位置にアクセスするのにかかる時間。一次記憶装置の場合はナノ秒単位、二次記憶装置ではミリ秒単位、三次記憶装置では秒単位程度である。読み取りと書き込みでレイテンシが異なる場合もある。シーケンシャルアクセス式の場合、ばらつきが大きいので、最小・最大・平均で表す。 スループット 単位時間当たりの読み書きの速度。ビット毎秒も使うことがあるが、通常はメガバイト毎秒などの単位を使う。レイテンシと同様、読み取りと書き込みで異なる場合もある。また、逐次的なアクセスの方がランダムなアクセスよりスループットが高くなる。 2018年現在、よく使われている記憶装置技術としては、半導体、磁気、光学があり、紙も限定的に使われ続けている。他にも、かつて使われていた記憶装置技術や、開発が進んでいる新技術もある。 半導体メモリは、半導体による集積回路に情報を格納する。半導体メモリには数百万個の微細なトランジスタやコンデンサが集積されている。揮発性と不揮発性の半導体メモリがある。現代のコンピュータでは、一次記憶装置にはほぼ必ずダイナミックな揮発性半導体メモリ（DRAM）を使っている。21世紀に入ったころから、フラッシュメモリと呼ばれる不揮発性半導体メモリがオフラインストレージとしてシェアを伸ばし続けている。不揮発性半導体メモリは、各種電子機器や特殊なコンピュータの二次記憶装置としても使われている。 磁気記憶装置は、ディスクやテープの表面に塗布された磁性体の磁化パターンを変化させることで情報を記憶する。磁気記憶装置は不揮発性である。情報へのアクセスに1つまたは複数の読み書き用ヘッドを使う。ヘッドには電気信号と磁気信号を相互に変換する変換器がある。ヘッドは媒体表面のごく一部にしかアクセスできないので、ヘッドや媒体を移動させることでデータにアクセスする。現在のコンピュータでは、以下のような磁気記憶装置がある。 ディスクドライブ フロッピーディスク（オフラインストレージとして使用） ハードディスクドライブ（二次記憶装置として使用） 磁気テープ装置（三次記憶装置およびオフラインストレージとして使用） 初期のコンピュータでは、磁気ドラムメモリ、磁気コアメモリ、コアロープメモリ、薄膜メモリ、磁気バブルメモリなどが一次記憶装置としても使われていた。また、磁気テープは二次記憶装置として使われることが多かった。 光ディスクなどの光学記憶装置は、円板表面の性質を変化させることで情報を格納し、半導体レーザーを表面に当てて反射光を測定することで情報を読み取る。光ディスクは不揮発性である。表面の変化が永久的なもの（読み取り専用媒体）、一度だけ変化させられるもの（ライトワンス媒体）、何度も書き換え可能なもの（リライタブル媒体）がある。次のような形式がよく使われている。 CD-ROM, DVD-ROM, BD-ROM: 読み取り専用ストレージ。デジタル情報（音楽、ビデオ、コンピュータプログラムなど）の大量配布/販売に使用。 CD-R, DVD-R, DVD+R BD-R: ライトワンス・ストレージ。三次記憶装置またはオフラインストレージとして使用。 CD-RW, DVD-RW, DVD+RW, DVD-RAM, BD-RE: 書き込みは低速だが、読み取りは比較的高速。三次記憶装置またはオフラインストレージとして使用。 Ultra Density Optical (UDO) は BD-R や BD-RE と同程度の容量を持つ。書き込みは低速だが、読み取りは比較的高速。三次記憶装置またはオフラインストレージとして使用。 3次元光ディスクも提案されている。蛍光多層ディスクは、C3D が開発した新技術。3次元光ディスクの一種だが、反射光ではなく蛍光を使用するため、従来はせいぜい2層だった記録層を100層にできる。 は、強磁性の表面の磁場の形で情報を記憶するストレージである。読み取りは光学的に行い、書き込みは磁気と光学を組み合わせて行う。光磁気ディスクは不揮発性で、シーケンシャルアクセス式で、書き込みは低速だが、読み取りは比較的高速である。三次記憶装置またはオフラインストレージとして使用する。 紙による記憶媒体としては、紙テープやパンチカードがあり、コンピュータ黎明期から広く使われてきた。情報は紙に穴を開けることで記録され、機械的または光学的に穴の位置を知ることで情報を読み取る。 記憶用真空管 ブラウン管の一種であるウィリアムス管や、セレクトロン管といった真空管があった。ウィリアムス管は論理動作に際しコンマ数ボルトという微妙な電圧の違いを検出する必要があり、また、セレクトロン管は高価という欠点があった。そういった理由から採用例は多くなく、コアメモリによって速やかに置き換えられた。 遅延記憶装置 水銀などの媒体中を伝わる音波などに波に情報を格納するものである。分類としては、ダイナミック、揮発性、シーケンシャルアクセス、読み書き可能、となる。時代が比較的遅いものとしては、同軸ケーブルを利用した電磁遅延線として1960年代の使用例がある。 PRAM（相変化記録技術） 相変化する材質で相変化させることで情報を記録し、電気抵抗や光の反射率を観測することで情報を読み取る。不揮発性、ランダムアクセス式、読み書き可能なストレージ。二次記憶装置またはオフラインストレージに使用するが、場合によっては一次記憶装置に使用する可能性もある。ライトワンスまたはリライタブルの光ディスクは、既に相変化記録技術を使っているものが多い。 ホログラフィックメモリ 結晶またはフォトポリマーの内部に情報を光学的に記憶する。容積全体を記憶に利用できる。不揮発性、シーケンシャルアクセス式、ライトワンスまたは読み書き可能なストレージ。二次記憶装置またはオフラインストレージとして使用する可能性がある。HVD（ホログラフィック・バーサタイル・ディスク）も参照。 分子メモリ ポリマーの中に電荷の形で情報を記憶する。一次記憶装置に適しているのではないかと言われている。 DNAメモリ DNAの塩基配列を書き換えて記憶する。最大500TBほど記憶可能と言われている。マイクロソフトが研究中。 二次または三次記憶装置は、コンピュータネットワークを使ってコンピュータと接続することもある。一次記憶装置ではそのような概念はふさわしくないが、マルチプロセッサでメモリを共有するのも多少それに似ている。 ダイレクトアタッチトストレージ (DAS) ネットワークを使わずに接続される普通のストレージ。現在も最も一般的手法。この用語は、NAS や SAN と同時期に（区別・対比するために）考案された。 ネットワークアタッチトストレージ (NAS) LANやプライベートWAN上でファイルレベルで他のコンピュータからアクセスできるストレージ。オンラインストレージの場合は、インターネット経由でアクセス可能。NASは通常NFSやCIFS/SMBプロトコルを使用する。 ストレージエリアネットワーク (SAN) 複数のコンピュータにストレージ容量を供給する専用ネットワーク。NAS と SAN の大きな違いは、NAS がファイルシステムとして存在し、クライアントへのアクセスを提供するのに対して、SAN はブロックデバイスレベルのアクセスを提供し、供給した容量はそのクライアントコンピュータ専用のストレージとなる点である。SAN ではファイバーチャネルネットワークを主に使用する。 大量の磁気テープ（または光ディスクや光磁気ディスク）を自動化された三次記憶装置に格納したものである。磁気テープの場合はテープライブラリ、光ディスクの場合は光ジュークボックスあるいは光ディスクライブラリ装置などと呼ぶ。最小構成の装置では、装置内にドライブは1つだけで、オートローダまたはオートチェンジャなどと呼ばれる。 ロボット型ストレージの場合、多数のスロットがあってそこに媒体が格納されており、ロボットアームがそれをピックアップして組み込みのドライブに挿入する。スロットの配置とピックアップ機構が性能に影響を与える。重要な特性として拡張性があり、スロットやドライブやロボット機構を追加できるようになっている。テープライブラリの場合、10から10万スロットを有し、テラバイトからペタバイト級の情報を格納できる。光ジュークボックスはそれより若干小規模で、せいぜい1000スロットである。 ロボット型ストレージはバックアップ、画像やビデオなどを大量に保管する必要のある業界（医療、映像産業など）で使われる。階層型ストレージ管理は、このようなストレージ装置も含め、自動的にデータを適切なストレージ階層に移動させる手法である。低い階層に格納してあるファイルが必要になると、自動的にそれを上位のハードディスクなどに取り出すことができる。 主記憶装置 Random Access Memory メモリ管理 仮想記憶 - 単一レベル記憶 動的メモリ確保 メモリリーク メモリ保護機能 DRAM (Dynamic Random Access Memory) SRAM (Static Random Access Memory) 磁気抵抗メモリ (Magnestic Random Access Memory) ファイルシステム フラッシュメモリ ソリッドステートドライブ ^ 「無期限」を含む ^ 関連語として例えば「記憶媒体」は storage media であり、storage = 記憶装置、というように固定的に解釈するとおかしなことになる場合がある） ^ 近年では。1970年代以前には8ビットでないバイトも多かった。 ^ http://searchstorage.techtarget.com/topics/0,295493,sid5_tax298620,00.html "Primary Storage or Storage Hardware" (shows usage of term "primary storage" meaning "hard disk storage") ^ A thesis on Tertiary storage ^ National Communications System (1996年), Federal Standard 1037C - Telecommunications: Glossary of Telecommunication Terms, General Services Administration, FS-1037C, http://www.its.bldrdoc.gov/fs-1037/fs-1037c.htm 2007年10月8日閲覧。  ^ これを利用（？）したのが初期のゲーム業界で、ROMカセットによってソフトが供給されていたためという理由もあるが、しばしば容量をビット単位で表現していた。 ^ DVD FAQ - DVD技術に関する包括的情報源