-2 - みる会図書館


検索対象: 月刊 C MAGAZINE 1990年3月号
168件見つかりました。

1. 月刊 C MAGAZINE 1990年3月号

売行き好調な OS / 2 関連書 今月は OS / 2 に関連した本を紹介します。 いうまて、もなく , OS / 2 は 1987 年に IBM と マイクロソフトが共同開発した OS て、 , 次世 代オペレーティングシステムとして脚光を 浴びて登場しました。しかし , OS / 2 環境を 設定するために必要なシステムが高価て、あ ること , OS/2 自体の環境が整っていなかっ たことなどのため , なかなか普及しません て、した。システムが安くなってきたことが 最大の要因て、しようか , ' こにきてやっと OS / 2 の普及のテンポが加速されてきている ようて、す。 富士ソフトウェアを 中心に展開 具体的な話に入りましよう。 まず , 昨年 10 月に出た『 OS / 2 プレゼンテ ーションマ不一ジャ』 ( 富士ソフトウェア ) が , 10 月のコンヒ。ュータ関連書ベスト 3 位 になるなど , 秋以降 OS / 2 関連書の動きがよ くなっています。とくに , 富士ソフトウェ アの OS / 2 関連書 ( 『 OS / 2 入門』 , 『 OS/2 API プログラマーズブック』 , 『 OS / 2 デバイスド ライバ』など ) は入門から応用まて、幅広い ラインナップがそろい , 読者から強い支持 を受けているようて、す。 富士ソフトウェアの本以外て、も , 6 月以 10 0 OK S 0 0 書自体は点数も多く , また動きもいいのて、 OS / 2 関連書て、とくに注目されるのは , 洋 判がいいようて、す。 2 とは何か』が , 読みやすい入門書として評 学社 ) などがあります。このなかて、は『 OS/ ブック』 ( 日本技術出版 ) , 『 OS / 2 』 ( 近代科 社 ) , 『 PC9800 シリーズ対応 OS / 2 入門ガイド ー ) , 『 OS/2 プログラミング』 ()C 出版 チタスキング OS / 2 がやってきた / 』 ( アスキ 2 プレリリースセミナ』 ( アスキー ) , 『マル OS / 2 操作ガイド』 ( 啓学出版 ) , 『日本語 OS / 版 ) , 『 OS/2 とは何か』 ( 日本実業出版 ) , 『 MS クロソフト OS / 2 戦略の全貎』 ( 工ーアイ出 ( 電波新聞 ) , 『 OS / 2 入門』 ( 培風社 ) , 『マイ 2 入門』 ( 共立出版 ) , 『日本語 MSOS / 2 入門』 図書 ) , 『 MSOS / 2 の使い方』 ( 工学社 ) , 『 OS/ そのほかに『日本語 OS / 2 と C 言語』 ( 工学 から , 売れ行きに拍車がかかりました。 バンク ) は『 OS/2 APII ック II 』が出て ます。『 OS/2 APII ック I 』 ( 日本ソフト 編 ) 』 ( 技術評論社 ) がすて、に重版されてい 論社 ) や『 OS / 2 標準テクノバイプル ( 基本 2 オペレーティングハンドブック』 ( 技術評 きも良好て、す。たとえば , 7 月に出た『 OS/ 降 , OS / 2 関連書の刊行が多くなり , 売れ行 株書泉 / 古田島義和 書店リボート OS/2 関連書て、は Microsoft Press と 次に洋書をみていきましよう。 ー OS 2 関連の洋書 すが , 翻訳書が少ないということて、す。 OS / 2 関連書のベスト ( 書泉グランテ ) 1 2 3 4 5 6 7 8 9 10 OS / 2 プレセンテーションマネージャ』富士ソフトウェア ( 3800 円 ) OS / 2 標準テクノバイプル ( 基本編 ) 』技術評論社 ( 2524 円 ) OS / 2 オペレーティングハンドブック』技術評論社 ( 2718 円 ) OS / 2 テパイスドライバ』富士ソフトウェア ( 2 繝円 ) OS / 2 入門』富士ソフトウェア ( 2 円 ) OS / 2 A 曰ブック I 』日本ソフトバンク ( 2709 円 ) OS / 2 API プログラマーズブッグ富士ソフトウェア ( 2800 円 ) OS / 2 API ブックⅡ』日本ソフトバンク ( 2913 円 ) OS / 2 入門』共立出版 ( 2000 円 ) OS / 2 とは何か』日本実業出版 Q301 円 ) Addison-Wesley の本が点数て、も , 売れ行き て、も他社の追随を許しません。 まず , Microsoft Press の本て、は『 Mi crosoft OS/2 Programmer's Reference Library 』 ( V01.1—Vol. 3 ) が , 仕入れるそ ばから売れているという感じて、す。これは OS / 2 のマニュアルて、 , OS / 2 プログラマ必携 の本なのて、 , 当然なのかもしれません。今 年 1 月には V 矼 4 が出ました。そのほかて、 は , 『 Advanced OS/2 Programming 』 , Programming the OS/2 Persentation Manager 』も評判のいい本て、す。 次に Addison-Wesley の本て、は , 『 Writing OS/2 Resident Utilities 』 , 『 Writing OS/2 Device Drivers 』が売れています。ただ 入門解説書が売れているのに対して , もう 一歩踏み込んだ内容の本 , たとえば『 Soft ware Tools for OS/2 』などは今一歩とい うところて、す。 IBM の OS / 2 のマニュアル『 The IBM OS/2 Extended Edition Database Manager 』が 12 月に出ました。 そのほかて、は , 『 OS/2 Database Man ager 』 (J0hn Wiley) , tRunning OS/2 』 『 Ranade' s OS/2 』 (Bantam) , 『 The OS/ 2 Programming Env iroment 』 ( Pretice OS/ / 2 ・を に売れました Guide 』 , 『 Using OS/2 』の 2 冊が飛ぶよう McGraw の『 OS/2 Programmer*s そういえば , OS / 2 が登場した 2 年前 , HaII) も評判がいいようて、す。 BOOK SHOP REPORT 141 蓄まソフト 0 工ア

