はじめに
第5回では、Windows NT 3.1 の メモリ管理機構 を解説します。NT の仮想メモリ設計は、安定性・性能・拡張性のバランスを強く意識したものであり、現代 Windows の基礎となっています。
1. 仮想メモリという前提
Windows NT は、すべてのプロセスが 仮想アドレス空間 上で動作することを前提に設計されています。
- プロセスごとに独立したアドレス空間
- 物理メモリの存在をアプリケーションから隠蔽
これにより、
- メモリ破壊による OS 全体のクラッシュ防止
- マルチタスク環境での安全な並行実行
が実現されました。
2. 仮想アドレス空間の構成
2.1 4GB 仮想アドレス空間
32bit NT では、1 プロセスあたり 4GB の仮想アドレス空間 が割り当てられます。
- 下位 2GB:ユーザーモード
- 上位 2GB:カーネルモード
この分割により、
- カーネルの常駐
- ユーザープロセスからの保護
が可能になります。
2.2 カーネル空間の共有
カーネル空間は、すべてのプロセス間で共通です。
- コンテキストスイッチ時もマッピング維持
- 高速なカーネル呼び出しを実現
3. ページングとワーキングセット
3.1 ページ単位管理
- ページサイズ:4KB
- 仮想ページと物理ページの対応管理
3.2 ワーキングセット
ワーキングセットとは、
プロセスが現在物理メモリ上に保持しているページ集合
を指します。
- 最小・最大ワーキングセットサイズ
- メモリ圧迫時のページトリミング
4. ページフォールト処理
4.1 ソフトフォールト
- ページは既に物理メモリ上に存在
- ページテーブル更新のみで解決
4.2 ハードフォールト
- ディスク(ページファイル)からの読み込みが必要
- 性能に大きく影響
NT はフォールト種別を厳密に管理し、無駄な I/O を最小化します。
5. セクションオブジェクト
5.1 メモリマップトファイル
NT では、ファイルは セクションオブジェクト を通じてメモリにマップされます。
- 実行ファイル(EXE / DLL)のロード
- 複数プロセス間でのコード共有
5.2 Copy-on-Write
- 書き込み時のみページを複製
- メモリ使用量を最小化
6. 第5回のまとめ
Windows NT 3.1 のメモリ管理は、
- 仮想メモリ前提の堅牢設計
- ワーキングセットによる動的制御
- セクションオブジェクトによる効率的共有
という特徴を持っています。
次回は、これらのメモリ機構と密接に関わる 「I/O システム」 を解説します。

コメント