はじめに

はじめに

期末の出題範囲は「計算機工学IIIで扱ったすべて(ただし技術動向は除く)」、 勉強法は「各講義の課題・中間テスト1・中間テスト2を中心に復習」と明示されている。 → このシートは中間テスト1・2の全58問を、正解の根拠+誤答選択肢の潰し方まで展開したもの。

Part 1|中間テスト1

1-A. メモリシステム(DRAM / SRAM / キャッシュ)

まず土台:DIMMの階層構造を頭に入れる

この講義のメモリ問題は、ほぼ全部この1枚の階層図から解ける

メモリコントローラ
   │
   ├─ Channel 0 ──── DIMM ─┬─ Rank 0 ─┬─ Chip ─┬─ Bank 0 ─┬─ Row(行)× 多数
   │                       │          │        │          └─ Row buffer(1本だけ!)
   ├─ Channel 1 ──── DIMM  │          │        ├─ Bank 1 ─┬─ Row × 多数
   │  (↑ 独立した転送経路。   └─ Rank 1  │        │          └─ Row buffer
   │     増やすと帯域が増える)           │        └─ Bank 2 …

覚える3点セット:

用語 何か 並列性 増やすと何が良い
Channel メモリコントローラ⇔DIMM 間の独立したデータ転送経路(配線) 完全に独立 帯域幅が増える
Rank 1つのコマンドに同時に応答するDRAMチップの束(複数bankを内包) データバスは共有 容量が増える
Bank DRAM内部の独立したサブアレイ 異なるbankはある程度並列に動作可 bank-level parallelism

そして最重要:Row buffer は「bankごとに1本」しかない。 → 1つのbankで同時に開けるrowは 1本だけ

DIMMアーキテクチャ

p.5

問題:DIMMのアーキテクチャに関する記述のうち、正しいものをすべて選べ。

正解b と h

選択肢(要約) 判定 解説
a rankは複数bankを束ねたもので、bank間のアクセスは同時に実行できない 前半は正しいが後半が真逆。bankは独立サブアレイなので並列動作できる(これがbank-level parallelismの本質)。「前半が正しくて後半で裏切る」典型的な引っかけ。
b channelはメモリコントローラとDIMM間の独立したデータ転送経路。複数channelで帯域幅を向上できる channelの定義そのもの。デュアルチャネル=帯域2倍のイメージ。
c 同一bank内で異なるrowにアクセスするとき、row bufferの内容を保持したまま同時に複数rowを開ける row bufferは1bankに1本。別のrowを開くには今のrowを閉じる(PRECHARGE)必要がある。
d row bufferミス時は、異なるrankにアクセスしなければならない ミスしても同じbank内の別rowをACTIVATEするだけ。rankは無関係。
e row bufferはDIMM全体で1つ、すべてのbankで共有 bankごとに存在する。「全体で1つ」は誤り。
f (cと同一文) cと同じ。同じ選択肢が2回出る=ダミー。片方だけ選ぶ、みたいな迷い方をしないこと。
g channelとbankは同義で、どちらもDRAM内部の並列性の単位 channelはチップ外部の配線、bankはチップ内部の構造。階層が全く違う。
h bankはDRAM内部の独立したサブアレイで、異なるbankへの操作はある程度並列に実行可能 bankの定義そのもの。aの後半と矛盾していることに気づけば、aとhのどちらかが偽と分かる。

💡 解き方のコツ:a と h は「bankが並列に動くか」で真っ向から対立している。対立ペアを見つけたら、どちらかが必ず誤り。

Row bufferアクセス

p.11

問題:Row bufferが次の状態のとき、Bankから要求データを読み出す時間が長い順に並べよ。 - (ア) Row bufferにデータが何も存在しない状態 - (イ) Row bufferにデータが存在し、かつ要求データが含まれる状態 - (ウ) Row bufferにデータが存在し、かつ要求データが含まれない状態

正解b.(ウ) → (ア) → (イ)

なぜそうなるか — 必要なコマンド数で数える

状態 呼び名 必要な動作 所要時間
(イ) Row buffer hit READ だけ 最短(tCL のみ)
(ア) Row buffer empty / closed ACTIVATE → READ 中(tRCD + tCL)
(ウ) Row buffer conflict / miss PRECHARGE → ACTIVATE → READ 最長(tRP + tRCD + tCL)

直感的な言い換え: - (イ) 引き出しがもう開いていて、欲しい物がそこにある → 取るだけ - (ア) 引き出しが全部閉まっている → 開けて取る - (ウ) 違う引き出しが開いている一旦閉めて、開け直して取る(一番手間がかかる)

⚠️ 「何もない(ア)が一番遅そう」と直感で選ぶと間違える。"別のものが開いている方が、閉める手間の分だけ遅い" が答えの肝。

SRAMとDRAMの特徴

p.12

問題:SRAMとDRAMのアクセス速度、記憶密度について正しく記述しているものをすべて選べ。

正解a と f - a. DRAMは記憶密度は高く、アクセス速度は遅い - f. SRAMはアクセス速度は速く、記憶密度は低い

覚え方:「SRAMは速いが太い、DRAMは遅いが細い」

SRAM DRAM
記憶素子 フリップフロップ(トランジスタ6個程度) キャパシタ(+トランジスタ1個)
回路の大きさ 大きい → 記憶密度が低い 小さい → 記憶密度が高い
アクセス速度 速い 遅い
リフレッシュ 不要(電源が来ている限り保持) 必要(電荷が抜けるので定期的に再書き込み)
用途 キャッシュメモリ 主記憶(メインメモリ)

この表さえ埋まれば、a〜h の8択は全部機械的に判定できる(残りは全部この表の反対を書いているだけ)。

SRAMとDRAMの利用(穴埋め・スライド27)

正解

半導体記憶素子には、主にSRAMとDRAMの2種類がある。SRAMは記憶メカニズムに【フリップフロップ】を用いており、電力が供給されている限りデータは保持される。一方、DRAMは【キャパシタ】に電荷を蓄えることでデータを記憶するが、時間の経過とともに電荷が失われるため、定期的な【リフレッシュ】(再書き込み)動作が必要となる。SRAMは高速であるため主に【キャッシュメモリ】に利用され、DRAMは構造が単純で【大容量化】に適しているため主記憶に利用される。

Q3の表がそのまま文章になっただけ。Q3とQ4はセットで覚える。

キャッシュ原理(穴埋め・スライド26)

正解

キャッシュシステムの基礎となっている【局所性原則】とは、短期間のうちに発生するメモリ参照がメモリ全体のごく一部に集中する傾向を指す。この性質があるため、あるワードが参照された際にその【近接ワード】も同時にキャッシュへ移動させる手法が有効となる。例えばプログラムの場合、分岐などを除けば命令はメモリ内の【連続した領域】に格納されており、順次フェッチされる。キャッシュではこの原則に基づき、データをキャッシュラインという固定サイズのブロック単位で管理することで、メモリへの【平均アクセス時間】を大幅に改善している。

補足(期末で問われそうな展開): - 時間的局所性(temporal locality):一度使ったデータは、また近いうちに使われやすい(ループ変数など) - 空間的局所性(spatial locality):あるアドレスを使ったら、その近くのアドレスも使われやすい(配列、順次命令フェッチ) - キャッシュラインをまとめて持ってくるのは空間的局所性を活かすため。

平均メモリアクセス時間の改善(穴埋め+計算・スライド28)

問題:キャッシュのアクセス時間1ns、主記憶のアクセス時間100ns。平均メモリアクセス時間が6nsだった。キャッシュヒット率は?

正解95(%)/ 2つ目の空欄は「長く」

この講義で使う公式(必ず暗記)

平均メモリアクセス時間 = キャッシュアクセス時間 + (1 − ヒット率) × メモリアクセス時間

計算

6 = 1 + (1 − h) × 100
5 = (1 − h) × 100
1 − h = 0.05
h = 0.95  →  95%

2つ目の空欄(キャッシュ容量を大きくすると、キャッシュアクセス時間が【長く】なることがある) → 容量を増やすと、タグ比較の対象が増え、配線も長くなるためアクセス遅延が増える「ヒット率↑ ⇔ アクセス時間↑」のトレードオフがあるので、単純に大きくすればいいわけではない。これがキャッシュを階層化(L1/L2/L3)する理由

MSIプロトコル(穴埋め・スライド22)

正解

複数のプロセッサが同じアドレスのデータをキャッシュに保持し、一方が値を書き換えることで生じるデータの不整合は、【キャッシュコヒーレンシ】プロトコルを用いることで解決される。MSIプロトコルでは3つの状態を定義する。キャッシュだけが最新のデータを有する状態を【Modified】、当該データを他のキャッシュと共有している状態を【Shared】、当該データが無効な状態を【Invalid】と呼ぶ。

3状態の整理

状態 意味 主記憶との関係 他キャッシュ
Modified 自分だけが最新の値を持つ(書き換え済み) 主記憶は古い(dirty) 他は持っていない
Shared 読み出し専用で共有中 主記憶と一致(clean) 他も同じ値を持ちうる
Invalid このキャッシュラインは無効

動きのイメージ:あるコアが Shared のデータに書き込むと、他コアのコピーを Invalid にして(無効化)、自分を Modified に上げる。

💡 MESI(Exclusive追加)、MOESI(Owned追加)に拡張されることも押さえておくと安心。

SMPとNUMA(穴埋め・スライド23)

正解

共有メモリ型マルチプロセッサシステムには、SMPとNUMAの2つの主要な方式がある。【SMP】は、すべてのプロセッサでメモリを共有し、メモリアクセス時間が場所によらず【均一】である。一方、【NUMA】は物理的にメモリが各ノードに分散しており、アクセスの対象となるメモリの場所によってアクセス時間が【不均一】になる。【SMP】はプログラムが書きやすいという利点があるが、【メモリ帯域】がボトルネックとなり、スケーラビリティが低いという欠点がある。

SMP(UMA) NUMA
メモリ配置 全プロセッサで共有(1箇所) 各ノードにローカルメモリを分散配置
アクセス時間 均一(Uniform) 不均一(Non-Uniform)
長所 プログラムが書きやすい スケーラビリティが高い
短所 メモリ帯域がボトルネック、スケールしない ローカル/リモートを意識した最適化が必要

語源で覚える:NUMA = Non-Uniform Memory Access。名前がそのまま答え。

1-B. 外部記憶装置(HDD / SSD / RAID)

HDDの構成(穴埋め・スライド32)

正解

磁化可能なアルミの円盤である【プラッタ】を重ねて構成されるHDDにおいて、全てのディスク面で半径方向の距離が同じトラックの集合を【シリンダ】と呼ぶ。データを読み書きする際、アームを目的のトラックへ移動させる時間を【シーク時間】、目的のセクタがヘッドの下に来るまで待つ時間を【回転待ち時間】と呼ぶ。後者は、ディスクが1分間に回転する数(RPM)に依存し、一般に平均的な遅れとして【1/2】回転分の時間が計算に用いられる。

用語の階層

プラッタ(円盤)
 └ トラック(同心円1本)
     └ セクタ(トラックを分割した最小単位)
シリンダ = 全プラッタの同じ半径のトラックの集合(縦の束)

HDDの平均アクセス時間(計算・スライド33)

問題:平均シーク時間10ms、ディスク回転数6,000 RPM、データ転送時間1ms。平均アクセス時間は?

正解16(ms)

公式

平均アクセス時間 = 平均シーク時間 + 平均回転待ち時間 + データ転送時間

手順: 1. 平均シーク時間 = 10 ms(問題文より) 2. 平均回転待ち時間: - 6,000 RPM = 1分に6,000回転 = 1秒に100回転 - 1回転にかかる時間 = 1/100秒 = 10 ms - 平均回転待ちは半回転なので 10 ÷ 2 = 5 ms 3. データ転送時間 = 1 ms(問題文より) 4. 合計 = 10 + 5 + 1 = 16 ms

⚠️ 問題文の罠:「6,000 RPM(1秒間に6,000回転)」という括弧書きは誤り。RPM は Revolutions Per Minute(1分あたり)。解説スライドも1分基準で計算している。同じ形式の問題が出たら必ず「毎分」で計算すること。