2. 月刊 C MAGAZINE 1990年3月号

ミングインタフェイス (FAPI) と呼んて、お り , BIND という OS/2 用のユーティリティ を使えば FAPI て、作成された DOS 用のアプリ ケーションプログラムを OS / 2 て、も稼動させ ることが可能になる。ただしこれは , MS- DOS ( 互換ポックス ) のアプリケーションを OS / 2 上て、動かすことに重点がおかれてお り , OS / 2 の本来の機能を発揮させるものて、 はない マイクロソフトの C コンパイラ MS-C Ver. 5.1 は OS / 2 上て、コンパイルとリンクを 行うことがて、きる。 MS-C のパッケージには DOS 用と OS / 2 用が組み合わされて販売され ており , OS/2 用プログラムの開発はもちろ んこの MS ー C を使って OS / 2 上て、もて、きる が , DOS 上て、も可能になっている。 OS/2 の ライプラリを使えばよいのだ。なお , この OS / 2 用のライプラリは OS / 2 のソフトウェア 開発ツール (SDK) にしか提供されていない のて、注意を要する。ちなみに , QuickC て、は OS / 2 用アプリケーションの開発は不可能て、 ある。 リムレモードと プテクトモード 80286 / 80386CPU には , リアルモードとプ ロテクトモードというふたつのモードがあ る。これについては次項て、説明するが , 簡 単にいえばリアルモードは 32 ビット CPU を 16 ビット CPU にして使うモードて、 , プロテ クトモードは複数のプロセスを動かすため の機能を付加したモードといえる。さらに 単純に図式化すれば MS ー DOS はリアルモー ドを ,OS/2( や UNIX などのマルチタスク OS ) はプロテクトモードを利用する。したがっ て , 286 / 386 マシンがあっても , MS-DOS を 動かしているかぎりて、はプロテクトモード が使えないのて、 , たんなる高度 8086 マシン て、しかない。 OS / 2 はプロテクトモードを利 用するために , 286 の機能を使うことがて、き るし , 386 に対応て、きるようになれば DOS 互 34 CMAGAZINE 19 3 MS-C 換ポックスて、はリアルモードを利用するこ ともて、きる。 286 て、はプロテクトモードに入 ると , リセットしないかぎりリアルモード には人れないのて 286 の DOS 互換ポックスは ソフト的に実現するしかないが , 386 ならば リセットすることなしにリアルモードに移 ることが可能だし , 仮想 86 モードが追加さ れたのて、 , 386 上から 8086 モードを利用する ことがて、きる。 このように OS / 2 て、は , このふたつのモー ドを使用て、きるが , いうまて、もなくプロテ クトモードのほうが OS / 2 の本来の機能をは るかに発揮させるプログラムを作ることが て、きる。 また , このモードて、は , コンパイル / リン クそして実行という MS ー DOS 上て、同様の操 作を行うスタティックリンクという一般的 なプログラムの作り方以外に , 先に述べた OS / 2 本来のダイナミックリンクという方法 て、プログラムを作ることがて、きる。 リアルモードて、動くリアルモードプログ ラムの作成については , 作り方は同じだが , 呼び出す関数がいくっか異なっている。そ れゆえリアルモードつまり DOS 互換ボ、ツク スは , そこて、プログラムの開発を行うのて、 なく , 既存の DOS プログラムを動かすため に使うほうが適切て、あろう。したがって , DOS 互換ポックスを用いる際 , どのような プログラムが動くか , みきわめておく必要 がある。 実際には , 日本電気の OS / 2 Ver. 1.1 バ ージョンと PC ー 98RA2 十 80MB を基本にして 調べた。この Ver. 1.1 滝バージョンは , 正式 に出荷されるものと多少の違いがあるよう だ。筆者が本特集を書いている時点て、は , まだ出荷されていないのて、詳しいことはわ からない 0 S / 2 上での開発 OS / 2 上て、のプログラム開発は , マイクロ ソフトの MS-C Ver. 5.1 を使うのが一般的 て、ある。そうて、なければ , 日本電気より出 荷されている Ver. 5. IA を使う必要がある。 現在 , 市販されている MS ー C Ver. 5.1 に は , MS ー DOS 上て、開発を行う今まて、の MS ー C と OS / 2 上て、コンパイルが可能な MS ー C が同 じパッケージに組み込まれている。したが って , 使用する際はこれを使い分けねばな らない。もちろん OS / 2 て、コンパイルとリン クをする以外に MS ー DOS 上て、 OS / 2 用のプロ グラムを作ることもて、きる。どちらにして も使うライプラリは , OS/2 用のものを使わ ねばならない。これは余談になるが , MS- C Ver. 5.1 をインストールするときに , フロ ッピーディスクをそのままコピーしてはい けない。 MS-C Ver. 5.1 には , 必ずインス トール用のプログラムが添付されており , そのプログラムを使用しなければならない ディスクからそのままコピーしたものて、は 結合ライプラリの作成がて、きないために 「ライプラリがない」というメッセージが 出て , 新たなライプラリ名の入力待ちにな ってしまう。 もちろんリンカも OS / 2 用が提供されてい る。 OS/2 におけるプログラムの開発は , のように環境整備が非常に重要になってく る。しかも , このような開発に関する環境 整備の情報が , OS / 2 のマニュアルにも MS -C Ver. 5.1 のマニュアルにもほとんどな い。試行錯誤の世界て、ある。バージョンが 変われば環境整備もほとんどやり直しに近 くなってしまうのて、ある。 実行ファイルのヘッダい MS-DOS 用のプログラムを OS / 2 上て起動 させると , 次のメッセージを出力して OS/2 のプロンプトに戻ってしまう。 SYS1107 : プロセスを正常に終了することてきません また , OS / 2 用のプログラムを MS - DOS 上 て、実行させると , やはりメッセージを出力 して DOS のプロンプトに戻ってしまう。 のとき , 出力されるメッセージがいくっか 異なっている。 MS ー DOS て、は使用て、きません This program cannot be run in DOSmode. This program requires OS/2 Presentation Manager. これは OS / 2 を PC ー 9801 シリーズに移植し 日本語化するときに生じたものと思われる。

