SSブログ

MS-WINDWSのメカニズム(月刊ASCII 1987年2月号6)87年のOS環境を占う [月刊アスキー廃棄(スクラップ)]

特集「87年のOS環境を占う」のスクラップの続き。
MS-WINDOWSのメカニズム

縦書きのあおりを引用する。
マイクロソフト株式会社
福田善康、中島聡

 昨年ようやく我々の手に届く商品として登場したMS-WINDOWSについては、すでに画面写真などを見たかたもいると思う。しかし、そのMS-WINDOWSはどのような構造で、どのように動いているかは、あまり明らかになっていない。ここではMS-WINDOWSの内部構造とWINDOWSアプリケーション作成の際に使われるTOOL KITについて解説する。
 34年前はこの記事を眺めただけで終わった。書かれている概念などは素人ユーザーにとっては分からなかった。実際に触ってみないと分からなかった。私が触ったのはWindows 3.1 からだった。まだまだ先のことだった。
以下本文をスクラップする。
MS-WINDOWS
概要

 MS-WINDOWSは、米国MICROSOFTによって開発された新しいオペレーティング環境です.これは,MS-DOSに代わるものを意味するのではなく,現在のMS-DOSにビジュアル・ユーザー・インターフェイス,グラフィックス表示機能,メモリ管理などの拡張機能を付加するものです.このMS-WINDOWSとDOSの組合せは,来るべきOSの姿を表しているといっても過言ではありません.この新しいオペレーティング環境の出現により,今後のアプリケーション開発は効率化され、新たな方向性がもたらされるでしょう.
 MS-WINDOWSの大きな特長としては,従来のアプリケーション開発のもっとも大きな負担となっていた,メモリ,ディスプレイ,キーボード,マウスなどのシステムリソースの制御をMS-WINDOWSがすべて自動的に行うことが挙げられます.これにより,
1 すべてのアプリケーションにマルチタスク環境を提供する.
2 強力なメモリ・マネジメント機能により,それを意識せずに,効率よくメモリを使用できる.
3 グラフィックス描画やテキスト出力のために,多数のファンクションを持つ“GDI"(グラフィックス・デバイス・インターフェイス)が用意されている.
4 標準のビジュアル・インターフェイスにより,すべてのアプリケーションが同じ操作性を持ち,またアプリケーション設計の省力化が図れる.
5 アプリケーション間のデータ交換は、カット・アンド・ペーストにより,クリップボードを通して簡単に行える.また、複数のアプリケーション間の自動通信手段(後述のDDE)も用意されている。
6 すべてのハードウェアを仮想化しているため,アプリケーションの開発者は、特定のハードウェアを意識する必要がない
 MS-WINDOWSはマシン・インディペンデント(機械独立)の思想に基づいて開発されています。すなわち,MS-WINDOWSの規定に従って開発されたアプリケーション(以下,WINDOWSアプリケ-ションと呼びます)は,MS-WINDOWSさえ動作していれば、どんなマシンの上でもまったく変更なしに走らせることができます。
この概要というか機能というか、これらが使い物になるのはWindows95以降だったと思う。特にDDEはハングアップを経験して怖くて使えなかった。
ASCII1987(02)c05OS環境占う_図_W520.jpg
MS-WINDOWSの
構成

 MS-WINDOWSは"KERNEL","USER","GDI"と呼ばれる3つの基本モジュールと各デバイスを制御するドライバから構成されています.
 “KERNEL”はMS-WINDOWSの中核となるメモリ・マネージャで,アプリケーションが複雑な設定を行わなくても,マルチタスクやスワッピングなどを自動的に行うモジュールです.
 “USER”とはアプリケーションにグラフィカルなユーザー・インターフェイスを提供しますが,特定のウィンドウ形式を強要するわけではありません.たとえば、アプリケーションはメニューやスクロールバーなどをどのように表示するかをMS-WINDOWSに指示することができ,そのアプリケーションにもっとも適したユーザー・インターフェイスを実現できます.もちろんMS-WINDOWSが基本的な環境を提供しますので,他のアプリケーションとの整合性は約束されます.
 そして“GDI"とは,すべての図形や文字の出力を管理するモジュールで,“GDI"とアプリケーション間のインターフェイスはマシン・インディペンデントになっています.
