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

## 概要

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

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

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

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

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

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

## 分類

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

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

### プロセッサと主記憶装置

現在の主記憶装置は、8ビット=1バイト毎に、アドレス、番地が割当てられているバイトアドレス方式が主流である。
プロセッサ内部にもレジスタと呼ばれる記憶装置が構成されている。
プロセッサが命令やデータを主記憶装置から読み込み処理する流れとして、

- プログラムカウンタ、PCと呼ばれるレジスタ値をアドレスとして、主記憶装置から命令レジスタへ読み込む(フェッチ)
- 命令レジスタの内容が、メモリから64ビットBBレジスタへの読み込みのロード命令と解釈(デコード)
- 対象BBレジスタに、AAレジスタ値+24を先頭アドレスとして、主記憶装置から連続8バイトを読み込む(ロードのエグゼキュート)
- プログラムカウンタが命令レジスタの容量分加算される

などの基本的な命令で逐次処理される。

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

### 補助記憶装置

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

プロセッサが主記憶装置へ、ストレージから読み込ませる処理として、

- プロセッサがストレージコントローラに読み込み命令を発行する (ブロックXXからYYブロック分を主記憶のCCに読み込み)
- ストレージコントローラは命令受付完了をプロセッサに通知
- ストレージコントローラは指定された下位のブロックを読み込み上位の主記憶装置にデータを転送
- ストレージコントローラはプロセッサに命令処理完了を通知

のような手順で行われる。

## 特性とスペック

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

### アクセス方法

なお、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のように複雑なプロトコルを持つものまで、色々のものがある。

### 容量

容量単位は一般的な距離や速度を表すものと異なる特殊な単位と使われ方をする

## 基本的な記憶装置技術

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次元光ディスクなどの3次元光学記憶装置や5次元光記録も提案されている。蛍光多層ディスクは、C3D が開発した新技術で3次元光ディスクの一種だが、反射光ではなく蛍光を使用することで記録層を100層にまで拡張できる。

光磁気ディスクは強磁性の表面の磁場の形で情報を記憶するストレージである。読み取りは光学的に行い、書き込みは磁気と光学を組み合わせて行う。光磁気ディスクは不揮発性で、シーケンシャルアクセス式で、書き込みは低速だが、読み取りは比較的高速である。三次記憶装置またはオフラインストレージとして使用する。

### 紙

紙による記憶媒体としては、紙テープやパンチカードがあり、コンピュータ黎明期から広く使われてきた。情報は紙に穴を開けることで記録され、機械的または光学的に穴の位置を知ることで情報を読み取る。

## 関連技術

### ネットワーク接続

二次または三次記憶装置は、コンピュータネットワークを使ってコンピュータと接続することもある。一次記憶装置ではそのような概念はふさわしくないが、マルチプロセッサでメモリを共有するのも多少それに似ている。

### ロボット型ストレージ

大量の磁気テープ(または光ディスクや光磁気ディスク)を自動化された三次記憶装置に格納したものである。磁気テープの場合はテープライブラリ、光ディスクの場合は光ジュークボックスあるいは光ディスクライブラリ装置などと呼ぶ。最小構成の装置では、装置内にドライブは1つだけで、オートローダまたはオートチェンジャなどと呼ばれる。

ロボット型ストレージの場合、多数のスロットがあってそこに媒体が格納されており、ロボットアームがそれをピックアップして組み込みのドライブに挿入する。スロットの配置とピックアップ機構が性能に影響を与える。重要な特性として拡張性があり、スロットやドライブやロボット機構を追加できるようになっている。テープライブラリの場合、10から10万スロットを有し、テラバイトからペタバイト級の情報を格納できる。光ジュークボックスはそれより若干小規模で、せいぜい1000スロットである。

ロボット型ストレージはバックアップ、画像やビデオなどを大量に保管する必要のある業界(医療、映像産業など)で使われる。階層型ストレージ管理は、このようなストレージ装置も含め、自動的にデータを適切なストレージ階層に移動させる手法である。低い階層に格納してあるファイルが必要になると、自動的にそれを上位のハードディスクなどに取り出すことができる。