3. 月刊 C MAGAZINE 1990年3月号

をお勧めしたい OS / 2 の将雜 マイクロソフトは , OS/2 をあくまて、も MS -DOS にとってかわる OS として , すなわち パソコン界の OS のシェアを確保するための 道具として位置づけている。工ンドユーザ Fig. 1 インテル CPU の流れ 0 には何の関係もないことだが , プログラム を作る人たちにとっては , OS / 2 の動向から 目を離すことはて、きないだろう。 今後 OS / 2 はいろいろいろな方向に発展す ることが予想されるが , それは , OS / 2 が MS -DOS よりもはるかにすばらしい素質と将来 性をもっているためて、ある。 OS / 2 の暗い部 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 32 CMAGAZINE 19 3 8088 80188 4004 8008 8080 8085 8086 80286 80386 80486 80586 80186 分ばかりにスポットをあててきたが , そう した現実と将来性とは別物て、あるという認 識が必要だ。 たしかに , OS/2 は技術的にはそれほど高 度なことは行われていない。現在まて、に 高級 OS としてさまざまな技術が開発されて きたが , OS / 2 は過去に確定した手法をその ほとんどの機能に採用している。プロセス 管理や仮想記憶 , さらにはページングや保 護機能などて、ある。これらの手法は , どの OS て、も用いられているものばかりて、ある。 このため , OS / 2 に OS としての技術的な興味 をあまりもてないのが正直なところて、ある。 て、は , 新しい OS としての将来性をどこに 求めることがて、きるのか。 OS/2 は必要に迫 られて生まれてきたものて、はない。すて、に 述べたように , マイクロソフト , IBM, イ ンテルがそれぞれパソコン市場て、自分たち のシェアの保持および拡大を目指すという 思惑がからみ , インテルー IBM ーマイクロ ソフトという 3 巨頭体制の構図を作り上げ うしたバ、ツクポ ーンの上に , 80386 ( 80486 ) —PS/2—OS/2 と いう未来図が描けるからこそ , OS / 2 の将来 は強いといえるのて、ある。今後の OS / 2 の普 及いかんによっては , かなりの影響を市場 に与えることになる。もし OS / 2 が失敗する とすれば , この 3 巨頭の歴史に大きなマイナ スイメージを残すことになるだろう。 新い OS として たことは先ほど述べた。 の長 はじめに OS / 2 は , MS ー DOS の限界を打ち破る使命 をもった新たな OS といえる。 MS-DOS の限 界は , その上て動くアプリケーションソフ トによって徐々に明らかにされていったが , それはアプリケーションソフトの高機能化 がもたらした副産物ともいえる。 MS-DOS の限界は , よく知られているようにメモリ とマルチタスクの問題が代表的だ。 MS ー DOS が 16 ビット 8086CPU の機能に依存している

4. 月刊 C MAGAZINE 1990年3月号

00 最新 / 入門 40H をさしていることて、区別しているからて、 ある。さらに , OS/2 のプログラム開発て、 は , タイニーメモリモデルを使用すること がて、きない。そのため , 残る 4 つのメモリモ デル ( スモール , ミディアム , ラージ , ヒュ ージ ) しか使うことがて、きない 引 ND による作成方法 .3 Fig .2 . EXE ヘッダの動き Fig 18H 旧 19H X 形 3CH 40H XXX ℃ 40H コンバイル / リンク OS / 2 旧 . EXE ヘッダ FAPI . EXE 新 . EXE ヘッダ すて、に述べたように OS / 2 には , リアルモ ードとプロテクトモードの両モードて、実行 する機能がサポートされている。そのひと つに FAPI がある。 FAPI が使用されるプロ グラムの中て、は , DOS のメモリマップを OS / 2 用にエミュレートさせながら API を動かす のて、ある。だが , これだけて、は実際にはま だダメて、 , 最終的には BIND という OS/2 の ユーティリティにかけなければならない これて、プロテクトモードとリアルモードの 両方に動くプログラムが完成したことにな る。もっとも , この FAPI にはかなりの制限 があり , しかも含まれる関数は非常に少な い。 BIND の機能の意義は , OS / 2 用のプロ グラムを MS ー DOS て、も実行て、きるようにす ることて、 , プログラム中のダイナミックリ こうするこ ンク関数をすべて結合させる。 とて、 , ひとつの完結したプログラムを作り , MS ー DOS ても実行するようなプログラムに することがて、きるのて、ある ( Fig. 3 ) 。 両方のモードて、実行するためのもうひと つの機能として , スタブプログラムと呼ば SYC2. EXE れる方法がある。 FAPI による方法ては , ひ とつのプログラム内に両モードて、動く同じ スタブプログラム モジュールが存在していたわけて、はない ところがスタグプログラムによる方法て、は , 変更される可能性があるものの , いちおう いずれにしてもメッセージの内容はどちら 最終的に OS / 2 用のモジュールと MS-DOS 用 MS ー DOS の仕様に合わせている。さて , も同じようなものて、あるが , ューザにとっ のモジュールをひとつにまとめ , どちらの の . EXE ヘッダの動きは Fig. 2 のとおりて、あ てはなんともめんどうくさいことて、ある。 モードても実行させることがて、きるように このバージョンは滝バージョンなのて最終製 る。 するのて、ある (Fig. 4)。 この OS / 2 用の . EXE ヘッダは OS / 2 に読み 品に反映されているかどうかはわからない 込まれると , まず旧 . EXE ヘッダの値を参照 これらのメッセージの表示には , それなり する。そして , そのオフセット値が示すと の仕掛けがある。 MS-DOS の . EXE ヘッダ ころに新 . EXE ヘッダが存在する。もし MS は , 本誌連載の「 MS-DOS プログラミング -DOS がこの OS / 2 用の . EXE ヘッダを参照し 入門」の第 1 回て、示したとおりてあるが , たとすると , このプログラムは OS / 2 用て、あ OS/2 はこの MS ー DOS ヘッダの拡張した形式 ると判断する。これは 18H ー 19H にある値が を現在まて、のところ採用している。将来は 拡張形式 BIND API. 凵 B . EXE Fig. 4 定義ファイルによるスタブプログラムの作成方法 SYCI ℃ SYC2 ℃ コンバイル / リンク DOS コン / ヾイル OS / 2 SYC 1. EXE 定義ファイル XXX. DEF STUB' SYCI. EXE' リンク OS / 2 参照 メリ管理 OS / 2 のメモリ管理の機能は , インテルの 286 に基づいている。 286 の説明については , 特集最新 OS / 2 入門 35

