記憶装置

は、**[[コンピュータ]]**の処理対象である**データ**と処理内容の**[[プログラム (コンピュータ)|プログラム]]**とを**記憶**させ参照と変更ができる装置。一部の記憶装置は変更できないものがある

。

## 概要
コンピュータは処理対象のデータをプログラムによる処理内容に応じて、自動的に制御し処理する。
処理対象のデータは、一定の規則で符号化された数値（整数や浮動小数点数）を基本とし、それらを組合せた文章や画像や音声など様々である。
また処理内容のプログラムは、データ転送や算術演算や論理演算、条件分岐やジャンプなどの基本的な命令を、これも一定の規則で符号化し組合せて並べている。 
現在のコンピュータでは、データとプログラムを共に符号化された数値とし、同じように記憶や処理することができる。
これはプログラムを用いて、データ処理するかのように別のプログラムを作成や修正して記憶することができる（処理中のプログラム自体の修正も可能だが難易度が上がる）。そのため、1種類あるいは1台のコンピュータで様々なプログラムを作成記憶させ、用途に応じてプログラムを取替えることで汎用的に用いることができる。

この汎用性のために元々の科学技術的な数値解析に限定されず、会計や出版や通信、あるいはコンピュータゲームや音楽など、組織や個人を問わず様々に利用され発展している。コンピュータの発展に伴いその一部である記憶装置も、読み書きの速度や記憶容量の拡大、用途に応じた種類の増加などが行われている。

情報理論の観点からは、記憶装置は通信路と同じように扱うことができる。これはプログラムやデータを、インターネット経由で受取るのと、フラッシュメモリ等で受取るのと、（時間や労力は異なるが）同じように扱えることを意味する。

コンピュータで扱う符号化した数値は、有限桁の2進数を意味する。1桁であれば0か1の2種類の値を表現でき、2桁であれば00、01、10、11の4種類の値を表現でき、この表現方法を**[[デジタル]]**と呼ぶ。
情報理論観点から、真偽の2種類を表現できる1桁デジタルの0と1とを**[[ビット]]**と呼ぶ。
**情報量**と同義の**記憶容量**が1ビットなら21である2種類の数値を、8ビットなら28の256種類の数値を記憶できる。デジタル数値をそのまま整数として扱う方式を符号無し整数と呼び、8ビット符号無し整数なら0から255まで扱える。
コンピュータの発達により1命令で計算や記憶したりできる数値が、16ビット、32ビット、64ビットと拡大されてきた。

また8ビットを1バイトとする単位も使われ、32ビットが4バイト、64ビットが8バイトに対応する。
記憶装置の規模の拡大により、10進接頭辞であるキロ、メガ、ギガや、210の1024による2進接頭辞であるキビ、メビ等も、併用されている。

また読み書きや通信の性能の指標として、単位時間あたりの情報量や記憶容量も用いられる

。

## 分類
コンピュータの構成要素および記憶装置は、様々な観点から分類することができるが、
**[[演算装置|算術論理演算装置]]**（、ALU）と**[[制御装置]]**（）などを一体化した**[[プロセッサ]]**、プロセッサが処理する命令のプログラムとデータを記憶する**メモリモジュール**からなる**[[主記憶装置]]**は、必須要素でコンピュータの中枢を担う。それ以外は入出力装置と呼ばれ、コンピュータの用途に応じて各種装置を接続する。入出力装置の一種である補助記憶装置は、電源断でコンピュータが停止状態でも記憶を保持することができる。

主記憶装置の区分として、バイト単位でアドレスを割り当て、基本的な命令（ロードストア命令など）でプロセッサのレジスタとデータ転送ができるものと分類されることが多い。一方で現在のコンピュータではメモリマップドI/Oの入出力装置もあり、曖昧さのある区分でもある。