流石に今読むと分かる。これは体で覚えたことの解説だからだろう。
GDI

 GDI(Graphic Device Interface)は,ANSI(アメリカ規格委員会)のVDI(Virtual Device Interface)に準拠しており,アプリケーションからの出力は,-すべてGDIを通して行われます.GDIには、図形(線や円など)や文字の出力,クリトッピングの制御,カラーや文字フォントなどの属性指定を含んだ約100種類の基本ファンクション(GDIファンクション)が用意されています.GDIファンクションは,この種のどんなグラフィックス・インターフェイスよりも豊富かつ強力です。GDIファンクションを利用することにより,複雑な図形出力のシミュレートコードをアプリケーション内部に抱える必要はなくなり、よりコンパクトでスマートなアプリケーションを作成することができます.
 WINDOWSアプリケーションは、+32767~-32768の論理座標を使用できる上,出力デバイス(ディスプレイ,プリン・タ,プロッタ)の物理座標への変換はGDIが自動的に行い,アプリケーションの負担を最小限に押さえます.
 このようなGDIファンクションにより,MS-WINDOWSはアプリケーションにハシードウェアからの独立性を与え,WINDOWSアプリケーションは、MS-WINDOWSが搭載されているシステムの上なさらばどんなハードウェア構成でも動作す る,というマシン・インディペンデントの思想を実現しています.
いやいや、GDIは理想が先に立ってハードが追い付いていない。Windowsのデモをみると、全く魅力がなく、使う気にならなかった。DOSの専用アプリでなんとか使えるというのが34年前のハードウェア環境だった。
マルチタスクの
メカニズム

 MS-WINDOWSでは,複数のアプリケーションを同時にディスプレイ表示するだけではなく,実際に複数のアプリケーションを同時に実行させるマルチタスク機能を備えています.
 しかし,MS-WINDOWSのマルチタスク機能は,ミニコンや大型機のOSで言われるマルチタスクとはタスク切り換えの行われるタイミングが違っています.
 一般のマルチタスクOSでは,
1 システムコールが発行された時
2 一定時間以上システムコールが発行されない時
がタスクの切り換わるタイミングです。これに対して、MS-WINDOWSでは,1メッセージをキュー(Queue)から取り出す命令が発行された時@Yield(タスクの終了,中止)命令が発行 された時がタスク・スイッチングの行われるタイミングとなります。 この違いは,ユーザーの立場からみると大きく違ってみえます.たとえば,ひとつのアプリケーションに対しユーザーがなんらかの入力を行っている間は,他のアプリケーションの処理が止まってしまいます.ただし,ユーザーが入力の手を一瞬でも休めれば、他のアプリケーションの処理は再開されますから,ユーザーが一人であるかぎりなんら不都合は起こりません。
 ソフトウェア開発者の側からみると,マルチタスクを実現させるためには,適当なタイミングでキューを見にいくという処理を付け加える必要となります.ただし,ほとんどの対話型のアプリケーションでは、この問題を意識する必要はありません。実際の例としては,ユーザーがワードプロセッサとMAILアプリケーション,スケジューラを走らせておき,文書作成中にMAILの送受信,アラーム機能を同時に行わせることができます.
マルチタスクが使いものになるというかよくできてるなと思ったのもやはりWindows95以降からだった。Windows 3.1 のときはなるべく使わないようにした。使うときは片方のアプリで作業しているファイルを保存してから、別のアプリで作業していた。それで調子に乗って使っているとフリーズした。特に、今日は順調だなと思ったら必ずフリーズした記憶がある。
ASCII1987(02)c06OS環境占う_画面_W520.jpg
メモリ管理

 WINDOWSアプリケーションは,その強力なメモリ管理機能を利用することにより、効率的なメモリの活用を行うことができます.特にMS-WINDOWSはマルチタスクをサポートしているため、複数のアプリケーションが同時にメモリ内に存在することになります.そこでメモリ管理が必要になるわけです.
 たとえば,メモリに入りきらないような大きなプログラムが実行されても,KERNELが自動的にセグメントのロード/スワップを行うので,メモリサイズを意識した開発は不要です.また,複数のアプリケーションで共通のルーチンを使用している場合には,メモリ中の1つのルーチンを実行時にリンク(Dynamic Linking)することにより効率的にメモリ空間を使います。