5. 月刊 C MAGAZINE 1990年3月号

(collision) と呼ぶ。テープルのサイズを大き くすれば衝突を最小限にすることがてきる。 つまりテープルがほとんど空て、あれば , 新 しい対象データは , すて、に存在している対 象データと衝突しにくい。しかし , 通常は 使用て、きるメモリ容量には実用上の限界が あり , テープルサイズを大きく確保するこ とは難しい。したがって , ハッシュ法の時 間的複雑さは , 衝突をいかに効率よく解決 て、きるかに大きく依存しているといえる。 そこて、 , 衝突を避けるために第 2 次の関 数を使用する。 1 次ハッシュ法によって求 めた値に 2 次ハッシュ法による値を加算し , それを新しいアドレスとする。それて、も衝 突する場合には , そのアドレス値に 2 次ハ ッシュ値を加算する。最終的に , 空のスロ ットが見つかれば , そこにデータを書き込 む。 最良のハッシュ関数は , 衝突を最小限に するような , もっとも単純な演算て、あると いえる。クヌースはいくつかのハッシュ関 数について検討し , もっとも優れた方法は , モジュロ演算 ( 法の演算 ) を基本とし , かっ テープルサイズの選択を配慮することが必 要て、あると述べている。テープルサイズが 素数て、あれば , テープル内に均一に対象デ ータが分配される〔訳注 : 素数て、なくても均 等になるが〕。 1 次ハッシュ関数は , HI [data] = data MOD tablesize となり , さらに正確には , HI [data] =map [data] MOD tablesize となる。ここて、 , map はキーのデータから整 数を導く任意の関数て、ある。 2 次の関数は , 決して 1 次の関数と一致 してはいけない。このような一致を避ける ために , テープルサイズに対してたがいに 注意しなければならない点は , 有限のテ 素 (relatively prime) て、ある数を選ばなけれ か , 否かにかかわらず , 同じ検索を行う。 ープルを使用するときに ( ふつうはこのケー ばならない。そうすれば , テープルの任意 したがって , ハッシュ法の LOOKUP に関す スて、ある ) , ふたつ以上のキーが同じひとつ のアドレスから開始して 2 次ハッシュ関数 る時間的複雑さは , ハッシュ関数を計算す のアドレスに書きとめられる場合があると 値を繰り返し加算していくことて , ほかの る時間て決定され , テープルの大きさには いうことだ。この重複した書き写しを衝突 すべてのアドレスに到達することがてきる。 依存しない アルゴリズム D の疑似コード ( ふたつのマップ関数 , H 1 と H2 を定義する ) I NSERT 燔 address = HI (data) 2 : if table[address] is empty 3 : insert data in table[address] 4 : else 5 : address = HI (data) + H2 (data) 6 : while tab 厄 [address] i sn ・ t empty 7 : address = address 十 H2 (data) 8 : 9 : end ⅶⅱ e end i f insert data in table[address] 13 : し OOKUP 燔 address = HI (data) if table[address] isn ・ t equal tO data then address = HI (data) + H2 (data) ⅶ ile table[address] isn ・ t equal tO data and table[address] isn ・ t empty address = address + H2(data) end while end i f if table[address] is empty then 22 : return empty 24 : e 1 se return table [address] 25 : 26 : end i f List 1 プレント法の疑似コード LlSt 2 : INSERT 燔 address = H 1 (data) depth while table[address] isn ・ t empty address = address 十 H2(data) increment (depth) end while i f depth く 2 then tab le[address] = data e ー se address = HI (data) for i = 0 to depth address2 = address + H2(table[address]) depth2 while depth2 く = i and tabIe[address2] isn't empty address2 = address + H2 (table [address] ) increnent (depth2) end while i f depth2 く table [address2] return end if address = address + H2(data) end for tab le[address] = data end i f insert data in table[address] 一 1 り 0 っ 0 -4 - -0 6 7- 8 0 1 ワ 0 っ 0 -4 ′ 0 6 ー 8 9 0 、 1 っ 0 っ 0 4 ′ 0 CD ー 1 よ 1 1 よ・ 1 14 -1 1 1 1 1 2 っ 0 っ 0 つなっ 0 っっ 0 ? = table [address] 0 テープルのなかのテープル 23

6. 月刊 C MAGAZINE 1990年3月号

