Skip to content

コンピュータ構成原理

前書き

トランジスタから CPU へ――コンピュータはどのように完全なシステムを構成するのか? 前章では、トランジスタから始まり、加算器、レジスタ、演算ユニットを構築し、最終的に CPU コアを組み上げました。しかし CPU だけでは不十分です――メモリや I/O デバイスと連携し、各部品をバスで接続し、命令システムによって駆動する必要があります。本章では、CPU の内部視点からコンピュータシステム全体の視点へと移り、ノイマン型アーキテクチャ、命令システム、記憶階層、バスと I/O の専門原理を深く理解します。

この章で学べること

この章を学び終えると、以下の知識が得られます:

  • システム視点:CPU、メモリ、I/O がどのように連携して動作するかを理解し、孤立したハードウェア愛好家から脱却する
  • ハードウェア専門用語:命令サイクル、パイプライン、CPI、キャッシュヒット率などのハードコアな概念を習得する
  • パフォーマンス思考:コンピュータ構成におけるボトルネックと最適化手法を理解する
  • 後続学習の基礎:オペレーティングシステム、アーキテクチャ、組み込み開発のための専門的基盤を築く
内容核心概念
第 1 章ノイマン型アーキテクチャストアドプログラム、五大構成要素、データパス
第 2 章命令システム命令形式、アドレッシングモード、CISC vs RISC
第 3 章CPU コントローラ制御ユニット、マイクロ操作、命令サイクル
第 4 章記憶体系キャッシュ、メインメモリ、仮想メモリ、ページング機構
第 5 章バスと I/Oバスアービトレーション、DMA、割り込み機構

0. 全体像:コンピュータハードウェアシステム

前章「トランジスタから CPU へ」では、CPU 内部がどのように動作するか――フェッチ、デコード、実行、ライトバックまでを理解しました。しかし CPU 自体は単なる実行ユニットに過ぎず、コンピュータを本当に「使える」ものにするには、一連の周辺部品との連携が必要です。

Detailed CPU Instruction Cycle Demo
CPU
Control Unit CU
PC256Program Counter
IRInstruction Register
MARMemory Address Register
MDRMemory Data Register
Arithmetic Logic Unit ALU
ACC0Accumulator
General Register File
R00
R10
R20
R30
Address Bus
Data Bus
Control Bus
Main Memory
0x100LOAD R0, [0x200]
 0x101LOAD R1, #7
 0x102ADD R0, R1
 0x103STORE [0x201], R0
Data Area
 0x51242
 0x5130
FetchFetch
DecodeDecode
ExecuteExecute
Write BackWrite Back
Step 0 / 32
Click "Clock Pulse" to step through execution, or "Auto Run" to play continuously.

層ごとの解体:コンピュータハードウェアシステム

  • 第一層:CPU コア 命令実行を担当し、制御ユニット(制御信号を発行)と演算ユニット(算術論理演算を実行)を含む

  • 第二層:レジスタ群 CPU 内部の高速記憶ユニットで、汎用レジスタと専用レジスタ(PC、IR、MAR、MDR など)を含む

  • 第三層:メインメモリ プログラムとデータを格納するメモリで、CPU はアドレスバスとデータバスを通じてアクセスする

  • 第四層:I/O デバイス 入出力デバイスは I/O コントローラを介してシステムバスに接続される

  • 第五層:システムバス CPU、メモリ、I/O を接続するデータ経路で、アドレスバス、データバス、制御バスを含む


1. ノイマン型アーキテクチャ:現代コンピュータの「憲法」

1.1 ストアドプログラム原理

1945 年、数学者ジョン・フォン・ノイマン(John von Neumann)は画期的なストアドプログラム(Stored-program)アーキテクチャの考え方を提唱しました。この思想は現代コンピュータの基礎を築きました。

核心概念

ストアドプログラム:プログラム自体を一種の特殊なデータとして扱い、通常のデータと同じようにメモリに格納する。CPU はデータの読み書きと同じように、メモリに格納されたプログラム命令を読み取って実行できる。

これは次のことを意味します:

  • 初期のコンピュータ:プログラムは固定配線で実装され、プログラムを変更するには回路をはんだ付けし直す必要があった
  • ノイマン型アーキテクチャ:プログラムはメモリに格納され、プログラムを変更するにはメモリの内容を書き換えるだけでよい

1.2 五大構成要素

ノイマン型アーキテクチャは、コンピュータを五つの核心的構成要素に分割します:

CPU Register FileHigh-speed storage inside the CPU
Special Registers
PC
0x00401000
Program counter
IR
0x8B450008
Instruction register
MAR
0x00401000
Memory address register
MDR
0x00000000
Memory data register
ACC
0x0000001A
Accumulator
General Purpose Registers
RAX
0x00000000
Return value
RBX
0x00000000
Base register
RCX
0x00000000
Counter register
RDX
0x00000000
Data register
RSI
0x00000000
Source index
RDI
0x00000000
Destination index
RBP
0x00000000
Base pointer
RSP
0x7FFDE000
Stack pointer
Program Status Word (PSW / FLAGS)
CF0Carry flag
PF0Parity flag
AF0Auxiliary carry
ZF0Zero flag
SF0Sign flag
OF0Overflow flag
Registers vs Memory
FeatureRegisterMemory (RAM)
LocationInside the CPUOutside the CPU
Access speedFastest (< 1ns)Slower (50-100ns)
CapacityTiny (bytes)Large (GB)
RoleHold instructions, operands, and resultsStore programs and data
構成要素英語機能主要構成
演算器ALU (Arithmetic Logic Unit)算術演算と論理演算を実行加算器、シフタ、比較器
制御器CU (Control Unit)各部品の指揮・調整命令レジスタ、デコーダ、タイミングジェネレータ
記憶装置Memoryプログラムとデータを格納メモリアドレスレジスタ(MAR)、メモリデータレジスタ(MDR)
入力装置Input情報の入力キーボード、マウス、スキャナ
出力装置Output情報の出力ディスプレイ、プリンタ

1.3 データパス

データパス(Data Path)は、データが各機能部品間を流れる経路です。CPU 内部では、データパスは以下を接続します:

  • レジスタ群
  • 算術論理演算ユニット(ALU)
  • メモリデータレジスタ(MDR)

データパスの幅(一度に転送できるビット数)は、コンピュータのパフォーマンスに直接影響します。

1.4 ノイマンボトルネック

ノイマン型アーキテクチャには有名なパフォーマンスボトルネックがあります:

CPU とメモリ間のデータ転送速度は、CPU の処理速度よりもはるかに遅い。

これにより、CPU は「データ待ち」のアイドル状態に頻繁になります。現代のコンピュータにおける多くの最適化技術は、この問題を中心に展開されています:

最適化技術原理
キャッシュ(Cache)CPU 付近に小容量の高速ストレージを配置
命令パイプライン複数の命令を同時に異なる段階で処理
スーパースカラ同一クロックサイクルで複数の命令を発行
マルチコア並列複数の CPU コアで計算タスクを分担

2. 命令システム:CPU とソフトウェアのインターフェース

前節では、ノイマン型アーキテクチャの核心思想――プログラムとデータは同じようにメモリに格納されることを学びました。しかし、ここで重要な疑問が生まれます――メモリに格納された「プログラム」とは一体どのような姿をしているのか?CPU はどうやってそれを読み解くのか?

その答えが命令システム(Instruction Set Architecture, ISA)です。CPU を一つのサービスに例えるなら、命令システムはその API ドキュメントにあたります――CPU が理解できるすべてのコマンド、各コマンドの形式、そしてコマンドが操作できるデータの範囲を定義しています。あなたが書くすべてのコード行は、最終的にコンパイラによってこの「API」の呼び出しシーケンスに翻訳されます。

2.1 コードから命令へ:一行のコードの翻訳の旅

まず全体的な認識を確立しましょう:あなたがエディタで書くコードと、CPU が実際に実行するものとの間には、いくつかの翻訳層が存在します。

🔗 From Code to Instructions: One Line Through the Translation Pipeline

Click each stage to see how source code becomes CPU-executable instructions

1Source code
int a = 10 + 5;
This is high-level code written in an editor. It is easy for humans to read, but the CPU does not understand int or the + operator directly.
2Compiler emits assembly
MOV  R1, #10    ; put 10 into register R1
MOV  R2, #5     ; put 5 into register R2
ADD  R3, R1, R2 ; R3 = R1 + R2
STORE R3, [a]   ; store the result at variable a
3Assembler emits machine code
0001 0001 0000 1010  → MOV R1, #10
0001 0010 0000 0101  → MOV R2, #5
0010 0011 0001 0010  → ADD R3, R1, R2
0100 0011 1000 0000  → STORE R3, [a]
4CPU executes instructions
Clock 1: fetch → decode → execute MOV R1, #10
Clock 2: fetch → decode → execute MOV R2, #5
Clock 3: fetch → decode → execute ADD R3, R1, R2
Clock 4: fetch → decode → execute STORE R3, [a]
💡 Key idea
An instruction set is the CPU API: it defines every command the CPU understands. A compiler translates your high-level language into calls to that API. Different CPUs, such as x86 and ARM, have different instruction sets, just as different services expose different APIs.