SSDの構成(穴埋め・スライド31)

正解

SSDは半導体メモリを使用したディスク装置であり、主な構成要素はデータを記録する【フラッシュメモリ】、バッファとして機能する【揮発メモリ(SRAM/DRAM)】、およびデバイス全体を制御するコントローラである。データの読み書きは【ページ】という単位で行われるが、消去は複数のページをまとめた【ブロック】単位でしか行えないという制約がある。また、1つのメモリセルに3ビットの情報を保持する方式は【TLC】と呼ばれる。

最重要の非対称性

読み出し・書き込み → ページ単位(小)
消去           → ブロック単位(大)  ← ここが不揃い!

この非対称性のせいで、書き換え時に「消してから書く」必要が生じ、ガベージコレクション/ウェアレベリング/ライトアンプリフィケーションといった問題が出てくる。

セルあたりのビット数

方式 ビット/セル 特徴
SLC 1 高速・高寿命・高価
MLC 2
TLC 3 ← 出題された
QLC 4 大容量・安価・低寿命

RAIDの特徴(穴埋め・スライド29)

正解

RAID 0】は、データを複数のディスクに分散させるストライピングを行うが、冗長性がないため、全体の信頼性は個々のディスクよりも低下する。一方、【RAID 1】は全てのディスクの複製を作ることで信頼性を高めている。パリティを利用する方式のうち、【RAID 4】は専用のパリティドライブを持つが、書き込みが集中してボトルネックになる欠点がある。この負荷を分散させるために、パリティを全てのドライブに分散させたのが【RAID 5】である。また、RAID 2やRAID 3という方式では、全てのドライブのアームの位置と回転を【正確に同期】させなければならない。

RAIDレベル早見表(期末で必出)

レベル 手法 冗長性 特徴・欠点
RAID 0 ストライピング なし 最速・最大容量。信頼性は単体より低下(1台壊れたら全滅)
RAID 1 ミラーリング あり(複製) 信頼性高いが容量効率50%
RAID 2 ビット単位+ハミング符号 あり アーム位置と回転の同期が必須。実用されず
RAID 3 バイト単位+専用パリティ あり 同上、同期が必須
RAID 4 ブロック単位+専用パリティドライブ あり パリティドライブに書き込みが集中してボトルネック
RAID 5 ブロック単位+パリティを全ドライブに分散 あり RAID 4のボトルネックを解消。実用上の定番
RAID 6 パリティ2重 あり(2台故障まで)

💡 RAID 4 → 5 の流れが問われやすい。「専用パリティ=集中してボトルネック」→「分散させて解決」というストーリーで覚える。

RAIDの最大転送速度(計算・スライド30)

問題:最大転送速度120MB/sのHDDを4台用いてRAID 0またはRAID 1を構成する。理論上の最大転送速度が高いのはどちらで、その速度は?

正解RAID【0】/【480】MB/s

考え方

動作 4台での理論最大転送速度
RAID 0 データを4台に分散して同時に読み書き 120 × 4 = 480 MB/s
RAID 1 4台に同じデータを書く(複製) 120 × 1 = 120 MB/s(実質1台分)

RAID 0 は「並列に別々のデータを流す」ので台数倍。RAID 1 は「同じデータを重複して書く」だけなので速度は増えない

⚠️ 性能と信頼性のトレードオフを必ずセットで答えられるように: RAID 0 は速いが冗長性ゼロ、RAID 1 は遅い(容量効率50%)が冗長性あり

1-C. コンピュータネットワーク

Bluetooth

p.4

問題:Bluetoothにおいて、パソコンがマウスやキーボードなどの周辺機器に対して、どのアドレスを用いるか、いつ送信して良いかを指示する方式は?

正解マスター・スレーブ方式

なぜ:Bluetoothはピコネットを構成し、1台のマスターが最大7台のアクティブなスレーブを制御する。マスターがアドレス割り当てと送信タイミング(スロット)を一方的に指示し、スレーブはマスターに許可されたときだけ送信する。「PC=マスター、マウス/キーボード=スレーブ」という関係がそのまま答え。

選択肢 判定 なぜ違うか
トークン管理方式 トークンリング等で使う、送信権(トークン)を順番に回す方式。特定の1台が指示するのではなく巡回する。
クライアント・サーバ方式 サービスの提供者と要求者という役割分担のモデル。要求するのはクライアント側で、サーバが送信タイミングを指示するわけではない。ネットワーク層より上のアプリ構成の話。
ピア・ツー・ピア方式 対等な関係。指示する側/される側という上下関係がないので、問題文の「指示する」と矛盾。
マスター・スレーブ方式 主従関係。マスターが制御を一手に握る。

補足:Bluetooth 5.x以降の仕様書では Central / Peripheral という呼称に置き換えられているが、講義用語はマスター・スレーブ

OSI参照モデルの機能

p.8

問題:送信元から宛先へパケットをどのような経路で通すかを決定し、サブネットの動作を制御する層は?

正解ネットワーク層(第3層)

キーワード「経路(ルーティング)」=ネットワーク層。IPが動く層。

OSI 7階層 全部入り表(丸ごと覚える)

名称 役割キーワード 代表例 転送単位
7 アプリケーション層 アプリ固有のサービス HTTP, FTP, SMTP データ
6 プレゼンテーション層 データ形式の変換、文字コード、暗号化 JPEG, ASCII データ
5 セッション層 対話の管理、接続の開始/終了、同期 データ
4 トランスポート層 端点間(End-to-End)の信頼性、順序保証、フロー制御 TCP, UDP セグメント
3 ネットワーク層 経路制御(ルーティング)、サブネット制御、論理アドレス IP, ルータ パケット
2 データリンク層 隣接ノード間の誤り検出、MACアドレス Ethernet, スイッチ フレーム
1 物理層 ビットの電気信号・機械的仕様 ケーブル, リピータ ビット

紛らわしい2ペアの区別: - ネットワーク層 vs データリンク層:ネットワーク層はエンド間の経路全体、データリンク層は隣り合うノード間の1ホップ。「サブネットの動作を制御」=ネットワーク層。 - ネットワーク層 vs トランスポート層:ネットワーク層はどの道を通るか、トランスポート層はちゃんと届いたか(信頼性)

OSI参照モデルの設計方針

p.9

問題:OSI参照モデルを7層とする設計方針として挙げられているもののうち、誤っているものはどれか?

正解層の境界は、インターフェースを横切る情報の流れを【最大化】するように選ぶべきである正しくは「最小化」

なぜ最小化か:層間で受け渡す情報が少ないほど、層同士の依存が弱くなり、ある層の実装を差し替えても他層に影響しない(=疎結合/独立性が保てる)。これが階層化の目的そのもの。情報の流れを最大化したら、層に分ける意味がなくなる。

他の3つはすべて正しい設計方針

選択肢 判定 補足
アーキテクチャが重たくなりすぎない程度の層の数にするべき 層は多すぎても少なすぎてもダメ、というバランスの原則
各層は明確に定義された機能を実現すべき 責務が曖昧な層を作らない
異なる抽象化が必要となる場合には層を作るべき 層を分ける「動機」の原則
層の境界は情報の流れを最大化するように選ぶべき ✗(=答え) 最小化が正しい

💡 これはOtoが普段言っている「設計は正しさではなく適合性」の話とも噛み合う。層分割の判断基準はインターフェースの細さであって、機能を綺麗に分けること自体が目的ではない。

VPN

p.14

問題:VPNを導入したネットワークにおいて、遠隔地にいるユーザはどのようにデータを利用できるか?

正解データが物理的に遠くにあっても、あたかもローカルにあるかのように利用できる

なぜ:VPN(Virtual Private Network)は、公衆回線上に暗号化されたトンネルを掘って、仮想的な専用線を作る技術。ユーザから見ると、遠隔地のリソースがあたかも同じLAN内にあるかのように扱える。これが「Virtual(仮想的な)Private(専用)Network」という名前の意味。

選択肢 判定 なぜ違うか
公衆回線を利用するため、常に盗聴を警戒しながら利用しなければならない 暗号化トンネルを張ることで盗聴対策をするのがVPNの目的。警戒し続けなければならないなら導入する意味がない。
データが物理的に遠くにあっても、あたかもローカルにあるかのように利用できる VPNの定義そのもの。
中間ノードがメッセージを蓄積してから転送するまで待機する必要がある これは蓄積交換(store-and-forward)の説明。VPNとは無関係。
コネクションを確立するたびに、物理層のピン設定を手動で行う必要がある VPNはソフトウェア的な仮想化。物理層の配線をいじる話ではない(そもそも「Virtual」の意味と真逆)。

1-D. 仮想化

まず土台:仮想マシンの分類マップ

仮想マシン
├─ システム仮想マシン(System VM)… ハードウェア全体を仮想化、ゲストOSが動く
│   ├─ Type 1 ハイパーバイザ … ハードウェア上で直接動作(ベアメタル)
│   │                          例: Xen, VMware ESXi, Hyper-V
│   ├─ Type 2 ハイパーバイザ … ホストOS上のアプリとして動作
│   │                          例: VirtualBox, VMware Workstation
│   └─ Micro-VM             … レガシーデバイスを排除した軽量VM
│                              例: AWS Firecracker
└─ プロセス仮想マシン(Process VM)… 1プロセス分の実行環境だけを仮想化
                                     例: JVM, Python ランタイム, .NET CLR

(比較対象)コンテナ … ホストOSのカーネルを共有。VMではない。例: Docker

仮想マシンの分類

p.17

問題:JVM(Java Virtual Machine)やPythonのランタイムに該当するものは?

正解プロセス仮想マシン(Process VM)

なぜ:JVMやPythonランタイムはOSを丸ごと動かすわけではなく、1つのプロセス(アプリケーション)に対して仮想的な実行環境を提供するもの。バイトコードを解釈して実行し、「どのOS・CPUでも同じように動く」環境を作る。

選択肢 判定 なぜ違うか
ベアメタル仮想マシン ハードウェア上で直接動く方式(=Type 1の言い換え)。JVMはOSの上のアプリ。
プロセス仮想マシン(Process VM) プロセス単位の実行環境。JVM/Pythonがまさにこれ。
マイクロ仮想マシン(Micro-VM) Firecracker等。ゲストOSカーネルが動く軽量なシステムVM。
Type 2 ハイパーバイザ ホストOS上で動くが、ゲストOSを丸ごと動かす(VirtualBox等)。
システム仮想マシン(System VM) ハードウェア全体を仮想化してゲストOSを動かすもの。JVMはOSを動かさない。
Type 1 ハイパーバイザ ベアメタル型。

💡 判別のたった一つの基準:「ゲストOSが動くか?」 動く → システムVM(Type1/Type2/Micro-VM)/動かない → プロセスVM

Type 1ハイパーバイザ

p.13

問題:Type 1ハイパーバイザの特徴として正しいものは?

正解ハードウェア上で直接動作し、ホストOSを介さない

選択肢 判定 なぜ違うか
導入が容易なため、個人のデスクトップ開発環境で最も一般的に利用される それはType 2の特徴。Type 1はサーバ/データセンタ用途。
セキュリティよりも利便性を優先した設計になっている 逆。ホストOSという広い攻撃面を持たないぶんType 1の方がセキュア
ホストOSのデバイスドライバをそのまま利用するため、I/O性能が非常に高い ホストOSを介さないのがType 1。ホストOSのドライバを使うのはType 2で、しかもその分オーバーヘッドがある。二重に誤り。
代表的な例として、Oracle VM VirtualBoxやVMware Workstationがある それらはType 2の代表例。Type 1は Xen / VMware ESXi / Hyper-V。
WindowsやmacOSなどのホストOS上のアプリケーションとして動作する Type 2の定義そのもの
ハードウェア上で直接動作し、ホストOSを介さない Type 1(ベアメタル型)の定義。

Type 1 vs Type 2 比較表

