メモリ / ストレージ

# はじめに

コンピュータの記憶装置には、データを一時的に保持する **主記憶装置（メインメモリ）** と、長期間保存するための **補助記憶装置（ストレージ）** がある。

メインメモリはプログラムやデータが読み書きされる場所であり、揮発性データの一時保管が行われる。

補助記憶装置は、具体的にはハードディスクドライブ、SSD（Solid State Device）、外部ストレージ、VHS、カセットテープなどを指し、長期的な不揮発性データ長期保管が行われる。

通常、**アプリケーションは補助記憶装置からメインメモリ上にロードされて、実行される**。

# 主記憶装置
**メインメモリ** のこと。

コンピュータがプログラムを実行する際に使用されるメモリであり、アプリケーションプログラムや OS が実行される空間。

主に**RAM**が使用される。

アクセスが高速で、電源供給を失うとデータも消失する（**揮発性**）。

基盤上でCPUと直に接続されている。メモリーチップなどを基盤に実装したものをメモリモジュールと呼ぶ。

メモリを設置する部分をメモリスロットと呼ぶ。ノートPCやタブレットでは、メモリがマザーボードに対して直接つけられているため、メモリースロットがない場合が多い。

低スペックなもので4GB（ライトユーザー向け）、高スペックなもので32GB以上。ゲームが目的なら64GBはオーバースペックなので、32GBにすると良いらしい。開発では16GB以上は欲しいらしい。画像を多く扱ったり、動画編集までするなら16GBか32GBくらいは必要らしい。

:::note info
単にメモリといった場合、メインメモリを指す場合が多い。
:::

## RAM
Random Access Memory

主に、メインメモリに利用される。

アクセスが高速で、揮発性。何度でも書き換えることができる。

またRAMの中には、さらに**DRAM**（Dynamic）と**SRAM**（Static）という分類が存在する。

## DRAM
Dynamic Random Access Memory

緑色の基盤に乗っている、黒い板のように見えるメモリ。
![DRAM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/4673bf5c-8d30-02e0-3dcd-1ac9b7ebae56.jpeg)![DRAM_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/b9bf46a2-3e2e-6164-f291-cf78df374dec.jpeg)

DRAMは、記憶素子に電荷を蓄えた状態（高電圧）状態を１、電荷を蓄えていない状態（低電圧）を０として情報を保持する。

電荷は時間の経過と共に失われていくため、定期的に電荷を貯め直すリフレッシュ操作が必要。

SRAMよりも安価であるため、主に**メインメモリ**に使用される。

## SRAM
Static Random Access Memory

黒い長方形の左右に、ムカデの足のようなものがいっぱいついているメモリ。
![SRAM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/413b7d7f-aac2-ac25-dbff-8c2bb7704148.jpeg)

フリップフロップ（論理）回路を使用して情報を保持するため、DRAMのようなリフレッシュ操作を必要としない。

高速に情報へアクセスすることができ、また消費電力が小さく省電力であることからDRAMよりも高価。

そのため、CPUとDRAMとの間に設置される**キャッシュメモリ**に使用される。

## キャッシュメモリ

CPU に搭載されるメモリ。

速度の関係は以下の順になっている。

```:CPUの速度比較
メインメモリ　<　キャッシュメモリ　<　レジスタ
```

容量や速度の異なるキャッシュメモリが複数搭載された場合、一次キャッシュ、二次キャッシュなどと、いくつかの階層に分けられることがある。

一次キャッシュはL1キャッシュ、プライマリキャッシュなどと呼ばれることもあり、階層の中では最もアクセスが高速、かつ低容量（つまり高価）。CPUは一次キャッシュを最も優先してアクセスする。PCでは数KB~数十KBくらいの容量。二次キャッシュは数百KB~数MBくらい。（製品によって違いがあるので、あくまでも素人の私が今後キャッシュメモリと聞いたときに、イメージできるようにしたい容量です）


# 補助記憶装置
**ストレージ** のこと。

データを永続的に保存するための記憶装置（**非揮発性**）。

主にハードディスクドライブ（HDD）、SSD、USBメモリ、SDカードなど。

電源供給を失ってもデータが保持される。


## ROM
Read-Only Memory

補助記憶装置として利用されるメモリ。

データの書き換えができない（**不揮発性**）。

主に固定のデータ（ファームウェア、ブートローダなど）を保存するために使用される。

**ファームウェア** とは、機器に直接埋め込まれたソフトウェアで、デバイスの制御、設定、動作を管理するプログラムを指す。

**ブートローダ** は、コンピュータの電源を入れた時に、OSを読み込み、起動する役割を持つプログラムを指す。

家電製品などのあらかじめ決まった動作のみ行うコンピュータや、CD、ゲームソフト等にも使用される。

## マスクROM
一般的にROMと言った場合、マスクROMのことを指している場合が多い。

:::note info
ROM は「Real-Only（読み取り専用）」という名前だが、以下のROMは書き換えることができる。
歴史的にはRAMとROMの分類が先に存在していて、技術の進歩によって書換可能なROMが開発されたという経緯がある。
:::

## PROM
Programmable Read-Only Memory

通常のROMと違い、特定のプロセスや条件下でデータを再度書き換えることができるROM。

## EPROM
Erasable Programmable Read-Only Memory

紫外線を放射する装置を用いてデータの消去が可能なROM。

データの書込は電気信号を通じて行い、紫外線を使ってデータをリセット（削除）することで、再度書き込みができる状態に戻すことができる。

## EEPROM
Electrically Erasable Programmable Read-Only Memory

EPROMの中には、データの書込、削除がどちらも電気信号で行うことができるものが存在し、それらはEEPROMと呼ばれる。

EEPROMは、基本的にはビット単位でデータの書き込み、削除が行われるが、複数のビットを同時に操作することができる **フラッシュメモリ** といった進化形も存在する。

## フラッシュメモリ
セクターやブロック単位での操作ができ、ビット単位よりもより効率的にデータを処理することができる。

主に、デジカメ、USBメモリ、SSD、スマホなどのデータの保存に利用される。

## SAM
Sequencial Access Memory

メモリとして分類されるものではないが、RAM、ROMと似た用語にSAMというものがある。

SAMは補助記憶装置の一つで、連続した記憶領域に順番にアクセスを行う。

RAMは任意のアドレスに直接アクセスが可能なのに対して、SAMは特定の位置から順番にしかデータにアクセスできない。

VHSや、カセットテープなど。