応用情報知識メモ07(メモリ)


確認問題

以下にすらすら答えられる人は読まなくても大丈夫。
・RAMとROMの違いを説明せよ。
・DRAM、SRAMの違いと、それぞれの主な用途を答えよ。
・PROM、EPROM、EEPROM、フラッシュメモリの違いを説明せよ。
・CPU、HDD、メモリを処理の早い順に並び替えよ。
・CPUとメモリの通信間の速度差を埋めるために用いられる技術を5文字のカタカナで答えよ。
・キャッシュメモリへのデータ格納方式を3種答え、それぞれの違いを説明せよ。
・CPU⇄メモリ間の速度差を埋めるために、メモリへ特殊なデータ格納方式をすることがある。その名称と処理のイメージを答えよ。

メモリの種類

まず基礎用語から。
RAM(Random Access Memory):読み書き可能。電源を切るとデータが消える性質を持つ(揮発性)。
ROM(Read Only Memory):名前通り読み取り専用。こちらは不揮発性。ただし、ROMの技術を使用し、不揮発性のまま読み書き可能なものもある。

DRAM(Dynamic RAM)

コンデンサとセルで構成されるRAM。値が0 or 1 のどちらであるかを電荷量で判断する。電荷は時間とともに失われるため、一定時間でリフレッシュする必要がある。
構造がシンプルなので、大容量化しやすく安価だが、速度に難あり。
主な用途は主記憶装置。

SRAM(Static RAM)

フリップフロップ回路で構成されるRAM。フリップフロップ回路に電流を流す必要があるので揮発性。フリップフロップ回路は値を保持して常に出力し続ける特性があるので、リフレッシュは不要。
フリップフロップ回路が常に値を出力し続けているので、データの読み書きも高速。ただ構造がシンプルではないので容量は小さく高価。
主な用途はキャッシュメモリ。キャッシュメモリについては後述。

マスクROM

読み取り専用。製造時にデータを書き込む。

PROM(Programmable ROM)

PROMは名前通り書き換え可能なROMのこと。
EPROM(Erasable PROM):消去可能なPROM。紫外線を使用して蓄積された電気を放出することでデータを消去する。
EEPROM(Electrically EPROM):電気刺激で消去可能なEPROM。紫外線よりも消去が容易なのが利点。
フラッシュメモリ:EEPROMの一種。データの読み書きも消去においてもブロック単位で処理がされるため、読み取りも高速なのが利点。

それぞれの利用シーン

RAM(DRAM、SRAM)は揮発性のため、USBメモリなどの用途では使えない。どちらもコンピュータの内部で使用されているので、使用時には常に電力が流れている。
ROM関連の具体的な使用箇所については、下記ページを参照。

キャッシュ

概要

CPU、メモリ、HDDといった電子機器同士がデータをやり取りする際、お互いの処理速度に差があるため、処理速度が高い機器においても、処理速度が遅い機器の処理を待たなければならなくなる。これを防ぐために、速度差がある機器の間に「中間の処理速度をもった媒体を配置する」のがキャッシュである。
速度で言えばCPUのレジスタ>メモリ>HDDとなる。レジスタとメモリの間に設置するキャッシュがキャッシュメモリ、メモリとHDDの間に配置するキャッシュがディスクキャッシュである。
キャッシュメモリに用いられるのはSRAMである。

キャッシュメモリと主記憶装置への書き込み方式

レジスタからキャッシュメモリと主記憶装置の両方に書き込むのをライトスルー方式、普段はキャッシュメモリにだけ書き込み、キャッシュメモリの容量がオーバーしたときに主記憶装置を使用するのをライトバック方式と呼ぶ。
レジスタからキャッシュメモリをスルーして主記憶装置まで行く(スルー)か、キャッシュメモリで一旦帰ってくる(バック)で覚える。

実効アクセス時間の計算

もし全ての通信がレジスタとキャッシュで完結するなら、2者間の通信速度がそのままアクセスにかかる時間になるが、実際はレジスタ⇄メモリの通信も行われる。このとき、レジスタ⇄キャッシュの通信とレジスタ⇄主記憶装置の通信とをどちらも考慮して、実際にかかるアドレス時間を求める。
例えばレジスタ⇄キャッシュ間の通信が1秒、レジスタ⇄メモリ間の通信が2秒かかると仮定して(そんな遅いわけない)、前者が60%、後者が40%とする。すると1×0.6+2×0.4=1.4秒が実効アクセス時間となる。

メモリからキャッシュへのデータ格納と実効アクセス時間

キャッシュにデータを格納する際に重視されるのは「ヒット率の高さ」と「アクセス時間の短さ」である。
キャッシュにデータが入っている確率が高ければヒット率が上がり、キャッシュ内をあまり検索しなくてもデータが見つかればアクセス時間が短くなる。
この二つを左右するのがキャッシュへのデータ格納方式である。
また、キャッシュにデータを格納する際は、ブロックという一定長で処理が行われる。

データ格納方式1:ダイレクトマッピング方式

データに対してハッシュ演算を行い、キャッシュのどのブロックに格納するかを決める方式。
格納場所が一意に決まるため管理がしやすい反面、ハッシュ演算の結果が偏った場合にブロックの使用頻度に偏りが生じる。あまり使用されないブロックが存在すればそのスペースが勿体無いし、頻繁に使用されるブロックがあればデータが頻繁に入れ替わることになり、ヒット率の低下につながる。
特徴としては「管理がしやすいがヒット率が下がる」と言えるだろう。

データ格納方式2:フルアソシエイティブ方式

full-associativeの名前どおり、キャッシュの全体を関連付ける(使用する)ことを重視した方式。
「キャッシュの空いているところを探してそこに格納する」ことによって、ヒット率は高くなるが、毎回キャッシュの全体を検索する手間が生じるし、管理も面倒になる。
特徴としては「管理しづらいがヒット率は上がる」と言えるだろう。

データ格納方式3:(Nウェイ)セットアソシエイティブ方式

格納方式の1と2のいいところどりをしようとした手法。
まずキャッシュをN個のセットに分ける。メモリのデータを格納する際はハッシュ演算を使用して「どのセットに格納されるか」が定まるようになっている。これによって、データがキャッシュにあるかどうかを検索する際に「ハッシュ演算の結果、このセットにいるはずだから、ここだけ探せばいい」となる。これによってアクセス時間が短縮できる。
また、キャッシュをN個のセットに分けてからはフルアソシエイティブ方式のように管理する。つまり、データAとデータBをどちらもセットXに格納する際は、セットXの中の空きブロックを探して、そこにデータAとデータBを格納することになる。アソシエイティブ方式で格納することによって、空きブロックが有効活用でき、ヒット率が高まる。

メモリインターリーブ

これまではキャッシュのデータ格納方式の話をしたが、メモリに対策を施して通信の高速化を図る手法もある。それがメモリインターリーブ(memory interleaving)。interleaveは「間を空ける」の意。
メモリを複数エリアに分割し、各エリアを同時にアクセス可能な状態としておく。例えばエリアを4つに分けて4ブロックぶんのデータを取得する際は、エリア1〜エリア4に同時にアクセスして4ブロックぶんのデータを一度に取得すれば、処理回数が減り、結果アクセス時間が短くなる。


この記事が気に入ったらサポートをしてみませんか?