本連載では、Microsoft Windows NT 3.1(1993年)を題材に、モダン Windows の原点となった設計思想と内部構造を技術者向けに深掘りします。
第1回: 概念とツール
はじめに
本連載の第1回では、Windows NT 3.1 がどのような問題意識から生まれ、どのような設計思想と開発環境のもとで構築されたのかを整理します。ここを理解することが、以降のアーキテクチャ・内部実装を読み解く土台になります。
1. Windows NT 3.1 誕生の背景
1990年代初頭、Microsoft は以下の課題に直面していました。
- MS-DOS / Windows 3.1 は 16bit・協調型マルチタスクという限界を抱えていた
- UNIX ワークステーションが企業・研究用途で存在感を増していた
- 将来のマルチプロセッサ、ネットワーク、セキュリティ需要に対応できる基盤が必要だった
この状況を受けて設計されたのが Windows NT(New Technology) です。NT 3.1 は「Windows の次期版」ではなく、まったく新しい OS カーネルとして構想されました。
2. Windows NT の設計目標
Windows NT 3.1 には、当時としては野心的な目標が掲げられていました。
2.1 移植性(Portability)
- CPU 非依存を前提とした設計
- HAL(Hardware Abstraction Layer)によるハードウェア差異の吸収
- 実際に x86 / MIPS / Alpha への移植が行われた
2.2 堅牢性(Reliability)
- ユーザーモードとカーネルモードの厳密な分離
- 不正メモリアクセスによる OS 全体の破壊を防止
2.3 セキュリティ(Security)
- 企業利用を前提としたアクセス制御モデル
- すべてのリソースを「オブジェクト」として管理
2.4 スケーラビリティ(Scalability)
- プリエンプティブ・マルチタスク
- SMP(対称型マルチプロセッサ)対応
3. Windows NT 3.1 の開発ツール
3.1 Checked Build と Free Build
NT カーネルは 2 種類のビルドで運用されていました。
- Checked Build
- デバッグコード・検証コードを多数含む
- 内部構造解析やドライバ開発で使用
- Free Build
- 製品版に相当
- デバッグコードなしで高速
3.2 カーネルデバッガ(KD)
- シリアル接続によるリモートデバッグ
- ブレークポイント設定、構造体ダンプが可能
- 現代の WinDbg の原型
3.3 初期パフォーマンスモニタ
- スレッド数、ページフォールト数などを観測
- OS 内部挙動を「数値」で理解する文化を確立
4. 既存 Windows / DOS との決定的な違い
| 項目 | Windows 3.1 | Windows NT 3.1 |
|---|---|---|
| 実行モード | 16bit / リアル+保護 | 32bit プロテクト |
| マルチタスク | 協調型 | プリエンプティブ |
| メモリ保護 | なし | あり |
| セキュリティ | ほぼなし | 本格実装 |
NT は「DOS の延長」ではなく、UNIX クラス OS と競合する設計を明確に意識していました。
5. 第1回のまとめ
Windows NT 3.1 は、
- 将来を見据えた長期的アーキテクチャ
- ハードウェアからの独立性
- 企業利用に耐える堅牢性とセキュリティ
を同時に実現しようとした、当時としては画期的な OS でした。
次回は、この設計思想がどのように具体化されたのかを 「システムアーキテクチャ」 の観点から掘り下げます。
第2章: システム アーキテクチャ
2.1 ハイブリッドカーネル構造
NT は「マイクロカーネル的思想」を取り入れたハイブリッドカーネルを採用しています。
2.2 カーネルモード構成要素
- Kernel
- Executive
- Device Drivers
- HAL
2.3 ユーザーモード サブシステム
- Win32 サブシステム(CSRSS)
- POSIX サブシステム(初期実装)
第3章: プロセスとジョブ
3.1 プロセスオブジェクト
プロセスは仮想アドレス空間、ハンドルテーブル、セキュリティトークンを保持します。
3.2 親子関係のないプロセスモデル
UNIX とは異なり、NT プロセスには明確な親子関係がありません。
3.3 ジョブオブジェクト(後続バージョンへの布石)
NT 3.1 では限定的ながら、リソース管理の概念が既に存在していました。
第4章: スレッド
4.1 スレッド中心のスケジューリング
NT のスケジューラはプロセスではなくスレッドを基本単位とします。
4.2 優先度クラスと動的優先度
- 0〜31 の優先度レベル
- I/O 完了時の優先度ブースト
4.3 コンテキストスイッチ
レジスタ保存、KTHREAD 構造体、待機状態管理
第5章: メモリ管理
5.1 仮想メモリシステム
- 4GB 仮想アドレス空間(2GB/2GB 分割)
- ページングとワーキングセット
5.2 メモリオブジェクト
- セクションオブジェクト
- メモリマップトファイル
5.3 ページフォールト処理
ソフトフォールトとハードフォールトの違い
第6章: I/O システム
6.1 統一 I/O モデル
すべての I/O は IRP(I/O Request Packet) を通じて処理されます。
6.2 デバイスドライバ階層
- ファイルシステムドライバ
- ボリュームドライバ
- バスドライバ
6.3 非同期 I/O
オーバーラップ I/O とイベントオブジェクト
第7章: セキュリティ
7.1 セキュリティモデルの基本
- オブジェクトベースセキュリティ
- すべてのカーネルオブジェクトにセキュリティ記述子
7.2 アクセストークン
ユーザー SID、グループ SID、特権(Privileges)
7.3 監査とログ
成功・失敗イベントの監査設計
まとめ
Windows NT 3.1 は、現在の Windows 11 に至るまで続くアーキテクチャの基礎を確立しました。本連載を通じて、その思想と実装の核心を理解することができます。

コメント