の置換が成立しなければ , 2 番目の要素に 74 : 75 : 88 : 90 : き , 厄介な詳細はすべてプライベート部に List 3 / / 比較する関数と写像する関数のストア this->map map : th iS— >compare = compare : / / 挿入回数の初期化 inserted 80 : / / プレント法によるハッシュテープルへの要素の挿入 81 : void hashtab: : insert(void *element) { size-t mapped-val, hl, h2. depth• i : size-t c2,cur2,depth2; / / テープルの空スロットを探すためのテストの表現 = empty Ⅱ table[(x)] = = deleted) 87 : # define VACANT(x) (table[(x)] / / テープル満杯チェックーいつもテープルに少なくともひとつの空スロットが / / 残されていること ( さもなければ , 満杯のテープルで永遠にキーを 96 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : / / 永遠に探しつづけなければならない ) if( 十十 inserted = = tablesize) { cerr くく "hash table fuIlYn ” exit(l); / / キーから値への写像と , 1 次ハッシュを行う。 = map (element) : mapped-va ー mapped-val % tables ize; / / 2 次ハッシュ (mapped-val % (tables ize / / 衝突リストの長さ計算 for(cur = hl. depth = 0 : !VACANT(cur); cur = / / テープル内に要素がすでにあれば置換して戻る if(compare(element, table[cur]) table[cur] = element; return; depth + + : / / 衝突リストが長くなければ要素を格納する if(depth く 2 ) { tab 厄 [cur] element; return : (cur + (2) % tablesize) i く depth; i 十十 , cur for ( i = 0. c ur = h 1 : / / 衝突リストの現在の要素の第 2 次のハッシュ値 c2 = (map(table[cur]) % (tablesize ー ( hl + h2 ) % tablesize) { depth2 + + , cur2 (cur2 十 (2) % tablesize) !VACANT (cur2) & & depth2 ← for(depth2 = 0 , cur2 (cur + (2) % tablesize; / / 挿入しようとする対象データよりこのテープルの要素の方が少ない移動なら実行 / / ここに挿入して検索を改良 i f (depth2 く = は要素を格納した空スロットのインデックス tabIe[cur2] = table[cur] : break : / / 終了状態 : cur 注目する。同様に , 2 番目の要素がその対 象データの衝突リストにおいて 2 か所より少 ない移動て、空て、あれば , それと置き換える。 一般に , 対象データの衝突リストのなか の n 番目の要素が , その対象データの衝突リ ストて、 n 回より少ない移動て、空て、あれば , そ れを置換する。これは置換されるもとの対 象データにとってはアクセス時間を増加さ せることになるが , 挿入する対象データに とってはアクセス時間の減少をもたらし , 単純なアルゴリズム D を実質的に改良するこ とがて、きる。このような置換を繰り返して いくと , すべての要素について衝突リスト の長さが等しいものになっていく。 LOOKUP の最悪の場合の性能は , 最大の 衝突リストの長さと直接比例関係にあるか ら , このプレント法により改良されたテー プルは , それぞれの挿入のときに衝突リス トの長さをて、きるかぎり等しくしようとし ているのて、 , 総合的に速い検索がて、きると いえる。アルゴリズム D よりプレント法が優 れていることの証明は , 読者への宿題とし ておこう〔訳注 : 参考文献に Brent,R. P. Reducing the retrieval time Of scatter storage techniques, C. ASM, 16 ( 2 ) ・ pp. 105 ー 109 , 1973. をあげておこう〕。 一般的なハッシュ法に興味をもた れたならば , クヌースの著書の「ハッシュ法」 の章を読むことを勧める。その論は読んて おもしろく , 完璧なものて、あるといえよう。 C 十十とプレント法 C 十十のクラスの仕組みを用いれば , 抽象 データのインプリメントに関する詳細を完 全に隠す (hide) ことがて、きる。つまり , クラ スにはパプリック部 (public part) とプライ べート部 (private part) があり , データ型に ついて , 許される操作をパプリック部にお ァープルのなかのテープル 25

7. 月刊 C MAGAZINE 1990年3月号

00 最新 , 入門 するしかなかったが , OS / 2 て、は , 親子を同 時に動かすことがて、きる。この親子のプロ セスが行うことのて、きる範囲は非常に広い ことからくる制限て、ある。したがって , 新 しい OS は新しい CPU を必要とする。それが 80286 て、あり , 80386 てある。 OS / 2 は最終的 には 80386 の上て、動かすことを目的としてい るが , 現時点て、は , 286 版をベースにした標 準版が提供されている。 一般に OS / 2 を稼動させるためのシステム ・ 20MB 以上のハードティスク ・ 4MB 以上のメモリ ・ 1 台以上のディスクドライプ ・マウス が必要だ。そのほかに , ディスプレイやキ ーポードなども必要なのはいうまて、もない PM の基本システムに最低限必要なメモリは 4MB, ハードディスク容量は IIMB て、ある。 これに DOS の互換ボックスを使用すると , さ らにメモリは 0.5MB , ディスク容量は 2.5MB はよけい必要になる。しかもこれは最低限 必要な容量て、ある。したがって , EXECL や 123 のようなアプリケーションを OS / 2 上て、使 うユーザは , さらにそれ以上のメモリやディ スク容量が必要になってくる。そのうえ , LAN マネージャなどの拡張版を使用するなら , さ らにメモリとディスク容量が必要となる。 OS / 2 のシステムは , MS ー DOS のファイル システムをそのまま使用している。したが って , OS / 2 専用のハードディスクは MS-DOS のコマンドて、も見ることがて、きる。パーテ ーションを切ってひとつのハードディスク を MS ー DOS 用 , OS / 2 用に分割することも可 能だ。 OS / 2 の特長のひとつに DOS 互換ポッ クスがあるが , これは OS / 2 のモードから MS -DOS を実行させることがて、きるというもの て、ある。ただし , DOS 互換ポックスて、 MS ー DOS を使用するためには OS / 2 立ち上げ時に CONFIG. SYS の中て、 OS / 2 はもちろんのこ と , 使用する MS ー DOS の両方の環境設定を すべて登録しなければならない AUTOEXEC. BAT は MS-DOS だけしか 使用せず , 0S/2 の場合は STARTUP. CMD というバッチファイルが使われる 00S/2< 0 / 2 の は , バッチファイルとして . CMD という拡張 子を用いている。 . BAT だと MS-DOS のモー ドと区別が難しいと思われるからだ。さら バッチコマンドがいくつか追加された。 また , OS/2 そのものはダイナミックリンク によって作成されている。これについては 「ダイナミックリンク」の項を参照してほ 0 / 2 ・スレッド ・プロセス ・スクリーングループ OS / 2 には重要な概念として , しい スの生成時に親プロセスは一時停止か消滅 成があげられる。 MS-DOS て、は , 子プロセ プロセスの機能としては子プロセスの生 これが分割の基準となる。 実行する長さがスレッドの単位になるのて、 , れるのだろうか ? CPU が一度に連続して とがて、きる。ては , どの程度の分割がなさ ッドはその作業を分割したものと考えるこ かの作業が含まれているといえるが , スレ 成されることもある。プロセスにはいくつ ひとつのプロセスはひとつのスレッドて、形 のスレッドが集まってて、きたものて、ある。 ドという。つまり , プロセスは , いくつか このプロセスを構成している単位をスレッ メモリ容量 , 特権レベルなどがあげられる。 この資源の代表的なものとして , 使用可能 て、きるすべての資源を総称したものて、ある。 セスとは , ロードされたプログラムが保持 を発生させるからて、ある。こて、いうプロ の書き込みについては , 物理的なアクセス マウスイベントの取得 , そしてスクリーン 作業を形成する。キーポードの読み取り , スと結びついており , これによりひとつの また , このスクリーングループはプロセ は仮想的に保持される。 ループはこのうちのどれかひとって、 , 残り れる。ユーザが使用しているスクリーング し , 最大 16 組まて、 OS / 2 によってサポートさ イスプレイ , キーポード , マウスの 3 つをさ の 3 つがある。スクリーングループとは , デ ため , こて、はそのすべてを網羅すること はて、きない たとえば , 親プロセスが使用 していたスクリーングループを子プロセス て、用することも可能て、ある。 DLL MS-DOS て、は , 実行時にライプラリや必 要なファイルはリンクの際にすべて結合さ れていなければならなかった。 ところが , OS / 2 て、は , 実行時に必要なライプラリをデ イスクにあるライプラリファイルから抜き 出し , メモリ上て、結合させて , プログラム を稼動させる方法が提供された。これをダ イナミックリンクライプラリ (DLL) とい う。この方法だと , ほかのプログラムが同 じライプラリを使用する場合て、も , メモリ 上にはひとつのライプラリがあるだけて、よ く , 後はすべて OS / 2 が行ってくれるように なる。さらに DLL て、は , プログラムとライ プラリのリンクと同様にライプラリとライ プラリのリンクもメモリ上て、行われるのて、 , ほかの DLL の参照も自由に行うことがて、き る。 OS/2 のカーネルには DOSCALLS とい う名前の DLL が提供されているし , OS / 2 の 主要なサプシステムて、あるキーボ、一ドやビ デオ , さらにはマウスも DLL て、ある。 OS / 2 て、は , 当初 MS-DOS のように割り込 みを基本とした関数呼び出しを行っていた が , アプリケーションプログラミングイン タフェイス (API) といわれるどの OS / 2 て、も 共通した呼び出しが提供されるようになっ た。この API は OS / 2 のバージョンによって だいぶ変化している。その違いを知るには , 実際にひとつひとつ試すしか方法がない また , 日本語特有の API も検討されており , 現在て、はそのドラフトが作成されている段 階だ。さらに , DOS 互換ポックスの MS-DOS て、使用するための API も提供された。これ を , ファミリーアプリケーションブグラ 特集最新 OS / 2 入門 API

