Windows OSは,NT系の方が95/98/Me系よりも堅牢だといわれる。NT系OSは「カーネル・ベースのOSだから」「アプリケーションがクラッシュしてもOSはダウンしないから」など,ごく表面的な理由なら「にわか管理者」でも説明できるだろう。しかし,その本当の理由をあなたは正しく説明できるだろうか。

 Windows XP/VistaなどのNT系OSに乗り換えたら,長年の問題だった「フリーズ」から解放された――そんな経験をした読者は多いだろう。Windows 95/98/Me(以下9x)時代は,ワープロと電子メール・ソフトを立ち上げながらWebサーフィンをし,気が向いたら動画を再生してみる――といった作業をした途端,パソコンがウンともスンとも言わなくなることは珍しくなかった。

 それがWindows XP/Vistaを使う今なら,アプリケーションに何かトラブルが発生しても,「タスク・マネージャ」でそのアプリを終了すれば,他の作業は継続できる。この違いはなんだろう?

 1つは,Windows 9xが備えるシステム保護機能がNT系と比べると貧弱だということだ。Windows 9xもNT系と同様に,システムを保護するための「カーネル・モード」という動作モードを備える。しかし,NT系では全システム・コードがカーネル・モードで動作するのに対して,Windows 9xはそうではない。

 「マルチタスク」にも問題がある。Windows 9xは「プロセスの管理」と「メッセージ駆動」に問題点を抱えており,多くの場合において,安全なマルチタスクを実現できていない。

 Windows 9xがNT系と比べて問題が多いのは, MS-DOSやWindows 3.1などの過去のOSとの互換性を保つため,「32ビットOSでありながら,過去の16ビット・コードを内蔵している」からだ。16ビット・コードは,Windows NTや 9xの32ビット・コードと互換性がない。同じWindowsのコードでも,Windows 3.xのコードを「16ビット(Win16)コード」,Windows NTや9xのコードを「32ビット(Win32)コード」と分けて呼んでいるのはこのためだ。

 なぜコードに互換性がないとシステムが不安定になるのか,その理由を探ってみよう。

NT系と9xではシステム保護機能が違う

 まずは冒頭で述べたWindows 9xが備えるシステム保護機能の問題だ。Windows 9xでは1つのアプリケーションでエラーが起きただけで,システム全体が一気に不安定になってしまうことがある。それがNT系では,アプリケーションが異常終了しても,OS自体はそのまま稼働できる。

 これは,NT系がOSのシステム部分を効果的に保護しているのに対し,Windows 9xではそれが不十分であり,システムがアプリケーション・トラブルの巻き添えを食ってしまうためだ(図1)。これを説明するために,それぞれのOSのアーキテクチャを詳しく見てみよう。

図1●Windows 9xとWindows NT系の違い
図1●Windows 9xとWindows NT系の違い
Windows 9xではシステムの保護が十分ではないため,アプリケーションのトラブルの影響を受けてしまう。

 Windowsの動作モードは,大きく2つに分かれている。1つはアプリケーションなどが実行される「ユーザー・モード」であり,もう1つはシステムと直結する「カーネル・モード」だ。この2つのモードは,CPUが持っているプログラムの動作モードとも関係している。

 最初の「ユーザー・モード」は,米Intelのx86プロセッサの「レベル3」(レベルはリングとも呼ぶ)という動作モードで実行し,「カーネル・モード」は「レベル0」で実行する仕組みになっている。

 x86プロセッサには,「レベル0」から「レベル3」までの4つの動作モードがあり,下位のモード(数字の少ないレベル)で動作するコードは,上位レベルで動作するコードから保護されるようになっている。そのため,カーネル・モードで動作するシステムは,ユーザー・モードで動作するアプリケーションに対して,許可されたメモリーの範囲以外にアクセスするのを禁止できる。