"カーネルは最終的にCで書かれているが、それはCがアセンブリに届く言語だからである。"
UNIXとは、設計思想である。
その中心にあるカーネル(kernel)は、抽象化されたインターフェースでありながら、
極めて具体的なハードウェア制御の責務を負っている。
この章では、UNIXカーネル(特にLinuxやBSD系)におけるアセンブリコードの役割、
その記述の必要性、構造的配置、Cとの境界、そして思想的意義にまで踏み込む。
カーネルの設計とアセンブリの位置
UNIX系カーネルは一般に、以下の層に分かれている:
- アプリケーション層(ユーザー空間)
- システムコール層(C言語)
- カーネル本体(C言語 + 部分的アセンブリ)
- アーキテクチャ依存部(アセンブリ多め)
- ブートストラップ・初期化処理(ほぼアセンブリ)
このうち、アセンブリが排他的に支配している領域が存在する。
ブートストラップ:最初の1命令はCでは書けない
CはOSが存在する世界で成立する言語であり、
OSを構築する文脈には適さない。
従って、最初の命令は常にアセンブリで書かれる。
Linux x86の例:arch/x86/boot/header.S
.code16
_start:
cli
xor ax, ax
mov ds, ax
...
jmp main
この段階では:
- セグメント設定
- 割り込み禁止
- スタック構築
- ブートローダとの連携
といったハードウェア初期化の厳密な操作が求められる。
割り込みとアセンブリ:制御の境界点
UNIX系OSは、ハードウェア割り込み・例外・システムコールを全て
「アセンブリで定義された入口」から処理を開始する。
例:x86上のシステムコールハンドラ
.global syscall_entry
syscall_entry:
push %rax
push %rcx
push %r11
...
call common_syscall_handler
この構造により:
- 割り込みコンテキストの保存
- ユーザ空間との切り替え
- カーネル空間への制御転送
が正確に・高速に・安全に処理される。
カーネルコンテキストスイッチとアセンブリ
プロセスの切り替えは、単に関数を変えるだけではない。
- レジスタ状態
- スタックポインタ
- ページディレクトリ(MMU)
- タイマ割り込みリセット
など、完全な状態遷移が発生する。
例:Linux __switch_to()
の一部(x86_64)
mov %rsp, TASK_THREAD_STACK(%rdi) ; 現在のスタック退避
mov TASK_THREAD_STACK(%rsi), %rsp ; 次のタスクのスタック復元
jmp __switch_to_asm
この部分は最も低レベルなプロセス間制御であり、Cでは表現が不可能に近い。
アセンブリは“構造の継ぎ目”に現れる
UNIXカーネルにおけるアセンブリの出現箇所には法則がある:
構造 | なぜアセンブリか |
---|---|
ブート | Cが動作不能な段階であり、CPUの物理制御が必要 |
割り込み処理入口 | 自動で呼び出されるハード制御、状態保存が重要 |
システムコール入口 | ユーザー空間からの境界遷移を最短距離で捌く |
コンテキスト切替 | クロス関数・クロススレッド間の論理断裂点 |
特権レベル切替 | カーネルモード ↔ ユーザーモードの物理遷移 |
→ アセンブリは「表現の限界」ではなく、
**「構造の境界を扱うための必然」**として存在する。
アセンブリにおける“無”の責任
Cで書かれたコードは、コンパイラが最終的に変換してくれる。
しかしアセンブリでは:
- 命令列の整合性
- レジスタの使用規約(ABI)
- 割込みフレームの一貫性
- MMU/CR3などCPU内部構造への直接操作
すべてが人間の責任で構成される。
これはつまり、**アセンブリとはOS設計における“信仰告白”**でもある。
UNIXの“設計美”を支えるもの
UNIXは「小さく、美しく、完結した構造」を標榜してきた。
しかしその基盤には:
- アセンブリによって表現された“最小構造の初期化”があり、
- Cによって書かれた“中庸で保守可能なロジック”があり、
- ユーザ空間への明示的な“跳躍構造”がある。
このトライアングルの均衡が、UNIXの動的かつ透明な設計美を支えている。
結語:アセンブリはUNIXの沈黙の設計言語である
カーネルの多くはCで書かれている。
だが、カーネルが起動し、割り込みを処理し、プロセスを切り替えるその瞬間は、常にアセンブリが動いている。
アセンブリはそこに記述としては現れないが、構造の前提として存在する。
"Cが構造を表現するなら、アセンブリは構造を成立させる重力である。UNIXとは、その重力を美しく支配した設計だった。"