第4回: スレッド

はじめに

第4回では、Windows NT 3.1 の 実行モデルの中核であるスレッド を解説します。NT は初期設計段階からスレッド中心の OS として作られており、この思想は現在の Windows にも直結しています。


1. スレッド中心設計という思想

Windows NT において、CPU によって実際にスケジューリングされるのは プロセスではなくスレッド です。

  • プロセス:リソース管理単位
  • スレッド:実行単位

この明確な分離により、

  • 高い並行性
  • GUI 応答性の向上
  • マルチプロセッサ対応

が可能になりました。


2. スレッドオブジェクト(ETHREAD / KTHREAD)

NT 内部では、スレッドもプロセス同様に カーネルオブジェクト として管理されます。

  • オブジェクト型:Thread
  • Executive 構造体:ETHREAD
  • Kernel 構造体:KTHREAD

2.1 KTHREAD の役割

KTHREAD はスケジューラが直接扱う構造体で、以下の情報を保持します。

  • 実行状態(Ready / Running / Waiting)
  • 優先度
  • CPU コンテキスト
  • 待機オブジェクト情報

2.2 ETHREAD の役割

ETHREAD は Executive 側の管理情報を保持し、

  • 所属プロセス(EPROCESS)
  • ユーザーモードスタック
  • セキュリティコンテキスト

などを管理します。


3. スケジューリング機構

3.1 優先度ベース・プリエンプティブスケジューリング

Windows NT 3.1 では、

  • 優先度レベル:0〜31
  • 数値が大きいほど高優先度

というモデルが採用されています。

3.2 動的優先度

  • I/O 完了時の優先度ブースト
  • ユーザー操作に対する応答性向上

これにより、バックグラウンド処理よりも対話型処理が優先されます。


4. コンテキストスイッチ

スレッド切り替え時には、

  • レジスタ状態の保存
  • スタック切り替え
  • ページテーブル参照の更新

が行われます。

この処理は HAL と密接に連携し、CPU アーキテクチャ差異を吸収します。


5. 待機と同期

5.1 待機状態

スレッドは以下の理由で待機状態に入ります。

  • I/O 完了待ち
  • 同期オブジェクト待ち
  • 明示的なスリープ

5.2 同期プリミティブ

  • ミューテックス
  • セマフォ
  • イベント
  • スピンロック(カーネル内部)

これらもすべてオブジェクトとして管理されます。


6. 第4回のまとめ

Windows NT 3.1 のスレッド設計は、

  • 実行単位の明確化
  • 優先度制御による応答性重視
  • マルチプロセッサを前提とした設計

という点で、当時としては非常に先進的でした。

次回は、スレッドが利用する基盤である 「メモリ管理」 を詳しく解説します。

コメント

タイトルとURLをコピーしました