Type 1(ベアメタル型) Type 2(ホスト型)
動作位置 ハードウェア上で直接 ホストOS上のアプリとして
ホストOS 不要 必要
性能 高い(間に層が少ない) 低い(ホストOSを経由)
セキュリティ 高い(攻撃面が小さい) 低い(ホストOSの脆弱性を継承)
導入の手軽さ 低い 高い
Xen, VMware ESXi, Hyper-V VirtualBox, VMware Workstation, Parallels
用途 サーバ/クラウド 個人の開発環境

PopekとGoldbergの仮想化要件

p.10

問題:あるCPUアーキテクチャが「効率的に仮想化可能」であるための条件は?

正解すべてのセンシティブ命令が「特権命令」に含まれていること

なぜ:仮想化の基本方式は trap-and-emulate。 1. ゲストOSはユーザモード(低特権)で走らせる 2. ゲストがシステムの状態に影響する命令(センシティブ命令)を実行しようとしたら 3. トラップ(例外)が発生してVMMに制御が移り、VMMが代わりに正しくエミュレートする

この仕組みが成立するには、センシティブ命令がすべて特権命令であること(=低特権モードで実行したら必ずトラップすること)が必要。数式的には センシティブ命令の集合 ⊆ 特権命令の集合

選択肢 判定 なぜ違うか
ユーザーモードでの実行速度が特権モードより速いこと 速度は仮想化可能性の条件ではない。
すべての計算命令がRing 0で動作すること 逆。計算命令はユーザモードで直接実行できる方が効率的(それが「効率的」の意味)。
CPUに必ず4つ以上のプロテクション・リングが存在すること リングのは要件ではない。x86は4リングあるのに仮想化困難だった=反例そのもの。
すべてのセンシティブ命令が「特権命令」に含まれていること Popek & Goldberg の定理。
特権命令の数が100以下であること 数は無関係。
MMUがソフトウェアで実装されていること 無関係。むしろハードウェアMMU(+EPT/NPT)がある方が速い。

用語の整理(ここが混乱しやすい)

用語 意味
特権命令 ユーザモードで実行するとトラップする命令
センシティブ命令 システムの状態を変える/状態に依存して動作が変わる命令(制御センシティブ・動作センシティブ)
仮想化可能な条件 センシティブ命令 ⊆ 特権命令

x86仮想化

p.15

問題:初期のx86アーキテクチャがそのままでは仮想化困難だった最大の理由は?

正解一部の特権命令(POPFなど)が、低特権モードで実行してもトラップ(例外)を発生させず、単に無視されたため

なぜ:Q20の条件が破れていた。x86には「センシティブだが特権ではない命令」が17個ほど存在した(POPF, PUSHF, SGDT, SIDT, SLDT, SMSW など)。 例えば POPF をRing 3で実行すると、割り込みフラグ(IF)の変更部分がエラーも出さずに黙って無視される。トラップしないのでVMMは気づけず、ゲストOSは「割り込みを禁止したつもりなのに禁止されていない」という不整合状態に陥る。

歴史的な解決策の流れ(期末で問われるかも): 1. バイナリ変換(Binary Translation) — VMware:問題のある命令を実行前に書き換える 2. 準仮想化(Paravirtualization) — Xen:ゲストOS側を改変してハイパーコールを呼ばせる 3. ハードウェア支援Intel VT-x / AMD-V:VMX root/non-root という新しいモードを追加して根本解決

選択肢 判定 なぜ違うか
64ビット命令セットに対応していなかったため ビット幅と仮想化可能性は無関係。
一部の特権命令(POPFなど)が低特権モードでトラップせず、単に無視されたため Popek&Goldberg条件の破れ。
IntelとAMDで命令セットが完全に異なっていたため 事実として誤り(x86互換)。
特権レベルが2つ(Ring 0とRing 3)しかなかったため x86にはRing 0〜3の4段階がある。事実誤認。
メモリの仮想アドレス空間が4GBに制限されていたため 容量制限は仮想化困難の理由ではない。
CPUのクロック周波数が低すぎたため 速度の問題ではなくアーキテクチャの構造的問題

仮想化環境のメモリ管理

p.18

問題:仮想化環境において、ゲストOS上のアプリケーションが直接アクセスしているアドレス空間は?

正解GVA (Guest Virtual Address)

アドレス変換の3段階(この図を書ければ勝ち)

ゲストアプリ
    │ 直接触るのはここ ↓
  【GVA】Guest Virtual Address(ゲスト仮想アドレス)
    │ ← ゲストOSのページテーブルが変換
  【GPA】Guest Physical Address(ゲスト物理アドレス)※ゲストは「本物の物理」だと思い込んでいる
    │ ← VMM/EPTが変換
  【HPA / MPA】Host Physical Address / Machine Physical Address(本当の物理アドレス)
選択肢 判定 なぜ違うか
VMA (Virtual Memory Area) Linuxカーネル内部でメモリ領域を管理する構造体の名前。アドレス空間の分類ではない。
SPT (Shadow Page Table) GVA→HPA を直接引くようVMMが作る影のページテーブル。アドレス空間そのものではなく変換の仕組み
GVA (Guest Virtual Address) ゲスト上のアプリが直接触るアドレス。
MPA (Machine Physical Address) 本当の物理アドレス。ホスト(VMM)だけが扱う。
HPA (Host Physical Address) 同上。MPAとほぼ同義。
GPA (Guest Physical Address) ゲストOSが「物理」だと思っているアドレス。アプリではなくゲストOSが扱う層。ここが最有力のひっかけ。

⚠️ GVA と GPA の区別:アプリが触る=GVA、ゲストOSがページテーブルで変換した先=GPA。「アプリケーションが直接」という文言に注目。

2段変換の高速化手法: - シャドウページテーブル(SPT):VMMがGVA→HPAの表をソフトウェアで維持(ページテーブル更新のたびにVM Exitが発生して重い) - EPT / NPT(ネステッドページング):ハードウェアが2段変換を行う。Intel EPT / AMD NPT。現在の主流。

I/O仮想化

p.6

問題:I/O仮想化がCPUやメモリの仮想化に比べてボトルネックになりやすい主な理由は?

正解I/O操作のたびに、高コストな「VM Exit(特権モードの切り替え)」が発生しやすいため

なぜ:CPU命令の大半とメモリアクセスはハードウェア支援(VT-x, EPT)でゲストが直接実行できるようになった。しかしI/Oはデバイスへのアクセスなので、そのたびにゲスト→VMMへ制御が移る(VM Exit)。VM Exitはレジスタの退避・復帰を伴い数千サイクル規模のコストがかかる。I/Oは回数が多いので、この積み重ねが致命的になる。

選択肢 判定 なぜ違うか
ゲストOSにはデバイスドライバをインストールできないという制約があるため 事実誤認。ゲストOSにドライバは入る(virtio等の準仮想化ドライバも入れる)。
すべてのI/OデータがVMMによって一度暗号化されるため VMMはI/Oを暗号化しない。
現代のCPUにはI/O専用の命令が存在しないため x86には IN / OUT 命令がある。事実誤認。
物理デバイスが1つのVMからしか見えない仕様になっているため 逆に複数VMで共有するのが仮想化。SR-IOVは1デバイスを複数VMに分割する技術。
I/O操作のたびに、高コストな「VM Exit」が発生しやすいため 正解。
I/Oデバイスの動作速度がCPUの演算速度よりも常に速いため 逆。I/OデバイスはCPUよりずっと遅い

I/O仮想化の高速化手法(発展): - 完全エミュレーション:遅いが互換性が高い(QEMU) - 準仮想化(virtio):ゲストに専用ドライバを入れてVM Exit回数を削減 - パススルー / SR-IOV:物理デバイスをゲストに直結。VM Exitをほぼなくす

Micro-VM

p.7

問題:AWS Firecrackerなどの「Micro-VM」が、従来のVMと異なる点は?

正解VGAやキーボードなどの古いレガシーデバイスのエミュレーションを徹底的に排除し、高速起動と最小のメモリ消費を実現している

なぜ:従来のVM(QEMU等)はPCとの互換性のためにVGA、PS/2キーボード、フロッピー、BIOSなど大量のレガシーデバイスをエミュレートしており、これが起動時間とメモリ消費、そして攻撃面(attack surface)の増大を招いていた。Firecrackerは最小限のデバイスモデル(virtio-net, virtio-block, シリアルコンソール等)だけに絞ることで、起動100ms級・オーバーヘッド数MBを実現。サーバレス(AWS Lambda / Fargate)の基盤として使われている。

選択肢 判定 なぜ違うか
コンテナと同様に、ホストOSとカーネルを共有することでセキュリティを確保している 真逆。Micro-VMはカーネルを共有しないことで、コンテナより強い分離を得るのが売り。
ハードウェア支援(VT-x)を使わず、すべてソフトウェアのみで動作する FirecrackerはKVMベース=ハードウェア支援を使う
VGAやキーボードなどの古いレガシーデバイスのエミュレーションを徹底的に排除し、高速起動と最小のメモリ消費を実現している 正解。
Windows OSのみを動かすために特化して設計されている 主にLinuxゲスト向け。
Rustではなく、機械語で直接記述されているため書き換えが不可能である FirecrackerはRustで書かれている。真逆。
1つのVMの中で数千のDockerコンテナを同時に動かすことを唯一の目的としている 目的は多数の軽量VMを高密度に動かすこと

コンテナ

p.16

問題:Linuxコンテナ(Dockerなど)が、VMと比較して「軽量・高速」である理由は?

正解ホストOSのカーネルを共有し、NamespaceやCgroupsといったOSの機能でプロセスを隔離するため

なぜ:VMはゲストOSのカーネルを丸ごと起動する必要があるが、コンテナはホストのカーネルをそのまま使う。実体は「隔離されたただのプロセス」なので、起動はプロセス起動と同程度に速く、メモリオーバーヘッドも小さい。

隔離を支える2つのLinuxカーネル機能

機能 役割
Namespace 見える範囲を隔離(PID, network, mount, user, UTS, IPC 等)
Cgroups 使える量を制限(CPU, メモリ, I/O のリソース制限)
選択肢 判定 なぜ違うか
各コンテナが専用のカーネルを持ち、ハードウェアを直接制御するため 真逆。専用カーネルを持つのはVMの方。コンテナは共有する。
メモリを全く使用せず、すべてディスク上でのみ処理を行うため 明らかに誤り。
CPUのVT-x機能を活用して、プロセスをハードウェアレベルで隔離するため VT-xを使うのはVM。コンテナはOS機能で隔離する。
ゲストOSのブートプロセスをバイナリ翻訳で短縮しているため そもそもゲストOSをブートしないのがコンテナ。
すべての計算をGPUで行うことで、CPUの負荷をゼロにしているため 無関係。
ホストOSのカーネルを共有し、NamespaceやCgroupsといったOSの機能でプロセスを隔離するため 正解。

VM vs コンテナ vs Micro-VM 三つ巴比較

VM コンテナ Micro-VM
カーネル ゲストごとに専用 ホストと共有 ゲストごとに専用
隔離の強さ 強い(ハードウェアレベル) 弱い(OSレベル) 強い
起動時間 遅い(秒〜分) 速い(ms) 速い(〜100ms)
オーバーヘッド
実現技術 ハイパーバイザ+VT-x Namespace + Cgroups KVM+最小デバイスモデル

💡 Micro-VMは「コンテナの速さ × VMの隔離性」を狙ったもの、という位置づけで覚えると3つの関係が繋がる。

1-E. 並列処理・性能モデル

最重要公式:アムダールの法則

             1
S = ─────────────────
       (1 − F) + F/N

S : スピードアップ(何倍速くなるか)
F : 並列化可能な部分の割合(0〜1)
N : プロセッサ(コア)数
(1 − F) : 逐次実行部(=どんなにコアを増やしても縮まらない部分)

この式の意味:N → ∞ にしても、S は 1/(1−F) で頭打ち。 例:F = 0.8 なら、コアを無限に増やしても最大 5倍まで。 → だから「並列化可能な部分を大きくする」だけでなく「逐次部分(1−F)そのものを短縮する」ことが重要になる。

並列化効果(穴埋め・スライド24)

正解