この翻訳チェーンは命令システムを理解する鍵です:

階層内容誰が理解できるか
高級言語int a = 10 + 5;人間
アセンブリ言語MOV R1, #10 / ADD R3, R1, R2人間(訓練が必要)
マシンコード0001 0001 0000 1010CPU

なぜこのチェーンを理解する必要があるのか?

  • コンパイルエラーを見たとき、そのエラーが「高級言語→アセンブリ」の段階で発生したことがわかる
  • 実行時クラッシュを見たとき、問題が CPU の命令実行段階にあることがわかる
  • パフォーマンス最適化を理解するとき、コンパイラが「翻訳」過程でどのような最適化を行ったかがわかる
  • CPU アーキテクチャ(x86 vs ARM)を選択するとき、その差異が「命令セット API」の違いにあることがわかる

2.2 一つの命令はどのような形をしているか?

コードが命令に翻訳されることを知ったところで、次の疑問は:一つの命令の内部構造はどうなっているのか?

各マシン命令は本質的には一連の二進数字ですが、厳密な内部形式を持っています。最も核心的な二つの部分は:

  • オペコード(Opcode):CPU に「何をするか」を伝える――加算か?ジャンプか?メモリ読み出しか?
  • オペランド(Operand):CPU に「何に対して行うか」を伝える――どのレジスタか?どのメモリアドレスか?どんな定数か?

ちょうど文に「動詞+目的語」の構造があるように、命令にも「操作+対象」の構造があります:

命令:  ADD  R3, R1, R2
       ───  ──────────
       オペコード  オペランド
       (加算する) (R3 = R1 + R2)

オペランドの数に応じて、命令形式は単純なものから複雑なものまで四種類に分けられます:

Machine Instruction FormatOpcode + operands = machine instruction
Opcode8 bits
Destination8 bits
Source 18 bits
Source 28 bits
Example instruction
01101100 00000001 00000010 00000011
Result goes to a new destination without changing sources
Three-address format
Three addresses identify the destination and two source operands separately. The result goes into the destination without modifying the sources.
Common examples
ADD R1, R2, R3R1 = R2 + R3
SUB R1, R2, R3R1 = R2 - R3
MUL R1, R2, R3R1 = R2 × R3
Common opcodes
00000000NOPNo operation
00000001MOVMove data
00000010ADDAddition
00000011SUBSubtraction
00000100MULMultiplication
00000101DIVDivision
00000110ANDLogical AND
00000111ORLogical OR
00001000NOTLogical NOT
00001001XORExclusive OR
00001010SHLShift left
00001011SHRShift right
00001100JMPUnconditional jump
00001101JEJump if equal
00001110JNEJump if not equal
00001111CALLCall subroutine
00010000RETReturn
00010001PUSHPush stack
00010010POPPop stack
00010011LOADLoad from memory
00010100STOREStore to memory
形式構造使用シーン
ゼロアドレスオペコードのみRET(リターン)スタックコンピュータ、オペランドはスタックトップに暗黙的に存在
1 アドレスオペコード + 1 アドレスINC R1(R1 に 1 加算)単一オペランド演算
2 アドレスオペコード + 2 アドレスMOV R1, R2最も一般的、データ転送と演算
3 アドレスオペコード + 3 アドレスADD R3, R1, R2ソースオペランドを破壊しない

なぜこんなに多くの形式があるのか?

これは空間と柔軟性のトレードオフです。ゼロアドレス命令は最も短く(メモリ節約)、しかし追加のスタック操作が必要です。3 アドレス命令は最も柔軟(ソースデータを破壊しない)ですが、より多くのビット数を占有します。異なる CPU アーキテクチャは異なる命令形式の組み合わせを選択します。

2.3 CPU はどうやってデータを見つけるのか?――アドレッシングモード

命令は CPU に「加算せよ」と伝えますが、加算する二つの数値はどこにあるのでしょうか?命令の中に直接書かれているかもしれませんし、レジスタの中かもしれませんし、メモリのどこかのアドレスかもしれません。アドレッシングモードとは、CPU に「オペランドをどこに探しに行くか」を伝えるルールです。

