【応用情報技術者試験】メモリに関する用語まとめ

# 概要
メモリに関する用語が多く、覚えてもすぐに忘れてしまうため、メモリについての用語をまとめてみました。
「メモリ」は日本語で「記憶」という意味があります。

# 目次
- [RAM](#ram)
- [DRAM](#dram)
- [SRAM](#sram)
- [ROM](#rom)
- [キャッシュメモリ](#キャッシュメモリ)
- [メインメモリ](#メインメモリ)
- [フラッシュメモリ](#フラッシュメモリ)
- [揮発性メモリ](#揮発性メモリ)
- [不揮発性メモリ](#不揮発性メモリ)
- [ブロック番号](#ブロック番号)
- [メモリアドレス](#メモリアドレス)
- [ヒット率](#ヒット率)
- [ダイレクトマップ方式](#ダイレクトマップ方式)
- [フルアソシアティブ方式](#フルアソシアティブ方式)
- [セットアソシアティブ方式](#セットアソシアティブ方式)
- [メモリインターリーブ](#メモリインターリーブ)
#### 補足
- [HDDやSSDとの違い](#hddやssdとの違い)

## RAM
パソコンが起動中に一時的にデータ保管するためのメモリです。パソコンの電源を切ると、データは消去されます。
一般的なPCではRAMはCPUソケットの中に入っており、CPUと直接つながっています。そのためマザーボードの上に直接RAMが配置されることも一般的なPCでは少ないです。
※逆に後述するROMは、BIOSを入れるチップとしてマザーボードの上に直接配置されていることが多いです。
よく使用されているCPUである、Intel CoreシリーズやAMD Ryzenは、CPUの中にRAMが内蔵されています。
一般的な種類には、[DRAM](#dram)と[SRAM](#sram)があります。
また、RAMはROMと比べるとアクセスが早いです。RAMは[ランダムアクセス](#ランダムアクセス)が可能で、どの位置からでもデータにアクセスできますが、ROMは[シーケンシャルアクセス](#シーケンシャルアクセス)しかできず、データの順序によってアクセス速度が変わるためです。

RAMは電荷を保持してデータを保存します。主に電極やキャパシタ (コンデンサ) などで電荷を保持していますので、電流が流れなくなると電荷も減少してデータが失われます。

## ランダムアクセス
任意の位置へのアクセスが瞬時にできるアクセス方法です。データの物理的な位置に関係なく瞬間的にアクセスでき、データの検索や操作が必要な場合に有効です。
RAMのアクセス方法は基本的にランダムアクセスですが、ROMは後述のシーケンシャルアクセスが基本になっていて、ランダムアクセスは基本的にできません。

## シーケンシャルアクセス
データ群を一定の順番で処理し、前のデータにアクセスしたら次のデータにアクセスするような形で順番にアクセス先を移動していく方法です。大量のデータを順番に処理したい場合に有効です。「シーケンシャル」とは「連続して起こること」という意味があります。
ROMのアクセス方法はシーケンシャルアクセスが基本です。ROMには書き込みができず、固定されたデータが格納されています。加えてROM内のデータは通常物理的に連続して配置されています。そのため物理的な配置の通りに連続で読み込むことで、高速でデータを読み込むことができます。
RAMは基本的にシーケンシャルアクセスをすることはできません。

## DRAM
「Dynamic Random Access Memory」の略です。
RAMの一種で、高速にアクセスが可能なRAMの中でもアクセス速度が速いです。現代の一般的なコンピューターでも幅広く使用されています。スマートフォンもDRAMが使用されています。
PCのメモリの容量として8GBや16GBといった表現がありますが、これはDRAMのことを指しています。なのでタスクマネージャーで表示されている「メモリ」もDRAMのことで、その他「メモリの増設」でノートPCのカバーを開けてメモリを増設する際も、DRAMを増設・交換していることになります。
使用例として、パソコンで現在開いている文書やブラウザのタブはDRAMに保存されています。同じくスマートフォンでも、アプリケーションの実行中のデータはDRAMに保存されています。

## SRAM
「Static Random Access Memory」の略です。
DRAMも高速ですが、DRAMと比べても速度はSRAMの方が速いです。また消費電力もDRAMと比べると低いです。ただ大容量化は難しいと言われています。その理由は、SRAMは沢山の高性能なトランジスターを必要としているらしいのですが、容量が大きくなるとその高性能なトランジスタの量も急激に増加するらしいです。合わせてトランジスタが増えるとチップの面積も大きくしなくてはいけないのですが、現代の技術だとチップサイズを大きくすると色々な問題が生じて、その解決する技術は確立されていないらしいです。
上記のような特性があるため、SRAMは高速なキャッシュメモリや、小規模なデータ保持として使用されます。

## ROM
「Read Only Memory」の略です。
PCではBIOSを入れるのに使用されていることが多く、マザーボードの上にチップとして存在します。※これを「BIOSチップ」とも呼びます。
一般的なPCではROMはBIOS以外で使用されることは少ないらしいのですが、BIOS以外で使用される場合も通常はマザーボードの上に固定されて配置され、比較的CPUやRAMと近い場所に配置されるらしいです。

ROMもRAMと同様、電荷でデータを保持しています。ただROMは半導体素子に電荷を埋め込んでおり、特定の場所に隔離されているため電流が流れなくても電荷が減少しない仕組みになっています。なのでROMは電流が流れなくてもデータは失われません。ROMは基本的にデータが変更できない仕組みになっており、製造する際にデータも埋め込まれます。

BIOSがROMに入れられている理由は、まず書き込みが困難なため、予期しない変更を防げるという理由があります。ほかにもROMは不揮発性メモリのため、電源を切ってもBIOSの設定や機能は永久的に保存されます。
また基本的にBIOSはフラッシュROMを使用しています。そのため、BIOSの更新も最新の注意は必要ですが、比較的容易に行うことができます。
※フラッシュROMはROMの種類のひとつですが、例外的にデータの書き込みが可能なROMのことです。

## キャッシュメモリ
使用頻度の高いデータを一時的に保存するメモリです。CPUはデータや命令をメインメモリとやり取りを行いながら処理します。ただ、メインメモリはCPUと比べて速度が遅く、CPU側に待ち時間が発生します。そのため、良く使用するデータや命令をキャッシュメモリという高速でCPUとやり取りできるメモリに保管しておき、メインメモリへのアクセスを減少させ、処理速度を向上させています。PCではキャッシュメモリはCPU (中央処理ユニット) 内に組み込まれていることが多いです。
[SRAM](#sram)で記載した通り、キャッシュメモリはSRAMが使用されています。
CPUが必要とするデータがキャッシュメモリに存在する確率は[ヒット率](#ヒット率)とよばれます。

## メインメモリ
コンピューターの主記憶装置のことを指します。
RAMはメインメモリの一種であり、その中で最も一般的に使用される形式です。ROMはメインメモリではありません。

:::note
「キャッシュメモリ」と「メインメモリ」はメモリの物理的な種類の分類ではなく、コンピュータ上の役割で分類しているイメージです。
:::

## フラッシュメモリ
半導体素子を利用してデータの記録を行う[不揮発性メモリ](#不揮発性メモリ)のひとつです。データの削除が一瞬で可能なため、カメラのフラッシュをイメージして名付けられました。
USBメモリやSDカード、SSDはフラッシュメモリの一つです。
※HDDはフラッシュメモリではありません。

## 揮発性メモリ
電流を流していないと、記憶した内容を忘れてしまうメモリのことです。RAMは揮発性メモリになります。

## 不揮発性メモリ
電流が流れていなくても記憶した内容を保持しているメモリのことです。ROMは不揮発性メモリです。

:::note
「揮発性メモリ」や「不揮発性メモリ」は電流が流れていない場合にデータが消失するかどうか、ということに焦点をあてた分類のイメージです。
:::

## ブロック番号
メモリを小さな固定サイズの領域に分けて、それぞれに割り当てられている番号のことをいいます。ブロックは通常、同じ大きさ（例えば4096バイトなら全て4096バイト）で構成されます。OSが管理しており、プログラマーは通常この詳細を知る必要はありません。

## メモリアドレス
プログラマーが直接操作できるアドレス空間の概念のことです。実際の物理メモリのアドレスを表すこともありますが、通常は仮想アドレスのことを指します。プログラマーがコード内で使用できるのはこのメモリアドレスです。ブロック番号がOSの内部管理用なのに対し、メモリアドレスはプログラマーのアドレス指定用のようなイメージです。なのでブロック番号と比較してメモリアドレスはプログラマーが視覚的に理解しやすい形式になっています。

## ヒット率
CPUが必要とするデータが[キャッシュメモリ](#キャッシュメモリ)に存在する確率のことです。ヒット率が高いとデータアクセスが高速ということになります。

## ダイレクトマップ方式
メインメモリのデータをキャッシュメモリのどの位置に格納するか決定する方式の一つです。ダイレクトマップ方式では、一定の計算式を用いて、キャッシュメモリのどの位置に情報を格納するか決定しています。空きがあるブロック番号は関係なく、全て計算式の結果に基づいて格納場所を決めます。なので他のブロック番号に空きがあり、計算式で出た結果のブロック番号は別のデータが入っていても、そのデータと入れ替えて格納します。なのでヒット率は他の方式よりも下がります。
ダイレクトマッッピング方式とも呼ばれます。

参考動画：[ダイレクトマップ方式とは](https://www.youtube.com/watch?v=S9tjMRa-KkU)

## フルアソシアティブ方式
メインメモリのデータをキャッシュメモリのどの位置に格納するか決定する方式の一つです。フルアソシアティブ方式では計算式を用いず、キャッシュメモリの空いているブロック番号を探し、空いている場所があればそこにデータを格納します。そのためヒット率は高くなりますが、空きブロックを探す手間があるため、速度的には難があります。
「アソシアティブ」は「連帯の、連想の」という意味があります。

参考動画：[フルアソシアティブ方式とは](https://www.youtube.com/watch?v=IJAiUP7VkxA)

## セットアソシアティブ方式
一番PCでよく使用されている方式です。ダイレクトマップ方式とフルアソシアティブ方式両方を取り入れた方式です・まずブロック番号をいくつかのセットに分けます。例えばブロック番号0と1をセット番号0、ブロック番号2と3をセット番号1、のような形です。次にメインメモリのブロック番号から一定の計算式でセット番号を求めます。求めた結果のセット番号内の空きがあるブロック番号にデータを格納します。

参考動画：[セットアソシアティブ方式とは](https://www.youtube.com/watch?v=NHI7MvQ7PDM)

## メモリインターリーブ
CPUとメモリ間のデータ転送速度を高速にする技術です。メモリを複数配置して、複数のメモリから同時にCPUにデータを送ることができ、効率よくデータを取り出すことができます。
インターリーブは「交互に配置する」という意味合いがあります。
参考動画：[メモリインタリーブ](https://www.youtube.com/watch?v=5MdIfo6T8AQ)

# 補足
## HDDやSSDとの違い
メモリ (記憶) といわれてHDDやSSDのことを思い浮かべるかもしれませんが、HDDやSSDも「記憶装置」ですが一般的には「メモリ」とは呼ばれません。SSD自体はフラッシュメモリを使用していますが、PCで「メモリ」という場合はコンピュータのメモリシステム周辺のことを指し、HDDやSSDはメモリシステムとは別の役割の「ストレージ」や「ディスク」と呼ばれる分類になるイメージです。ちなみにHDDやSSDは電流が流れていなくても記憶が保持されるので、「不揮発性」になります。

***
**[記載した応用情報技術者試験の記事まとめ](https://qiita.com/MetroOsamu/items/550001240d76e24f505f)**