並列化によるシステムのスピードアップを予測する性能モデルとして【アムダールの法則】がある。この法則によると理論上の向上率は 1/((1−F)+F/N) で求められる。ここで、【N】はプロセッサのコア数である。並列実行時間の割合は【F】であることから、逐次実行時間の割合は【1−F】で表すことができる。この法則から、高速化を実現するには並列実行可能な部分を【大きく】するだけでなく、【1−F】を短縮することも重要であることがわかる。

性能向上(計算・スライド21)

問題:プログラムのうち80%が並列化可能。プロセッサ数が4のとき、理論的スピードアップは?

正解2.5

F = 0.8, N = 4

逐次実行部 : 1 − 0.8 = 0.2
並列実行部 : 0.8 / 4 = 0.2

S = 1 / (0.2 + 0.2) = 1 / 0.4 = 2.5

⚠️ 「80%が並列化できて4コアなら 0.8×4=3.2倍」ではない。逐次部分0.2が残るのがアムダールの法則の核心。

並列化可能な割合(逆算・スライド20)

問題:8コアで実行したところ、1コアと比較して4倍のスピードアップだった。並列化可能割合を100分率・小数第1位まで求めよ。

正解85.7(%)

Fについて解く

4 = 1 / ((1 − F) + F/8)

両辺の逆数:  (1 − F) + F/8 = 1/4 = 0.25

  1 − F + F/8 = 0.25
  1 − (7/8)F  = 0.25
      (7/8)F  = 0.75
           F  = 0.75 × 8/7 = 6/7 = 0.857142...

→ 85.7 %

💡 逆算パターンは「まず両辺の逆数を取る」と一気に楽になる。

アルゴリズム選択(応用計算・スライド19)

問題: - アルゴリズムA:実行時間は短いが、並列化可能部分は 0.7 - アルゴリズムB:実行時間はAの 2倍かかるが、並列化可能部分は 0.98

コア数がいくつ以上になればBの方がAより高速になるか?

正解5

解法:Aの1コア実行時間を E とおく。

T_A = E × ( (1 − 0.7) + 0.7/N ) = E × ( 0.3 + 0.7/N )
T_B = 2E × ( (1 − 0.98) + 0.98/N ) = E × ( 0.04 + 1.96/N )

「Bの方が速い」= T_B < T_A

  0.04 + 1.96/N  <  0.3 + 0.7/N
  1.96/N − 0.7/N <  0.3 − 0.04
        1.26/N   <  0.26
             N   >  1.26 / 0.26 ≈ 4.846

N は整数なので  N = 5

この問題の教訓(記述式で出たら書くべきこと)

単体性能が2倍遅いアルゴリズムでも、並列化率が高ければコア数が増えるほど逆転する。 メニーコア時代では「1コアでの速さ」より「並列化率の高さ」が効いてくる。

⚠️ 不等号の向きに注意:N が分母にあるので、両辺を N 倍して整理する段階で向きを間違えやすい。最後に N=4 と N=5 を代入して検算する癖をつけると安全。 検算:N=4 → T_A = 0.475E, T_B = 0.53E(Aの勝ち)/ N=5 → T_A = 0.44E, T_B = 0.432E(Bの勝ち)✓

並列化への要求(穴埋め・スライド25)

正解

シングルプロセッサの性能向上には限界が見え始めたため、設計思想は【コア数】を増やすことで性能向上を狙う方向へと転換された。かつては【動作周波数】を向上させることで性能を稼いでいたが、電圧が下がらないままこれを上げると【発熱】が増大し、冷却の限界に達してしまった。この背景には、トランジスタを微細化しても消費電力密度が下がらなくなる【デナードスケーリング】の限界や、微細化に伴いトランジスタを完全にオフにできなくなる【リーク電流】の増大といった物理的な問題がある。

因果の連鎖(この流れで覚える)

微細化しても電圧が下げられない(リーク電流の増大)
        ↓
デナードスケーリングの崩壊(消費電力密度が下がらない)
        ↓
周波数を上げると発熱が増大 → 冷却の限界(パワーウォール)
        ↓
「周波数向上」から「コア数増加(マルチコア)」へ設計思想が転換
        ↓
でもアムダールの法則があるので、コアを増やしても頭打ち
        ↓
ダークシリコン問題 → 特定用途に特化した設計(GPU/ASIC)へ

💡 この一本の流れが計算機工学IIIの背骨。中間テスト2の【ASIC】デナードスケーリング(Q55)と完全に地続きなので、必ずセットで押さえる。

Part 2|中間テスト2

2-A. GPU(グラフィックス/アクセラレータ)

まず土台:3Dグラフィックスパイプライン

① 3Dモデルデータ(頂点の集合)
     ↓
② 座標変換(モデリング変換 → 視点変換)
     … 全頂点座標にマトリックスをかける ※講義用語「トランスポーズ」
     ↓
③ プリミティブアセンブリ(頂点を三角形にまとめる)
     ↓
④ テッセレーション(三角形をさらに細かく分割して精細化)※任意
     ↓
⑤ ラスタライズ(三角形 → 画面のピクセル/フラグメントへ変換)
     ↓
⑥ フラグメントシェーダ(色・テクスチャ・ライティング)
     ↓
⑦ フレームバッファ(VRAM)→ ディスプレイへ出力

[GPU] 3Dモデルの作成

p.35

問題:モデルの位置や向きを変えるために、パネルのすべての頂点座標にマトリックスをかける操作(モデリング変換と視点変換の座標変換)を総称して何と呼ぶか?

正解トランスポーズ(※この講義での呼称)

選択肢 判定 なぜ違うか
ラスタライズ パイプラインのもっと後段。頂点/三角形をピクセルに変換する処理(Q33の答え)。
ディープコピー CPU-GPU間のデータ転送の話。ポインタを含む構造体を転送するとき、ポインタの指す先までコピーする必要がある問題(Q53参照)。座標変換ではない。
テッセレーション 三角形をさらに細かく分割して表現を精細にする処理。位置や向きは変えない。
トランスポーズ 講義での正解。頂点座標に行列をかける座標変換の総称。
レイトレーシング 描画手法の名前(Q34の答え)。光線を追跡して影や反射を計算する。

⚠️ 注意:一般的なCG用語では、この操作は「トランスフォーム(transform/座標変換)」と呼ぶのが普通で、「トランスポーズ(transpose)」は本来は行列の転置を指す語。ただし期末は講義の用語に合わせるのが正解。用語そのものより「パイプラインのどの段階の処理か」で消去法を使えば確実に解ける(他の4つはすべて別の段階の処理名)。

[GPU] GPUの汎用利用

p.36

問題:GPUをグラフィックス処理以外の科学技術計算などの汎用的な計算に使用することを何と呼ぶか?

正解GPGPU(General-Purpose computing on GPU)

選択肢 判定 なぜ違うか
ヘテロジニアスコンピューティング 異なる種類のプロセッサ(CPU+GPU+ASICなど)を組み合わせるという、より広い設計概念。GPGPUはその一手段。紛らわしい最有力ダミー
GPGPU 「GPUを汎用計算に使う」という行為そのものの名前。
SIMD Single Instruction Multiple Data。1命令で複数データを処理する演算方式の分類(Flynnの分類)。用途の名前ではない。
SMP Symmetric MultiProcessing。共有メモリ型マルチプロセッサの構成方式(Q8参照)。
DMA Direct Memory Access。CPUを介さずデバイスがメモリへ直接アクセスする転送機構。

周辺概念(開発環境):CUDA(NVIDIA)、OpenCL(オープン標準)、ROCm(AMD)

[GPU] レンダリング

p.37

問題:3Dグラフィックスの描画工程において、頂点やトライアングルを画面に表示されるピクセル(フラグメント)に変換する作業を何と呼ぶか?

正解ラスタライズ

なぜ:ラスタ(raster)=走査線・格子。「連続的な図形(三角形)」を「離散的な格子(ピクセル)」に落とし込む処理がラスタライズ。パイプラインの中で、ジオメトリ処理(3D空間の話)からピクセル処理(2D画面の話)へ切り替わる境目にあたる。

選択肢 判定 なぜ違うか
テクスチャマッピング ピクセルに画像(テクスチャ)を貼り付ける処理。ラスタライズのの段階。
ラスタライズ 三角形 → ピクセル変換。
プリミティブアセンブリ 頂点を三角形などのプリミティブに組み立てる処理。ラスタライズの。まだピクセルにはなっていない。
ジオメトリシェーダ プリミティブ単位で頂点を生成・削除するシェーダ。ジオメトリ段階の話。
頂点シェーダ 頂点ごとの処理(座標変換など)。パイプラインの最初。

💡 Q31・Q33・Q34の3問は同じ選択肢群を使い回している。パイプラインの順序さえ頭にあれば、3問まとめて確実に取れる。

[GPU] 描画手法

p.38

問題:画像上のピクセルから「レイ(光線)」を放ち、物体との衝突を計算することで、影、間接光、鏡面への映り込みなどを正確に表現する手法は?

正解レイトレーシング法

2大描画手法の対比(必ずセットで覚える)

ラスタライズ法 レイトレーシング法
考え方 物体 → 画面:三角形を画面に投影する 画面 → 物体:ピクセルから光線を逆向きに飛ばす
速度 速い(リアルタイム向き) 遅い(計算量が大きい)
影・反射・屈折 苦手(近似・後処理で誤魔化す) 物理的に正確に表現できる
用途 ゲームなどリアルタイム描画 映画CG、近年はRTコア搭載GPUでリアルタイム化
選択肢 判定 なぜ違うか
ラスタライズ法 光線を飛ばさない。三角形を投影する逆方向のアプローチ。影・反射の正確な表現は苦手というのが問題文と真逆。
ライティング法 そういう名前の描画手法はない。ライティング(陰影計算)は工程の一部。
レイトレーシング法 正解。
テッセレーション法 ポリゴンを細分化する処理。描画手法の分類ではない。
ポストプロセス法 描画後の画像に対する後処理(ブラー、色調補正など)。

[GPU] 画像処理基礎

p.39

問題:液晶ディスプレイにおいて、画像を構成する最小単位であり、行選択線と列選択線の交点にある液晶セルのことを何と呼ぶか?

正解ピクセル

選択肢 判定 なぜ違うか
ピクセル 画像を構成する最小単位(picture element)。
バックライト 液晶を背後から照らす光源。液晶自体は発光しないので必要。画像の単位ではない。
フレームバッファ メモリ上の画面表示領域。表示するデータを置いておく場所であって、物理的な液晶セルではない。
VRAM フレームバッファのために主記憶とは別に設けられる専用メモリ(Q53参照)。
フレーム 1画面分の画像そのもの。ピクセルの集合であって、最小単位ではない。

💡 「フレーム>フレームバッファ>VRAM」と「ピクセル」の区別:前者はメモリ/画面全体の話、後者は最小構成単位の話。

【GPU】メモリと演算方式(穴埋め・スライド57)

正解

コンピュータはメモリの画面表示領域(フレームバッファ)にデータを書き込むが、この領域のために主記憶とは別に設けられる専用のメモリを【VRAM】と呼ぶ。CPUとGPUが異なるメモリ空間を持つシステムにおいては、ポインタを含む構造体などのデータを転送する場合、ポインタが指す先のデータまでコピーし、GPU側でアドレスを書き換える必要がある。これは【ディープコピー】問題として知られる。 GPUでは4要素を一括処理するSIMD型プロセッサを採用していることがあるが、ベクトル長がマッチしない場合は問題が生じる。例えば、1要素だけのデータを処理する場合、演算器の1/4しか使用されないため、ピーク演算力の【25】%しか利用できない。

ディープコピー問題とは

CPU側メモリ                      GPU側メモリ
┌──────────┐                    ┌──────────┐
│ struct A │                    │ struct A │ ← 構造体だけコピーしても…
│  ptr ────┼──→ [data]          │  ptr ────┼──→ ??? (CPU側のアドレスを指したまま!)
└──────────┘                    └──────────┘

→ ポインタの指す先のデータも転送し、さらにGPU側の新しいアドレスにポインタを書き換える必要がある。これがCPU-GPU間データ転送を面倒にしている。 (解決策:Unified Memory / 共有アドレス空間)