日常生活の「人探し」に例えると:

アドレッシングモード例え命令例説明
即値アドレッシング相手が目の前に立っているMOV R1, #100データが命令に直接書かれている、最速
レジスタアドレッシング内線電話で同僚を探すMOV R1, R2データが CPU 内部のレジスタにある、高速
直接アドレッシング部屋番号を知っていて直接訪ねるMOV R1, [0x1000]命令にメモリアドレスが書かれている
間接アドレッシングフロントに「張三はどの部屋か」と尋ねるMOV R1, [R2]レジスタにアドレスが格納されており、もう一度調べる必要がある
インデックスアドレッシング「3 号館 + 5 階」で部屋を計算MOV R1, [R2+10]ベースアドレス + オフセット、配列アクセスに使用
Addressing ModesHow an instruction finds operand locations
Immediate addressingImmediate Addressing
Definition
The operand is embedded directly in the instruction and is immediately available.
Instruction format
MOV R1, #100
Example
MOV R1, #100 ; R1 = 100
Immediate value 100 is stored directly in the instruction, so no register or memory lookup is needed.
Execution process
1CPU reads immediate value 100 directly from the instruction
2Write the immediate value into target register R1
3Execution completes without extra memory access
Characteristics
SpeedFast
FlexibilityLow
Addressing mode comparison
Addressing modeFormatSpeedUse case
Immediate addressingMOV R1, #100FastestConstant assignment and initialization
Register addressingMOV R1, R2FastestRegister-to-register data transfer
Direct addressingMOV R1, [100]Relatively fastAccessing global variables
Indirect addressingMOV R1, [R2]Relatively fastPointers and array traversal
Indexed addressingMOV R1, [R2 + R3]Relatively fastArray access and loops
Based addressingMOV R1, [R2 + 100]Relatively fastStruct fields and function parameters
Relative addressingJMP LABELFastestLoops and conditional branches

なぜこんなに多くのアドレッシングモードが必要なのか?

異なるシーンでは異なる「データ探し」戦略が必要です:

  • 定数代入x = 100)→ 即値アドレッシング、データが命令の中にある
  • 変数演算a + b)→ レジスタアドレッシング、データが既にレジスタにロードされている
  • 配列アクセスarr[i])→ インデックスアドレッシング、ベースアドレス + インデックスオフセット
  • ポインタ操作*ptr)→ 間接アドレッシング、レジスタにアドレスが格納されている

arr[i] と書くときにアドレッシングモードを意識することはありませんが、コンパイラが自動的に最適なモードを選択します。

2.4 CPU の能力リスト――命令分類

ここまでで命令の形式とアドレッシングモードを学びました。最後の疑問は:CPU は一体どのようなことができるのか?

すべての命令は六大カテゴリに分類でき、コンピュータが実行できるすべての操作をカバーします:

種類何をするか代表的な命令対応するあなたのコード
データ転送データを運ぶMOV, LOAD, STORElet x = y、関数の引数渡し
算術演算加減乗除ADD, SUB, MUL, DIVa + bcount++
論理演算ビット操作AND, OR, NOT, XORflags & 0xFF、権限判定
シフト操作左シフト・右シフトSHL, SHRx << 2(4 倍と同等)
制御転送ジャンプと呼び出しJMP, CALL, RETiffor、関数呼び出し
入出力周辺機器との通信IN, OUTキーボード読み取り、画面書き込み

重要な洞察

あなたが書くすべてのコードは――どんなに複雑なビジネスロジックでも、どんなに派手な UI アニメーションでも――最終的にはこれら六種類の基本操作の組み合わせに分解されます。CPU の「知能」は、どれだけ複雑なことをできるかにあるのではなく、これらの単純な操作を毎秒数十億回実行できることにあります。

2.5 二つの設計哲学:CISC vs RISC

命令システムの設計には根本的な対立があります:各命令を可能な限り強力にするか、それとも各命令を可能な限りシンプルにするか?

この対立から二大陣営が生まれ、あなたが今日使うすべてのデバイスに直接影響を与えています:

⚔️ Two Design Philosophies: CISC vs RISC

Click a comparison dimension to see the core differences between instruction set styles