### プロセッサと主記憶装置
現在の主記憶装置は、8ビット=1バイト毎に、**アドレス**、番地が割当てられているバイトアドレス方式が主流である。
プロセッサ内部にも**レジスタ**と呼ばれる記憶装置が構成されている。
プロセッサが命令やデータを主記憶装置から読み込み処理する流れとして、
***プログラムカウンタ**、PCと呼ばれるレジスタ値をアドレスとして、主記憶装置から命令レジスタへ読み込む（**フェッチ**）
*命令レジスタの内容が、メモリから64ビットBBレジスタへの読み込みの**ロード**命令と解釈（**デコード**）
*対象BBレジスタに、AAレジスタ値+24を先頭アドレスとして、主記憶装置から連続8バイトを読み込む（**ロード**の**エグゼキュート**）
*プログラムカウンタが命令レジスタの容量分加算される
などの基本的な命令で逐次処理される。

2000年ごろまではプロセッサが倍々の指数的性能向上が成されたが、主記憶装置へのアクセス性能はさほど向上しなかった。上記のプロセッサ内部のレジスタアクセス（命令デコードやプログラムカウンタ加算等）は、クロックに従い1サイクルで処理できる一方で、主記憶アクセス（命令フェッチやロード等）は数十から百サイクル以上の桁違いの時間が必要となる。
これを解決するため**高速**なプロセッサ内部レジスタと**低速**な主記憶装置の間に、**中間**の**[[キャッシュメモリ]]**の階層を設ける。キャッシュメモリは高速だが容量が小さいため、主記憶装置の一部をキャッシュメモリにもコピーしておく。主記憶参照の命令があっても、キャッシュに有効な命令やデータがあればそれを利用し、主記憶へのアクセス頻度を減らすものである。キャッシュの管理はプロセッサ機能が自動で行うが、利用者も命令やデータの配置をキャッシュを意識して行う必要がある。
現在のプロセッサは内部にキャッシュメモリを実装し、また2次、3次キャッシュなど多段階かつ大容量化されている

。

### 補助記憶装置
一方で補助記憶装置は**ストレージ**ともよばれ、現在は**[[ハードディスクドライブ]]**や**[[ソリッドステートドライブ]]**、磁気テープドライブや光ディスクドライブなどが広く用いられている。これらのストレージは**専用コントローラ**（プロセッサに相当）と**キャッシュ**（主記憶装置に相当）に**磁気ディスク**や**フラッシュメモリ**が接続され、ストレージ専用コンピュータのような下位構成要素となっている。
ストレージの記憶単位として512バイトや4キビバイトなどからなる、**ブロック**、あるいは**セクター**などと呼ばれる単位が多い。

プロセッサが主記憶装置へ、ストレージから読み込ませる処理として、
*プロセッサがストレージコントローラに読み込み命令を発行する（ブロックXXからYYブロック分を主記憶のCCに読み込み）
*ストレージコントローラは命令受付完了をプロセッサに通知
*ストレージコントローラは指定された下位のブロックを読み込み上位の主記憶装置にデータを転送
*ストレージコントローラはプロセッサに命令処理完了を通知
のような手順で行われる
。

## 特性とスペック
thumb|250px|1GB DDR RAM メモリモジュール
記憶装置を分類するいくつかの特性がある。特性には、揮発性/不揮発性、ダイナミック/スタティック、書き換え可能/不可能、破壊読み出し/非破壊読み出し、アクセス方式、アドレス指定方式、などがある。また、容量と性能は重要なスペックである。

### 揮発性と不揮発性
; 不揮発性メモリ
: 電力を供給しなくとも格納した情報を保持できる。長期間の記憶に適している。現在は主に二次/三次記憶装置やオフラインストレージで使われている。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により管理する。
; 連想メモリ
: 連想記憶（、他に (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次元光ディスクなどのや5次元光記録も提案されている。蛍光多層ディスクは、C3D が開発した新技術で3次元光ディスクの一種だが、反射光ではなく蛍光を使用することで記録層を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 (RAM)
* メモリ管理
** 仮想記憶 - 単一レベル記憶
** 動的メモリ確保
*** メモリリーク
* メモリ保護機能
* Dynamic Random Access Memory (DRAM)
* Static Random Access Memory (SRAM)
* 磁気抵抗メモリ (Magnestic Random Access Memory)

### 補助記憶装置関連
* ファイルシステム
* フラッシュメモリ
* ソリッドステートドライブ

----

* 動作環境

## 脚注
### 注釈

### 出典