25%の計算:4要素同時処理できる演算器に1要素しか流さない → 1/4 = 25% (同様に2要素なら50%、3要素なら75%) これが SIMDの弱点=ベクトル長のミスマッチ

【GPU】ディープラーニングの高速化(穴埋め・スライド58)

正解

ディープラーニングの推論や学習には、膨大な量の【行列と行列】の積の計算が必要になる。CPUは命令を順番に実行する構造だが、GPUは多数の演算器でこれらを一括処理できるため非常に高速に実行できる。 GPUは1つの命令供給部で複数の演算器を制御する方式を採用している。この設計により、演算器あたりの【命令供給部の面積】を節約でき、その分だけ多くの演算器を1つのチップ上に搭載することが可能である。 ディープラーニングの推論動作は、計算精度を落としても結果に大きな影響が出にくいという特徴が知られている。これを利用し、GPUは32ビット浮動小数点ではなく【8ビット整数】や16ビット半精度などのデータ形式をサポートすることで効率を高めている。 NVIDIAのGPUなどで採用されている、多数の演算器がそれぞれ別のスレッドを実行しているように振る舞いながらも一括で制御される方式を【SIMT】と呼び、これがディープラーニングの並列計算を支えている。

GPUがDLに強い理由 3点セット

理由 内容
① 計算の中身が行列積 大量の独立した積和演算 → 並列化しやすい
② 命令供給部を共有 1つの命令供給部で多数の演算器を制御 → 演算器あたりの面積が小さい → 多数搭載できる
③ 低精度で十分 推論は精度を落としても影響が小さい → INT8 / FP16 で高速化&省電力

SIMD vs SIMT の違い(頻出)

SIMD SIMT
正式名 Single Instruction Multiple Data Single Instruction Multiple Threads
モデル 1命令で1本のベクトルを処理 多数のスレッドが個別に動くように見えるが、一括制御される
分岐 苦手(ベクトル全体で同じ動作) スレッドごとの分岐を扱える(ただし分岐発散で性能低下)
CPUのAVX、GPUの4要素演算 NVIDIA GPU(Warp = 32スレッド単位)

2-B. ASIC(専用アクセラレータ)

【ASIC】AIアクセラレータ

p.40

問題:AIアクセラレータの設計指針において、DRAMへのアクセスを最小化するために推奨されているチップ内の構成は?

正解大容量のバッファを用意し、一度読み込んだデータを使い回す

なぜ:DRAMアクセスは演算そのものより桁違いにエネルギーを食う(オンチップSRAM比で100倍規模と言われる)。だからAIアクセラレータでは「演算器を速くする」より「DRAMに何回行くかを減らす」ことが設計の主眼になる。大きなオンチップバッファに重みや中間データを置いて再利用(data reuse)するのが定石。

選択肢 判定 なぜ違うか
投機実行回路を増やしてレイテンシを削減する 投機実行は汎用CPUの技術。回路が「贅沢」で電力効率が悪く、ASICが避けている方向そのもの(Q55参照)。
キャッシュメモリの管理を強化する 惜しいが違う。キャッシュはアクセスパターンが予測不能な汎用処理向けの仕組み。AI処理はアクセスパターンが事前に分かっているので、ハードウェアが自動管理するキャッシュより、明示的に制御できる大容量バッファ(スクラッチパッド)の方が効率的。
大容量のバッファを用意し、一度読み込んだデータを使い回す 正解。データ再利用でDRAMアクセスを削減。
クロック周波数を最大まで引き上げる 発熱・電力の限界(デナードスケーリング崩壊)でもう使えない手
アウトオブオーダー実行により性能を引き上げる これも汎用CPUの「贅沢な回路」。電力効率が悪い。

💡 選択肢の分類が見えると一瞬で解ける:投機実行・アウトオブオーダー・クロック向上はすべて「昔の汎用CPUのやり方」。ASICはそれと逆をやるから効率がいい、というのが講義の主旨。

【ASIC】TPU

p.41

問題:Google TPUにおいて、大容量SRAMの読み書きによる電力消費を抑えるため、データを行列内で波状に伝播させてバッファへのアクセス頻度を減らす仕組みを何と呼ぶか?

正解シストリック実行(シストリックアレイ / systolic array)

なぜ:「シストリック(systolic)」は心臓の収縮を意味する語。心臓が血液を送り出すように、データが演算器の格子を波のように流れていく。 通常の演算では「バッファから読む → 計算 → バッファに書く」を毎回繰り返すが、シストリックアレイでは隣の演算器に直接データを渡すので、途中でSRAMに触らない。→ メモリアクセス回数が激減 → 電力効率が大幅向上

通常方式                        シストリックアレイ
 SRAM → PE → SRAM              SRAM → PE→PE→PE→PE → SRAM
 SRAM → PE → SRAM                     ↓  ↓  ↓  ↓
 SRAM → PE → SRAM                     PE→PE→PE→PE
 (毎回SRAMに往復)                    (PE間で直接受け渡し)
選択肢 判定 なぜ違うか
SIMD実行 1命令で複数データを処理する方式。データを波状に伝播させる仕組みではない
シストリック実行 正解。TPUの核となる方式。
アウトオブオーダー実行 命令を順序を入れ替えて実行する汎用CPUの技術。
パイプライン実行 1つの命令を段階に分割して重ねる方式。惜しいがデータの空間的伝播ではない。
インオーダー実行 命令をプログラム順に実行すること。

【ASIC】発熱

p.42

問題:トランジスタ数は増やせても、熱の問題などから「同時に動かせる数」には限界があり、チップの大部分を眠らせておく必要があるという物理的な限界を何と呼ぶか?

正解ダークシリコン問題

なぜ:微細化でトランジスタは載せられるが、デナードスケーリングが崩壊して電力密度が下がらないため、全部を同時に通電すると発熱で焼ける。だから常にチップの一部を電源オフ(=暗いシリコン)にしておくしかない。 → この制約が「どうせ全部同時に動かせないなら、用途ごとに特化した回路をたくさん載せて、必要なものだけ起動させよう」というドメイン特化アーキテクチャ(ASIC/アクセラレータ)への転換を後押しした。

選択肢 判定 なぜ違うか
ダークシリコン問題 正解。
メモリウォール問題 CPUの高速化にメモリの速度が追いつかない問題。発熱の話ではない。
フォン・ノイマンボトルネック CPUとメモリ間のデータ転送経路が性能の律速になる問題。これも発熱の話ではない。
デナードスケーリング 問題の名前ではなく法則の名前。「デナードスケーリングの崩壊がダークシリコン問題を招いた」という原因と結果の関係。最有力ダミー。
ブラックアウト問題 そういう用語は存在しない。

