Dave Plummer氏が語る、初代タスクマネージャーの驚くべき軽量設計。80KBに収めた技術的工夫とは

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

WindowsのZIP対応など数々の機能を手がけたMicrosoftのエンジニア、Dave Plummer氏が、自身のYouTubeチャンネル「Dave’s Garage」で「初代タスクマネージャー誕生秘話」を語りました。

この情報によると、現在のタスクマネージャーが約4MBであるのに対し、Plummer氏が90年代に作ったオリジナル版はわずか80KBしかありませんでした。

当時の PC はメモリも CPU も非常に限られており、システムが不安定になったとき“最後の砦”として確実に動くことが求められていました。Plummer 氏はその制約の中で、タスクマネージャーを「とにかく軽く、確実に動く」よう徹底的に最適化していたのです。

目次

初代タスクマネージャーが80KBに収まった理由

Plummer氏が最も重視したのは、システムが不安定でも確実に起動し、軽快に動くことでした。当時のPCはメモリもCPUも非常に限られており、タスクマネージャー自身が重くては本末転倒です。

同氏は「1行書くごとにコストがある」「依存関係は家賃を払わない同居人」と語り、フレームワークや抽象化レイヤーを積み重ねる現代的な作り方とは真逆のアプローチによって軽量化を実現しています。

「固まっていないか」を確認するユニークな起動方法

初代のWindows NTタスクマネージャーには、単なる「多重起動防止」を超えた、非常に洗練された仕組みが組み込まれていました。それは「既存インスタンスが生きているかどうかを自分で判断する」というものです。

一般的なアプリは、起動時に「すでに同じアプリが動いているか」をチェックし、見つかればそのウィンドウを前面に出すだけで終わります。しかしタスクマネージャーは、その既存インスタンスがフリーズしている可能性を常に考慮していました。

起動時、タスクマネージャーはOSに問い合わせて、同じプロセスがすでに存在するかを調べます。ここまでは普通のアプリと同じです

ここからが独自仕様で、タスクマネージャーは、既存インスタンスに対して通常のアプリでは使わない特別なウィンドウメッセージ(private message)を送ります。これは内部専用のpingのようなもので、他のアプリには理解できない種類のメッセージです。

メッセージに対して、既存インスタンスが応答するかどうかを待ち、応答が返ってくる場合は生きていると考えて、既存のウィンドウを前面に表示して終了します。応答が返ってこない場合は、UIスレッドが固まっている可能性が高いため、既存インスタンスは「死んでいる」と判断し、新しいタスクマネージャーを起動します。

ここで重要なのは、OSのプロセス一覧に存在していても、UIスレッドが固まっている場合は応答できないという点です。つまり、プロセスが生きているように見えても実質死んでいる状態を見抜けるわけです。

この仕組みにより「タスクマネージャー自身が固まっていてタスクマネージャーを開けない」という最悪の状況を回避できるようになっていました。

無駄を徹底的に省くための工夫

Plummer氏は、細部に至るまで軽さを追求しています。

  • 頻繁に使う文字列はグローバルに一度だけ読み込む
  • 滅多に使わない機能(例: ドッキングPCの取り外し)は必要な時だけロード
  • プロセス一覧はカーネルから一括取得し、API呼び出しを最小化
  • バッファが小さければリサイズして再取得するだけのシンプルな処理

こうした工夫により、当時の低スペック環境でも“サクサク動く”タスクマネージャーが実現されました。

Plummer氏は、当時の開発環境について「ページフォルトは"匂い"で分かった」「間違って再描画すると、オフィスの誰かがうめき声を上げた」と振り返っています。必要なものだけを読み込む、見えない処理は極力省く、再描画は差分だけ、カーネルへの問い合わせは1回で済ませる、こうした無駄を嫌う本能が、初代タスクマネージャーを80KBに収めた原動力でした。

まとめ:軽量化の哲学は今こそ見直す価値がある

現代のPCは高性能になりましたが、Plummer氏の語る軽さへの執念は、今のソフトウェアにも通じる普遍的な価値があります。便利さや抽象化を重ねるほどアプリは重くなりがちですが、ユーザー体験を損なわないための最適化は、いつの時代も重要です。必要なものだけを賢く使い、無駄を省く、初代タスクマネージャーは、その哲学を体現した象徴的な存在と言えます。

[via Tom's Hardware]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次