抽象化の階段
この講義でこれまで見てきたものは、実は1本の階段の別々の段であった。 下から順に積み上がっていて、それぞれの層は、すぐ下の層のことだけ知っていればいい——それが抽象化である。 各層をクリックすると詳細が開く。
ハードウェアの詳細を知らなくても開発できるのは、下の層がすべて隠してくれているからである。
例:
print("Hello") の1行で、ディスプレイに文字が出る。
printf()・malloc() など。内部ではシステムコールを呼び出して、OS に仕事を頼んでいる(03 節で見る)。
アプリは直接ハードウェアを操作できず、必ず OS を通してリソースを要求する。
第4章「オペレーティングシステム」で詳しく学ぶ。
ADD / MOV / JMP といったアセンブリ命令がこの層に対応する。ISA が同じなら、内部設計の違う CPU でも同じプログラムが動く——これが互換性の源泉である。 この階段でここだけ特別なのは、上が全部ソフト、下が全部ハードだからである。
同じ ISA でも各社の内部設計は違う(Intel Core i9 と Apple M4 はどちらも同じアプリが動く)。
第2章の Verilog と、03.1 アーキテクチャ入門で扱ったのがここ。
1億個以上のゲートが、1つの CPU チップに収まっている。
最新の CPU には 約1,840億個のトランジスタが入っている(Apple M3 Ultra の場合)。
第0章で見たスイッチの歴史が、この層の起源である。
ソースコードが機械語になるまで
L7 で書いたコードは、そのままでは L4(ISA)に届かない。4つの道具が順にバトンを渡していく。 色のついた3つが、実際に変換の仕事をする道具である。
- 字句解析 — コードをトークンに分割
- 構文解析 — 構文木(AST)を構築
- 意味解析 — 型チェック・スコープ確認
- 中間表現 — 最適化しやすい IR に変換
- コード生成 — CPU の命令セットに変換
複数の .o ファイルと標準ライブラリを1つの実行ファイルに結合する。
例:printf() の実体は libc.a の中にある。コンパイル時には「後でつなぐ」という参照だけを残し、
リンカが最後につなぎ合わせる。
実行ファイルをメモリに展開し、CPU が実行できる状態にする。OS の一部として動く。
コード領域・データ領域・スタック・ヒープをメモリ上に配置し、プログラムカウンタを先頭命令に合わせた瞬間、 プログラムが動き始める。
具体例で追ってみましょう。a = 1 + 2 という1行が、どう姿を変えていくか。
// C ソースコード int a = 1 + 2;
; アセンブリ(x86-64) mov eax, 1 add eax, 2 mov [a], eax
// 機械語(16進数) B8 01 00 00 00 83 C0 02 89 45 FC
なお、コンパイラが最適化すると、コンパイル時点で 1+2=3 を計算してしまい、 mov [a], 3 の1命令に置き換わることもある(定数畳み込み)。
システムコール ― アプリと OS の境界線
L7 のアプリは、ハードウェアに直接触れない。触れるのは L5 の OS だけ。 その間に引かれた唯一の通り道がシステムコールである。
普段書いているコードの裏側で、どんなシステムコールが呼ばれているのかを見てみましょう。
| システムコール | 何を OS に頼むか | アプリから見ると |
|---|---|---|
| read() / write() | ファイル・標準入出力の読み書き | print() の裏で動く |
| open() / close() | ファイルのオープン・クローズ | open("file.txt") |
| fork() / exec() | 新しいプロセスの生成・プログラム置き換え | シェルがコマンドを実行するとき |
| mmap() / brk() | メモリの確保・解放 | malloc() の裏で動く |
| socket() / connect() | ネットワーク接続 | HTTP 通信の裏で動く |
| exit() | プログラムの終了を OS に通知 | 終了時に必ず呼ばれる |
まとめ
トランジスタ → 論理回路 → マイクロアーキテクチャ → ISA → OS → ライブラリ → アプリ。各層が下の詳細を隠す。
7層のうち ISA だけが特別。ここより上が全部ソフト、下が全部ハード。互換性はこの契約から生まれる。
コンパイラ → アセンブラ → リンカ → ローダー。この4つを通って、ソースコードが実行される。
アプリと OS の唯一の境界。ユーザー空間とカーネル空間の分離が、セキュリティと安定性を支える。
この章でハードウェア側は一通り登りきった。次は、階段の L5 —— OS の中身に入っていく。