MS-WINDOWSと
MS-DOSのアプリケーション

 従来MS-DOS上で動いていたアプリケーションをMS-WINDOWSではOldアプリケーションと呼びます.これらとWINDOWSアプリケーションとでは,かなり違った構造になっていますが(図1),OldアプリケーションもWINDOWSアプリケーションと同様に実行させることができます.
 MS-WINDOWSでは,Oldアプリケーションを2つの種類に分けています.ひとつはグラフィックVRAMを直接アクセスしているなどのハードウェアに依存した処理を含むものです.これをMS-WINDOWSではBadアプリケーションと呼んでいます.もうひとつはMS-DOSのファンクション・コールのみを使って書かれたアプリケーションで,これはWell-be-havedアプリケーションと呼ばれます。
 Badアプリケーションが起動された場合,当然MS-WINDOWSとハードウェア(システム・リソース)を共有できなくなります.そこでMS-WINDOWSは画面を一時的に退避し,ほとんどのメモリとハードウェアのハンドリングをBadアプリケーションに明け渡します.しかし,Badアプリケーションの実行が終了すれば、すぐに元のMS-WINDOWS環境が復元されます.
 Well-behavedアプリケーションの場合は,WINDOWSアプリケーションとまったく同様に区切られたウィンドウの1つを仮想的なコンソールに見立てて実行します。これはWINOLDAPと呼ばれるモジュールが,ひとつのウィンドウの中で従来のMS-DOSの環境をシミュレートすることで実現しています.
 それぞれのOldアプリケーションがBadアプリケーションなのかWell-behavedアプリケーションなのかという情報は、個々のアプリケーションに対するPIF(Program Information File)と呼ばれるファイルまたは、WIN.INIファイル(MS-WINDOWSの初期設定ファイル)中に記述しておくだけで、既存のプログラムになんら変更はいりません.
 Badアプリケーションの例としては,日本語ワードプロセッサやスプレッドシートなど、画面表示の高速化が必要なために直接画面に描画しているプログラムやグラフィックス・ツールなどが挙げられます.
日本語ワープロ、表計算ソフト、グラフィックツールを使っているユーザーが多い中、それらをBadアプリケーションと言われてもなぁ。
ASCII1987(02)c06OS環境占う_図1_W708.jpg
WINDOWS
アプリケーションの実行

 WINDOWSアプリケーションが実行される時,アプリケーションとMS-WINDOWSの間のやりとりは,通常メッセージ形式(ウィンドウ・メッセージ)で行われます。その際にアプリケーションがしとる手続きは、メイン・プロシージャとウィンドウ・プロシージャの2つです.
メイン・プロシージャはプログラムの実行を制御し,入力を受けつけ,ウィンドウ・プロシージャの実行を指示します.アプリケーションはメイン・プロシージれから送られていた入力を処理し,自分のウィンドウに表示します.これがウィンドウ・プロシージャです。
 ウィンドウ・メッセージはメッセージ識別子とパラメータからなるデータ構造を持ち,キーボードから入力される文字やマウスの動作,メニューの選択などはすべて,このメッセージを通してアプリケーションに送られます.
 WINDOWSアプリケーションは、必要な初期設定から始まり,常にシステムにメッセージを問い合わせ,それを実行するループ構造になっています.
 ウィンドウ・メッセージは、メッセージタイプ(WORD型,16bit),3ワードのメッセージ(WORD/LONG型32bit)からなり,WORDとLONGのパラメータの意味は,メッセージタイプによって異なります。

