Windows 98 覚え書き

←前ページ      次ページ→

Windowsの構造・・・ファイルの役割って?

Windows・・・このOSってどんな風に動いてるんでしょうか?
皆さんはこのたくさんあるファイルの役割についてご存知でしょうか?
私もよくは分かりません。そこで、今日は皆さんと一緒に勉強していきましょう^^


Windows98 の基本的な構造は?

Windows98の構造を、思いっきり単純にわけると、シェル/コア/レジストリ の
3つに分けられるかもしれません。自動車に例えると:

シェル・・・・・・・・・・・・・・・・・・・・自動車のボディ・ハンドル・アクセル・シートなど
コア・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ずばりエンジン!
レジストリ・・・エンジンの制御・ハンドルの調整やブレーキの効き具合などの設定

てな具合になるかもしれません。もちろんそれだけではありませんが・・・。

Windows構造図(希望の場所をクリックして^^)


シェルってなあに?

Windows・・・私たちの見えないところで、なにやら動いてくれてるOSですが、
実はいくつかの部分に分かれてるのはお話しした通り。そのなかで、主に
外見部分を担当しているのが、シェルと呼ばれる機能です。シェル=貝殻と
いう名前通り、いちばん外側でユーザーが見たり、触れたり(操作)できる部分を
指しています。(ホントはちょっと違うのよ) 
GUI(グラフィカル・ユーザー・インターフェイス)と呼ばれたりします。

GUIとは、画面上に現れるすべての視覚的要素(デスクトップからアイコン/マウスカーソル/
ウインドウ/ダイアログボックス/テキストボックスなどのアイテムはもちろん、
“ファイルをドラッグしたらちゃんと動いてくれた”“テキストボックスに文字を入力できる”
などの動的な要素も含みます)を指す用語です。

どのプログラムが制御してるの?(シェル編)

ユーザー側の中核プログラムは“エクスプローラ(explorer.exe)”です。インターネット・
エクスプローラ(iexplore.exe)ではないことに注意して下さい。その他にエクスプローラが
呼び出す(協力を仰ぐために^^)ファイルには、次のものがあります。

shell32.dll(シェル・コモンDLL)・・・実はシェルの本体はこちらなのです。エクスプローラは
あくまでユーザーがこのファイルに指示を出すためのプログラムなのです。
user32.dll(ユーザー)・・・コアの項目を参照して下さい。

shell.dll/user.exe はWindows 3.1との互換用です。(機能は同じです)

dllファイルってなあに?

シェル統合って?

シェル統合、とは・・・これも難しいです。本来シェルとは、ファイル管理のUIに関するもの
でした。しかし、シェル拡張(エクステンション)によってOS全体のUIにまたがるものになって
しまいました。これの大きい目的には、インターネット上でのWebページ閲覧/ファイルの
ダウンロードなどのファイル操作とローカルファイルの操作との一元化がありました。

それに選ばれたのがブラウザである“インターネット・エクスプローラ”と従来のシェルであった
“エクスプローラ”の機能上の合体でした。これを“シェル統合”と呼びます。

具体的には、インターネット・エクスプローラ/エクスプローラ双方の機能を“Shell32.dll”に
ひとまとめにして、どちらのプログラムからでも同じ機能が参照できるようにしたのです。

ブラウザは本来Webページを(Netから取りこんで)表示するだけのものです。シェル統合によって
ブラウザに新しい機能が加わりました。ローカルファイルの内容をWebページ同様に表示
したり、シェルのウインドウとしてローカルHDDの内容を表示/操作ができるようになりました。
(逆にエクスプローラにWebページを表示させることもできます)こうして、Netとローカルの区別を
曖昧にして通信機能をスムーズに使用する・・・。そのためにOSとしてはかなり
複雑になってしまいましたが。

図に戻る

コアってなあに?

Windows OS の核、中心にあたります。ハードウェア間のデータのやり取りや、ハード情報
(マウスの動作/キーボードの入力)を変換して、UIの仕様に従って表示するプロセスを
確立したり・・・。コンピュータサイドの、動作管理を一手に引き受けています。

どのプログラムが制御してるの?(コア編)

中心はKernel32.dllというファイルです。(これをカーネルと呼びます) これは
メモリ、CPU、ハードディスク間のデータの読み書き/仮想メモリの管理/タスクのスケジューリング(処理の調整)
などを受け持っています。他の重要プログラムは以下の通りです。

