- コンピュータの 5 大装置と、1 命令が取り出されて実行されるまでのレジスタの動き
- 半加算器・全加算器など論理回路の組合せで演算が実現される仕組み
- クロック周波数・CPI・MIPS・FLOPS でプロセッサ性能を計算する型
- 命令パイプラインの所要サイクル数と、VLIW・スーパースカラ・投機実行の違い
- DRAM / SRAM / フラッシュメモリの特徴と、キャッシュの実効アクセス時間・書込み方式・置換アルゴリズム
- メモリインタリーブ、バスと USB・DMA、磁気ディスク・SSD・VRAM の容量と時間の計算
科目 A で例年 4〜5 問出題されます(直近 10 年・19 回で 86 問、1 回平均 4.5 問)。23 ある中分類のうちセキュリティ・ネットワーク・データベースに次ぐ 4 位の頻出分野で、しかも計算問題が 24 問と多く、型を覚えれば確実に得点できます。4 問確保が目標です。
コンピュータの構成と命令実行サイクル
コンピュータは目的の違いこそあれ、入力・記憶・演算・制御・出力の 5 つの装置(5 大装置)で説明できます。演算装置と制御装置をまとめたものが CPU(Central Processing Unit、中央処理装置)で、プロセッサとも呼びます。データは入力装置 → 記憶装置 → 演算装置 → 出力装置と流れ、制御装置はその全体へ制御信号を配ります。入力装置と出力装置は直接つながっておらず、必ず記憶装置を経由します。データの流れと制御の流れが別物である点が、構成図を読むときの要点です。
CPU が 1 命令を処理する手順を命令実行サイクルといいます。図 4-1 の 4 段階を、どのレジスタが何を保持するかとセットで覚えます。
各段階で働くレジスタは次のとおりです。PC(プログラムカウンタ、命令アドレスレジスタ)と IR(Instruction Register、命令レジスタ)の役割は、直近 10 年で PC が 2 回、スタックポインタが 2 回そのまま定義を問われています。
| レジスタ | 保持するもの | 試験での問われ方 |
|---|---|---|
| PC(プログラムカウンタ) | 次に実行する命令が置かれた主記憶の番地 | 「次の命令の番地を保持する」=正解 |
| IR(命令レジスタ) | フェッチした命令そのもの(命令部+アドレス部) | デコーダが解読する対象 |
| GR(汎用レジスタ)/アキュムレータ | 演算の対象データと結果 | アキュムレータは演算結果の蓄積用 |
| MAR/MDR(DR) | アクセスする主記憶の番地/読み書きするデータ | 主記憶とのやり取りの窓口 |
| スタックポインタ(SP) | スタックの最上段(次に積む/降ろす位置)の番地 | 割込み・サブルーチンの戻り番地退避で使う |
| 指標(インデックス)レジスタ | 配列の添字に相当する増分値 | インデックスアドレス指定で加算される |
| ベースレジスタ | プログラムが置かれた先頭番地 | ベースアドレス指定で加算される |
PC は命令アドレスレジスタとも呼ばれ、シラバスでは命令カウンター・逐次制御カウンターという別名も挙げられています。主記憶とのやり取りに使う MAR と DR をまとめて MR(Memory Register、メモリレジスタ)と呼ぶこともあります。演算装置は加算器のほかに、減算を加算に置き換えるための補数器、乗算器、積和演算器をもちます。
アドレッシング(アドレス指定方式)
機械語命令は算術演算命令・論理演算命令・転送命令・比較命令・分岐命令・シフト命令・入出力命令などに分類され、1 命令は命令部(オペコード)とアドレス部(オペランド)から成ります。アドレス部の値に指標レジスタやベースレジスタの値を足すといったアドレス計算(アドレス修飾)を経て、実際にアクセスする番地=実効アドレス(有効アドレス)が決まります。この決め方の規則がアドレス方式で、違いは「アドレス部の値をどう扱うか」だけなので一覧で押さえます。直近 10 年では間接アドレス指定が 1 回出題されています。
| 方式 | 実効アドレスの求め方 | 用途 |
|---|---|---|
| 即値アドレス指定 | アドレス部の値そのものがデータ(番地ではない) | 定数の指定 |
| 直接(絶対)アドレス指定 | アドレス部の値がそのまま実効アドレス | 固定番地の参照 |
| 間接アドレス指定 | アドレス部が指す番地の中身が実効アドレス | ポインタ、参照の付け替え |
| インデックス(指標)アドレス指定 | アドレス部 + 指標レジスタの値 | 配列の連続アクセス |
| ベースアドレス指定 | アドレス部 + ベースレジスタの値 | 再配置可能なプログラム |
| 相対アドレス指定 | アドレス部 + PC の値 | 近距離の分岐 |
割込みとマイクロプログラム制御
割込みは、実行中のプログラムを中断して別の処理へ制御を移す仕組みです。原因が実行中プログラム自身にあるものを内部割込み、外部装置など自分の外にあるものを外部割込みといいます。優先度の高い割込みが処理中の割込みをさらに中断するのが多重割込みで、退避に使うのがスタックです。割込みの受付け・優先順位づけ・退避と復帰を担う仕組みを割込み制御といいます。
| 分類 | 例 | 発生源 |
|---|---|---|
| 内部割込み | プログラム割込み(0 除算・記憶保護違反)、SVC 割込み(OS 機能の呼出し)、ページフォールト | 実行中の命令 |
| 外部割込み | 入出力割込み、マシンチェック割込み(ハードウェア障害)、タイマ割込み、電源異常 | CPU の外 |
マスクによって受付けを保留できる割込みをマスク可能割込み、電源異常など保留できないものを NMI(Non-Maskable Interrupt、マスク不能割込み)といいます。また、1 つの機械語命令の動作をさらに細かいマイクロ命令の列として制御メモリ(マイクロプログラムメモリ)に持たせる方式がマイクロプログラム制御で、次に実行するマイクロ命令の位置はマイクロプログラムカウンターが指します。ビットを制御信号にそのまま対応させて並列度を上げた水平型マイクロコードと、符号化して命令語を短くした垂直型マイクロコードがあり、他機種の命令を模倣するエミュレーションを実現できます。これに対し、命令の解読と実行を論理回路だけで行う方式をワイヤードロジック(布線論理)制御といい、高速ですが命令の変更が効きません。
論理回路と加算器
演算装置の中身は、AND・OR・NOT という基本論理回路の組合せです。出力が現在の入力だけで決まる回路を組合せ回路(加算器・デコーダ・マルチプレクサ)、過去の状態も保持する回路を順序回路(フリップフロップ・カウンタ・レジスタ)といいます。この分野は直近 10 年で 5 問出題され、うち 4 問が真理値表やタイミングチャートを読ませる読解問題です。暗記より「表を埋める」練習が効きます。
1 桁の 2 進数 A と B を足す回路が半加算器です。和 S は「どちらか一方だけが 1 のとき 1」なので XOR(排他的論理和)、桁上がり C は「両方 1 のとき 1」なので AND で作れます(図 4-2)。
| A | B | 和 S(XOR) | 桁上がり C(AND) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
NAND(AND の否定)は 1 種類だけで AND・OR・NOT のすべてを作れる「万能ゲート」です。真理値表から回路を逆引きするときは、ド・モルガンの法則(A・B の否定 = 否定 A + 否定 B、A + B の否定 = 否定 A・否定 B)を使って、AND と OR を入れ替えて考えます。
プロセッサの性能指標 ― CPI・MIPS・FLOPS
CPU の動作の刻みがクロックで、1 秒あたりの刻み数がクロック周波数(単位 Hz)、1 刻みの時間がクロックサイクルタイム(周期)です。両者は逆数の関係にあり、1.25 GHz なら周期は 1 ÷ (1.25×109) = 0.8 ナノ秒になります。ここを取り違えるのが計算問題の最大の失点源です。
1 命令の実行に平均何サイクル要するかが CPI(Cycles Per Instruction)、1 秒間に実行できる命令数を 100 万単位で表したものが MIPS(Million Instructions Per Second)です。3 つの量は図 4-3 の掛け算 1 本でつながります。
計算の型: CPI と MIPS
実行時間 = 命令数 × CPI × クロック周期 / MIPS = クロック周波数(MHz) ÷ CPI
例題: クロック周波数 1.25 GHz のプロセッサが 1 秒間に 10 億命令を実行した。CPI はいくつか。
- 1 秒間のクロック数を出す: 1.25 GHz = 1.25×109 サイクル/秒
- 1 秒間の命令数を出す: 10 億 = 1.0×109 命令/秒
- CPI = サイクル数 ÷ 命令数 = 1.25×109 ÷ 1.0×109 = 1.25
2 台の性能比を問われたら、実行時間の式に両方の値を入れて比を取ります。命令数が同じなら、実行時間の比は「CPI × 周期」の比に等しくなります。
命令の種類ごとに出現率と所要サイクル数が違う場合、出現率で重み付けした平均を取ります。これが命令ミックスで、事務処理向けのコマーシャルミックス、科学技術計算向けのギブソンミックスなどがあります。平均 CPI = Σ(各命令の出現率 × 所要サイクル数)です。
科学技術計算では 1 秒間の浮動小数点演算回数 FLOPS(Floating point Operations Per Second)を使います。スーパーコンピュータの理論ピーク演算性能は「1 ノード当たりの性能 × ノード数」で求めます(同一仕様のノード構成が前提で、異種ノードやアクセラレータ混在時はノードごとに算出して合算します)。直近 10 年で 2 回、同一形式で出題されています(ノード数 2,000・総性能 640 TFLOPS を求めさせるもの)。
| 指標 | 意味 | 注意点 |
|---|---|---|
| クロック周波数 | 1 秒あたりのクロック数(Hz) | 周期との逆数関係。周波数が高い=速いとは限らない |
| CPI | 1 命令あたりの平均サイクル数 | 小さいほど速い。RISC は 1 に近づける設計 |
| MIPS | 1 秒あたりの命令実行数(百万単位) | 大きいほど速い。命令の重さを無視するので機種間比較には弱い |
| FLOPS | 1 秒あたりの浮動小数点演算回数 | HPC の指標。理論ピーク=ノード性能×ノード数 |
命令パイプラインと高速化技術
命令実行サイクルを複数の段(ステージ)に分け、前の命令が次の段へ進んだら空いた段に次の命令を流し込む方式が命令パイプラインです。RISC 型プロセッサでは IF(命令フェッチ)→ ID(デコード)→ EX(実行)→ MEM(メモリアクセス)→ WB(書戻し)の 5 段構成が代表的で、この順序がそのまま出題されたことがあります。パイプラインと高速化技術はこの中分類で最も厚く、直近 10 年で命令パイプライン 4 問・VLIW 4 問・スーパースカラ 1 問・投機実行 1 問が出ています。
計算の型: パイプラインの所要時間
所要サイクル数 = 命令数 n + 段数 k − 1(各段 1 サイクル、ハザードなしの場合)
例題: 5 段のパイプラインで 20 命令を実行するのに要するサイクル数は。1 サイクル 10 ナノ秒なら実行時間は。
- 最初の 1 命令が完了するまで: 5 サイクル
- 残り 19 命令は 1 サイクルずつ: 19 サイクル
- 合計 5 + 19 = 24 サイクル。時間は 24 × 10 = 240 ナノ秒
誤答肢は「20 × 5 = 100」(パイプラインなしの逐次実行)や「20 + 5 = 25」(− 1 の忘れ)です。
パイプラインの流れが乱れて空きサイクル(ストール)が生じることをハザードといいます。
| ハザード | 原因 | 対策 |
|---|---|---|
| 構造ハザード | 同じハードウェア資源を複数の命令が同時に使おうとする | 資源の二重化(命令キャッシュとデータキャッシュの分離) |
| データハザード | 直前の命令の演算結果を次の命令が待つ | フォワーディング、命令の並べ替え(アウトオブオーダー実行) |
| 制御ハザード(分岐ハザード) | 分岐命令の成立・不成立が確定するまで次の命令を決められない | 分岐予測、投機実行、遅延分岐 |
分岐予測は分岐先を予測して先に命令を読み込み、投機実行は予測に基づいて実際に実行まで進めておく技術です。予測が外れたら実行結果を破棄します。パイプラインの段数を増やして 1 段を短くしたものがスーパーパイプライン、パイプラインを複数本並べて同時に複数命令を流すのがスーパースカラです。図 4-5 のとおり、スーパースカラと VLIW(Very Long Instruction Word)の違いは「並列化を誰が決めるか」に尽きます。VLIW は依存関係のない複数の動作をコンパイル時に 1 つの長い命令へまとめておく方式です。
命令セットの設計思想も対比で問われます。CISC(Complex Instruction Set Computer)は 1 命令で複雑な処理を行う可変長命令が中心で、マイクロプログラム制御と相性がよい方式です。RISC(Reduced Instruction Set Computer)は単純な固定長命令に絞り、ワイヤードロジックとパイプラインで高速化します。CPI を 1 に近づけられる代わりに、同じ処理に必要な命令数は増えます。
マルチコア・並列処理とプロセッサの種類
1 個の LSI に複数の CPU コアを載せたものがマルチコアプロセッサです。同じ性能のコアを並べるのがホモジニアス、性能や消費電力の異なるコアを混在させるのがヘテロジニアスマルチコアで、高性能コアと省電力コアを使い分ける big.LITTLE がその代表です。1 つのコアが複数スレッド分のレジスタ群をもち、実行資源の空きを別のスレッドで埋めることで 1 コアが複数のスレッドを同時に処理する技術がマルチスレッディング(同時マルチスレッディング、SMT)です。
複数のプロセッサを結合する形態は、主記憶を共有するかどうかで分けます。
| 方式 | 主記憶 | 特徴 |
|---|---|---|
| 密結合マルチプロセッサ | 共有する | 1 つの OS が全プロセッサを制御。台数を増やすとメモリアクセスが競合して頭打ちになる |
| 疎結合マルチプロセッサ | 各自が持つ | プロセッサごとに OS が動き、通信路で連携。台数を増やしやすい |
| SMP(対称型マルチプロセッシング) | 共有する | 密結合の一形態。すべてのプロセッサが対等に処理を分担する |
このほか、処理を工程で分担して前段の結果を後段へ渡すタンデム結合マルチプロセッサシステム、多数の演算器を格子状に並べて同じ命令を一斉に適用するアレイコンピュータシステムがあります。プロセッサ間を結ぶ網の形にはトーラス・ハイパーキューブ・ハイパーツリーがあり、独立した複数のコンピュータを接続して 1 台のように見せる構成をクラスタといいます。
プロセッサを増やしても性能が比例して上がらないのは、並列化できない逐次部分が残るからです。主記憶への同時アクセス競合やデータベースのロックがその典型で、これを並列処理の隘路(ボトルネック)といいます。定量化したものがアムダールの法則で、直近 10 年で知識・計算あわせて 2 回出ています。
計算の型: アムダールの法則
速度向上比 S = 1 ÷ { (1 − p) + p ÷ n }(p: 並列化できる割合、n: プロセッサ数)
例題: 処理の 80% を並列化できるプログラムを 4 台のプロセッサで実行したときの速度向上比と、台数を無限に増やしたときの上限は。
- 逐次部分は 1 − 0.8 = 0.2、並列部分は 0.8 ÷ 4 = 0.2
- S = 1 ÷ (0.2 + 0.2) = 2.5 倍
- n を大きくすると p ÷ n は 0 に近づくので、上限は 1 ÷ 0.2 = 5 倍
「上限」「漸近値」と問われたら、プロセッサ数を無限大にして逐次部分だけを残す、と読み替えます。
並列処理の分類には、命令の流れとデータの流れの数で分けるフリンの分類があります。SISD が単一命令・単一データ(通常の逐次処理)、SIMD が 1 命令で複数データを一括処理(GPU のベクトル演算)、MISD が複数命令・単一データ、MIMD が複数命令・複数データ(マルチコア)です。
プロセッサとチップの種類
SoC・FPGA・GPU・量子コンピュータ・ユニファイドメモリといった新しいハードウェア概念は、直近 10 年で 10 問出題され、そのうち 6 問が直近 3 年に集中しています。定義を 1 行で言えるようにしておきます。
| 名称 | 正式名称・意味 | 特徴 |
|---|---|---|
| CPU | 中央処理装置 | 汎用。複雑な制御と分岐に強い少数の高性能コア |
| GPU / GPGPU | Graphics Processing Unit(画像処理装置)/ General Purpose computing on GPU(汎用計算への転用) | 単純な演算コアを多数並べ、行列演算や画像処理を並列実行。深層学習の学習処理で使う |
| DSP | Digital Signal Processor | 積和演算に特化。音声・信号処理向け |
| FPU | Floating Point Unit | 浮動小数点演算専用の演算装置 |
| TPU / AI チップ | Tensor Processing Unit | 機械学習のテンソル演算に特化した専用プロセッサ |
| SoC | System on a Chip | 複数チップで構成していたシステム全体を 1 チップに集積した LSI |
| FPGA | Field Programmable Gate Array | 製造後に論理回路の構成を書き換えられる。試作や仕様変更に強い |
| ASIC | Application Specific Integrated Circuit | 特定用途向けの専用 LSI。量産すれば安く速いが後から変更できない |
量子コンピュータは、0 と 1 の重ね合わせ状態をとる量子ビットを使って複数の状態を同時に表現し、特定の問題を高速に解きます。汎用的な量子ゲート型と、組合せ最適化に特化した量子アニーリング型があります。従来型コンピュータでは実用的な時間内に解けない計算を量子コンピュータが実行してみせることを量子超越性といいます。
省電力技術では、使っていない回路ブロックへの電源供給そのものを止めるパワーゲーティング、クロック供給を止めるクロックゲーティング、負荷に応じて電圧と周波数を下げる DVFS(Dynamic Voltage and Frequency Scaling)を区別します。パワーゲーティングは直近 10 年で 2 回出題されています。
メモリの種類と特徴
半導体メモリは、電源を切ると内容が消えるRAM(Random Access Memory、揮発性)と、消えない ROM(Read Only Memory、不揮発性)に大別されます。RAM の 2 種類、DRAM(Dynamic RAM)と SRAM(Static RAM)の特徴の入れ替えは定番の誤答肢で、直近 10 年で DRAM の特徴だけで 4 問出題されています(図 4-6)。
| 種類 | 書換え | 特徴・用途 |
|---|---|---|
| マスク ROM | 不可 | 製造時に内容を焼き込む。大量生産で安価 |
| PROM | 1 回だけ | 利用者が 1 度だけ書き込める |
| EPROM | 可(紫外線) | 紫外線を当てて全消去してから書き換える |
| EEPROM | 可(電気的) | 電気的にバイト単位で消去・書換えができる |
| フラッシュメモリ | 可(ブロック単位) | EEPROM の一種。NAND 型は大容量・安価で SSD や SD カード向け、NOR 型はランダム読出しが速くプログラム格納向け |
| FeRAM | 可 | 強誘電体を使う不揮発メモリ。低消費電力で高速 |
DRAM をクロックに同期させて高速化したものが SDRAM、クロックの立上りと立下りの両方でデータを転送して帯域を倍にしたものが DDR SDRAM です。DDR2 → DDR3 → DDR4 → DDR5 と世代が進むほど転送速度が上がります。これらを基板に載せたモジュールが DIMM で、ノート PC 向けの小型版が SO-DIMM です。
主記憶の構成と誤り検出訂正
主記憶は、記憶部・アドレス選択機構・読取り書込み機構から成り、アドレスを指定して該当する記憶セルを選び、読み書きします。ビット化けに備えて冗長ビットを付ける仕組みが誤り制御です。
| 方式 | 付加するもの | できること |
|---|---|---|
| パリティチェック | 1 ビット(偶数/奇数パリティ) | 1 ビットの誤りを検出するのみ。2 ビット誤りは見逃す |
| ハミング符号 | 複数の検査ビット | 2 ビットの誤りを検出し、1 ビットの誤りを訂正できる |
| ECC(Error Correcting Code)メモリ | ハミング符号などの検査ビット | サーバ用途。訂正までできるので運転を止めずに済む |
キャッシュメモリと記憶階層
この節はこの中分類で最大の得点源です。実効アクセス時間 5 問、キャッシュの書込み方式 4 問、メモリインタリーブ 5 問、置換アルゴリズム 2 問と、直近 10 年で 16 問が出ています。
記憶装置は「速いものは高価で小さい、遅いものは安価で大きい」という関係にあり、レジスタ → キャッシュメモリ → 主記憶 → 補助記憶 の順に階層をなします。上の階層に「よく使うものだけ」を置いて、平均の待ち時間を下げるのが記憶階層の考え方です。CPU と主記憶の速度差を埋めるために間に置く高速な SRAM がキャッシュメモリで、目的のデータがキャッシュにある確率をヒット率、ない確率をミス率といいます。メモリの速さは、読み書きを要求してからデータが得られるまでのアクセス時間と、次のアクセスを開始できるようになるまでのサイクル時間で表され、サイクル時間のほうが長くなります。
計算の型: 実効アクセス時間
実効アクセス時間 = h × Tc + (1 − h) × Tm(h: ヒット率、Tc: キャッシュのアクセス時間、Tm: 主記憶のアクセス時間)
例題 1: h = 0.95、Tc = 10 ナノ秒、Tm = 100 ナノ秒のとき、実効アクセス時間は主記憶だけの場合の何倍か。
- 実効アクセス時間 = 0.95 × 10 + 0.05 × 100 = 9.5 + 5 = 14.5 ナノ秒
- 主記憶だけなら 100 ナノ秒なので 14.5 ÷ 100 = 0.145 倍
例題 2(逆算): 実効アクセス時間が 19 ナノ秒、Tc = 10、Tm = 100 のときのヒット率は。
- 式を立てる: 10h + 100(1 − h) = 19
- 展開して整理: 100 − 90h = 19 → 90h = 81
- h = 0.9
例題 3(比で与えられる形): キャッシュのアクセス時間が主記憶の 30 分の 1、ヒット率が 0.95 のとき、実効アクセス時間は主記憶だけの場合の何倍か。
- 主記憶のアクセス時間を 1 と置くと Tc = 1 ÷ 30 = 0.0333…
- 0.95 × 0.0333… + 0.05 × 1 = 0.0317 + 0.05 = 約 0.08 倍
実際の出題ではこの「比で与える形」が多く、直近 10 年で 2 回、ヒット率 0.95・主記憶比 約 0.08 倍を答えさせる同一問題が出ています。ナノ秒が与えられなくても、主記憶を 1 と置けば同じ式で解けます。
ミス時に余分にかかる時間をミスペナルティといいます。問題文が「ミス時はキャッシュを調べてから主記憶を読む」と明記していれば Tc + Tm を使いますが、断りがなければ主記憶の時間だけを使います。
キャッシュへの書込み方式
読出しと違い、書込みは主記憶との整合をどう保つかで 2 方式に分かれます。直近 10 年で 4 回出題され、4 回とも正解はライトスルー側の記述でした(図 4-8)。
マッピング方式と置換アルゴリズム
主記憶のブロックをキャッシュのどこに置くかの決め方がマッピング方式です。
| 方式 | 置ける場所 | 特徴 |
|---|---|---|
| ダイレクトマップ(ダイレクト方式) | 1 か所だけ(アドレスから一意に決まる) | 回路が単純で高速。同じ場所を争う競合ミスが起きやすい |
| フルアソシアティブ(フルアソシエイティブ)方式 | どこでもよい | ヒット率は最も高いが、全エントリを同時に比較する連想メモリが必要でコストが高い |
| セットアソシアティブ(セットアソシエイティブ)方式 | 決まったセット内の複数か所 | 両者の折衷。実際のプロセッサはこれが主流 |
キャッシュが満杯のときにどのブロックを追い出すかが置換アルゴリズムです。同じ表を 3 つの基準で読むと追い出されるブロックが変わる、という形で出題されます。
| ブロック | ロード時刻 | 最終参照時刻 | 参照回数 |
|---|---|---|---|
| A | 10 | 80 | 5 |
| B | 20 | 70 | 9 |
| C | 30 | 90 | 3 |
| D | 40 | 60 | 7 |
- FIFO(先入れ先出し)… ロード時刻が最も古い A を追い出す
- LRU(Least Recently Used)… 最終参照時刻が最も古い D を追い出す
- LFU(Least Frequently Used)… 参照回数が最も少ない C を追い出す
キャッシュは命令用とデータ用に分けることがあり(命令キャッシュ・データキャッシュ)、これにより構造ハザードを避けられます。また、値そのものから格納場所を引ける記憶装置を連想メモリ(CAM:Content Addressable Memory)といい、フルアソシアティブ方式のタグ比較に使います。なお、多バイトのデータを主記憶に並べる順序には、上位バイトを先頭に置くビッグエンディアンと、下位バイトを先頭に置くリトルエンディアンがあります。
メモリインタリーブ
主記憶を複数のバンクに分け、連続するアドレスを異なるバンクへ交互に割り当てて、複数バンクへ並列にアクセスする高速化技法がメモリインタリーブです。直近 10 年で 5 回出題され、5 回とも正解は「主記憶を複数のバンクに分けて交互(並列)にアクセスして高速化する」という趣旨の記述でした。
同じ発想を補助記憶に適用したものがディスクキャッシュで、主記憶の一部に読み書きしたデータを保持して、低速な磁気ディスクへのアクセス回数を減らします。
バス・入出力デバイス・入出力装置
この節は直近 10 年で 16 問(バス 1・入出力デバイス 7・入出力装置 8)と出題数は多くありませんが、計算問題が含まれるので型だけは押さえます。
バス
装置間でデータをやり取りする共通の伝送路がバスです。番地を運ぶアドレスバス、データを運ぶデータバス、読み書きの指示やタイミングを運ぶ制御バスの 3 本組で、CPU・主記憶・入出力を結ぶものをシステムバスと呼びます。CPU 内部の内部バスに対して、外部バス・拡張バス(PCI、PCI Express)があります。命令用とデータ用にバスを分ける構成がハーバードアーキテクチャ、1 本のバスを共用する構成がプリンストンアーキテクチャ(ノイマン型)です。複数の装置がバスの使用権を争うため、調停を行う回路をバスアービタ、使用権を得てバスを制御する装置をバスマスタといいます。用途で分けると、CPU と主記憶を結ぶメモリバス、周辺装置につながる入出力バスがあり、信号線の使い方では 1 本の線で 1 ビットずつ送るシリアルバスと、複数の線で同時に送るパラレルバスに分かれます。使用権の決め方には、アービタが一括して割り当てる集中制御方式、装置からの要求を割込みで受ける割込み方式、装置へ順番に問い合わせるポーリング方式があります。標準規格には PCI・PCI Express・NVMe(Non-Volatile Memory Express)のほか、IEEE 1394、ANSI-X3.131(SCSI)、USB があります。
計算の型: バスの転送速度
転送速度 = バス幅(バイト) × バスクロック周波数
例題: バス幅 32 ビット、クロック周波数 100 MHz のバスの最大転送速度は。
- バス幅をバイトに直す: 32 ビット ÷ 8 = 4 バイト
- 1 秒あたりの転送回数はクロック周波数と同じ: 100×106 回
- 4 × 100×106 = 400 M バイト/秒
ビットとバイトの取り違えが定番の誤答です。単位に「バイト/秒」とあれば 8 で割ってから掛けます。
入出力インタフェースと制御方式
| 規格 | 種別 | 特徴 |
|---|---|---|
| USB | シリアル | ハブでツリー状に最大 127 台。2.0 は半二重、3.0 は全二重でスーパースピード(5 G ビット/秒)。Type-C は上下対称で裏表を選ばない |
| PCI Express | シリアル | レーン単位の高速拡張バス。x1・x4・x16 とレーン数で帯域が変わる |
| NVMe | — | PCI Express 接続の SSD 向けプロトコル(NVMe over Fabrics 拡張では RDMA や TCP 経由の接続にも対応)。SATA より低遅延 |
| シリアル ATA | シリアル | 内蔵ストレージ接続の標準 |
| Thunderbolt | シリアル | データ・映像・電力を 1 本で。デイジーチェーン接続に対応 |
| HDMI / DisplayPort | 映像・音声 | デジタル映像と音声を 1 本で伝送。DisplayPort はマルチストリームに対応 |
| Bluetooth / BLE | 無線 PAN | 近距離無線。BLE は省電力で IoT 機器向け |
| NFC | 無線 | 10 cm 程度の至近距離通信。交通系 IC カードや決済 |
| ZigBee / Wi-SUN | 無線 | センサネットワーク・スマートメータ向けの省電力無線 |
| IrDA | 赤外線 | 見通し内の近距離通信 |
| RS-232C / UART | シリアル | 調歩同期式の古典的なシリアル通信 |
| FC(ファイバチャネル) | シリアル | SAN でストレージを接続する高速規格 |
データを 1 本の信号線でビット単位に順送りするのがシリアルデータ転送方式、複数の信号線で同時に送るのがパラレルデータ転送方式です。パラレルは信号線どうしのタイミングのずれが高速化を妨げるため、現在の外部インタフェースはシリアルが主流です。
接続の形は、1 台のハブから放射状に伸びるスター接続、ハブを段階的につなぐカスケード接続、機器を数珠つなぎにするデイジーチェーン接続があり、SCSI のようにバス両端に終端抵抗(ターミネータ)が要る規格もあります。
入出力の制御方式は 3 つを区別します。CPU が 1 語ずつ転送に付き合うのがプログラム制御方式、CPU を介さずに入出力装置と主記憶が直接データをやり取りするのが DMA(Direct Memory Access)方式、専用のチャネル装置が入出力を肩代わりするのがチャネル制御方式です。DMA では転送の完了を入出力割込みで CPU に知らせるため、CPU は転送中に別の処理を進められます。転送元・転送先・語数・方向をパラメタで指定するブロック転送は、直近 10 年で 2 回出題されています。
計算の型: 重複領域のブロック転送
転送先が転送元より高位なら降順(末尾から)、低位なら昇順(先頭から)に 1 語ずつ運ぶ。開始アドレスは進む向きの先頭を指定する
例題: 2000〜2003 番地の 4 語を 2002〜2005 番地へ移す。方向フラグは 0 で昇順、1 で降順に転送するとき、指定するパラメタは。
- 転送先(2002〜2005)は転送元(2000〜2003)より高位なので降順 = 方向フラグ 1
- 降順は末尾から運ぶので、開始アドレスは転送元 2003・転送先 2005
- 語数は 4。昇順にすると、2000 の値を 2002 へ書いた時点で、まだ読んでいない 2002 の値が消える
周辺装置を OS から使えるようにする制御ソフトウェアがデバイスドライバです。接続した装置を自動認識して設定するのがプラグアンドプレイ、電源を入れたまま抜き差しできるのがホットプラグです。
入出力装置と補助記憶
入力装置にはポインティングデバイス(マウス・タッチパネル・タッチスクリーン・ジョイスティック・トラックボール・デジタイザ・ペンタブレット)、キーボード(複数同時押しを取りこぼさない N キーロールオーバー)、音声入力装置、画像入力装置(スキャナ・OCR・OMR・デジタルカメラ)、バーコード読取装置、磁気カード読取装置、IC カード読取装置、生体認証装置、温度・加速度・光などの各種センサ、アナログ信号をデジタルに変える A/D コンバータがあります。出力装置には液晶ディスプレイ(TFT・STN)、有機 EL ディスプレイ、電子ペーパー、ヘッドマウントディスプレイ、プロジェクタ、プリンタ(インパクト/ノンインパクト、シリアル/ライン/ページ、レーザー・インクジェット・3D プリンタ)、D/A コンバータがあります。
計算の型: VRAM(表示に必要なメモリ容量)
必要容量 = 横画素数 × 縦画素数 × 1 画素あたりのバイト数
例題: 1,920 × 1,080 の解像度で 1 画素 24 ビットの色を表示するのに必要な容量は。
- 総画素数 = 1,920 × 1,080 = 2,073,600 画素
- 1 画素 24 ビット = 3 バイト
- 2,073,600 × 3 = 6,220,800 バイト = 約 6.2 M バイト(1 M = 106 とした場合。1 M = 220 で数えるなら約 5.9 M バイト)
表示内容を保持するこの領域をフレームバッファといいます。専用の VRAM を持たず、主記憶の一部を表示領域として使う方式がユニファイドメモリで、直近 10 年で 2 回、同一の問題が出題されています。
補助記憶の代表が磁気ディスク(ハードディスク)です。同心円状のトラック、複数円盤の同じ位置のトラックを束ねたシリンダ、トラックを分割したセクタという構造を持ちます。アクセス時間は 3 つの和で求めます。
計算の型: 磁気ディスクの平均アクセス時間
平均アクセス時間 = 平均シーク時間 + 平均回転待ち時間 + データ転送時間
(平均回転待ち時間 = 1 回転の時間 ÷ 2、データ転送時間 = 1 回転の時間 × 転送量 ÷ 1 トラック容量)
例題: 回転数 5,000 回/分、平均シーク時間 10 ミリ秒、1 トラック 15,000 バイトのディスクから 4,000 バイトを読む平均アクセス時間は。
- 1 回転の時間 = 60 秒 ÷ 5,000 = 12 ミリ秒
- 平均回転待ち時間 = 12 ÷ 2 = 6 ミリ秒
- データ転送時間 = 12 × (4,000 ÷ 15,000) = 3.2 ミリ秒
- 合計 = 10 + 6 + 3.2 = 19.2 ミリ秒
「圧縮したプログラムが主記憶に展開されるまでの時間」も、同じく時間を足し上げる問題です。
計算の型: 圧縮プログラムの展開時間
所要時間 = 圧縮後のサイズ ÷ 転送速度 + 圧縮後のサイズ × 1 M バイト当たりの展開時間(転送と展開が同時に行われない場合)
例題: 20 M バイトのプログラムを元の 40% に圧縮して保存してある。補助記憶から主記憶への転送速度が 25 M バイト/秒、圧縮された 1 M バイトの展開に 0.05 秒かかるとき、主記憶に展開されるまでの時間は。
- 圧縮後のサイズ = 20 × 0.4 = 8 M バイト
- 転送時間 = 8 ÷ 25 = 0.32 秒
- 展開時間 = 8 × 0.05 = 0.4 秒
- 合計 = 0.32 + 0.4 = 0.72 秒(圧縮しなければ 20 ÷ 25 = 0.8 秒なので、この条件では圧縮したほうが速い)
展開時間が比例するのは「圧縮後のサイズ」です。元のサイズを掛けてしまうのが定番の誤答で、直近 10 年で 2 回、同一問題として出題されています。
SSD(Solid State Drive)は NAND 型フラッシュメモリを使う補助記憶で、機械的な駆動部がないためシークも回転待ちもありません。フラッシュメモリのセルは書換え回数に上限があるため、書込みを特定ブロックに集中させず全体へ均等に分散するウェアレベリングで寿命を延ばします。光ディスクは書換えの可否で、読出し専用型(CD-ROM・DVD-ROM)、追記型(CD-R・DVD-R)、書換型(DVD-RAM・DVD-RW)の 3 つに分かれ、大容量のブルーレイディスクにも同じ 3 種類があります。半導体メモリを記憶媒体に使う補助記憶を総称して半導体ディスクといい、SSD がその代表です。主記憶の一部をディスクのように見せて使う領域は RAM ファイルと呼びます。このほか USB メモリや SD/SDHC/SDXC カード、磁気テープ装置(DAT・ストリーマ。ブロック間隔 IBG(Interblock Gap)とブロック化因数で容量が決まる)、複数台をまとめたディスクアレイ、待機時にディスクを停止して省電力化する MAID(Massive Array of Idle Disks)があります。複数台のディスクを束ねて信頼性や速度を高める RAID は第 5 章で扱います。
ひっかけポイント
理解度チェック(科目 A 形式)
Q1. キャッシュメモリのヒット率が 0.98、キャッシュのアクセス時間が 5 ナノ秒、主記憶のアクセス時間が 80 ナノ秒である。実効アクセス時間は何ナノ秒か。ミス時は主記憶のアクセス時間だけを要するものとする。
- 5.0
- 6.5
- 42.5
- 78.5
正解: イ 0.98 × 5 + 0.02 × 80 = 4.9 + 1.6 = 6.5 ナノ秒です。ア はキャッシュのアクセス時間そのもの、ウ は 5 と 80 の単純平均、エ はヒット率とミス率を逆に掛けた値(0.02 × 5 + 0.98 × 80)です。
Q2. メモリインタリーブの説明として適切なものはどれか。
- CPU と主記憶の速度差を埋めるために、高速で小容量のメモリを両者の間に置く。
- 補助記憶を利用して、主記憶の容量を超える大きなアドレス空間をプログラムに見せる。
- 主記憶の一部を画面表示用の領域として割り当て、専用メモリを省く。
- 主記憶を複数のバンクに分け、連続する番地を各バンクへ交互に割り当てて並列にアクセスする。
正解: エ インタリーブは主記憶側の高速化技法で、連続番地を別バンクに散らして同時読出しを可能にします。ア はキャッシュメモリ、イ は仮想記憶、ウ はユニファイドメモリの説明です。
Q3. 依存関係のない複数の動作を、コンパイルの段階で 1 つの長い命令にまとめておき、実行時に並列処理させる方式はどれか。
- スーパーパイプライン
- スーパースカラ
- VLIW
- 投機実行
正解: ウ 並列化の判断をコンパイラが行うのが VLIW(Very Long Instruction Word)です。ア はパイプラインの段数を増やして 1 段を短くする技術、イ は実行時にハードウェアが複数命令を並列発行する方式、エ は分岐予測に基づいて先に実行を進める技術で、いずれも「コンパイル段階で」という条件に合いません。
Q4. 4 段の命令パイプラインをもつプロセッサで 30 命令を実行する。各段の所要時間は 1 サイクルで、1 サイクルは 20 ナノ秒、ハザードは発生しないものとすると、実行時間は何ナノ秒か。
- 660
- 680
- 2,380
- 2,400
正解: ア 所要サイクル数は 命令数 + 段数 − 1 = 30 + 4 − 1 = 33 なので、33 × 20 = 660 ナノ秒です。イ は − 1 を忘れた 34 サイクル、ウ・エ はパイプラインを使わない逐次実行(30 × 4 = 120 サイクル)を基にした値です。
Q5. キャッシュメモリの書込み方式のうち、ライトスルー方式の説明として適切なものはどれか。
- キャッシュにだけ書き込み、そのブロックが追い出されるときに主記憶へ書き戻す。
- キャッシュと主記憶の両方に同時に書き込むので、両者の内容は常に一致する。
- 主記憶にだけ書き込み、キャッシュ上の該当ブロックは無効化する。
- 書込みは必ず主記憶に対して行い、キャッシュは読出し専用として使う。
正解: イ ライトスルーは書込みのたびに主記憶も更新するため一貫性の管理が楽な代わり、書込み性能は落ちます。ア はライトバック方式の説明です。ウ・エ はキャッシュの書込み方式として定義されていない架空の動作です。
Q6. DRAM の特徴として適切なものはどれか。
- 記憶素子にフリップフロップを使い、リフレッシュ動作を必要としない。
- 電源を切っても記憶内容が保持される不揮発性メモリである。
- SRAM に比べてアクセスが高速なので、キャッシュメモリとして使われる。
- SRAM に比べてセル構造が単純でビット単価が安いが、一定時間ごとのリフレッシュが必要である。
正解: エ DRAM はコンデンサ 1 個とトランジスタ 1 個でセルを構成するため安価で大容量にできますが、電荷が抜けるのでリフレッシュが要ります。ア と ウ は SRAM の性質、イ は ROM やフラッシュメモリの性質を貼り付けた誤答です。
Q7. SoC(System on a Chip)の説明として適切なものはどれか。
- 複数の LSI で構成していたシステム全体の機能を、1 つのチップ上に集積した LSI である。
- 製造後に利用者が内部の論理回路の構成を書き換えられる集積回路である。
- 特定用途向けに設計され、製造後は回路構成を変更できない専用の集積回路である。
- 複数のチップを 1 つのパッケージに収めた実装形態である。
正解: ア SoC は「システム 1 式を 1 チップに」が定義です。イ は FPGA、ウ は ASIC の説明です。エ は複数チップを 1 パッケージに封止する実装(SiP など)であり、1 チップに集積する SoC とは集積の単位が違います。
Q8. USB 3.0 の特徴として適切なものはどれか。
- 転送は半二重方式で、最大転送速度は 480 M ビット/秒である。
- 給電機能をもたないので、接続する周辺機器には別途電源が必要である。
- 全二重方式に対応し、スーパースピードモードでは 5 G ビット/秒で転送できる。
- 接続できる機器は 1 台だけで、ハブによる分岐接続はできない。
正解: ウ USB 3.0 は送信用と受信用の信号線を分けて全二重化し、スーパースピードモードを追加しました。ア は USB 2.0 の仕様です。イ は誤りで、USB はバスパワーによる給電に対応しています。エ も誤りで、ハブを使って多数の機器をツリー状に接続できます。
Q9. ユニファイドメモリ方式の説明として適切なものはどれか。
- グラフィックス処理専用の高速メモリを別に搭載し、主記憶とは切り離して使う。
- 主記憶の一部を表示用の領域として割り当てて使う。
- 複数のプロセッサがそれぞれ専用の主記憶をもち、通信路を介して連携する。
- 主記憶を複数のバンクに分け、交互にアクセスして転送速度を上げる。
正解: イ ユニファイドメモリは専用 VRAM を持たず、主記憶の一部をフレームバッファに充てる方式です。ア は専用 VRAM 型でユニファイドの反対、ウ は疎結合マルチプロセッサ、エ はメモリインタリーブの説明です。
Q10. 1 ノード当たりの理論ピーク演算性能が 320 GFLOPS のノードを 2,000 台使ってシステムを構成する。このシステム全体の理論ピーク演算性能は幾らか。
- 6.4 TFLOPS
- 64 TFLOPS
- 320 TFLOPS
- 640 TFLOPS
正解: エ 320 GFLOPS × 2,000 = 640,000 GFLOPS = 640 TFLOPS です(1 TFLOPS = 1,000 GFLOPS)。ア・イ は桁を 2 桁・1 桁取り違えた値、ウ はノード数を掛けずに単位だけ TFLOPS に読み替えた誤りです。
Q11. キャッシュに 4 つのブロック A〜D が格納されている。ロードされた時刻は A が 5、B が 15、C が 25、D が 35、最後に参照された時刻は A が 70、B が 95、C が 60、D が 85、参照回数は A が 8、B が 2、C が 6、D が 4 である。LRU 方式で追い出されるブロックはどれか。
- A
- B
- C
- D
正解: ウ LRU は「最後に参照された時刻が最も古い」ブロックを追い出します。最終参照時刻は C が 60 で最も古いので C が対象です。ア はロード時刻が最も古いので FIFO で選ばれるブロック、イ は参照回数が最も少ないので LFU で選ばれるブロック、エ はどの方式でも選ばれません。
Q12. クロック周波数 2 GHz、CPI が 2.5 のプロセッサが 1 秒間に実行できる命令数はおよそ幾らか。
- 800 M 命令
- 1,250 M 命令
- 2,000 M 命令
- 5,000 M 命令
正解: ア 1 秒間のクロック数 2×109 を CPI 2.5 で割ると 8×108 = 800 M 命令です。イ は CPI を周波数で割った誤り、ウ は CPI を無視してクロック数をそのまま命令数とした誤り、エ は割る代わりに掛けた誤りです。
Q13. 回転数 6,000 回/分、平均シーク時間 8 ミリ秒、1 トラック当たりの記憶容量 20,000 バイトの磁気ディスクから 5,000 バイトのデータを読み出すときの平均アクセス時間は何ミリ秒か。
- 10.5
- 13.0
- 15.5
- 20.5
正解: ウ 1 回転は 60 ÷ 6,000 = 10 ミリ秒なので、平均回転待ち時間は 5 ミリ秒、データ転送時間は 10 × (5,000 ÷ 20,000) = 2.5 ミリ秒です。合計 8 + 5 + 2.5 = 15.5 ミリ秒になります。ア は平均回転待ち時間(5 ミリ秒)の足し忘れ、イ はデータ転送時間(2.5 ミリ秒)の足し忘れ、エ は平均回転待ちを 1 回転分(10 ミリ秒)とした誤りです。
Q14. 同一のメモリ空間で、転送元の開始アドレス・転送先の開始アドレス・方向フラグ・転送語数を指定してブロック転送を行う CPU がある。3000 番地から 3004 番地までの 5 語を、3003 番地から 3007 番地へ転送したい。方向フラグは 0 で昇順、1 で降順に開始アドレスから 1 語ずつ転送するとき、指定するパラメタとして適切なものはどれか。
- 転送元 3000、転送先 3003、方向フラグ 0、語数 5
- 転送元 3000、転送先 3003、方向フラグ 1、語数 5
- 転送元 3004、転送先 3007、方向フラグ 0、語数 5
- 転送元 3004、転送先 3007、方向フラグ 1、語数 5
正解: エ 転送先が転送元より高位に 3 語ずれて重なっているので、末尾から降順に運ばないと、まだ読んでいない語を上書きします。降順では開始アドレスが領域の末尾になるため、転送元 3004・転送先 3007・方向フラグ 1・語数 5 が正解です。ア は昇順なので 3000 の値を 3003 へ書いた時点で元データが壊れます。イ は降順なのに開始アドレスが領域の先頭で、3000 番地から下位方向の無関係な領域を転送します。ウ は開始アドレスこそ末尾ですが、昇順では 3004 番地から上位方向へ読み進むので対象の 5 語を運べません。
まとめ
この章の計算はすべて「型」で解けます。式と、その式が問う対象を 1 枚の表にまとめます。
| 論点 | 式・結論 | 取り違えやすい点 |
|---|---|---|
| 実効アクセス時間 | h × Tc + (1 − h) × Tm | ヒット率とミス率、キャッシュと主記憶の対応。逆算も出る |
| パイプライン | 所要サイクル数 = 命令数 + 段数 − 1 | 命令数 × 段数(逐次実行)と混同しない |
| CPI・MIPS | 実行時間 = 命令数 × CPI × クロック周期 | クロック周波数と周期は逆数。単位をそろえる |
| 理論ピーク演算性能 | 1 ノードの性能 × ノード数 | G と T の桁(1 T = 1,000 G) |
| アムダールの法則 | S = 1 ÷ { (1 − p) + p ÷ n }、上限 = 1 ÷ (1 − p) | 「上限」はプロセッサ数無限大の漸近値 |
| バスの転送速度 | バス幅(バイト) × クロック周波数 | ビットのまま掛けない(8 で割る) |
| 磁気ディスク | 平均シーク + 平均回転待ち(1 回転 ÷ 2)+ 転送時間 | 回転待ちを 1 回転分にしない。3 つ全部足す |
| VRAM 容量 | 横画素 × 縦画素 × 1 画素のバイト数 | 色深度がビット表記なら 8 で割る |
知識問題は「どちらが速く、どちらが安いか」「誰が決めるか」という対比で整理します。
| 対比 | 片方 | もう片方 |
|---|---|---|
| RAM の 2 種 | DRAM: コンデンサ、安い・大容量・リフレッシュ要、主記憶 | SRAM: フリップフロップ、速い・高い、キャッシュ |
| キャッシュ書込み | ライトスルー: 同時書込み、常に一致、遅い | ライトバック: 追出し時に反映、速い、一時的に不一致 |
| 並列化の主体 | VLIW: コンパイラが決める | スーパースカラ: 実行時にハードが決める |
| 命令セット | CISC: 可変長・複雑、マイクロプログラム制御 | RISC: 固定長・単純、ワイヤードロジック、パイプライン向き |
| 誤り制御 | パリティ: 1 ビット誤りの検出のみ | ハミング符号・ECC: 1 ビットの訂正まで可能 |
| チップの作り分け | FPGA: 製造後に回路を書き換えられる | ASIC: 専用設計で変更不可、量産向き |
| 置換アルゴリズム | LRU: 最終参照時刻が最古/LFU: 参照回数が最少 | FIFO: ロード時刻が最古 |
| 入出力制御 | プログラム制御: CPU が転送に付き合う | DMA・チャネル制御: CPU を介さず転送し、完了を割込みで通知 |
本章のキャッシュと記憶階層は、第 6 章で扱う仮想記憶(主記憶と補助記憶の階層)とまったく同じ発想です。ページ置換えアルゴリズムに LRU・FIFO が再登場するので、この章で身につけた「同じ表を基準ごとに読み替える」練習がそのまま活きます。