ASCII1987(02)c07OS環境占う_画面_W520.jpg
DDE:
Dynamic Data Exchange

 MICROSOFTでは前述のウィンドウ・メッセージを発展させ,アプリケーション間の自由なデータ共有のためのガイドラインとしてDDEプロトコルを提唱しています.これはエンド・ユーザーの操作を介さずに,アプリケーション間で独自にデータ交換を行わせるプロトコルです.
 利用例としては,データ更新のための情報交換をリアルタイムで行う時などに利用します。詳しいデータ構造や定義されているメッセージにはここでは触れませんが,簡単な例としてMS-WINDOWS上の株価情報アプリケーションを紹介しましょう.
 DDEでは、共有データを生成し送り出す側のアプリケーションを「サーバー」と呼び,受け取る側を「クライアント」と呼びます.サーバーは,Signalというアプリケーションで,クライアントはスプレッドシートです.スプレッドシートは図2のように設計されています.ここで新しい株価データを入手し,スプレッドシートを更新する場合,従来の方法ではクリップボードを使って,他のアプリケーションからスプレッドシートにユーザーがコピーするしかありません。あるいはユーザーが毎回Signalからスプレッドシートへテキストベースのデータ転送をするかというところです.
 これらのアプリケーションをDDEプロトコルに準拠して開発すれば,このシステムはもっと自動的になり,ユーザーが間に入らなくてもマルチプル・データの更新を行うことができます.また,サーバーとクライアントの間にダイアローグを用意して,キャッチした株価の変更を必要に応じてスプレッドシートに送ることができます.
 簡単なユーザーインターフェイスとして,スプレッドシートに他のアプリケー・ションに必要なデータを差し出してくれるかどうかを尋ねる機能を持っているとします.この機能を使用するための書式例を,
 @EXTERN(Server,Topic,Item)
とすると,スプレッドシートは次のように理解します。
@EXTERN(“SIGNAL”,Topic,Item)
 これはIBMと名付けた範囲が“SIGNAL.EXE"というサーバー・アプリケーションの持つ,“NYSE"という名の外部データと連結することを意味します。
 この結合が行われると,スプレッドシートは常に最新のデータをサーバーから得られることになり,タイムリーな方法でリアルタイムデータを“自動”分析しやすくなります.
 このような株価のリアルタイム処理は実際にMS-WINDOWSでシステムが構築されて使われています。
これこれ、最初に使おうと思ったのは凄い概念だ先進的な機能だと思って使ってみたのだが、期待通りの表示にならなかった。結局動的なDDEは使わず、データを変更したら再度貼り付けるという静的なコピペで対応していた。
ASCII1987(02)c07OS環境占う_図2_W520.jpg
ASCII1987(02)c09OS環境占う_画面_W520.jpg
開発ツールについて

 WINDOWSアプリケーションは,C,Pascal,アセンブリ言語で開発することができます(日電からはN88BASICとコンパチブルなWINDOWSBASICも提供されます)。
 標準的な開発ツールとしては“MSWINDOWS TOOL KIT”が提供されており,C言語を中心にWINDOWSアプリケーションの作成方法をサンプルソースを使いながら詳しく解説してあります。このキットの構成は、ライブラリ,開発用ユーティリティ,開発用アプリケーション,サンプル・アプリケーションのソースコード,デバッキングファイルから構成されています。
 ライブラリには、約400種類のファンクションを持つ,MS-Cコンパイラ用のもの,Pascal用のものがあります.これらはMS-WINDOWS開発専用のもので、通常のMS-Cコンパイラに付属するライブラリとは異なるものです.
 開発ユーティリティは,EXEファイルのヘッダ・デコーダ,リンカMake,リソースコンパイラとリンカ,シンボリックデバッガとそのシンボルファイル作成ユーティリティ,ライブラリ作成ユーティリティなどからなるものです.WINDOWSアプリケーションに使用するアイコンやカーソル,ビットマップを作成するICONEDIT,フォントファイルを作成するFONTEDIT,またMS-WINDOWSのメモリ管理の状態を確認することができるHEAPWALK,SHAKERなどもあり,これらユーティリティ自体もWINDOWSアプリケーションとなっています.
 MS-WINDOWSは高度な機能を持ち、大きな可能性を持つシステムですが,TOOL KITには初心者のために6つのMS-C用サンプルプログラムとPascalのサンプルプログラムが1つのソースコードで供給されます.もちろん,すぐにすべてのファンクションを使いこなすことはむずかしいでしょうが,これらのサンプルソースを理解し終わった頃には,MS-WINDOWSを一通り理解しているでしょう。
 冒頭で述べたようにMS-WINDOWSはKERNEL,USER,GDIの3つのメインモジュールから成り立っています.キットにはアプリケーションのデバッグ用にこれらの3つのモジュールの特殊なバージョンとそれぞれのシンボルファイルが含まれます.このデバッグ用モジュール-を使うことで,実行中のMS-WINDOWSとアプリケーションの動作状況をRS-232Cポートに接続したデバッグターミナルで追跡することができ,効率的なデバッグが可能です。

