資格道場 › レッスン一覧 › コンピュータ構成要素
コンピュータ構成要素・5/9・9分

メモリの種類と誤りの検出・訂正

ゴール

ROM・RAM・各種ROMを「電源を切ると消えるか」「書き換えられるか」で見分けられ、パリティ・チェックサム・ハミング符号を「検出だけ」か「訂正もできる」かで選べるようになる。ECCの冗長ビット数を式から計算できるようになる。

メモリの種類と誤り制御は、選択肢の用語を性質で見分けるだけで解ける問題が多く、免除試験でも繰り返し出ている。業務システムのサーバでECCメモリを選ぶ理由も、ここを押さえると説明できる。

このレッスンで稽古する(用語チェック・過去問)

結論:メモリは「消えるか」「書き換えられるか」の2軸で分ける

メモリの見分け方は2つの質問で足りる。**電源を切ると中身が消えるか(揮発性)**と、後から書き換えられるかだ。RAMは消える・書き換え自由、ROMは消えない・基本は読むだけ。

たとえると、RAMは会議室のホワイトボード(自由に書けるが、部屋を出るとき消される)、ROMは印刷された本(消えないが書き込めない)。

種類 電源を切ると 書き換え 主な用途
RAM 消える(揮発性) 自由 主記憶・キャッシュ
ROM 残る(不揮発性) 原則不可(種類による) 起動プログラム・組込み機器のプログラム
HDD 残る 自由 補助記憶(主記憶ではない)

RAMはさらに2種類に分かれる。前のレッスンのキャッシュメモリにはSRAM、主記憶にはDRAMが使われる。

種類 しくみ リフレッシュ 速さ・容量・価格 用途
DRAM コンデンサに電荷をためる 必要(電荷が漏れるので定期的に書き直す) 遅め・大容量・安い 主記憶
SRAM フリップフロップ回路で保持 不要 速い・小容量・高い キャッシュメモリ

電源投入時に最初に動くプログラムはROMに置く

電源を入れた直後、主記憶(DRAM)は空っぽだ。だから最初に動くプログラム(IPL=OSを読み込むための起動プログラム)は、電源を切っても消えないROMに置く。

HDDも消えないが、HDDからOSを読み出すにはそのための読込みプログラムが先に動いている必要がある。だから最初の置き場にはならない。DRAM・SRAMは揮発性なので、バッテリで電源を保たない限り使えない。

電源ON直後:DRAMは空っぽROMIPL①最初に実行電源OFFでも消えない②HDDを読むHDDOS消えないが読込み役が先に要る③OSをDRAMへDRAM空 → OS電源OFFで消える最初の置き場は ROM だけ
電源を入れた直後はDRAMが空なので、消えないROMのIPLが先に動き、HDDからOSをDRAMへ読み込む。

ROMの種類:書き込むタイミングと消し方で区別する

ROMは「誰がいつ書くか」「消せるならどうやって消すか」で区別する。

種類 書き込み 消去・書換え 特徴・用途
マスクROM 製造時に工場で固定 できない 量産向き・大容量化しやすい。ゲームカートリッジ、プリンタの漢字フォント、組込み機器のプログラム
PROM 利用者が後から1回だけ できない 出荷後に個体ごとの値を書ける
EPROM 利用者が書ける 紫外線を当てて全消去 消して再利用できる
EEPROM 利用者が書ける 電気で消去 基板に載せたまま書換えできる
フラッシュメモリ 利用者が書ける 電気でブロック単位に一括消去 USBメモリ・SSD・スマホのストレージ

マスクROMの強みは「書き換えられない」ことそのものだ。出荷後にプログラムを不正に書き換えられないので、組込み機器のプログラム格納に向く。逆に「量産後にシリアル番号を書く」「紫外線で消して再利用」はマスクROMにはできない。

誤り検出と誤り訂正:パリティ・チェックサムは「検出だけ」

メモリのビットは、ノイズなどで0と1がまれに反転する。これを見つけるのが誤り検出、元に戻すのが誤り訂正だ。試験では「その方式は訂正までできるか」が問われる。

パリティチェックは、データに1ビット(パリティビット)を足し、1の個数を偶数(偶数パリティ)または奇数(奇数パリティ)にそろえる方式だ。たとえば偶数パリティで 1011001(1が4個)なら0を足す。読み出したとき1の個数が奇数になっていれば「どこかが反転した」と分かる。

ただし、どのビットが反転したかは分からないので訂正はできない。2ビット同時に反転すると個数が偶数に戻り、見逃す。

