メモリの種類と誤りの検出・訂正
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は揮発性なので、バッテリで電源を保たない限り使えない。
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ビット検出 | 「訂正できる」の答え |
ハミング符号と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ビットを足している。
試験での問われ方
- 電源投入時のプログラムの置き場:選択肢にDRAM・SRAM・HDD・ROMが並ぶ。「消えない」かつ「最初に読める」のはROMだけ。
- マスクROMのメリット:EPROM(紫外線消去)、PROM(後から書込み)、RAM(主記憶の代わり)の特徴が混ぜて出される。マスクROMは「製造時に固定・書換え不可・量産で大容量向き」。
- パリティチェックの目的:「検出する」と「検出して自動的に訂正する」が並ぶ。パリティは検出まで。
- 訂正機能をもつ方式:パリティ・チェックサム・チェックディジットと並べて、ハミング符号を選ばせる。
- ECCの冗長ビット数:データ幅を 2^n に直して n を求め、式に入れる。n をそのまま答えにしない。
128ビットのデータバスに必要なECCの冗長ビット数
ア 7
イ 8
ウ 9
エ 10
解き方と答えを見る
- 問題文の式を確認する:データバス幅 2^n ビットに対して、冗長ビットは n+2 ビット。
- データバス幅 128 を 2 のべき乗に直す:2^7 = 2×2×2×2×2×2×2 = 128。
- したがって n = 7。
- 式に入れる:冗長ビット = n+2 = 7+2 = 9 ビット。
- 選択肢と照らす:ア 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)
読み書きが自由にでき、電源を切ると中身が消える(揮発性の)メモリ。
⚠ ROMは電源を切っても消えない。「消えるか」で見分ける。
電源を切っても中身が残る(不揮発性の)メモリで、基本は読み出し専用。
⚠ RAMは揮発性。起動プログラムの置き場はROM。
電源を切ると記憶が消える性質が揮発性、消えない性質が不揮発性。
⚠ HDDも不揮発性だが主記憶ではなく補助記憶。
コンデンサに電荷をためて記憶するRAMで、定期的なリフレッシュが必要。安く大容量なので主記憶に使う。
⚠ SRAMはリフレッシュ不要で高速・高価、キャッシュメモリ向き。
フリップフロップ回路で記憶するRAMで、リフレッシュ不要で高速。キャッシュメモリに使う。
⚠ DRAMはリフレッシュが必要で主記憶向き。
電源投入直後に動いてOSを主記憶に読み込む起動用プログラムで、ROMに格納する。
製造時に内容を書き込んで固定するROMで、書換えはできず量産と大容量化に向く。
⚠ EPROMは紫外線で消して書き直せる。PROMは利用者が後から書き込める。
利用者が後から1回だけ書き込めるROM。
⚠ マスクROMは製造時に書き込み、後から書けない。
紫外線を当てて内容を消去し、書き直せるROM。
⚠ EEPROMは電気で消去する。マスクROMは消去できない。
電気で内容を消去して書き直せるROM。
⚠ EPROMは紫外線で消去。フラッシュメモリはEEPROMの一種でブロック単位に消す。
電気でブロック単位に一括消去して書き直せる不揮発性メモリで、USBメモリやSSDに使う。
1の個数を偶数か奇数にそろえる検査ビットを足し、読出し時のビット誤りを検出する方式。訂正はできない。
⚠ 自動訂正できるのはハミング符号(ECC)。2ビット同時の反転は見逃す。
データを表に並べ、行ごとの水平パリティと列ごとの垂直パリティを組み合わせる方式で、不一致の交点から1ビット誤りを特定して訂正できる。
⚠ 水平パリティ単体(行だけ)は検出のみ。試験の選択肢では水平パリティは「検出のみ」側として出る。
データを区切って足した合計値を添えておき、受け取った側で合計を比べて誤りを検出する方式。
⚠ 検出のみで訂正はできない。
番号の末尾に計算で決まる検査用の数字を付け、入力ミスを検出する方式。
⚠ 検出のみ。メモリの自動訂正ではない。
複数の検査ビットで誤ったビットの位置を特定し、1ビット誤りを自動訂正できる符号。拡張すると2ビット誤りも検出できる。
⚠ パリティ・チェックサム・チェックディジットは検出のみ。
ハミング符号などを使ってメモリの誤りを検出・訂正する仕組み。データ幅 2^n ビットに n+2 ビットの冗長ビットを足す方式が出題される。
⚠ パリティチェックは検出だけで訂正はしない。
このレッスンの過去問
- 主記憶装置の種類と用途(ROM・RAM)平成26年度 秋期 基本情報技術者試験 午前 問12
- マスクROMの特徴平成23年度 秋期 基本情報技術者試験 午前 問12
- パリティチェックの目的(誤り検出)平成26年度 春期 基本情報技術者試験 午前 問11
- ハミング符号の誤り訂正機能基本情報技術者試験 科目A免除 修了試験 20220612 実施分 問12
- ECC冗長ビット数の計算平成30年度 秋期 基本情報技術者試験 午前 問11