user32.dll(ユーザー)・・・キーボード/マウスからの入力された情報(クリックなど)を、
メニューを表示したりするといった動作に出力します。(シェルの機能に関連しています)
gdi32.dll(GDI)・・・グラフィクス・デバイス・インターフェイスと呼びます。画面に現れる
グラフィックの描画の管理などを受け持ちます。

user.exe/gdi.exe はWindows 3.1との互換用です。(機能は同じです)

図に戻る

レジストリってなんでしょ?

Windowsとアプリケーションのすべての設定が記録されてます。

以下の6つのルートキーで、内容が分けられています。

HKEY_CLASSES_ROOT 拡張子の関連付けの設定
HKEY_CURRENT_USER 現在ログオン中のユーザーの固有設定
HKEY_LOCAL_MACHINE Windows自身の設定
HKEY_USERS 各ユーザの設定
HKEY_CURRENT_CONFIG 各種デバイス設定
HKEY_DYN_DATA システムメーターなどで使うパフォーマンスデータなど

“キー”とはレジストリの“ディレクトリ”という意味です。
レジストリエディタ(regedit.exe)で、変更します。
このうちの一部はTweak UIのようなツールで安全に変更できます。

レジストリの本体は、user.dat/system.datという2つに分けられています。
user.dat・・・デスクトップデザインなどのユーザー固有の情報
system.dat・・・コンフィギュレーションマネージャーで識別されたデバイス情報など

図に戻る


さらに下の階層・・・どうなってるの?

これより下は普段ユーザーはほとんど意識する事がありません。上記のプログラムの
ハード側での調整やソフトウェアによるハードウェアの制御に関する設定が主な仕事です。

仮想マシンマネージャ

Windows 98を使いながら、DOSプロンプトを立ち上げる・・・。何気なく
使っている機能ですが、変だと思いませんか?2つのOSを同時に使用する・・・。これには
カラクリがあるのです。早い話がパソコンの中に2台のパソコンを仮想で設置して、
Win用とDOS用に使い分けているのです。もう少し正確に言えば、“メモリ上の特定の
領域を割り当てて、仮想マシンをDOS用に設定した”わけです。

仮想マシンの本来の目的は、“アプリケーションのためのOS”として機能です。
これの意味は、アプリケーションが具体的にどんなハードウェアを使用するときでも
(ドライバがあれば)アプリケーション自身が直接ハードウェアを操作する必要が
ない、ということです。ちょうどユーザーがOSを通じてアプリケーションを使うのに、
細かい事を考えなくてすむのと同じことです。(ユーザーをアプリケーションに、
アプリケーションをハードウェアに読み替えてみてください)

これでアプリケーション同士のリソースやメモリの利用が競合しないように調整しています。

関連ファイル・・・vmm32.vxd

図に戻る

IFSマネージャ

Installable File System(インストール可能なファイルシステム)と呼ばれ、
以下のファイルシステムをサポートしています。(ファイルシステムってなあに?)

VFAT・・・Windows 95/98に採用されたロングファイルネーム対応のFAT。FAT16/32がある。
FAT・・・MS-DOSで使われていた8.3形式によるファイルシステム。それ以外はFAT16と同じ。
CDFS・・・CD-ROM用のファイルシステム。
UDF・・・DVDメディア用のファイルシステム

これらのファイルシステムのデータの出入力を管理しています。

関連ファイル・・・ifsmgr.vxd

図に戻る

コンフィギュレーションマネージャ

IRQやI/Oポートアドレスの競合が起きないようにデバイスの構成を調整するのがここの仕事です。

また、パソコンに接続されているすべてのハードウェアの種類と数を常に監視して、
新しいハードウェアを検出すると、その種類や接続されたポート/バススロットの場所
をWinに出力します。これを元に“プラグアンドプレイ”機能が可能になっています。

関連ファイル・・・cfgmgr.vxd

図に戻る

WDMドライバマネージャ

WDM(Win32ドライバモデル)とは、Windows NT系(Windows 2000含む)とWin 98
との互換性をとるためのドライバソフトの仕様です。

これをサポートするのがここの仕事です。

関連ファイル・・・ntkern.vxd

図に戻る

デバイスドライバ

ソフトの中でいちばんハードウェア寄りなものが、この“ドライバ”です。
ハードウェアの情報をシステムに伝達し、同時にシステムからの情報をデバイス(各ハードウェア)
に伝達します。つぎの2種類を組み合わせて使用します。

