トランジスタから CPU へ
前書き
コンピュータはどうやって「考える」のか? CPU がコンピュータの「脳」であることは知っているかもしれません。しかし、この脳は一体どのように動作するのでしょうか?どのようにして金属とプラスチックの塊から、プログラムを実行しデータを処理する知的なデバイスになるのでしょうか?本章では、最も基本的なトランジスタから始めて、CPU の構造原理を段階的に理解していきます。
この記事で学べること
この章を読み終えると、次のような知識が身につきます:
- 用語の理解力:「CPU クロック周波数」「マルチコア」「命令セット」といった言葉を聞いても混乱せず、背後にある物理的原理を理解できる
- コード実行の視点:一行のコードが、フェッチ、デコード、実行、ライトバックを経て、最終的に画面上のピクセルになるまでの過程を理解できる
- 抽象レイヤー思考:各レイヤーがどのように上位レイヤーにサービスを提供し、下位レイヤーの複雑さを隠蔽するかを理解できる
- 後続学習の基礎:コンピュータアーキテクチャ、組み込み開発、パフォーマンス最適化の基礎を築く
| 章 | 内容 | コアコンセプト |
|---|---|---|
| 第 1 章 | トランジスタ | デジタル世界のスイッチ |
| 第 2 章 | 論理ゲート | ブール演算の物理的実装 |
| 第 3 章 | 機能ユニット | 加算器、レジスタ、マルチプレクサ |
| 第 4 章 | CPU コア | フェッチ、デコード、実行、ライトバック |
0. 全景図:砂から知能へ
コンピュータの低レイヤーを探求する際、最も根本的な問いにしばしば直面します:現代のコンピュータの「思考」能力は、一体どこから来るのか?
コンピュータの光沢のある外殻を剥がしてみても、そこにあるのは通常、金属、プラスチック、シリコンチップの塊にすぎません。それら自体に生命はなく、数学を理解するわけでも、知能が何かを知っているわけでもありません。しかし電流がそれらを通り抜けると、すべてが動き始めます。突き詰めれば、すべては極めてシンプルな物理的抽象に由来します:スイッチです。
目の前に電球を制御するスイッチがあると想像してください。押すと点灯し、「1」と表します。切ると消灯し、「0」と表します。もし数十億個ものスイッチを持ち、一つのスイッチの出力が別のスイッチを制御するようにして、極めて複雑な論理ネットワークを組み上げることができたら、何が起きるでしょうか?
その答えは、任意の論理を実行できる汎用計算プラットフォームです。コンピュータシステムを理解する鍵は「抽象化(Abstraction)」にあります。積み木のように、階層的なカプセル化によって低レイヤーの複雑さを制御します。以下が、砂から知能に至る四つのコアレイヤーです:
レイヤー分解:砂から知能へ
第 1 層:トランジスタ(数千億レベル) これは最も低レイヤーの「スイッチ」です。現代の CPU 内部では主に MOSFET(金属酸化膜半導体電界効果トランジスタ)が使われています。ゲートに電圧を印加すると、ソースとドレインの間が導通します。これが「電気で電気を制御する」物理的な出発点です。解決する核心的問題は:電気信号で別の電気信号をどう制御するか?
第 2 層:論理ゲート(数百億レベル) 特定のトランジスタを直列や並列に接続すると、驚くべき変換が起こります——回路が数学になるのです。例えば AND ゲートは、両方の入力が 1 のときだけ出力が 1 になります。これはブール代数を物理回路上に写像したもので、解決する核心的問題は:物理的な導通・遮断を、0 と 1 に基づく論理演算にどう変換するか?
第 3 層:機能ユニット(数百レベル) 基本的な論理ゲートを組み立てることで、特定の用途を持つ計算モジュールを作れます。加算器は算術演算を処理し、マルチプレクサはデータの流れを制御し、レジスタは回路に記憶能力を与えます。解決する核心的問題は:加算計算の実行と状態の記憶ができる機械をどう構築するか?
第 4 層:CPU コア(1〜128 コア) これはマイクロアーキテクチャ全体の指令センターです。あなたが一行のコードを書くとき、CPU 内部の各部品は毎秒数十億回の頻度で連携し、フェッチ、デコード、実行、ライトバックの全プロセスを実行しています。解決する核心的問題は:各モジュールをいかに協調させ、指定されたプログラムシーケンスを自動実行させるか?
1. トランジスタ:デジタル世界のスイッチ
ミクロの世界から始めましょう。以下のコンポーネントはトランジスタの基本原理を示しています。操作して、電流がどのように流れるかを観察してみてください:
Source
Drain
1.1 トランジスタとは?
概念の導入
工学において、トランジスタ(Transistor) は人類の歴史を変えた半導体デバイスです。デジタル回路の文脈では、単純に理想的な「スイッチ」として抽象化できます。
なぜトランジスタが必要なのでしょうか?生活の中の蛇口を考えてみてください。手でバルブをひねると、水が勢いよく流れ出します。トランジスタは、実はナノスケールの蛇口です:
- ソース(Source) と ドレイン(Drain) は、水道管の両端のようなものです。
- ゲート(Gate) は、水流を制御するバルブです。
重要な違いは:手でスイッチをひねるのではなく、電圧信号で制御する点です。あるスイッチが別のスイッチの生成する電気信号によって制御できるようになったとき、私たちは「手動介入」から「自動演算」への大きな溝を飛び越えたのです。
1.2 トランジスタは 0 と 1 をどう表現するのか?
「コンピュータは 0 と 1 しかわからない」と言いますが、物理世界ではそれは一体どのような姿をしているのでしょうか?チップの中に微小な 0 と 1 が本当に流れているのでしょうか?
もちろん違います。これはすべて人為的な抽象的な取り決めによるものです。連続的なアナログ信号への執着を捨て、二つの極端な閾値を設定します:
- 高電圧(例えば 3.3V や 1.0V) を強制的に論理の 1(True)と定義します。
- 低電圧(0V 近く) を強制的に論理の 0(False)と定義します。
これがいわゆるデジタル抽象化の能力です:ノイズに満ちたアナログ世界を、きれいに分離された 0 と 1 に切り分けるのです。ゲートに高電圧を入力するとトランジスタは導通し、スイッチが入った状態になります。低電圧を入力するとスイッチは切れます。
1.3 トランジスタ数の進化
一つのトランジスタは導通・遮断を制御するだけでは、極めて微々たるものです。しかし、数十億ものそうしたスイッチを組み合わせたらどうなるでしょうか?ムーアの法則を反映した以下の表を見て、現代のチップの進化を理解しましょう。
| 時代の節目 | プロセッサチップ | トランジスタ数 | プロセスノード | 時代的意義 |
|---|---|---|---|---|
| 1971 | Intel 4004 | 2,300 | 10μm | マイクロプロセッサの黎明期 |
| 1993 | Intel Pentium | 310万 | 800nm | パーソナルコンピュータの全面普及 |
| 2006 | Intel Core 2 Duo | 2.91億 | 65nm | マルチコアアーキテクチャが主流に |
| 2020 | Apple M1 | 160億 | 5nm | モバイルアーキテクチャからの逆輸入革命 |
| 2023 | Apple M3 Max | 920億 | 3nm | 原子に迫る物理学の限界 |
深掘り考察:「3nm」とは何か? ニュースで 5nm、3nm といった言葉を耳にするとき、それがどれほど微小かを想像してみてください。シリコン原子の直径は約 0.2 ナノメートルです。つまり 3nm プロセスでは、トランジスタの最も重要な構造はわずか数十個の原子幅しかありません!これは量子力学の法則が効力を発揮するスケールのギリギリの端で、人類最大の計算能力の要塞を築いていることを意味します。
2. 論理ゲート:スイッチで演算する
2.1 トランジスタから論理ゲートへ
前述の通り、単一のトランジスタは電流の単純な制御にすぎません。しかし複数のトランジスタを特定の構造で配置すると、物理学が数学論理に変わります。この新しい次元では、煩雑な電圧や電流について語る必要はなくなり、純粋な論理の「真」(1)と「偽」(0)だけを直接扱います。
以下の論理ゲートのデモを通じて、スイッチの組み合わせの効果を直感的に感じてください:
A ∧ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
A ∨ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
¬A| A | Output |
|---|---|
| 0 | 1 |
| 1 | 0 |
A ⊕ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
2.2 基本論理ゲートの紹介
コンピュータアーキテクチャには、いくつかの最も基本的な論理ゲートがあります。すべてのスーパーコンピュータは、これらの積み木で構築されています:
AND ゲート:
- ルール:すべての入力が 1 のときのみ、出力が 1 になります。
- 直感的理解:二つのトランジスタを直列に接続します。電流を通すには、両方のゲートを同時に開かなければなりません。銀行の金庫を開けるのに、支店長と管理者が同時に各自の鍵を差し込むようなものです。
OR ゲート:
- ルール:いずれかの入力が 1 であれば、出力が 1 になります。
- 直感的理解:二つのトランジスタを並列に接続します。複数の並行する通路のうち、一本でも通れば、電流は対岸に流れます。
NOT ゲート(インバータ):
- ルール:入力が 1 なら必ず 0 を出力し、入力が 0 なら必ず 1 を出力します。
- 直感的理解:状態を反転させるためのゲートで、回路設計において信号整形の重要な防御線としてもよく使われます。
XOR ゲート(排他的論理和):
- ルール:二つの入力が異なるときのみ、出力がちょうど 1 になります。
- 直感的理解:「差異を検出する」精密機械と理解できます。これは回路内で二進加算を実行する際の切り札です。
2.3 論理ゲートで加算を実現する
先ほど紹介した論理ゲートが単純な条件判断しかできないとしたら、コンピュータは一体どうやって数学演算を行っているのでしょうか?
Because 7 + 5 = 12, the result is larger than the largest single digit (9). We split 12 into "one full 10" and "the remaining 2":
- 2 The remaining 2 stays in the current column. This is the sum bit.
- The full 10 carries a 1 into the tens column. This is the carry.
0 + 0 = 0. Write 0 in this column, with no carry.
したがって、一つの XOR ゲート(その桁の計算を担当)と一つの AND ゲート(桁上がりの計算を担当)を組み合わせるだけで、一桁の加算ができる回路が得られます。これが最も基本的な半加算器(Half Adder)です。
Look closely at the table and two patterns appear:
- The sum column is 1 only when A and B are different. This is XOR.
- The carry column is 1 only when A and B are both 1. This is AND.
0
0
しかし半加算器には致命的な欠陥があります:物理構造上、入力ポートが二つ(A と B)しかないことです。
十進数の筆算(例えば 19 + 22)を想像してください:
- 一の位の計算:
9 + 2 = 11。二つの数字を足すだけで、1と書いて1を繰り上げます。これはちょうど二入力なので、半加算器で完璧に処理できます。 - 十の位の計算:
1 + 2を計算するだけでなく、さらにさっき一の位から伝わってきた「桁上がりの 1」を加える必要があります(つまり1 + 2 + 1 = 4)。これは複数桁の加算では、最下位桁を除き、他の桁は実際には三つの数字の加算を行っていることを意味します!
半加算器には「下位桁から伝わる桁上がり(Carry-in)」を受け入れる三つ目の入力ポートがないため、最も右の桁以外では全く使えません。この問題を解決するには、三つの信号を受け取れる全加算器(Full Adder)が必要です:
複数の全加算器をカスケード接続することで、複数桁の加算が完了します:
コア解析:加算器の分解
現実世界のより複雑な数字を処理するために、加算器は積み木のように組み立てられます:
- 半加算器(Half Adder):二つの一桁の数の加算を処理できます(前述の XOR と AND ゲートの組み合わせ)。その桁の値と桁上がりを計算しますが、下位桁からの桁上がりを受け取ることはできません。
- 全加算器(Full Adder):複数桁の計算では、中間の桁は A と B を足すだけでなく、下位桁からの桁上がり(Carry In)も処理する必要があります。下位桁の桁上がりも論理に組み込んだものが全加算器です。
- リプルキャリー加算器(Ripple Carry Adder):32 ビットや 64 ビットの数字を処理するには、数十個の全加算器を直列に接続するだけです。桁上がり信号は波のように下位桁から上位桁へと層を成して伝播し、任意の大きさの加算を完了します。
論理ゲートから複数桁の加算までの全過程を一度に見たいですか?この総合デモを試してください:
3. 機能ユニット:論理ゲートの組み合わせ
さて、論理ゲートという積み木を手にした今、より高い抽象レイヤーへと飛躍できます。単に加算を計算するだけでは不十分です。論理ゲートをグループ化してパッケージ化し、特定の機能を持つモジュールに組み立てます。これらのモジュールを総称して機能ユニット(Functional Units)と呼びます。
3.1 よく使われる機能モジュールの分類
CPU を設計する際、時の試練を経た古典的な既製モジュールがいくつかあります:
| モジュール名 | 担う核心的使命 | 内部の論理構造の本質 | 実生活での絶妙なメタファー |
|---|---|---|---|
| 加算器(Adder) | さまざまな種類の算術演算エンジン | 膨大な全加算器の高度なビット単位カスケード | 疲れを知らないソロバン |
| マルチプレクサ(MUX) | データの流れの方向を制御し、多選択一路線を実現 | AND ゲートをスイッチとして、OR ゲートで集約する巧妙な融合 | 線路上の精密な分岐器 |
| デコーダ(Decoder) | 外部から入ってくるバイナリの命令を解読し翻訳 | 入力状態に基づいて特定の出力を正確に点灯させるゲートアレイ | 暗号電文を解読する翻訳官 |
| フリップフロップ(Flip-Flop) | 電気信号が瞬時に消え去る制限を突破し、履歴を記録 | 極めて微妙な交差フィードバックループが双安定モードを構成 | 状態を保持するシーソー |
これらの機能ユニットがどのように動作するかを直感的に感じるために、以下のコンポーネントを操作して、マルチプレクサとデコーダの内部論理をそれぞれ観察できます:
The select signal is 0, so the output equals data 0 (D0): 0
以下のコンポーネント実験を通じて、最も魅力的な部分——記憶がどのようにして無から生まれるのか——を自らの目で覗いてみてください:
| Feature | Register | Memory (RAM) |
|---|---|---|
| Location | Inside the CPU | Outside the CPU |
| Access speed | Fastest (< 1ns) | Slower (50-100ns) |
| Capacity | Tiny (bytes) | Large (GB) |
| Role | Hold instructions, operands, and results | Store programs and data |
3.2 レジスタ:データの記憶ユニット
計算に加えて、コンピュータは長期または一時的にデータを記憶する能力も必要です。演算過程で一秒前の記憶を失ってしまえば、いかなる複雑な計算も遂行できません。コンピュータは過去の状態を保持する何らかの手段を持たねばならず、この能力は主にフリップフロップ(Flip-Flop)と呼ばれる回路構造に依存しています。
深掘り理解:記憶の本質は循環である
ほとんどの論理回路の信号の流れは前方へ向かっています(フィードフォワードループ)。一方、持続的な「記憶」を生み出すために、初期の先駆者たちは絶妙な設計を思いつきました:出力の電波を入力端に再びフィードバックすることです。
それは二つの安定した静止点を持つ精巧なシーソー構造のようなものです。外部からの擾乱を受けない限り、その閉ループ設計によって、「左高右低(例えばこれが 0 を記憶している)」あるいはその逆の状態(1 を記憶している)に永続的に固定されます。たとえ一瞬の状態変化であっても、閉ループの相互ロックによって長く「深く閉じ込められる」のです。
32 個あるいは 64 個のこのようなフリップフロップを整然と一列に並べ、同じ強力なクロック周波数信号(Clock)を印加して統一した動作を号令すると、レジスタ(Register)が誕生します。それは CPU システムの中心に位置し、超高速の「作業用草稿紙」として、あなたのすべての即時的なキー変数を黙々と守り続けます。
以下のインタラクティブデモを通じて、閉ループを破壊し回復するプロセスを自ら体験してください:
4. CPU アーキテクチャ:機能ユニットからプロセッサへ
さまざまな演算モジュールと記憶コンポーネントの設計が完了した今、核心的な統合段階に入ります。これらのモジュールをどのように組み合わせて、命令を自動実行できる中央処理装置(CPU)にするのでしょうか?
4.1 CPU のコアコンポーネント
CPU を分業が明確な機械と見なすなら、各ユニットには代替のきかない独自の位置づけがあります:
- 算術論理演算ユニット(ALU):「実作業」を担当する演算ユニットで、加減乗除やさまざまな論理演算を専門に実行します。
- レジスタファイル(Register File):作業台上の一時的な引き出しで、容量は非常に小さいですが極めて高速で、現在計算中の緊急のパラメータを一時保存するために使われます。
- 内部バス(Internal Bus):システム内のベルトコンベアで、各モジュール間でデータや信号を運搬します。
- 制御ユニット(Control Unit):総指揮官です。その使命は、メモリから 0 と 1 で構成された命令を読み取り、何をすべきかを解析し、他のモジュールに具体的な制御信号を伝達して、それぞれの役割を遂行するようスケジューリングすることです。
Control Unit
Register File
Arithmetic Logic Unit (ALU)
Click a module in the CPU diagram to explore its circuit-level implementation.
4.2 CPU はどのように命令を実行するのか?
どれほど複雑な高級プログラミング言語で書かれていても、最終的にはメモリ内の一つ一つの低レベル命令になります。CPU があらゆる命令を実行するプロセスは、本質的に以下の典型的な四つのステップを繰り返しています:
- フェッチ(Fetch):現在のプログラム実行のカーソルアドレスに従い、比較的遅いキャッシュの中へ探りを入れ、次の一組のバイナリ「命令」をコアの中に強引に掴み取ります。
- デコード(Decode):指揮脳は即座に分析します:この命令は具体的にメモリを移動しろと言っているのか、それとも加算器を呼んで演算を組み立てろと言っているのか?直ちに必要な回路を完全に導通させ呼び覚まします。
- 実行(Execute):命令は ALU などの業務工場の現場に配達され、機械は轟音を立て、全力でハードコアな論理反転を行います。
- ライトバック(Write Back):成果が結晶化する瞬間です。得られたばかりの答えを、慎重に特定のレジスタに書き込むか、広大なメモリにフィードバックします。
下の「クロックパルス」をクリックして、この無限ループの中で命令がどのように段階的に分解・実行され、どのハードウェアモジュールが関与するかを観察してください:
効率追求の極致:パイプライン(Pipeline)
もし前の命令がこの四つのステップを経るのを待ってから次の命令を始めなければならないとしたら、効率は明らかに低すぎます。
工場のパイプラインのように、チップエンジニアは命令パイプライン技術を導入しました。これは、一部の回路が命令 A を「実行」しているとき、前段の回路は遊んでいるのではなく、命令 B を「デコード」し、さらには命令 C を事前に「フェッチ」していることを意味します。この並列的な重ね合わせによって、CPU の実行効率は大幅に向上します。
5. まとめ:抽象レイヤーを越えて
ここまでを振り返ると、私たちはコンピュータアーキテクチャの中で最も核心的なレイヤーごとの抽象化を経験しました。これは低レイヤーの物理材料を汎用計算プラットフォームに変える完全な道のりです:
- マクロ物理:砂(二酸化シリコン結晶) → 人類による製錬、切断、猛毒ガスエッチングなどの過酷な加工を経て
- ミクロ物理:膨大なトランジスタスイッチ(微小電流で微小電流を制御) → 工学の達人たちの不眠不休の緻密な配線により、驚くべきデジタル抽象制約を実現
- デジタル代数:AND / OR / NOT 論理ゲート体系 → 誤差を容赦なく排除し、完全な真理値表から基本動作を導出
- マイクロアーキテクチャモジュール:機能ユニットの積み木セット(加算器などのコンポーネント) → システムの生命の鼓動と記憶特性を加え、完全な機能体へと進化
- 複雑なアーキテクチャ:膨大かつ精妙な CPU 連合アレイ → 全世界の開発ギークに向けて、仮想アプリケーション世界への扉を完全に開放
- 無数のアプリケーション王国:アルゴリズム、システムレベルソフトウェア、そして百花繚乱のインターネット宇宙
コンピュータサイエンスで最も魅了される部分は、各カプセル化レイヤーが一つ下のレイヤーの複雑な詳細を完璧に隠蔽していることです。ソフトウェア開発者として、あなたが salary = base + bonus と書くとき、低レイヤーの電子のドリフトや半加算器内の電流の経路をまったく考慮する必要はありません。同様に、チップハードウェア設計者も、このチップが将来どのようなソフトウェアを実行するかを心配する必要はありません。
まさに極端なレイヤー間の疎結合と高度に相互干渉しないブラックボックスカプセル化が、力を合わせて現代テクノロジーの狂騒の時代を育み、敷き詰めてきたのです。
究極の思考
つまるところ、いわゆる計算能力とは、有限の密閉空間内での膨大なスイッチの再構成の変化にすぎません。クロックの刻みに合わせて、この小さなシリコン片上で複雑な演算を完遂しているのです。
「量の変化が最終的に質の飛躍を引き起こす」という言葉は、コンピュータアーキテクチャにおいて絶えず検証されています。キーボードを叩き、画面を見つめるとき、想像してみてください:極めて微小なシリコンの深部では、まさに今この瞬間、千億個の極小トランジスタが、電光石火のうちに全力で精密な協調動作を行っているのです。これこそが、おそらく最も独特なコンピュータサイエンスの美しさなのでしょう。
参考資料
低レイヤー技術に強い好奇心をお持ちなら、以下の方向で探求を続けてみてください:
- 古典的教科書:『コンピュータの構成と設計(ソフトウェアとハードウェアのインタフェース)』は、アーキテクチャを深く学ぶための優れた参考書です。
- デジタル論理シミュレーション:論理シミュレーションソフトウェアや基本部品を使って、簡単な 8 ビット加算器やシミュレータを実際に組み立ててみてください。
- アーキテクチャの最前線:マルチレベルキャッシュが「メモリウォール」問題をいかに緩和するか、命令のアウトオブオーダー実行の原理、そして GPU の特殊な演算メカニズムなどについて学びましょう。
- 低レイヤーとアセンブリ言語:基礎的なアセンブリ言語を学び、高級言語が最終的にどのように機械が実行できる十六進命令に変換されるかを理解してみてください。