Version 8.17
ウィンドウズの歴史
「今回はちょっと話を脱線させて、ウィンドウズの歴史について解説してい
きます」
『歴史って重要?』
「詳しく知ってる必要はないけど、プログラミングに関係したことを、幅広
く知ってることが重要かな」
『そんなにプログラミングに関係してくるんだ』
「だね。その範囲が結構広いから、今回は本当に広く浅くになっちゃうけ
ど、その辺はあとでフォローできればいいかな」
『結構深い歴史があるのね……』
「と、話を分かりやすくするために、今から昔へと遡ります」
『はい質問!』
「はい火美ちゃん」
『……作品としての時間軸とか、どうすんの?』
「あ……」
『一応第1回目で〈2001年4月18日〉ってなってるけど』
「あのときは近未来って思ってたんだけど、いつの間にか追い越しちゃった
ね」
『いつの間にかってゆーか、とっくに』
「ま、その辺は深く考えず、2002年5月頃ってことで」
『だと、ウィンドウズは XP が出たところってとこね』
「そう、今一番新しいウィンドウズは XP です。この段階で、実質的なシ
リーズは〈 Windows9x 系〉〈 WindowsNT 系〉〈 WindowsXP 系〉の3種類
って僕は考えてます」
『? なんか思ってたのと違う……』
「〈 Windows9x 系〉は、 Windows95 、Windows98 、そして WindowsMe の
こと」
『一番一般向けのねー』
「〈 WindowsNT 系〉 は、 WindowsNT 4.0 と Windows2000 のこと」
『 WindowsNT と Windows2000 って同じ系統なの?』
「そう、そして Windows9x 系とは中身が別物の違う系統なんです」
『そんなに違うの?』
「その辺は歴史の方で詳しく説明するから」
『じゃあ 〈 WindowsXP 系〉 は?』
「これは WindowsNT 系の流れを汲むものなんだけど、もう Windows9x 系は
新しいものが出ないのと、製品の性質が WindowsNT 系よりも Windows9x に
近いから、 WindowsXP 系は別にしました」
『ってことは、これからは WindowsNT 系と WindowsXP 系ってことに』
「なると思うけど、まぁその辺は先の話だから微妙かもね。で、ここで上げ
たものすべてに共通するのは〈 32 ビット OS 〉ってこと」
『そうそれ! WIN32 とか、 int のサイズが 32 ビットだとか、色々 32
って出てくるけど、それってなんなの?』
「簡単に言うと、 OS の処理単位が 32 ビットサイズってこと」
『 OS の処理単位?』
「そう。計算したりする時に、基本的に 32 ビットサイズで行う OS だから
32 ビット OS 特に、ポインタとアドレスが大きいかも」
『あ、その辺って far とかと関係してる?』
「してます。 32 ビット OS のアドレスは 32 ビットサイズです」
『ってことは、昔の OS は 32 ビット OS じゃなくて、アドレスも 32 ビッ
トサイズじゃなかった、と』
「 Windows95 より前、 Windows3.1 以前の OS は 16 ビット OS で、アド
レスも 16 ビットサイズでした」
『今の半分ね』
「ビット数は半分だけど、表せる数字は全然小さいでしょ」
『えーっと、 32 ビットだと 4 バイトだから約 1600 万だよね。 16 ビッ
トだと 2 バイトで……』
「 2 バイトだと Version 4.07 ( No.057 ) で教えた short と同じだか
ら」
『 65536 ……げ、ホントに無茶苦茶少ない!』
「これがアドレスとして使える最大の範囲。それがどういうことかわか
る?」
『??』
「メモリ上の場所はすべてアドレスを取得できるはず。逆に言うと、アドレ
スで表現できなかったらそのメモリにはアクセスできない」
『ってことは、メモリの使える範囲が 65536 、ってことは 65536 までしか
メモリに入らない……』
「約 64K バイトまでしかメモリに入らない。ってことは、ファイル全体を
メモリに取り込むとしたら、取り込めるファイルサイズは」
『 64K 以下、ってイマドキそんな小さなファイルの方が少ないって!』
「昔は CPU も遅かったし、物理的なメモリのサイズも小さかったからこれ
で十分な時代もあったんだけど、しばらくして無理が出てきて、そこで出て
きたのが far 」
『あ、ここで出てくるんだ』
「 far をポインタの型に一緒に付けると、 32 ビットのポインタになっ
て、 32 ビットアドレスを操作できるようになったんです」
『お、今と同じ!』
「……ってわけでもなくて、内部的にちょっと面倒な処理をしてて、うまく
誤魔化してたのが本当のところ。だから、内部的には 16 ビットのまま」
『その辺が Windows3.1 の限界だったわけね。そこで!』
「 Windows95 が登場して、 32 ビットのアドレス普通に使えるようになっ
て、 far とかも要らなくなったわけ」
『だから今は空白に置き換わるのね』
「そゆこと。 WPARAM や LPARAM もその頃の名残で、この辺は実は詳しくは
知らないんだけど、 W は WORD 、 L は LONG の略だったらしいよ」
『 WORD と LONG ?』
「そう、両方とも API で使われてる型。 WORD は unsigned short 、
LONG はそのまま long 型として typedef されてます」
『 unsigned short ってことは符号なし 16 ビット整数値、だよね。え?
ってことは WPARAM って 16 ビットなの?』
「昔はね。 WORD から typedef されてたから。でも今は unsigned int か
ら typedef されてるから」
『あ、そこで歴史が関係してくるわけね。今は符号なし 32 ビット、で
も……名前には昔の型が残ってる』
「そゆこと。 LPARAM の方は変わらず long だけどね」
『こっちは符号ありの 32 ビット整数値、と。あれ? 16 ビット OS で
32 ビットの変数って使えるの?』
「あ、もちろんそうだよ。たとえば今の 32 ビット OS でも __int64 って
いうのを使えば 64 ビットサイズの整数値が使えるから」
『おー』
「 far の例もあるし、 OS 側でカバーできる部分はあるんだけど、それも
限界があるから」
『 Windows95 が作られた』
「そゆこと。だけどそこに問題があるんです」
『え? 問題?』
「そう。実は Windows95 は Windows3.1 を改造したもので、アドレス部分
とかを根本的に解決してるわけじゃないんです」
『げ! じゃあ far なんかの応急処置と同じじゃない』
「それに、これは Windows3.1 時代の話になるけど、 16 ビット OS は多く
の問題を抱えてたんです」
『多くの問題?』
「たとえば、仮想アドレスじゃないとか」
『それってまずいじゃない! 他のアプリのメモリにずかずかアクセスでき
るってことでしょ?』
「っていうか、元々ひとつのアプリしか使えない状態なんです」
『へ?』
「 32 ビット OS は複数のプロセスを同時に実行できるけど、 16 ビット
OS はひとつのプロセスを実行することしかできなかったんです」
『それってかなり不便じゃない?』
「不便。だから Windows3.1 では擬似的に同時実行ができるようにしたんだ
けど」
『でもメモリ関係はやっぱ危なっかしいよね……』
「しかも、そのメモリって OS も一緒に置かれてたんです」
『……それってつまり、 OS が使ってるメモリ領域にアクセスできるってこ
と?』
「そう、だから昔はアプリ側で色々できた反面、危険が伴ってたんです」
『それはまずい……』
「実際まずくて、ウィンドウズはコンシューマー向けならいいけど、業務用
にはちょっと、ってことになったわけ」
『確かに安定性とか不安ね』
「そこで、 32 ビット OS として新しく作られたのが、 WindowsNT 系」
『あれ、ここで出てくるんだ』
「特に、普及版の Windows3.51 は WindowsNT 系の一番基になってるバー
ジョンで、さっき言った仮想メモリの部分とかはすべて解決されてます」
『その流れで行くと、今でも家庭用は Windows9x 系、業務用は WindowsNT
系って分けられるってこと?』
「そうなるかな。今後は WindowsXP が家庭用になるんだろうけど」
『質問!』
「はい火美ちゃん」
『なんで Windows9x 系って残ってるの? 質ってことじゃ WindowsNT 系の
方がいいんでしょ? だったら全部 WindowsNT 系になっててもおかしくな
いと思うけど』
「これにはいくつか理由があって、爆発的に普及した Windows95 のあとに
WindowsNT3.51 が発売されたから、浸透しにくかったとか」
『そういえば Windows95 の発売日ってニュースでもよくやるね』
「 WindowsNT4.0 にはプラグ&プレイが付いてないとか」
『げ、それはきつい』
「あと高いってのもあって、その関係でプリインストール版は Windows9x
系がほとんどだからね」
『そっか、 OS なんてインストールするもんじゃないもんね』
「 Windows9x 系は最後のバージョンまで不安定だったけど、それでも普及
し続けた理由は、そんな感じかな」
『同じことでもうひとつ質問。 WindowsNT3.51 ってのが作られるんなら、
わざわざ Windows95 って作る必要なかったんじゃない? ひとつに絞るっ
て手もありそうなんだけど』
「そこが重要なポイント。火美ちゃんは MS-DOS って知ってる?」
『聞いたことはあるけど、よく知んない』
「 MS-DOS はウィンドウズが普及する前の OS で、文字だけで操作する
OS 」
『なんとなく見たことあるかも』
「この MS-DOS 時代はかなり長くて、プログラムもものすごく多く作られて
るんです。だから、そのプログラムをウィンドウズでも使える必要があった
んです」
『それが Windows95 に関係してくる?』
「というより Windows3.1 と WindowsNT3.51 に関係してくるんです。初め
ての普及版 Windows3.1 は当然 MS-DOS のプログラムが使えなきゃいけない
ということで、基本的な部分は MS-DOS そのままなんです」
『 MS-DOS を Windows3.1 が隠してる?』
「そんなイメージ。だから MS-DOS のプログラムが使えたんです。でも
WindowsNT3.51 は1から作ったものだから MS-DOS を持ってなくて、その関
係で MS-DOS のプログラムの多くは使えないんです」
『だから、 MS-DOS のアプリを使うためには Windows3.1 じゃないといけな
いのねー、その流れで Windows95 も?』
「そういうこと。だから、 Windows9x 系は MS-DOS の流れを汲む OS って
ことも言えるかな」
『で、今はもう MS-DOS の知識は必要ない、と』
「そうとも言えるし、そうじゃないとも言えるかな」
『なにそのあいまいなのは』
「たとえば WindowsMe なら、スタートメニューの【アクセサリ】にある
【 MS-DOS プロンプト】」
『げ!! MS-DOS !』
「それに、 WindowsNT 系にも同じように【コンソール】っていうのがあり
ます」
『ででででも、そういうのって使わないんだよね……』
「ウィンドウズではあまり」
『それって、ウィンドウズ以外では結構使われてるってこと?』
「そゆこと。他の OS を操作する時には MS-DOS みたいな〈コマンドライン
入力〉の知識が不可欠だし、ウィンドウズでも」
『ちょっとは必要?』
「ちょっとはだけど、でも特に VC プログラミングをする場合には結構必要
かも」
『あうー。って、まぁ、まだどんなのか教わってないから大変かどうかも分
からないけど』
「たぶん大変」
『げ!』
「その辺の大変なのは、またいつかにとっておきましょう」
『……次回が最終回になんないかな……』
/*
Preview Next Story!
*/
『ってゆーか、なんでそんなにいろんなこと勉強しなきゃいけないの??』
「火美ちゃんは〈なんで〉って多いね」
『う”ー、なんでって思ったらどうしても知りたいだけだもん』
「あ、悪いことじゃなくて、そういう事?」
『どういうこと?』
「なんで、って調べてくと芋蔓式にひろーくなっちゃうから」
『だから色々勉強しなきゃいけないのね』
「そゆこと」
『というわけで次回』
< Version 8.18 ディスパッチ >
「につづく!」
『ところでディスパッチってなに?』
「それは次回をお楽しみに」