8. 月刊 C MAGAZINE 1990年3月号

00 最新ー 2 入門 2 の戦略は , それほど際立ったものとはいえ ために , OS / 2 には 386 の機能をかなり取り込 力のハードウェアのアーキテクチャの違い ず , どちらかというと IBM のほうが熱心て、 から移植に時間がかかってしまう。開発の もうとしているのがわかる。その最たるも ある。 386 のライセンスは IBM 以外には提供 段階から日本側の意見を取り入れ , 移植を ののひとつに仮想 8086 モードがある。これ されていない。 IBM からみると , 今後 CPU 短縮化するといったマイクロソフトの発表 は , 386 の実行時にひとつのプロセスとして はインテルの 386 を使い , OS はマイクロソフ 8086 モードを起動させることがて、きる機能 もあったが , 実際にはそう簡単にはいかな トの OS / 2 を使うという図式が成り立つ。そ て、ある。 OS / 2 て、は , これを互換ポックスと のため , IBM としてはこれらのものは最優 呼んて、いる。この機能をソフト的に行うこ ードウェアの問題は本来の OS / 2 の性能 先に押さえたいと思っているだろう。マイ とは不可能て、はないが , 非常にたいへんな を損なうことなく , それを引き出すような クロソフトも OS/2 については , IBM と共同 作業になるのはたしかて、 , 実際 286 版 OS / 2 て、 ードウェアが求められていることて、ある。 て、市場を押し広めていく方針のようだ。今 は 286 そのものが 86 モードをもってはいる ところが現在の OS / 2 は 286CPU をターゲ 後はインテルー IBM ーマイクロソフトの 3 社 が , 286 モードから 86 モードへの移動はソフ ットとしているための結果て、あり , 386 を使 がともに協調しあいながら OS / 2 を普及させ ト的に解決せねばならず , かなり苦労して っても 286 の機能しか使っていないのて、あ ていくということになるてあろう。 ード的にサポ る。 OS / 2 が 386 マシンて、起動されると , 386 オ・カす , これ力すハ いるようだ ートされていれば , ソフト側て、その機能を CPU の機能てある 286 モードにしてしまうか 制御しながら使用するだけて、簡単に扱える。 らだ。これは先ほども述べたように ( 当たり しかし , 問題なのはハードの開発に先行 386 版 OS / 2 Ver. 2.0 の開発を急ぐわけだ。 前だが ) , 現在の OS / 2 が 386 の本来の機能を を許してしまっているソフトの開発てある。 使えないことを意味しており , 386 マシンの インテルー旧 M ーマイクロソフト 現在の OS / 2 にはまだまだ機能改良が必要 ューザには , なんとも , もったいない話て、 て、 , 時間をかけながら徐々に機能の付加お 互換ポックスはたんに 386CPU に 8086 モー ある。 よび改良が行われていくだろう。今はそれ ドをサポートしたわけて、はなく , 86 系 CPU こうした問題や , 386 用 OS / 2 も含めて本当 が始まったばかりて、ある。 OS / 2 Ver. 1.0 て、 に下位の CPU と互換をもたせているインテ の OS / 2 の真価を発揮するバージョンの開発 は OS/2 の基本版 (Standard Edition) が提 ルの一貫したポリシーに基づいている。 386 はかなり先になることが予想される。おそ 供されたが , その基礎となるものは MS-DOS には , 8086 モードと 286 モードがサポートさ らくハードウェアの問題も含めて 3 年くらい からもってきたものばかりて , 当初は 286CPU の年月を費やさねばならないだろう。 れている。 を想定していたため , 386CPU の機能を使い 余談になるが , 386 に対するインテルの思 OS / 2 Ve 「 . 1 .0 / 1 . 1 / 1 .2 きっていない 惑は UNIX にも求めることがてきる。もし , Ver. 1.1 て、は , プレゼンテーションマ不一 OS / 2 のバージョンについては , もう少し UNIX が動いているときに , DOS をひとつ ジャ (PM) といわれる一種のウインドウ指向 のプロセスとして起動させ , データを自由 つけ加えねばならない。 1.0 と 1.1 の違いは 型シェルが付加されただけなのだが , だか にやり取りすることがてきるならば , いろ 明らかにあったが , 1.1 と 1.2 の違いについ らといって Ver. 1.0 と 1.1 が同じかというと いろな UNIX の中て、も際だった特長をもたせ ても明白て、あり , それらの詳細については そうてもない。これはプログラムをつくる ることがてきるのて、ある。これは , 386 を販 いずれ解説するつもりている。しかし , バ うえては非常に困ることだ。しかも , アプ 売する際セールスポイントになる。 UNIX に ージョンが新しくなるにつれて , いろいろ はさまざまなバージョンがあり , さまざま リケーションプログラムとのインタフェイ 機能が拡張されてきているのて当然といえ スを定める API にいたっては , 漢字 API の統 な機種て、動いている。そのため , 販売する ば当然の話だが , これてはプログラマは困 側としては , たんに UNIX だからといって売 ってしまう。このような状況て OS / 2 が普及 ーを含め , まだ決定していない項目があり , れるものて、はない。そこて , 386 の登場が意 各ハードメーカーの OS / 2 は微妙に異なって していくとはとうてい思えない。ましてや , 味を , もってくるのてある。これを , インテ OS / 2 の Ver. 1.2 が 1990 年の秋には日本て出 しまっているのが現状だ。 ルは最初から意図していたものと思われる。 荷されるかもしれないのに , 今あえて Ver. 1.1 忘れてならないのは , ファイルシステム インテルは , CPU の開発販売を行う一方 を購入するユーザはいるのだろうか。まだ が劇的な変化を目指していることだろう。 て、 , 386 搭載のマシンを開発販売しているの まだ OS / 2 の使用を安心して勧められる状況 それは , おそらく Ver. 2.0 のときにはじめて てある。そのマシンの OS には , UNIX が搭 てはないようだ。 本来の姿がみえてくるように思われる。 載されている。そして最近て、は , UNIX の販 著者の個人的な推測ては , OS / 2 Ver. 1.2 日本 <Ver. 1.1 が出荷されるときには , ア 売を本格的に行う旨の発言があった。 あたりから本格的に動いていくとみている メリカてはもう Ver. 1.2 が出荷されている。 舌を OS / 2 に戻すが , インテルにおける OS / のて , 興味をもっている読者の方には Ver. 1.2 この地域差の問題も大きい。日本とアメリ 特集最新 OS / 2 入門 31 OS / 2 の一 一三ロ