Thousands of complex instructions
Instruction count
Tens to hundreds of streamlined instructions
One instruction can do many things
Single instruction
One instruction does one thing
Variable length (1-15 bytes)
Instruction length
Fixed length, often 4 bytes
Complex instructions take multiple cycles
Execution speed
Most instructions complete in one cycle
Higher
Power use
Lower
Harder to optimize because lengths vary
Pipeline
Easier to optimize because instructions are regular
Lighter because hardware does more
Compiler burden
Heavier because software optimizes more
🌍 Real-world choices
💻 Your computerx86 (CISC)Compatible with decades of software
📱 Your phoneARM (RISC)Low power consumption and longer battery life
🍎 Apple SiliconARM (RISC)High performance per watt reshaped laptops
🔬 RISC-V boardRISC-V (RISC)Open and royalty-free for IoT and education

例えで理解すると:

  • CISC はスイスアーミーナイフ:一本のナイフにはさみ、栓抜き、ドライバーが統合されている……機能は多いが、それぞれが必ずしも最適とは限らない
  • RISC はプロ仕様のツールセット:各ツールは一つのことだけを行うが、速くて優れている

なぜスマホは ARM、PC は x86 なのか?

  • x86 (CISC) は PC とサーバー市場を 40 年間支配し、膨大なソフトウェアエコシステムを蓄積してきた。アーキテクチャを変えることは、すべてのソフトウェアを再コンパイルすることを意味する
  • ARM (RISC) は低消費電力の優位性でモバイルデバイスを支配している。スマホのバッテリーは小さく、1 ミリワットたりとも貴重である
  • Apple Silicon は RISC でも高性能を達成できることを証明した――M シリーズチップはパフォーマンスと消費電力の両面で x86 の競合を同時に上回った
  • RISC-V はオープンソースの RISC アーキテクチャで、IoT、教育、AI チップ分野で急速に台頭している

まとめ:命令システムはソフトウェアとハードウェアをつなぐ架け橋です。あなたが書いたコードはコンパイラを通じて命令に翻訳され、命令はオペコードとオペランドを通じて CPU に何をするか・何に対して行うかを伝え、アドレッシングモードがデータの出所を決定します。異なる命令セット設計(CISC/RISC)は CPU のパフォーマンス特性と適用シーンを決定します。

命令の「静的な構造」――それがどのような形をしていて、どのような種類があるかがわかりました。次の疑問は:CPU 内部はこれらの命令をどのように一歩ずつ実行しているのか? これがコントローラの仕事です。


3. コントローラ:CPU の「指令センター」

3.1 コントローラの構成

コントローラは CPU の「頭脳」であり、各部品が命令の要求に従って動作するよう調整します:

How the Controller WorksHow control signals coordinate CPU components
Control Unit CU
Instruction Register IR
Instruction Decoder
Timing Generator
Output control signals:
PC→MAR
MEM→MDR
MDR→IR
IR→ID
ALU→ACC
ACC→MDR
PC
Program Counter
MAR
Address Register
Memory
Main Memory
MDR
Data Register
IR
Instruction Register
ID
Decoder
ALU
Arithmetic Logic Unit
ACC
Accumulator
Current microinstruction
Core controller concepts
Control signals:Electrical signals emitted by the controller to control each component on the data path.
Timing:CPU operations advance by clock ticks; each tick performs specific micro-operations.
Hardwired vs microprogrammed:Hardwired controllers are fast but complex; microprogrammed controllers are flexible but slightly slower.
コンポーネント機能
プログラムカウンタ (PC)次の命令のアドレスを保持
命令レジスタ (IR)現在実行中の命令を保持
命令デコーダ命令のオペコードとオペランドを解析
タイミングジェネレータ拍信号を生成し、各部品のタイミングを制御
マイクロ操作シーケンス生成器命令実行に必要な一連の制御信号を生成
Program Status Word (PSW)The CPU status indicators
CF
0
Carry flag
PF
0
Parity flag
AF
0
Auxiliary carry
ZF
0
Zero flag
SF
0
Sign flag
TF
0
Trap flag
IF
1
Interrupt flag
DF
0
Direction flag
OF
0
Overflow flag
How operation results affect flags
Result:
0
CF:0PF:0AF:0ZF:0SF:0TF:0IF:1DF:0OF:0
Typical flag uses
🔀
Conditional jumps
JE, JNE, JG, JL and similar instructions decide jumps based on ZF, SF, and OF.
Arithmetic
Multi-word arithmetic uses CF for carry and OF for signed overflow.
🔄
Loop control
Loop instructions often use ZF to detect the loop ending condition.

3.2 命令サイクル

