このエントリーをはてなブックマークに追加

仮想マシン(VM)と仮想マシンマネージャ(VMM)

対象プロダクト:Windows 95 98 Me
カテゴリー:アーキテクチャ

Windows 95 には「仮想」と名のつく機能、概念が多数存在します。
Windows 95 を一言で表す言葉を選ぶなら「仮想」という言葉がもっとも当てはまるでしょう。

仮想マシンとは

仮想マシン (以下、VM) は、アプリケーションの視点からは、アプリケーションの実行に必要とされる利用可能なリソースのすべてを完備している物理的な個別のコンピュータとして見せかけるためのメモリ上に作られる仮想的な環境です。 VM では以下のリソースが提供されます。
  • メモリマップ
  • VM 内で実行中のアプリケーションが使用可能な仮想メモリ。
  • 実行コンテキスト
  • VM のレジスタなどに基づき定義されます。
  • アプリケーションがアクセス可能なリソース
  • Windows アプリケーションであれば Windows API、MS-DOS アプリケーションであればソフトウェア割り込み(INT)インターフェースへのアクセスなどを提供します。
Windows 95 の VM は、システム VM と MS-DOS VM があります。

仮想マシンの初期化

OS の起動中(初期化中)にシステム VM が設定され、MS-DOS VM 用にグローバルコンテキストが用意されます。
※MS-DOS VM のグローバルコンテキストは config.sys と autoexec.bat でカスタマイズが可能です。

システム仮想マシン

システム VM は常にプロテクトモードで動作し、すべての 32bit Windows アプリケーションは1つのアプリケーションごとに システム VM 内にプライベートなアドレス空間が用意され、実行されます。
16bit Windows アプリケーションは、すべての 16bit Windows アプリケーションがシステム VM 内の1つのプライベートなアドレス空間内で実行されます。
このため、ノンプリエンプティブな 16bit アプリケーションが不正な処理を行っても 32 bit アプリケーションやシステム自体に影響を及ぼすことはありません。
つまり行儀の悪い 16bit アプリケーションの振る舞いの影響は1つのプライベートアドレス空間内で完結します。
これは Windows から見ればプロテクトモードで動作する1つのアプリケーションがクラッシュしたに過ぎません。

またシステム VM 内で実行されているアプリケーションは Windows API (Win32、Win16 API) を使用して Windows とのやり取りが行えます。

MS-DOS 仮想マシン

MS-DOS VM は MS-DOS 環境を忠実に復元したものです。
仮想マシンごとに1つの MS-DOS セッションが実行されます。
MS-DOS VM 内で実行されているアプリケーションはシステムへの要求を渡すためにソフトウェア割り込みを使用します。
そしてその呼び出しは、最終的にはプロテクトモードのコードに渡されます。

仮想マシンマネージャ(VMM)

仮想マシンマネージャ(以下、VMM)は Windows 95 の心臓部とも言える機能です。
VMM は、アプリケーションとシステムプロセスが作動する VM 環境を築き維持します。
Windows 95 の VMM は Windows 3.1 の WIN386.EXE に取って代わったものです。

VMM が提供する主な機能は以下となります。
  • メモリページング
  • 32bit Windows アプリケーションのプロセスごとにプライベートなアドレス空間を提供します。
    これは 32bit のアドレスを使用してアクセスされたフラットで線形のアドレス空間に基づきます。
    プロセスはそれぞれ、2GB のユニークな仮想アドレス空間を割り付けられます。
    下位 2GB がアプリケーション用のプライベート空間、上位の 2GB がシステム共有空間です。
    この仮想アドレス空間は等しいブロック、あるいはページに分割されます。

    デマンドページングは、コードとデータがディスク上のページ内で物理メモリから一時的ページングファイルに移動される方法を指します。
    情報がプロセスによって必要とされる場合、ページは物理メモリ上に戻されます。

    メモリページャーは仮想アドレスをコンピュータのメモリ上のプロセスのアドレス空間から物理ページにマップします。
    その際に、プロセスのスレッドからメモリの物理編成を隠蔽します。
    これは、スレッドが他のプロセスのメモリではなく、要求されるそのプロセスのメモリにアクセスすることができることを保証します。
  • プロセススケジューリング
  • プロセススケジューラが起動するアプリケーションおよび他のプロセスにシステムリソースを供給し、多数のアプリケーションが同時に作動することを可能にするためのプリエンプティブなスケジューリングを提供します。
  • MS-DOS モードのサポート
  • 仮想メモリマネージャにより、MS-DOS モードと呼ばれる MS-DOS アプリケーション用の排他的な環境が作成されます。
    MS-DOS モードで MS-DOS ベースのアプリケーションが実行される時、他のアプリケーションやプロセスと、システムリソースを競合することはありません。
  • システムの新しい基本機能を VxD から利用可能にする
  • システムの初期化中にロードされた VMM はシステムに常駐します。(VMM の実態は VxD です)
    VxD が提供するサービスはオペレーティングシステム内部向けの API とみなすことができます。
    但し、VxD はカーネルモードである、リング0で動作しており、アプリケーションがこれらを無差別に呼び出すことは、システムのクラッシュを招きかねません。
  • VxD の動的ロード、ページングの提供
  • Windows 3.1 が VxD をロードするのはシステムの初期化中のみでしたが、Windows 95 では VxD の動的なロードとアンロードが可能になりました。
    動的ロードが可能な VxD (以下、DL VxD) はシステムの仮想アドレス空間(3GBより上位)にロードされ、VxD の開発者はページング可能な領域を指定することができます。
    それにより、開発者は自社の DL VxD のワーキングセットを最適化することができます。

    但し、VxD の動的なアンロードは、他の VxD やアプリケーションとの依存関係上、できません。(それを実現するためには、その VxD を使用している、すべての他の VxD やアプリケーションにそれを通知しなければならず、現実的ではないため)

公開日時: 2011年11月20日  00:56:06

このエントリーをはてなブックマークに追加
マルチタスクとプロセスとスレッド | メッセージキュー

Windows技術情報の一覧に戻る

「アーキテクチャ」に関する他の技術情報
技術情報のカテゴリ

このページのトップに戻る