方式 できること 試験での扱い
奇数・偶数パリティ 1ビットの誤り検出のみ 「検出のみ」側
水平パリティ(行だけ) 検出のみ 「検出のみ」側として出る
水平パリティ+垂直パリティの組合せ 行と列の不一致が交わる位置から、1ビットの誤りを特定して訂正もできる この試験の選択肢では、水平パリティは「検出のみ」側として出る
チェックサム データの合計値を比べて検出のみ 「検出のみ」側
チェックディジット 番号の末尾に検査用の数字を付け、入力ミスを検出のみ 「検出のみ」側
ハミング符号 1ビット訂正+(拡張すると)2ビット検出 「訂正できる」の答え
送る(偶数パリティ)10110010データ7ビットパリティ1が4個偶数でOK1ビット反転(3番目)100100101→01が3個奇数→検出2ビット反転(3・4番目)100000101→01→01が2個偶数→見逃すどのビットが反転したか分からない→ 訂正はできない(検出だけ)
偶数パリティでは1の個数が奇数になれば誤りに気づけるが、2ビット同時に反転すると偶数に戻って見逃し、どこが反転したかも分からない。

ハミング符号とECC:訂正できるのはここ

ハミング符号は、検査用のビット(冗長ビット)を複数足し、それぞれがデータの違う組合せのビットを見張る方式だ。どの検査ビットが合わなかったかの組合せで、反転したビットの位置が分かるので、そのビットを反転し直して自動訂正できる。

検査ビットをもう1ビット足した拡張版(SEC-DED)は、1ビット誤りを訂正し、2ビット誤りを検出できる。試験の「2ビットの誤り検出と1ビットの誤り訂正」という言い回しが出たら、答えはハミング符号だ。

この仕組みをメモリに組み込んだものをECC(誤り訂正符号)と呼び、サーバ用のECCメモリで使われる。ECCの問題では、データ幅に対して必要な冗長ビット数を計算させる。データ幅 2^n ビットに対して、訂正用に n+1 ビット、2ビット検出用に1ビットを足して n+2 ビットになる(問題文で式が与えられる)。実際のECCメモリも、64ビット(2^6)のデータに 6+2=8ビットを足している。

データ幅 64ビット = 2^6 → n=61ビット訂正用n+1=7ビット2ビット検出用1ビットn+2=8ビットを足すデータ 64ビット8ビット実際のECCメモリも64ビットに8ビットを足す答えは n(=6)ではなく n+2(=8)
データ幅64ビットを2^6に直してn=6を求め、訂正用n+1=7ビットと2ビット検出用1ビットを足して冗長ビットはn+2=8ビットになる。

試験での問われ方

  • 電源投入時のプログラムの置き場:選択肢にDRAM・SRAM・HDD・ROMが並ぶ。「消えない」かつ「最初に読める」のはROMだけ。
  • マスクROMのメリット:EPROM(紫外線消去)、PROM(後から書込み)、RAM(主記憶の代わり)の特徴が混ぜて出される。マスクROMは「製造時に固定・書換え不可・量産で大容量向き」。
  • パリティチェックの目的:「検出する」と「検出して自動的に訂正する」が並ぶ。パリティは検出まで。
  • 訂正機能をもつ方式:パリティ・チェックサム・チェックディジットと並べて、ハミング符号を選ばせる。
  • ECCの冗長ビット数:データ幅を 2^n に直して n を求め、式に入れる。n をそのまま答えにしない。
例題 1

128ビットのデータバスに必要なECCの冗長ビット数

メモリのエラー検出及び訂正に ECC を利用している。データバス幅 2^n ビットに対して冗長ビットが n+2 ビット必要なとき,128 ビットのデータバス幅に必要な冗長ビットは何ビットか。

ア 7
イ 8
ウ 9
エ 10

出典:平成30年度 秋期 基本情報技術者試験 午前 問11

解き方と答えを見る
  1. 問題文の式を確認する:データバス幅 2^n ビットに対して、冗長ビットは n+2 ビット。
  2. データバス幅 128 を 2 のべき乗に直す:2^7 = 2×2×2×2×2×2×2 = 128。
  3. したがって n = 7。
  4. 式に入れる:冗長ビット = n+2 = 7+2 = 9 ビット。
  5. 選択肢と照らす:ア 7 は n のまま、イ 8 は 64ビット(n=6)のときの値。正しいのはウ 9。

答え:ウ:9ビット

要点(試験直前に読む)

  • 起動時の最初のプログラム(IPL)は、電源を切っても消えないROMに置く。HDDやRAMではない。
  • 主記憶=DRAM(リフレッシュ必要・安い・大容量)、キャッシュ=SRAM(リフレッシュ不要・高速・高価)。
  • マスクROMは製造時に固定・書換え不可。だから出荷後の不正な書換えを防げ、量産・大容量に向く。紫外線で消すのはEPROM。
  • パリティ・チェックサム・チェックディジットは「検出のみ」。パリティは2ビット同時の反転を見逃す。
  • 「1ビット訂正+2ビット検出」「自動訂正」と出たらハミング符号(ECC)。
  • ECCの冗長ビットは、データ幅を 2^n に直してから n+2。128ビットなら n=7 で9ビット。