クラスドライバ(汎用ドライバ)・・・マウス、モデムなど、ハードウェアの種類ごとに用意されたドライバ。
そのデバイスで一般的に必要な処理を行ないます。拡張子は.drvです。
ミニドライバ・・・特定の機種が必要とする特別な処理や物理的な処理はこのドライバが行ないます。
よく“ソフトのドライバを入れる”と、いう時のドライバはこちらですね。

仮想デバイスドライバ・・・拡張子.vxdのドライバは、複数アプリケーションからデバイスを使用可能にする
目的で使われます。(仮想マシンマネージャ参照)

図に戻る

Windowsの構造・・・マルチタスクって?

Windowsはマルチタスク(複数のプログラムの同時実行)が可能なOSです。
どのようにして、それを可能にしているのか?それをお話しする前に、
MS-DOSとWindowsの関係についてお話しします。

16ビットと32ビット

“インテル8086”というCPUをご存知ですか?現在のPC/AT互換機の
おおもとはこの16ビットCPUをベースに作られ、その時に使われていたOSが
MS-DOSだったのです。その後、UI上の問題(文字ベースのUIは使いづらい)などの
結果、Windows3.1が誕生しました。しかし、CPUが基本的に16ビットのままだったので、
使い勝手はよくなったものの、様々な問題が残りました。

ところが80386という32ビットCPUの出現によってOSとしての機能を拡張した
Windows 95が開発され、これがWindows 98へと発展してきたのです。

Windows3.1〜Windows98のマルチタスクの方法

Windows が扱うプログラムには
MS-DOSプログラム/16ビットWindowsプログラム/32ビットWindowsプログラム
があります。それぞれのプログラムによって、マルチタスクの管理方法がちがっています。

MS-DOSプログラム・・・DOSプログラムは、マルチタスクに対応していません。
ですから、仮想MS-DOS(仮想マシン)を設定し、これをWIndowsが管理するやり方で、
マルチタスクを実現します。メモリを消費し、実行速度が落ちるデメリットがあります。

16ビットWindowsプログラム・・・Windows 3.1用のプログラムです。このプログラムは、
自分の処理が一段落すると、Windowsに処理を返します。Windowsは、次のプログラムに
処理を移動し、そこが一段落するとまた戻る・・・。これを“ノンプリエンプティブなマルチタスク”
といいます。これの問題点は、いわばプログラムの処理が“数珠つなぎ”になってるため、
ひとつのプログラムが“落ちる”と他のすべてのプログラムも反応しなくなることです。

32ビットWindowsプログラム・・・Windows 95以降の一般的なプログラムです。Win32 APIという
形式にのっとって作られています。これの実現によって、Windows側でプログラミングの処理を
管理し、処理を振り分ける事ができるようになったわけです。


プロセスとスレッド

Windows 98のような32ビットOSは、システム側が強制的に処理を切り替えます。
これをプリエンプティブなマルチタスクといいます。プリエンプティブなマルチタスクにおいて
プログラムごとに仮想的に割り当てられるメモリ空間である“プロセス”と、プログラムが
実際に動作するため、CPUが処理する最小単位である“スレッド”が内部に存在する時
これを“マルチスレッドシステムと呼びます。

マルチスレッドシステムでは、一定時間でOSがスレッド処理を強制的に切り替え、
順番に処理していきます。仮にあるスレッドで問題が発生したとしても
そのスレッドが含まれるプロセスを開放(終了)させれば、システムが“こける”ことはありません。

参考:なぜ、IE(4.0x)がこけるとWinも落っこちるの?


と、まあ駆け足で、Windowsの構造の勉強をしてきたわけですが、
(なんて穴だらけなんだろう!)とりあえず、Windowsの構造のさわりだけでも
知っていると、何かトラブルが起こった時に、原因究明&対処の方法がかなり的確に
掴めるのではないかと思っています。

お詳しい皆さんならすぐに思い当たるでしょうが、この程度の事は
ちょっとした雑誌&書籍に分かりやすく掲載されています。
興味を持たれた方、あるいは私のつたない説明にご不満の向きは
ぜひともそういう書籍を一読されることをおすすめします。

なお、今回の講座は:
Windows 98の上手な使い方教えます 天野司ほか著 技術評論社
月刊 Windows Start 7月号 (株)毎日コミュニケーションズ
を、参考にさせていただきました。

また、いくつかの事柄でご教授を賜りました西村誠一さんに、あらためまして
お礼申し上げます。感謝です^^

ところで・・・まだこの講座終わりではないですよ^^
次回は“メモリ管理”や“キャッシュシステム”についてお話しする予定です。

それでは、また(^^;;

←前ページ      次ページ→