CPU が一つの命令を実行するには、完全な命令サイクルを経る必要があり、通常以下の段階を含みます:

  1. フェッチサイクル (Fetch): メモリから命令を IR に読み出す
  2. デコードサイクル (Decode): 命令の意味を解析する
  3. 実行サイクル (Execute): 操作を実行する
  4. メモリアクセスサイクル (Memory Access): メモリアクセスが必要な場合、メモリにアクセスする
  5. ライトバックサイクル (Write Back): 結果をレジスタまたはメモリに書き戻す

3.3 マイクロ操作

マイクロ操作は、制御信号によって駆動される最も基本的な操作です。例えば、「フェッチ」段階は以下のマイクロ操作に分解できます:

マイクロ操作制御信号
T1PC → MARPCout, MARin
T2MEM → MDRMEMout, MDRin
T3MDR → IRMDRout, IRin
T4PC + 1 → PCPC+1, PCin

3.4 ハードワイヤード vs マイクロプログラムコントローラ

特性ハードワイヤードコントローラマイクロプログラムコントローラ
実装方式組み合わせ論理回路マイクロ命令シーケンス(ファームウェア)
速度速いやや遅い
設計難易度複雑比較的簡単
柔軟性悪い(変更には回路の再設計が必要)良い(マイクロプログラムの修正で済む)
典型的な応用RISC プロセッサCISC プロセッサ(初期)

4. 記憶体系:なぜキャッシュが必要なのか?

4.1 記憶階層構造

コンピュータの記憶デバイスはピラミッド構造を構成しています:

Storage HierarchyFrom fastest to slowest, smallest to largest
Registers
Fastest
Smallest (KB)
Cache
Very fast
Small (MB)
Memory
Fast
Medium (GB)
Disk
Slow
Large (TB)
Network/Cloud
Slowest
Unlimited
Detailed comparison
Storage levelAccess timeTypical capacityCost
Registers< 1 nsA few KBHighest
L1 cache~1 ns64 KBVery high
L2 cache~3 ns256 KBHigh
L3 cache~10 ns8 MBMedium
Memory~100 ns8-32 GBMedium-low
SSD~100 μs256 GB-2 TBLow
HDD~10 ms1-10 TBLowest
Locality principle
Programs tend to access recently accessed locations (temporal locality) and nearby locations (spatial locality)
By exploiting locality, caches can significantly improve performance.
階層記憶タイプアクセス時間典型的な容量位置
レジスタSRAM<1ns数 KBCPU 内部
L1 キャッシュSRAM~1ns32-64KBCPU コア付近
L2 キャッシュSRAM~3-10ns256KB-1MBCPU チップ内
L3 キャッシュSRAM~10-20ns2-16MBCPU チップ内/共有
メインメモリ(メモリ)DRAM~50-100ns8-64GBマザーボード上
SSDFlash~10-100μs256GB-2TBマザーボード上
HDD磁気ディスク~5-10ms1-10TB筐体内

速度差の比喩

CPU が L1 キャッシュにアクセスするのを机の上から紙を一枚取ることに例えると:

  • メモリアクセス → エレベーターで階下のコンビニに紙を買いに行く
  • SSD アクセス → 車で別の都市に紙を買いに行く
  • HDD アクセス → 飛行機で別の国に紙を買いに行く

速度差は百万倍にも達します!

4.2 キャッシュの原理

キャッシュ(Cache) は CPU とメモリの間に位置する高速ストレージで、その核心思想は二つの局所性原理に基づいています:

局所性原理

  • 時間的局所性:あるデータが今アクセスされたばかりなら、近いうちに再びアクセスされる可能性が高い
  • 空間的局所性:あるデータがアクセスされたなら、その近くのデータもアクセスされる可能性が高い

キャッシュの動作方式

  1. ヒット(Hit):CPU が必要とするデータがキャッシュにあり、直接読み出す
  2. ミス(Miss):データがキャッシュになく、メモリからロードする必要がある
ヒット率 = ヒット回数 / 総アクセス回数
平均アクセス時間 = ヒット率 × キャッシュ時間 + (1-ヒット率) × メモリ時間
Cache PrinciplesThe bridge between CPU and memory
CPU core
L1 cache
64 KB~1ns
L2 cache
256 KB~5ns
L3 cache
8 MB~15ns
Main memory
16 GB~100ns
Cache operation demo
Operation log
Why does cache work? Locality principle
⏱️
Temporal locality
Recently accessed data is likely to be accessed again.
Variables inside loops
📦
Spatial locality
After one item is accessed, nearby data is likely to be accessed.
Array traversal and sequential execution
Cache mapping methods
Each memory block maps to exactly one cache line.
SpeedFastest
Hit rateLower
Implementation complexityLowest
Hit-rate calculation
Average access time = H × Tc + (1-H) × Tm
2 ns
100 ns
90%
Average access time = 12 ns