9. 月刊 C MAGAZINE 1990年3月号

第特集 入門 30 CMAGAZINE 19 3 が CPU の機能といえる。だからこそインテ 用 OS / 2 の開発に着手したようて、ある。その て把握することが必要てあろう ( Fig. 1 ) 。 って , 高級 OS て、ある OS / 2 の機能もその大半 用 OS / 2 を 386 にも対応させながら , 他方て、 386 のような CPU て、あるのか , その特長につい 場に浸透しなかったせいもあり , 一方て、 286 の機能に依存しながら動いている。したが 生い立ちを知るには , インテルの 286 とはど 286 マシンそのものが期待されたようには市 すれば , 高級 OS の機能はそのほとんどカ℃ PU て開発されたものて、ある。したがって OS / 2 の ろうと予想されるようになっていったし , 接に結びついているからだ。別の言い方を 図式の延長上に 80286CPU をターゲットとし ューリングなどの機能は , CPU の機能と密 て、 , すぐに 386 ( そして 486 ) が出てくるて、あ る。 OS / 2 はそもそも MS-DOS-8086 という 開発のスピードの速さから 286 は過渡的な石 タスク , そして保護機能 , さらにはスケジ りの戦略的オペレーティングシステムて、あ 本的な合意があったようだ ) 。しかし ,CPU ているわけて、はない。メモリ管理 , マルチ 継 OS として全勢力を傾けて開発した鳴物入 ていた ( インテルとマイクロソフトの間に基 そうした機能は , OS そのものが独自に行っ OS/2 は , マイクロソフトが MS-DOS の後 当初 , マイクロソフトは CPU を 286 に設定し れているのが一般的になっている。だが , 高級 OS には , 非常に優れた機能が付加さ 80386 の予想以上の普及て、ある。 OS / 2 の開発 OS 2 とは さらに OS / 2 をみるうえて、重要なことは , 0S/2 と CPU ルの CPU を理解する意味があるのだ。 か , それだけの値打ちはあるようにみえる。 ような状況だった。いま , プレゼンテーショ 決しなければならない課題は山のようにある テーションマネージャも出遅れていたという も伸び悩んでおり , しかも , 肝心のプレゼン もたらす可能性を秘めているともいえる。解 きな負担になっているし , アプリケーション により , プログラミング作法に大きな変動を は , システム構成の面でも , 機能面でも , 大 点かあると同時に , オプジェクト指向の導入 調なものではなかった。個人ユーサからみれ 機種依存しないプログラムが書けるという利 ーから現在にいたるまでの道程は , 決して順 ンドウを駆使したアプリケーション開発は , ますくに上昇していくとは思えないか , ウィ 現在にいたっている。しかし , OS / 2 のテピュ できるマルチタスク OS としてテビューし OS / 2 か本格化する気配だ。もちろん , そのま OS / 2 は , 286 / 386 をネイテイプに使うことの ンマネージャも出そろい , いよいよこれから 秋津彰文 最新 OS, / 2 概論

10. 月刊 C MAGAZINE 1990年3月号

これて、いちおうグラフィックライプラリ の完成て、すが , FORTRAN からて、はそのま まて、は呼び出しにくい関数があります OFOR TRAN から呼び出しやすいように , C て、簡単 なインタフェイスを作成します。そのソー スプログラムに上記のグローバル変数も定 義します (ListI を参照してください ) 。 実際の作業手順を説明しましよう。 ・ LLIBCE. LIB から 9 つのモジュールを取り 出します。 ィアムモデルの標準ライプラリ MLIBCE. ミディアムモデル用のライプラリは , ミデ 数値演算ライプラリには使用て、きません。 ライプラリとどとらて、も使えますが , 代替 イプラリは , 87 ライプラリとエミュレータ イプラリ FGRAPH. LIB の完成て、す。このラ これて、ラーシモデル用のグラフィックラ fgraph„fgraph; 国 atOf 十 ctype 十 memset 十 memmove 十 freect 十 cmiscdat 十 fptostr 十 lib graphics 十 qcwindow 十 cvt 十 け加え FGRAPH. LIB を作成します。 ・ 10 個のモジュールを GRAPHICS. LIB につ 同じなのて指定しません。 はどちらを指定しても生成されるコードは グラムを防ぐことカイきます。 / FPi , / FPi87 くメモリモデルの相違も含めて ) の悪いプロ 注意なミスや互換性 ( コンパイラ間だけて、な せんが , 警告レベルを上げることにより不 します。 / W3 はとくに必要なわけて、はありま はずします。 / c て、オプジェクトの出力のみに いようにします。 / Gs て、スタックチェックを オプジェクトにライプラリ名を書き込まな は使用しないのて、 , / ZI オプションを指定して FORTRAN て、は QC のデフォルトライプラリ があるのて、 , / AL オプションを指定します。 このプログラムはラージモデルにする必要 qcl /AL /ZI /Gs /c /W3 fgraph. c す。 ・ FGRAPH. C を QCL て、使いコンパイルしま * ctype * memset * freect * cmiscdat * fptostr * atOf lib llibce * qcwindow * cvt * 1 て、はないかと思われます。 128 : { 134 : { 146 : { List 1 129 : 130 : 131 132 : 133 : 135 : 136 : } 137 : 139 : 142 : 143 : } 144 : 147 : 148 : } 149 : 150 : 152 : 153 : { 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : 163 : 164 : 165 : 166 : } 127 : double wxl. wyl. wx2. wy2. wx3. wy3. wx4. wy4; return(-pie-xy(i. _getviewcoord_w(wxl. wyl). _getviewcoord_w(wx2. wy2), -getviewcoord-w(wx3,wy3), -getviewcoord_w(wx4,wy4))) : void far _f_putimage-w(double wx, double wy. char far *inage. short action) -putinage-w(wx, wy. image. action) : 138 : short far _f_rectangle_w(control. 1. wyl. wx2. wy2) short control; 140 : double wxl,wy1,wx2. wy2; return(-rectangle-w(control, wxl. wyl, x2 y2 ) ) : 145 : short far _f_setpixel_w(double wx. double wy) return(-setpixel_w(wx. (y)) : 151 : short far _f_getfontinfo(short far fi [ 5 ]. \ char far *filename, char far *facename) struct -fontinfo finfo; short ret : ret ま getfontinfo(&finfo) : fi[0] : finfO. type; fi[l) = finfo. fi [ 2 ] = finfO. pixwidth: fi[3] = finfO. pixheight; fi [ 4 ] = finfO. avgwidth; strcpy(filename, finfo. filename) : strcpy(facename, finfO. facename) : return(ret) : Fig. 1 構造体定義リスト ・橋造体 lNTEGER*2 v 6000nfi9 ( 1 1 ) v 池 e000n 物 9 ( 1 ) videoconfig(2) ⅵ 80n ( 3 ) videoconfig(4) videoconfig(5) videoconfig(6) videoconfig(7) eoconfig ( 8 ) videoconfig(9) videoconfig い 0 ) Videoconfig( 1 1 ) ・講造体 xycxx)rd numxpixels numwxels numtextcols numtextrows numcolors bIts'Mpixel numvideopages rncxie adapter mon 代 0 「 memory X 載方向のビクセル数 Y 載方向のビクセル数 有効なテキストの列数 有効なテキストの行数 表示可能な色数 ビクセルごとのビット数 使用可能なビデオページ数 カレントビテオモード アクテイプディスプレイアダブタ アクテイプティスプレイモニタ キロバイト単位で表したアダブタビテオメモリ lNTEGER*2 xycoord(2) xycoord(2) ・橋造体「 C08 「 d xcoord ycoord INTEGER 事 2 「 ccoo 「 d ( 2 ) 「 ccoo 「 d い ) 「 ccoo 「 d ( 2 ) ・構造体 wxycoord DOUBLE PRECISION wxycoord(2) INTEGER * 2 fontinfo( 5 ) ・講造体 fonunfo wxycoord(2) wxycoord( 1 ) wx fontinfo( 1 ) fontinf0(2) fontinf0(3) fontinfo(4) fontinfO(5) aEent ptxwtdth ptxhejght avgwldth CHARACTER*81 filename CHARACTER ネ 32 facename が 1 ならばべクトルフォント , 0 ならばビットマップフォント 上端から基準ラインまでの距第 ( ビクセル単位 ) 文字の物 ( ピクセル単位 ). 0 = プロポーショナル 文字の高さ ( ビクセル単位 ) 文字の物の平均 ( ビクセル単位 ) バスを指定したファイル名 フォント名 ミックスドランゲージプログラミングの手法 59