WINDOWS
アプリケーションの作成

 前述のようにMS-DOSのBadアプリケーションは,MS-DOSファンクションコールを使わずに直接ハードウェアにアクセスしているために,アプリケーション内部にマシンに依存する特殊なルーチンを持たねばならず,他機種との互換性,移植性の低いものでした.しかしMSWINDOWSではWINDOWSアプリケーション作成のために,豊富なファンクションをもつライブラリ(MS-C用)を用意しており,すべてをMS-WINDOWSのファンクションで行う限り「完全な異機種間の互換性」を保証しています。
 WINDOWSアプリケーション作成上の第1の特長は,デバイスドライバやメモリマネージャなど,本来のプログラミングに関係のないモジュールの作成が一切不必要だということです.図3のように,従来のアプリケーション開発には、プロ「グラム設計やメインモジュールのコーディング以外に多くの時間を費やす必要がありました。これら下位モジュールの作成は,プログラミングの練習にはなりま-すが,このために中核となるプログラム|がおそろかになったり,製品出荷が遅れ「たり,大きな仕様変更を強いられて,苦い思いをしたプログラマも数多いことでしょう。これらのモジュールはすべてMS-WINDOWSが標準的に装備しているため,WINDOWSアプリケーションの開発者は本来の仕事であるプログラム設計に集中できるわけです.
第2の特長は、リソースファイル(メッセージ,メニュー,コマンド,ダイアローグボックスなどの内容や表示座標を記述したもの)が完全に分離されていることです.コマンドやメッセージに間違いがあったり,ダイアローグボックスを設計しなおす場合には,アプリケーショーンのソースコード自体を修正したり,再・コンパイルする必要がなく、後からリソースファイルだけを修正し,再リンクを行えばよいのです。
たとえばアメリカ製のWINDOWSアプリケーションを日本で販売しようとすれば,2バイト文字のハンドリングとリソースファイルを修正するだけですみます.また日本で作られた2バイト文字のハンドリングが可能なWINDOWSアプリケーションならば,リソースファイルの修正だけで,韓国や中国の2バイト文字圏向けバージョンを作ることが可能です。
MS-Cコンパイラを使ったアプリケーション作成手順は,
1 ソースプログラム作成。
2 MS-Cでコンパイルする。
3 MS-WINDOWS TOOL KITのICONEDIT,FONTEDITなどのユーティリティを使って,アイコンやフォントなどのアプリケーション用リソースを作成する.
4 メニューやメッセージなどのリソースファイルを作成する. 5 RCコンパイラを使ってリソースファイルをコンパイルする.
6 リンカを使ってそれぞれのオブジェクトをリンクする.
といった手順となり,特別な作業を必要としません。
 MICROSOFTCでは,MS-WINDOWSをMS-DOSを拡張する標準的な環境として位置づけています.MS-WINDOWSの環境下で動作するアプリケーションが増-加することにより,ユーザーは種々なアプリケーションをまったく同じ操作で使用でき、簡単にアプリケーション間のデータ交換ができるようになるでしょう.また,開発側の負担も大幅に減少し,より優れたアプリケーションが登場してくるのではないでしょうか.

ASCII1987(02)c09OS環境占う_図3_W520.jpg
読み返してみるとWindowsが魅力的に見える。まあ、しかし、まともに使えるようになるのはWindows95からだったが。なんだか初期のWindowsはユーザをテスターとして利用していたのではないかとも思える。高い金を払ってテストしているのでは割に合わないのではなかったか。
ただマシンもテスターとしてユーザは金をつぎ込んできた。当時知人との会話で「俺たちが金を払ってマイコン産業を支えているんだ」とか言っていた。マシンなら性能が低くてもそれに適応した良いソフト主としてゲームだけどが登場してマシンを使っていた。だから、単純に損をしていたとは思わなかった。
事務処理ではワープロなら一太郎、表計算なら1-2-3でDOSは2.11とか3.1とかで十分だった。マルチタスクはできなくてもアプリ側で2画面用意して複数ファイルを同時に使って作業できた。ただし、複数のアプリを同時には使えなかった。アプリの切り替えを高速にできるようにするためはRAM-diskにアプリを登録していた。だからプロテクトがきついものはRAM-diskに置けなく使い勝手が悪いので購入しなくなった。
nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。