ひっかけ

  • 「読出し時にエラーを検出して自動的に訂正する」はパリティチェックの説明としては誤り。パリティは検出まで、訂正はECC(ハミング符号)。
  • この問題の選択肢のうち、自動訂正できるのはハミング符号だけ(パリティ単体・チェックサム・チェックディジットは検出のみ)。なお水平と垂直のパリティを組み合わせれば1ビット訂正もできるが、選択肢の「水平パリティ」は検出のみ側として扱う。
  • マスクROMのメリットを問う問題で、「紫外線で消去して再利用」(EPROM)、「量産後にシリアル番号を書き込む」(PROMなど後から書けるROM)、「主記憶の不足時に補助記憶として使う」は誤り。
  • 電源投入時のプログラムの置き場でHDDを選ばせるひっかけ。HDDを読むためのプログラムがまず必要なので、最初の置き場はROM。
  • ECC計算で n(128なら7)をそのまま答えたり、64ビットの値(8)と取り違えたりしない。式の n+2 まで計算する。

用語(17)

RAM Random Access Memory
読み書きが自由にでき、電源を切ると中身が消える(揮発性の)メモリ。
⚠ ROMは電源を切っても消えない。「消えるか」で見分ける。
ROM Read Only Memory
電源を切っても中身が残る(不揮発性の)メモリで、基本は読み出し専用。
⚠ RAMは揮発性。起動プログラムの置き場はROM。
揮発性・不揮発性 きはつせい・ふきはつせい
電源を切ると記憶が消える性質が揮発性、消えない性質が不揮発性。
⚠ HDDも不揮発性だが主記憶ではなく補助記憶。
DRAM Dynamic Random Access Memory
コンデンサに電荷をためて記憶するRAMで、定期的なリフレッシュが必要。安く大容量なので主記憶に使う。
⚠ SRAMはリフレッシュ不要で高速・高価、キャッシュメモリ向き。
SRAM Static Random Access Memory
フリップフロップ回路で記憶するRAMで、リフレッシュ不要で高速。キャッシュメモリに使う。
⚠ DRAMはリフレッシュが必要で主記憶向き。
IPL Initial Program Loader
電源投入直後に動いてOSを主記憶に読み込む起動用プログラムで、ROMに格納する。
マスクROM マスクロム
製造時に内容を書き込んで固定するROMで、書換えはできず量産と大容量化に向く。
⚠ EPROMは紫外線で消して書き直せる。PROMは利用者が後から書き込める。
PROM Programmable Read Only Memory
利用者が後から1回だけ書き込めるROM。
⚠ マスクROMは製造時に書き込み、後から書けない。
EPROM Erasable Programmable Read Only Memory
紫外線を当てて内容を消去し、書き直せるROM。
⚠ EEPROMは電気で消去する。マスクROMは消去できない。
EEPROM Electrically Erasable Programmable Read Only Memory
電気で内容を消去して書き直せるROM。
⚠ EPROMは紫外線で消去。フラッシュメモリはEEPROMの一種でブロック単位に消す。
フラッシュメモリ フラッシュメモリ
電気でブロック単位に一括消去して書き直せる不揮発性メモリで、USBメモリやSSDに使う。
パリティチェック パリティチェック
1の個数を偶数か奇数にそろえる検査ビットを足し、読出し時のビット誤りを検出する方式。訂正はできない。
⚠ 自動訂正できるのはハミング符号(ECC)。2ビット同時の反転は見逃す。
水平垂直パリティ すいへいすいちょくパリティ
データを表に並べ、行ごとの水平パリティと列ごとの垂直パリティを組み合わせる方式で、不一致の交点から1ビット誤りを特定して訂正できる。
⚠ 水平パリティ単体(行だけ)は検出のみ。試験の選択肢では水平パリティは「検出のみ」側として出る。
チェックサム チェックサム
データを区切って足した合計値を添えておき、受け取った側で合計を比べて誤りを検出する方式。
⚠ 検出のみで訂正はできない。
チェックディジット チェックディジット
番号の末尾に計算で決まる検査用の数字を付け、入力ミスを検出する方式。
⚠ 検出のみ。メモリの自動訂正ではない。
ハミング符号 ハミングふごう
複数の検査ビットで誤ったビットの位置を特定し、1ビット誤りを自動訂正できる符号。拡張すると2ビット誤りも検出できる。
⚠ パリティ・チェックサム・チェックディジットは検出のみ。
ECC Error Correcting Code(誤り訂正符号)
ハミング符号などを使ってメモリの誤りを検出・訂正する仕組み。データ幅 2^n ビットに n+2 ビットの冗長ビットを足す方式が出題される。
⚠ パリティチェックは検出だけで訂正はしない。

このレッスンの過去問

このレッスンで稽古する