4.3 キャッシュマッピング方式

方式原理利点欠点
ダイレクトマッピング各メモリブロックは一つの固定位置にしか配置できないシンプルで高速衝突率が高い
セットアソシアティブ各メモリブロックは N 箇所に配置できる(N ウェイ)速度とヒット率のバランス実装が複雑
フルアソシアティブ任意の位置最低の衝突率実装が困難(全タグの比較が必要)

4.4 仮想メモリ

仮想メモリはオペレーティングシステムが提供する重要な抽象化です:

  • 各プロセスは自分が完全な仮想アドレス空間を所有していると認識する
  • オペレーティングシステムが仮想アドレスを物理アドレスに変換する責任を負う
  • 使用頻度の低いページはディスク(スワップ空間)に追い出せる

仮想メモリの比喩

仮想メモリをホテルの部屋管理に例えると:

  • あなた(プロセス)はビル全体が自分のものだと思っている
  • 実際にはホテル(OS)が現在必要な部屋だけを割り当てている
  • 使っていない部屋は倉庫(ディスク)に「スワップアウト」される
  • 必要な部屋はいつでも「スワップイン」できる

5. バスと I/O:コンピュータの「血管」

5.1 システムバス

バス(Bus) はコンピュータの各部品を接続するデータ経路です:

Computer Bus SystemAddress bus, data bus, and control bus
CPU
Control unit
ALU
Address bus32 bits
Data bus64 bits
Control busControl signal
Main memory
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
Operation flow
Bus concepts
Address bus
CPU sends memory addresses over a one-way path.
Data bus
Transfers actual data in both directions.
Control bus
Transfers read/write and other control signals.
バスの種類機能方向典型的な幅
アドレスバスメモリアドレスを転送単方向(CPU→メモリ)32 ビット/64 ビット
データバスデータを転送双方向32 ビット/64 ビット
制御バス制御信号を転送双方向複数の信号線

5.2 バスアービトレーション

複数のデバイスが同時にバスの使用を要求する場合、誰が先に使うかを決めるアービトレーション機構が必要です:

アービトレーション方式説明
集中アービトレーション中央アービタが統一的に決定
分散アービトレーション各デバイスが自律的に調整

5.3 I/O デバイスアクセス方式

方式原理利点欠点
プログラムクエリCPU が I/O 状態をポーリングチェックシンプルCPU 利用率が低い
割り込み方式I/O 完了後にデバイスが自発的に CPU に通知CPU が並行作業可能割り込み処理にオーバーヘッドあり
DMAI/O デバイスがメモリに直接アクセスCPU が完全に関与しないDMA コントローラが必要
I/O Method ComparisonProgrammed I/O · Interrupt-driven I/O · DMA
Programmed I/OProgrammed I/O
Workflow
1CPU polls the I/O device status
2Device busy? Keep waiting
3Device ready, send read/write command
4CPU reads or writes data byte by byte
5Check whether transfer is complete
6If incomplete, keep polling
CPU involvementHigh
SpeedSlow
ComplexityLow
Three I/O methods compared
FeatureProgrammed I/OInterrupt-driven I/ODMA
CPU involvementInvolved throughoutOnly handles interruptsAlmost uninvolved
Data transferCPU moves each byteCPU moves each wordDevice transfers directly to memory
ProsSimple and flexible controlHigh CPU efficiencyCPU is fully freed
ConsLow CPU utilizationInterrupt overheadComplex hardware
Best forSimple or low-speed devicesLow/medium-speed devicesHigh-speed bulk transfer

5.4 DMA の原理

DMA (Direct Memory Access、直接メモリアクセス) は、I/O デバイスがメモリと直接データを交換することを可能にします:

How Networks ConnectThe complete path from sending to receiving
💻
Sender
192.168.1.100
📧
Mail app
📧
Application layer
Mail software creates the message content
🔐
Transport layer
TCP adds port numbers and sequence numbers
🌐
Network layer
IP adds source and destination addresses
🔌
Data link layer
Ethernet adds MAC addresses
Physical layer
Convert to electrical signals and send
🖥️
Receiver
192.168.1.200
📧
Mail app
Data encapsulation process
7Application layer
Message content: "Hello!"
6Presentation layer
Encoding: UTF-8
5Session layer
Session ID: sess_123
4Transport layer
TCP header: port 25
3Network layer
IP header: 192.168.1.100 → 192.168.1.200
2Data link layer
Ethernet frame: MAC address
1Physical layer
Bitstream: 01010101...
Network protocol stack (OSI model)
Sender
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
Receiver
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
  • DMA なし:CPU がデータ転送に全行程関与し、CPU は他の作業ができない
  • DMA あり:CPU が DMA コントローラに「どこからどこへ、どれだけ転送するか」を伝え、その後他のタスクを実行し、DMA 完了後に CPU に通知する