⚠️ 「デナードスケーリング」と「ダークシリコン問題」の関係を答えられるように: デナードスケーリングの崩壊(原因) → 電力密度が下がらない → ダークシリコン問題(結果

【ASIC】デナードスケーリング(穴埋め・スライド59)

正解

デナードスケーリングは2005年頃に崩壊したと言われている。その主な原因は【発熱】の問題であり、チップを微細化しても【消費電力】が下がらなくなったため、無理に性能を上げようとするとチップが溶けてしまうという物理的限界に直面した。 また、集積されるトランジスタ数は増やせても、熱などの制約から「同時に動かせる数」には限界があるというダークシリコン問題により、チップの大部分を【眠らせておく】必要が生じた。その結果、投機実行などの【贅沢な】回路を多く積んだ汎用プロセッサは電力効率の悪さが顕著になり、コンピュータアーキテクチャは特定の領域を強化する設計へと舵を切ることになった。

デナードスケーリングとは(説明できるように)

トランジスタの寸法を 1/k に微細化すると、電圧も 1/k に下がるので、単位面積あたりの消費電力(電力密度)が一定に保たれるという法則。 → つまり「微細化すればするほど、同じ電力でより多くのトランジスタを高速に動かせる」という黄金時代を支えていた。

なぜ崩壊したか

微細化が進むとリーク電流(漏れ電流)が無視できなくなり、しきい値電圧をこれ以上下げられなくなった → 電圧が下げられない → 電力密度が下がらない → 発熱が増大。

2-C. 分散システム

【分散システム】分散システムの価値

p.48

問題:分散システムがもたらす主な3つの価値として、資料に挙げられているものの組み合わせは?

正解経済性/拡張性、可用性、低レイテンシ

価値 内容
経済性 / 拡張性 高価な1台の巨大マシンより、安価なマシンを並べる(スケールアウト)方が安く、必要に応じて増やせる
可用性 1台壊れてもシステム全体は動き続ける(単一障害点の排除
低レイテンシ ユーザに地理的に近い場所にサーバを置ける(CDN等)
選択肢 判定 なぜ違うか
スケールアップの容易さ、単一マシンの性能向上、ネットワーク帯域の節約 分散システムはスケールアップ(1台を強化)ではなくスケールアウト(台数を増やす)。むしろネットワーク帯域は消費が増える
経済性/拡張性、可用性、低レイテンシ 正解。
集中管理、高コスト、高レイテンシ すべて分散システムが避けたいこと
物理時計の完全同期、単一障害点の排除、共有メモリの活用 「単一障害点の排除」は正しいが、物理時計の完全同期は分散システムでは不可能(だからLamportの理論時計が必要になる)。また分散システムはメモリを共有しない。
CPUの物理的限界の突破、グローバルクロックの導入、データの秘匿 グローバルクロックは存在しないというのが分散システムの大前提。真逆。

💡 消去法のコツ:「物理時計の完全同期」「グローバルクロック」が入っている選択肢は必ず誤り。分散システムの根本前提を否定しているから。

【分散システム】RPC

p.43

問題:RPCにおいて、応答がなければリクエストを再送し、サーバ側で同じ処理が複数回実行されるリスクがある(そのため冪等性が必須となる)設計パターンは?

正解At-least-once(最低1回)

RPCの呼び出しセマンティクス 全体像

セマンティクス 動作 実行回数 必要な性質
Maybe / Best-effort 送りっぱなし。再送しない 0回 or 1回(保証なし)
At-most-once(高々1回) 再送しない or 重複を検出して捨てる 0回 or 1回 重複検出
At-least-once(最低1回) タイムアウトしたら再送する 1回以上(複数回実行されうる) 冪等性(idempotency)
Exactly-once(正確に1回) 理想形 ちょうど1回 実現コストが非常に高い
選択肢 判定 なぜ違うか
Exactly-once ちょうど1回を保証する理想形。複数回実行されるリスクがあるという問題文と矛盾。
Best-effort 送りっぱなしで再送しない。「再送する」という問題文と矛盾。
At-most-once 高々1回=複数回実行されない。問題文と真逆。最有力ダミー
At-least-once 再送するので複数回実行されうる → 冪等性が必要。
Zero-tolerance RPCの用語ではない。

冪等性(idempotency)とは

同じ操作を何回実行しても結果が変わらない性質。 例)残高を1000円に設定する → 冪等 ✓ / 残高に1000円加算する冪等でない

💡 Otoが作ってきたAPI設計(予約システムの決済まわりなど)でまさに効いてくる概念。再送されうる前提でAPIを設計する、という話。

【分散システム】2PC

p.44

問題:2相コミット(2PC)において、コーディネーターが途中で故障した際に参加者全員が身動きを取れなくなる問題を何と呼ぶか?

正解ブロッキング問題

2PCの流れと、どこで詰まるか

【フェーズ1:準備】
  コーディネーター ──"Prepare?"──→ 参加者全員
  参加者は準備してロックを取り、"Yes/No" を返す
                                          ↓
【フェーズ2:コミット】
  コーディネーター ──"Commit/Abort"──→ 参加者全員
       ↑
  ★ここでコーディネーターが故障すると…
  参加者は「Yes」と答えた後、ロックを握ったまま
  Commit すべきか Abort すべきか分からず永久に待つ = ブロッキング問題
選択肢 判定 なぜ違うか
ブロッキング問題 参加者が待ち続けて身動きが取れない。
冪等性の欠如 RPCの再送に関する概念(Q43)。
スケールアウト問題 そういう定型用語ではない。
Split-Brain問題 ネットワーク分断で、複数のノードが同時に「自分がリーダーだ」と思い込む問題。コーディネーター故障とは別。最有力ダミー
ビザンチン故障 ノードが嘘のメッセージを送る故障モデル(Q49参照)。単なるクラッシュとは別。

解決の方向性:3相コミット(3PC)、あるいは Raft / Paxos のような合意アルゴリズムでコーディネーター自体を冗長化する。

【分散システム】CAP定理

p.45

問題:CAP定理において、ネットワーク分断(P)が発生した際に、現実の分散システムが迫られる実質的な2択は?

正解C(一貫性)かA(可用性)のどちらを優先するか

なぜ:現実のネットワークでは分断(P)は必ず起きる。だから P を捨てるという選択肢は事実上ない。→ 分断が起きたとき C を守るか A を守るかの二択になる。

選択肢 判定 なぜ違うか
性能向上かセキュリティ向上のどちらを取るか CAPはセキュリティの話ではない。
同期通信か非同期通信のどちらを採用するか 通信方式の話ではない。
シングルマスタかマルチマスタのどちらにするか 実装上の設計選択であって、CAP定理が述べる内容ではない。
レイテンシの削減かスループットの向上か CAPの C・A・P はどれもこれではない。
C(一貫性)かA(可用性)のどちらを優先するか 正解。

【分散システム】CAP定理の説明(穴埋め・スライド60)

正解

CAP定理は、【一貫性】(Consistency)、【可用性】(Availability)、【ネットワーク分断耐性】(Partition Tolerance)の3つの指標のうち、分散システムにおいて同時に満たせるのは最大で【2】つまでであると述べている。現実のネットワークにおいては、ネットワークの【分断】は必ず発生するため、分散システムには【ネットワーク分断耐性】(P)が不可欠である。そのため、実質的には以下の2つの設計方針から選択することになる。 - 【CP】:可用性を捨てて、データの【一貫性】を守るモデル。 - 【AP】:一貫性を捨てて、システムの【可用性】を守るモデル

3要素の意味

記号 名称 意味
C Consistency(一貫性) どのノードに聞いても同じ最新の値が返る
A Availability(可用性) 必ず応答が返る(止まらない)
P Partition Tolerance(分断耐性) ネットワークが分断されても動き続ける

CP と AP の選択(具体例で覚える)

CP(一貫性優先) AP(可用性優先)
分断時の挙動 エラーを返す/応答を止める 古いデータでも返す
捨てるもの 可用性 一貫性(結果整合性で妥協)
向くシステム 銀行の残高、在庫、決済 SNSのタイムライン、いいね数、CDN
etcd, ZooKeeper, HBase Cassandra, DynamoDB(設定次第)

💡 Otoの予約システムで言えば、ダブルブッキング防止=一貫性が絶対なので CP 寄りの設計が正しい、という具体例で覚えられる。

【分散システム】Lamport

p.46

問題:Lamportの理論時計における「Happened-Before関係(a→b)」の定義として誤っているものは?

正解L(a)<L(b)であれば、必ずaとbの間には因果関係(a→b)が存在すると断定できるこれがLamport時計の最大の弱点。逆は成り立たない。

論理の向きを正確に

  a → b  ⟹  L(a) < L(b)   ◯ 正しい(因果関係があれば必ず順序がつく)
  L(a) < L(b)  ⟹  a → b   ✗ 誤り(順序がついていても因果関係があるとは限らない)

なぜ逆が成り立たないか:全く無関係な2つのプロセスで独立に起きたイベント(=並行 concurrent な関係)でも、たまたまカウンタの値に大小がついてしまうから。因果関係がないのに「あった」と誤判定してしまう。 → これを解決するのがベクトル時計(Vector Clock)

選択肢 判定 解説
物理的な時刻(12:00など)を捨て、イベントの因果関係のみを追う ◯ 正しい Lamport時計の基本思想。物理時計は同期できないので諦める。
L(a)<L(b)であれば、必ずaとbの間には因果関係(a→b)が存在すると断定できる ✗(=答え) 逆は成り立たない。並行イベントの可能性がある。
メッセージ受信時には、自身のカウンタを「max(Llocal, Lmsg)+1」に更新する ◯ 正しい Lamport時計の更新ルールそのもの。
a→bかつb→cならa→cである(推移律) ◯ 正しい 定義の3ルール目。
同じプロセス内なら、ステップaがbより前ならa→bである ◯ 正しい 定義の1ルール目。

【分散システム】Lamportの理論時計(穴埋め・スライド61)

正解

分散システムにおいて、個体差やネットワーク遅延がある物理時計には限界がある。そこでLamportは、物理的な時刻を捨て、イベントの【因果関係】(Happened-Before)だけを追う「理論時計」を提唱した。 Happened-Before関係(記号:【】)は、以下の3つのルールで定義されます。 - 同じプロセス内なら、ステップaがbより前なら【a→b】である。 - メッセージ送信イベントaと、その受信イベントbなら【a→b】である。 - 【推移律】:a → b かつ b → c なら a → c である。 ただし、Lamportの理論時計には弱点があり、L(a) < L(b) という結果が得られたとしても、aとbの間に必ずしも【因果関係がある】とは言えないという点に注意が必要です

Lamport時計のアルゴリズム(3行で書ける)

1. 各プロセスはカウンタ L を持つ(初期値0)
2. 自分でイベントを起こすたび:      L = L + 1
3. メッセージ受信時:                L = max(L_local, L_msg) + 1

【分散システム】障害モデル(穴埋め・スライド62)

正解

分散システムのアルゴリズムを設計する際、どのような環境で動くかを明確にする「システムモデル」の定義は不可欠である。前提条件を整理しなければ、アルゴリズムの【正当性】を証明することができないからである。 特に、ノードがどのように故障するかを定義する「障害モデル」には、主に以下の3つのレベルがある。 - Crash-stop: ノードが故障すると、そのまま完全に【停止する】モデル。 - Crash-recovery: 故障しても【ディスク】の状態を保持しており、復旧して【継続動作】することを想定したモデル。 - Byzantine: 最も複雑なモデルであり、故障したノードが「【裏切り者】」として振る舞い、バグや悪意によって【嘘のメッセージ】を送信する可能性まで考慮する。

3つの障害モデル(厳しさの順)

モデル 故障時の振る舞い 想定の難易度 対応アルゴリズム例
Crash-stop 止まったら二度と戻らない 多くの基本アルゴリズム
Crash-recovery 止まるが、ディスクの状態を保って復帰しうる Raft, Paxos(ログを永続化)
Byzantine 嘘をつく・矛盾した情報を送る(悪意やバグ) PBFT, ブロックチェーン

💡 「ビザンチン将軍問題」が語源。裏切り者の将軍が味方に嘘の作戦を伝えても、正しい将軍たちが合意に至れるか?という問題。

【分散システム】Raftのリーダー

p.47

問題:Raftアルゴリズムにおいて、複数のノードが同時に立候補して選挙が長引くのを防ぐために導入されている仕組みは?

正解タイムアウト時間をノードごとにランダムに設定する

なぜ:全ノードが同じタイムアウト時間だと、リーダーが落ちたとき全員が同時に立候補して票が割れる(split vote)。誰も過半数を取れず、また同時にタイムアウトして…を繰り返し、選挙が永久に終わらない。 → タイムアウトをランダム化(例:150〜300msからランダムに選ぶ)すると、最初にタイムアウトした1台だけが先に立候補でき、他が起きる前に過半数の票を集められる。シンプルだが極めて効果的な設計。

選択肢 判定 なぜ違うか
コーディネーターが強制的にリーダーを指名する そのコーディネーターは誰が選ぶのかという無限後退。それに単一障害点になる(2PCのブロッキング問題と同じ構造)。
タイムアウト時間をノードごとにランダムに設定する 正解。split vote の回避。
ハートビートの送信間隔を固定する ハートビートはリーダーが生きていることを知らせる仕組み。選挙が長引くことの対策ではない(むしろ固定するのは普通)。
全ノードの時計をNTPで厳密に同期させる むしろ逆効果。同期していたら全員が同時に立候補してしまう。Raftはそもそも時計の同期に依存しない設計
常にIDが最小のノードをリーダーに選出する それは Bully アルゴリズム的な発想。そのノードが落ちていたら詰むし、Raftはログの新しさで適格性を判断する。

2-D. WSC(Warehouse-Scale Computers)

【WSC】特徴

p.53

問題:一般的なデータセンタと比較した際の、WSCの主な特徴は?

正解1つの組織によって占有され、少数の大きなアプリケーションが実行される

WSC vs 一般的なデータセンタ

一般的なデータセンタ WSC
利用者 複数の会社が間借り(コロケーション) 1つの組織が占有
アプリ 多数の異なる小さなアプリが混在 少数の巨大なアプリ(検索、SNS等)
ハードウェア 顧客ごとにバラバラ 均質(homogeneous)
最適化 個別 建物・電力・冷却まで含めて全体最適
設計思想 サーバの集合 建物全体を1台のコンピュータとみなす
選択肢 判定 なぜ違うか
複数の異なる会社のサービスが混在して置かれる それは一般的なデータセンタ(コロケーション)の特徴。WSCは1組織が占有。
1つの組織によって占有され、少数の大きなアプリケーションが実行される 正解。
物理機器の故障が発生してもサービスを停止させない仕組みを持たない 真逆。大量の安価な機器を使う前提なので故障は日常茶飯事。ソフトウェアで冗長化して停止させないのがWSCの前提。
メンテナンスの容易性は考慮されない 数万台規模なのでメンテナンス性は極めて重要
通信機器を介さず、単体のサーバとして動作する 大規模なネットワークで結合された集合体
物理的なセキュリティよりも利便性を優先する 物理セキュリティは厳格。

【WSC】要件

p.54

問題:WSCにおいて、最も重要とされる要件は?

正解構成機器、ファシリティ、電気代などを含めた「コスト効率」

なぜ:WSCは数万台規模なので、サーバ本体の価格だけでなく、建物・冷却設備・電気代(=ファシリティコスト)が総所有コスト(TCO)の大きな割合を占める。1台あたり数%の電力削減が、全体では莫大な金額になる。だから「絶対性能」ではなく「性能/コスト」「性能/W」で設計判断する。

選択肢 判定 なぜ違うか
特定のベンダーのみによるハードウェアの独占 むしろ汎用の安価な機器(コモディティ)を使うのがWSCの定石。
構成機器、ファシリティ、電気代などを含めた「コスト効率」 正解。TCO(総所有コスト)で考える。
ソフトウェアの改善を一切行わないことによる安定性 WSCはソフトウェアで故障を吸収する設計。改善は必須。
科学技術計算のための絶対的な演算性能 それはスーパーコンピュータ(HPC)の要件。WSCとは目的が違う。最有力ダミー
プログラミングの複雑さを無視したハードウェア性能の追求 大規模開発なのでプログラミングの容易さは重要。
ネットワーク帯域の制限によるセキュリティ向上 帯域は制限するどころか増やしたい

💡 WSC vs スパコンの対比で覚える:スパコンは「絶対性能」、WSCは「コスト効率」。

【WSC】PUE

p.55

問題:データセンタの効率を示す指標「PUE(Power Usage Effectiveness)」の計算式は?

正解PUE = WSC全体が消費する電力 ÷ IT機器が消費する電力

              WSC全体が消費する電力(IT機器 + 冷却 + 照明 + 電源損失…)
  PUE  =  ───────────────────────────────────────────────
                    IT機器が消費する電力(サーバ・ストレージ・NW機器)

値の読み方

PUE値 意味
1.0 理想(全電力がIT機器に使われている)。これ以上小さくならない
1.1〜1.2 非常に優秀(Google等の最新WSC)
2.0 IT機器が使う電力と同じだけ冷却等に浪費している

⚠️ 分子と分母を逆にした選択肢が必ず用意されている。 覚え方:PUEは「1.0が理想で、大きいほど悪い」→ 分子が「全体」でないと1以上にならない。

選択肢 判定 なぜ違うか
PUE = IT機器が消費する電力 ÷ 冷却に要する電力 定義が違う。
PUE = WSC全体が消費する電力 ÷ IT機器が消費する電力 正解。
PUE = データサイズ ÷ 消費電力 電力効率の指標だが、PUEの定義ではない。
PUE = IT機器が消費する電力 ÷ WSC全体が消費する電力 分子分母が逆。これだと常に1未満になり「1.0が理想」と矛盾する。最有力ダミー(これは DCiE という別の指標)。
PUE = サーバの台数 ÷ 消費電力 定義が違う。
PUE = 冷却に要する電力 ÷ IT機器が消費する電力 分子が「冷却のみ」で不足。全体でないと成立しない。

【WSC】DAS

p.56

問題:WSCのストレージ接続方式として「DAS(Direct Attached Storage)」が採用される理由として適切なものは?

正解Read時に、内蔵HDD/SSDにデータがあればネットワーク帯域を消費しない

なぜ:DASはサーバに直接ディスクを内蔵する方式。WSCでは「計算をデータのある場所に持っていく(data locality)」という設計思想があり、必要なデータがローカルディスクにあればネットワークを一切通らずに読める。数万台規模ではネットワーク帯域が最も貴重な資源なので、これが決定的に効く。(HadoopのHDFSやGFSがまさにこの思想。)

ストレージ接続方式の比較

方式 接続 特徴
DAS サーバに直接内蔵 安い、ローカルReadでネットワーク不要。WSC向き
NAS ネットワーク経由(ファイル単位) 共有しやすいがネットワーク帯域を消費
SAN 専用ネットワーク(ブロック単位) 高性能だが高価。専用機器が必要
選択肢 判定 なぜ違うか
ネットワークポートを計算タスクと共有できないため 意味が通らない。DASはそもそもネットワークポートを使わない。
ハードウェアコストが NAS よりも大幅に高くなるため 逆。DASは安い。それが採用理由の一つ。
高価なエンタープライズクラスのディスクを使用することが前提だから 逆。WSCは安価なコモディティディスクを大量に使い、故障はソフトウェアで吸収する。
データのレプリカを生成するために RAID アプライアンスが必須だから WSCのレプリカはソフトウェア(分散ファイルシステム)で作る。専用RAID装置は使わない。
Read 時に、内蔵HDD/SSDにデータがあればネットワーク帯域を消費しない。 正解。
Write 時にネットワーク帯域を一切消費しないため Writeは他ノードへレプリカを作るのでネットワークを使う。「一切」が誤り。最有力ダミー — ReadとWriteの区別が肝

⚠️ Read と Write の非対称性が答えの分かれ目。Readはローカルで済むが、Writeはレプリケーションのためにネットワークを使う。

2-E. ハードウェアセキュリティ(HWS)

【HWS】Rowhammer攻撃

p.49

問題:Rowhammer攻撃において、意図しないビット反転が発生する直接的な原因として最も適切なものは?

正解特定のメモリ行への高速な連続アクセスによって発生した電圧変動のノイズが隣接行に干渉し、電荷のリークを加速させるため

メカニズム(DRAMの構造と結びつけて理解する)

DRAMは微細化で行と行の間隔が極めて狭い
        ↓
ある行(攻撃行)を何万回も高速に ACTIVATE / PRECHARGE
        ↓
その電圧変動のノイズが電気的に隣接行へ干渉(クロストーク)
        ↓
隣接行のキャパシタの電荷リークが加速
        ↓
リフレッシュ周期(通常64ms)が来る前に電荷が失われる
        ↓
ビットが 1 → 0 に反転(ソフトウェアの権限チェックを経ずにメモリが書き換わる!)

→ ページテーブルのエントリを狙って反転させれば権限昇格が可能になる。「ソフトウェアのバグではなく、物理現象を突く攻撃」という点が本質。

選択肢 判定 なぜ違うか
CPUキャッシュのヒット率が極端に低下し、DRAMへのバス帯域が物理的に破壊されるため バス帯域は「破壊」される類のものではない。意味不明。
コンデンサに蓄えられた電荷が自然放電し、リフレッシュ動作が物理的に停止するため 自然放電は通常のDRAMの性質で、それに対処するのがリフレッシュ。攻撃は「リフレッシュを停止させる」のではなく「リフレッシュが間に合わないほどリークを加速させる」。最有力ダミー
メモリコントローラの論理的なバグにより、アクセス権限のない行への書き込みが許可されるため 論理的なバグではなく物理的な干渉。ここがRowhammerの本質。
OSのアクセス権限管理に欠陥があり、ハードウェアによる物理的な強制力が無効化されるため OSのバグではない。正常に動作しているOS・正常なハードウェアでも起きるのが恐ろしい点。
ソフトウェアが隣接するメモリ領域のデータを直接書き換える命令を実行するため 直接書き換えていない。アクセス権のない行が、物理的な副作用で勝手に化けるのがRowhammer。
特定のメモリ行への高速な連続アクセスによって発生した電圧変動のノイズが隣接行に干渉し、電荷のリークを加速させるため 正解。

【HWS】Rowhammer攻撃の対策

p.50

問題:DRAMのRowhammer対策として導入されている「TRR(Target Row Refresh)」とその現状に関する正しい記述は?

正解頻繁にアクセスされる行を監視して隣接行を強制リフレッシュする機能だが、不規則なアクセスパターンによって監視をすり抜ける攻撃手法が実証されている

TRRの仕組みと限界: - 仕組み:メモリコントローラ/DRAM側がアクセス回数の多い行(aggressor row)を監視し、その隣接行を通常の周期を待たずに強制リフレッシュして電荷を回復させる。 - 限界:監視できる行数にはハードウェア資源の上限がある。攻撃者が多数の行を不規則に叩く(many-sided hammering)と、監視テーブルが溢れて検出をすり抜ける。TRRespass などの研究でDDR4のTRRが破られることが実証された。

選択肢 判定 なぜ違うか
OSレベルで特定のメモリアドレスへのアクセスを禁止するソフトウェアパッチであり、ハードウェアの変更は伴わない TRRはハードウェア(DRAM/メモリコントローラ)側の機能。ソフトウェアパッチではない。
ECC(エラー訂正)機能の別称であり、複数ビットの同時反転にも完全に対応できる ECCとTRRは別物。しかも一般的なECCは1ビット訂正・2ビット検出であり、複数ビット同時反転には対応できない(ECCmemを狙うECCploitという攻撃も存在する)。二重に誤り。
メモリの微細化をあえて止めることで、セル間の電気的干渉を物理的に排除する手法である 微細化は止まっていないし、TRRはそういう手法ではない。
全てのビット反転を完全に検知・修正できる機能であり、DDR4以降ではRowhammer攻撃は不可能となった 「完全」「不可能」は誤り。DDR4のTRRは実際に破られている。選択肢に「完全に」「必ず」「不可能」が入っていたら疑うのが定石
CPU内のキャッシュメモリを完全に無効化することで、DRAMへの不正なアクセスを物理的に遮断する仕組みである キャッシュ無効化は性能上あり得ないし、TRRの仕組みでもない。
頻繁にアクセスされる行を監視して隣接行を強制リフレッシュする機能だが、不規則なアクセスパターンによって監視をすり抜ける攻撃手法が実証されている 正解。

【HWS】サイドチャネル攻撃(穴埋め・スライド51)

正解

サイドチャネル攻撃とは、現代の暗号において【数学】的な欠陥を探し解読することが極めて困難になったことから注目されている手法です。この攻撃は、暗号アルゴリズムそのものを攻撃するのではなく、暗号処理を実行するハードウェアが物理的な実体を有することに着目します。 計算中にハードウェアから漏れ出る【物理的な情報】を外部から観察するのが特徴で、具体的な情報の例としては、消費電力、【電磁波】、処理時間などが挙げられます。これら物理的な副産物を分析することで、最終的にハードウェア内部の【秘密鍵】を推測することを目的としています。

サイドチャネルの種類

チャネル 観測するもの 攻撃名の例
消費電力 電流波形 SPA(単純電力解析)、DPA(差分電力解析)
電磁波 放射される電磁波 EM解析
処理時間 処理にかかる時間の差 タイミング攻撃
キャッシュ キャッシュヒット/ミスの差 Flush+Reload, Prime+Probe, Spectre/Meltdown
音響 CPUのコイル鳴き 音響解析

💡 本質:「アルゴリズムは数学的に安全でも、それを動かす物理的な実体が情報を漏らす」。暗号の強度と実装の強度は別物、という話。

【HWS】CMOS回路の消費電力

p.52

問題:サイドチャネル攻撃(電力解析攻撃)が可能となる物理的な根拠として、CMOS回路の特性に関する正しい記述は?

正解データが「0から1」や「1から0」へ反転するスイッチングの瞬間に電流が流れて電力を消費するため、処理内容に応じた波形の差が生じる

なぜ:CMOS回路の消費電力の大半は動的消費電力(dynamic power)で、これは信号が遷移(スイッチング)するときに負荷容量を充放電することで発生する。

  P_dynamic = α × C × V² × f
      α : スイッチング確率(=どれだけ値が反転したか)

値が変化しないビットはほとんど電力を消費しない。逆に言えば、「何ビット反転したか」が消費電力波形に現れる。秘密鍵のビットパターンによって反転するビット数が変わるので、波形を大量に集めて統計処理すれば鍵が推定できる(=DPA)。

選択肢 判定 なぜ違うか
ソフトウェアのソースコードに記述された計算式の複雑さに比例して、電圧が物理的に上昇するため 電圧は電源で決まる固定値。ソースコードの複雑さで電圧が変わることはない。
データが「0から1」や「1から0」へ反転するスイッチングの瞬間に電流が流れて電力を消費するため、処理内容に応じた波形の差が生じる 正解。動的消費電力の性質そのもの。
計算を停止している待機状態において最も多くの電磁波を放出する特性があるため 。待機中はスイッチングがないので消費電力も放射も最小
データが変化せず「1」のまま保持されている時に最大電力を消費し続けるため、その持続時間からデータを特定できる 。変化しないときは電力をほぼ消費しない。
実行される命令の内容に関わらず、常に一定の電力を消費し続ける特性があるため、統計的な平均をとる必要がある 一定なら差が出ないので攻撃が成立しない。攻撃が成り立つのは差があるから。論理が破綻している。
データが「0」の時のみ電力を消費し、「1」の時には電力を全く消費しないという物理的特性があるため 電力を消費するのは値そのものではなく値の「変化」。ここが最重要ポイント。

💡 一貫した鍵:CMOSは「状態」ではなく「遷移」で電力を食う。この一文を覚えていれば6択が一瞬で潰せる。 対策:電力波形を平坦化する(マスキング/ハイディング)、ランダムなダミー演算の挿入など。

Part 3|計算問題テンプレ

Part 3|計算問題テンプレ

計算問題は出るパターンが決まっている。この5つの公式だけ暗記すれば全部解ける。

① アムダールの法則

        1
S = ───────────
    (1−F) + F/N
記号 意味
S スピードアップ(何倍速くなるか)
F 並列化可能な割合(0〜1)
1−F 逐次実行部の割合
N コア数

3つの出題パターン

パターン 与えられるもの 求めるもの 解法
順方向 F, N S そのまま代入(Q27:F=0.8, N=4 → 2.5)
逆算 S, N F 両辺の逆数を取る(Q28:S=4, N=8 → 85.7%)
比較 2案のF・実行時間 逆転するN 不等式を立てる(Q29 → N=5)

上限の確認(記述で問われたら):N→∞ のとき S → 1/(1−F)。 F=0.8 なら最大5倍、F=0.95 なら最大20倍、F=0.99 でも最大100倍。

② 平均メモリアクセス時間(AMAT)

平均メモリアクセス時間 = キャッシュアクセス時間 + (1 − ヒット率) × メモリアクセス時間

逆算パターン(Q6):AMAT・キャッシュ・メモリが与えられ、ヒット率を求める。

6 = 1 + (1−h)×100  →  h = 0.95  →  95%

⚠️ この講義の式は「キャッシュ時間 ミス率×メモリ時間」という形。 教科書によっては「ヒット率×キャッシュ時間 + ミス率×(キャッシュ時間+メモリ時間)」と書くこともあるが、この講義の式に従うこと

③ HDDの平均アクセス時間

平均アクセス時間 = 平均シーク時間 + 平均回転待ち時間 + データ転送時間

  平均回転待ち時間 = (60 / RPM) ÷ 2   [秒]
                   = (60,000 / RPM) ÷ 2  [ms]

RPM別の平均回転待ち時間(覚えておくと速い)

RPM 1回転 平均回転待ち(半回転)
5,400 11.1 ms 5.6 ms
6,000 10 ms 5 ms ← 出題された
7,200 8.3 ms 4.2 ms
10,000 6 ms 3 ms
15,000 4 ms 2 ms

⚠️ RPM は「毎分」。問題文に「1秒間に6,000回転」と書いてあっても、毎分で計算する(Q10参照)。

④ RAIDの理論最大転送速度

レベル ディスクn台・1台v MB/s のとき
RAID 0 n × v(全台に分散)
RAID 1 v(同じデータを重複して書くだけ)
RAID 5 読み: 約 n×v / 書き: パリティ計算のオーバーヘッドあり

出題例(Q13):120 MB/s × 4台 → RAID 0 = 480 MB/s、RAID 1 = 120 MB/s

⑤ PUE

        WSC全体が消費する電力
PUE = ────────────────────
        IT機器が消費する電力
  • PUE = 1.0 が理想(これ以下にはならない)
  • 値が大きいほど非効率
  • 分子分母を逆にしたものは DCiE という別指標

【おまけ】SIMD利用率

利用率 = 実際に使う要素数 / ベクトル長

4要素SIMDに1要素だけ流す → 1/4 = 25%(Q36)

Part 4|引っかけポイント集・直前チェック

A. 「対立ペア」を探す

選択肢の中に真っ向から矛盾する2つがあれば、片方が必ず誤り。そこに正解が絡んでいることが多い。

出題例 対立ペア
DIMM(Q1) a「bank間は同時実行できない」 ⇔ h「bankは並列実行可能」
SRAM/DRAM(Q3) 「DRAMは記憶密度が高い」⇔「DRAMは記憶密度が低い」
PUE(Q53) 「全体÷IT」⇔「IT÷全体」

B. 「絶対語」が入っていたら疑う

「完全に」「必ず」「常に」「一切」「唯一の」「不可能」 が入っている選択肢は、高確率で誤り。

出題例 該当選択肢
TRR(Q56) 「全てのビット反転を完全に検知・修正できる」「Rowhammerは不可能となった」
DAS(Q54) 「Write時にネットワーク帯域を一切消費しない」
Micro-VM(Q24) 「数千のDockerコンテナを動かすことを唯一の目的」
CMOS(Q58) 「命令の内容に関わらず、常に一定の電力を消費」

ただし例外もある(Q20「すべてのセンシティブ命令が特権命令に含まれる」は正解)。あくまで優先的に疑うという話。

C. 「前半は正しいが後半で裏切る」型

問題文を最後まで読ませてから間違える設計。文の後半こそ慎重に。

出題例 正しい前半 誤った後半
DIMM 選択肢a rankは複数bankを束ねたもの ◯ bank間のアクセスは同時実行できない ✗
Type 1(Q19) ホストOSのドライバをそのまま利用 → そもそもType 1はホストOSを介さない ✗

D. 「近い概念だが階層/段階が違う」型

混同しやすいペア 区別のポイント
GVA / GPA / HPA アプリが触る=GVA、ゲストOSが物理と思っている=GPA、本物=HPA
channel / bank channelはチップ外部の配線、bankはチップ内部の構造
ラスタライズ / テッセレーション / トランスポーズ パイプラインのどの段階かで判別
GPGPU / ヘテロジニアスコンピューティング GPGPUはGPUを汎用計算に使う行為、後者は異種プロセッサを組み合わせる設計概念
SIMD / SIMT SIMDは1本のベクトル、SIMTはスレッド群を一括制御
デナードスケーリング / ダークシリコン問題 前者が原因(法則の崩壊)、後者が結果(設計上の制約)
At-most-once / At-least-once 再送しない/再送する(→冪等性が必要)
ブロッキング問題 / Split-Brain問題 コーディネーター故障で全員停止/分断で複数リーダー発生
Type 1 / Type 2 ハイパーバイザ ハードウェア直上/ホストOS上のアプリ
VM / コンテナ / Micro-VM カーネル専用・共有・専用(軽量)
DAS / NAS / SAN 直接内蔵/ネットワーク越しファイル/専用ネットワーク越しブロック

E. 「逆」を書いてくる型(一番多い)

正しい内容 よくある誤答
層の境界は情報の流れを最小化 最大化
PUE = 全体 ÷ IT機器 IT機器 ÷ 全体
CMOSは値の遷移で電力を食う 値の状態で食う/常に一定
待機中は消費電力最小 待機中が最大
Micro-VMはカーネルを共有しない コンテナ同様に共有する
コンテナはカーネルを共有する コンテナが専用カーネルを持つ
I/Oデバイスは CPU より遅い CPU より速い
Lamport:a→b ⟹ L(a)<L(b) L(a)<L(b) ⟹ a→b(逆は成立しない
Raftはタイムアウトをランダム化 NTPで厳密に同期

F. 一問一答(直前チェック用)

答えを隠して即答できるか確認する。

メモリ

  1. row buffer は何個ごとに存在する? → bankごとに1本
  2. row buffer の3状態を遅い順に → conflict > empty(closed) > hit
  3. SRAMの記憶素子は? → フリップフロップ
  4. DRAMの記憶素子は? → キャパシタ(→リフレッシュが必要)
  5. 記憶密度が高いのは? → DRAM
  6. channelを増やすと何が上がる? → 帯域幅
  7. MSIの3状態は? → Modified / Shared / Invalid
  8. NUMAの正式名は? → Non-Uniform Memory Access
  9. SMPの欠点は? → メモリ帯域がボトルネックでスケールしない
  10. 局所性原則の2種類は? → 時間的局所性 / 空間的局所性

ストレージ

  1. SSDの読み書き単位/消去単位は? → ページ/ブロック
  2. 1セル3ビットは? → TLC
  3. 全プラッタの同半径トラックの集合は? → シリンダ
  4. 平均回転待ち時間は何回転分? → 1/2回転
  5. 冗長性がなく信頼性が単体より低下するのは? → RAID 0
  6. 専用パリティドライブでボトルネックになるのは? → RAID 4
  7. パリティを分散させたのは? → RAID 5
  8. アームの位置と回転の同期が必要なのは? → RAID 2 / RAID 3

ネットワーク

  1. Bluetoothの制御方式は? → マスター・スレーブ方式
  2. 経路制御を行う層は? → ネットワーク層(第3層)
  3. 端点間の信頼性を担う層は? → トランスポート層(第4層)
  4. OSI設計方針で「層の境界」はどうすべき? → 情報の流れを最小化
  5. VPNの利点は? → 遠隔のデータをローカルのように使える

仮想化

  1. JVM や Python ランタイムの分類は? → プロセス仮想マシン
  2. Type 1 の代表例は? → Xen, VMware ESXi, Hyper-V
  3. Type 2 の代表例は? → VirtualBox, VMware Workstation
  4. Popek & Goldberg の条件は? → センシティブ命令 ⊆ 特権命令
  5. 初期x86が仮想化困難だった理由は? → POPF等がトラップせず無視された
  6. アプリが直接触るアドレス空間は? → GVA
  7. I/O仮想化のボトルネックの原因は? → VM Exit のコスト
  8. コンテナの隔離を支えるOS機能2つは? → Namespace と Cgroups
  9. Firecracker が排除したものは? → レガシーデバイスのエミュレーション

並列・性能

  1. アムダールの法則の式は? → 1/((1−F)+F/N)
  2. F=0.8 での理論上限は? → 5倍
  3. デナードスケーリング崩壊の原因は? → リーク電流により電圧が下げられない → 発熱

GPU / ASIC

  1. 三角形をピクセルに変換する処理は? → ラスタライズ
  2. 光線を飛ばす描画手法は? → レイトレーシング
  3. GPUを汎用計算に使うことは? → GPGPU
  4. TPUの実行方式は? → シストリック実行
  5. 同時に動かせないトランジスタの問題は? → ダークシリコン問題
  6. AIアクセラレータのDRAMアクセス削減策は? → 大容量バッファでデータを使い回す
  7. NVIDIAの一括制御方式は? → SIMT
  8. 4要素SIMDに1要素 → 利用率は? → 25%
  9. CPU-GPU間でポインタが問題になるのは? → ディープコピー問題

分散システム

  1. 再送により複数回実行されうるRPCは? → At-least-once(冪等性が必要)
  2. 2PCでコーディネーター故障時に起きる問題は? → ブロッキング問題
  3. CAP定理でPは捨てられるか? → 捨てられない(分断は必ず起きる)→ CかAの2択
  4. CPとAPは何を守る? → CP=一貫性 / AP=可用性
  5. Lamport時計の弱点は? → L(a)<L(b) でも因果関係があるとは限らない
  6. Lamport時計の受信時の更新式は? → L = max(L_local, L_msg) + 1
  7. Raftのsplit vote対策は? → タイムアウトのランダム化
  8. 障害モデル3種は? → Crash-stop / Crash-recovery / Byzantine
  9. 分散システムの3つの価値は? → 経済性/拡張性・可用性・低レイテンシ

WSC / セキュリティ

  1. WSCの最重要要件は? → コスト効率(TCO)
  2. PUEの式は? → 全体電力 ÷ IT機器電力(1.0が理想)
  3. WSCでDASが使われる理由は? → Read時にネットワーク帯域を消費しない
  4. Rowhammerの原因は? → 連続アクセスによる電圧ノイズが隣接行の電荷リークを加速
  5. TRRの限界は? → 不規則なアクセスパターンで監視をすり抜けられる
  6. サイドチャネル攻撃が観測するものは? → 消費電力・電磁波・処理時間
  7. CMOSが電力を消費するのはいつ? → 値が反転する(スイッチングする)瞬間

G. 講義全体を貫く「一本の物語」

期末で記述問題が出た場合に備えて、この流れを説明できるようにしておくと強い。

【出発点】シングルプロセッサの性能向上が頭打ちに
    │
    │ 原因:リーク電流 → 電圧が下げられない
    │      → デナードスケーリングの崩壊(2005年頃)
    │      → 電力密度が下がらない → 発熱が限界(パワーウォール)
    ↓
【転換1】周波数向上 → コア数増加(マルチコア/SMP・NUMA)
    │
    │ でも……アムダールの法則により 1/(1−F) で頭打ち
    │      さらにダークシリコン問題で全コアを同時に動かせない
    ↓
【転換2】汎用プロセッサ → ドメイン特化アーキテクチャ
    │      GPU(SIMT・低精度演算)/ASIC(TPUのシストリックアレイ)
    │      設計の主眼は「演算を速く」から「メモリアクセスを減らす」へ
    ↓
【転換3】1台の限界 → 台数で解く(分散システム/WSC)
    │      価値:経済性・可用性・低レイテンシ
    │      制約:CAP定理、物理時計が同期できない(Lamport)、
    │            障害は日常(Crash-stop / recovery / Byzantine)
    │      指標:絶対性能ではなく PUE・TCO(コスト効率)
    ↓
【副作用】性能と抽象化の追求が新たな脆弱性を生む
           Rowhammer(微細化の物理限界)
           サイドチャネル攻撃(物理的実体からの情報漏洩)

講義のまとめスライド(p65)が言っていること

「コンピュータシステムを適切に構成することができる」= 要件に応じて構成要素の何を考えればよいか - 例:AIを高速に実行するには何を用いるか(ハードウェアによるアプリケーションの性能改善) - 例:ストレージ性能を上げたいとき RAID 0/1/5 のどれを使うべきか(システムレベルの性能改善)

暗記した用語を「要件 → 選択の理由」の形で結びつけられるかが問われている。 「RAID 5を選ぶ」ではなく「書き込みが分散し、かつ容量効率を保ちたいのでRAID 5」と理由まで言えるようにしておく。

H. 期末に向けたTODO

一致する設問がありません。別のキーワードで試してください。