DMA の比喩

これはデリバリー注文のようなものです:

  • DMA なし:自分でスーパーに買い物に行き、帰宅し、洗って、調理する(全過程に関与)
  • DMA あり:電話で注文し、配達員が直接キッチンに届けてくれる(他の人がやってくれて、あなたは最後に「受け取る」だけ)

5.5 割り込み機構

割り込みはコンピュータシステムにおいて非常に重要な機構です:

  1. I/O デバイスが操作完了後、CPU に割り込み要求を送信する
  2. CPU は現在の命令を実行中で、現在の命令完了後に割り込みに応答する
  3. CPU は現在の状態を保存し、割り込みハンドラにジャンプする
  4. 処理完了後、状態を復元して実行を継続する

6. CPU パフォーマンス最適化:パイプライン技術

6.1 命令パイプライン

命令パイプラインは CPU 効率を最大化する並列技術です:

CPU Instruction PipelineFive stages: Fetch → Decode → Execute → Memory → Write Back
Fetch(IF)
Decode(ID)
Execute(EX)
Memory(MEM)
Write Back(WB)
ADD R1,R2,R3
SUB R4,R1,R5
LOAD R6,[R4]
STORE R6,[R7]
AND R8,R1,R6
Total cycles0
Completed instructions0
CPI0
Pipeline principle

Sequential execution: each instruction finishes before the next starts, so N instructions require N × 5 cycles.

Pipeline execution: multiple instructions occupy different stages at once; ideally CPI ≈ 1.

パイプラインの動作原理

順次実行(5 命令、15 サイクル):
命令1: IF→ID→EX→MEM→WB
命令2:            IF→ID→EX→MEM→WB
命令3:                         IF→ID→EX→MEM→WB
...

パイプライン実行(5 命令、9 サイクル):
命令1: IF→ID→EX→MEM→WB
命令2:    IF→ID→EX→MEM→WB
命令3:       IF→ID→EX→MEM→WB
...

理想的な場合、N 個の命令の CPI(サイクル毎命令数)≈ 1

6.2 パイプラインハザード

パイプラインはパフォーマンスを向上させますが、ハザード(Hazard) 問題も引き起こします:

種類原因解決策
構造ハザードハードウェアリソースの競合ハードウェア追加/実行タイミングずらし
データハザード後続の命令が前の命令の結果を必要とするデータフォワーディング/バブル/スケジューリング
制御ハザードジャンプ命令が実行フローを変更する遅延スロット/分岐予測

7. まとめ:コンピュータはどのように「動き出す」のか?

専門用語で全体の流れをつなげてみましょう:

プログラム起動後、オペレーティングシステムが実行可能ファイルをディスクからメモリにロードします。CPU のフェッチユニット(IF)がアドレスバスを通じてメモリから命令を命令レジスタ(IR)に読み出します。コントローラが命令をデコード(ID)し、操作タイプを識別して対応する制御信号を生成します。演算ユニット(EX)が算術論理演算を実行し、メモリアクセスが必要な場合はデータバスを通じてメモリにアクセスし(MEM)、最後に結果をレジスタまたはメモリにライトバック(WB)します。全過程はクロックによって駆動され、コントローラが発行するマイクロ操作シーケンスが各部品の秩序ある動作を調整します。


参考資料

テーマ推奨する深層学習コンテンツ
コンピュータアーキテクチャ『コンピュータの構成と設計:ハードウェア/ソフトウェアインタフェース』- Patterson & Hennessy
CPU マイクロアーキテクチャ『コンピュータシステムを深く理解する』- Bryant & O'Hallaron
命令セットアーキテクチャARMv8 アーキテクチャマニュアル、Intel x64 マニュアル
キャッシュ原理キャッシュコヒーレンシプロトコル(MESI)、キャッシュ書き込みポリシー
オペレーティングシステム後続章『オペレーティングシステム』

次のステップ

これでコンピュータ構成原理の専門知識を習得しました。次に学習を続けられます: