プリント基板設計・シミュレーション

TOP > アポロレポート > コラム > 第55回 プログラミングについて『DOSのプログラム1』
コラム
2023/12/25

第55回 プログラミングについて『DOSのプログラム1』

アポロレポート

 いまさらDOSの話をするのも時代遅れかも知れませんが、今回はDOS用のプログラムについて考えてみましょう。
 Windowsが普及するようになってDOSの存在はだんだんと影の薄い存在になってしまいました。Windows時代になってからパソコンを使うようになった方はもしかするとDOSプロンプト画面を使ったことも、その存在すら知らないかも知れませんが、パソコンの黎明期から現在に至るまで使われている方(マックは別ですが)にとっては、たとえWindows全盛の現在でもそれなくしてはパソコンを使えない方もいるかと思います。
 私の場合はコンピュータとの付き合いの始まりはミニコンでしたので、最初はDOSではなかったのですが、いかんせん15年以上も昔はコンピュータと人間の間の会話は文字端末に向かってキーをカタカタと打たなければなりませんでした。もっとも、カードにマーキングしてコンピュータに読み込ませるという時代ではなかったのは幸運だったかも知れません。

 WindowsがWindows95になってそのDOSプロンプトは32ビットになったので、プログラミングは非常に楽になりました。というのもこの32ビットになってメモリーをリニアーにアクセスできるようになったので、UNIXなどと同じようにスタックのオーバーフローやメモリーの使用量をあまり気にせずにプログラミングをできるようになったからです。ところが、Windows95よりも前のWindowsやDOSは16ビットでしたので、プログラムを作るときにはスタックやメモリーを常に気にしていなければならず、おそろしく苦労をしたものでした。
 もともとDOSはIBMがパソコン事業に手を出そうとしたときに、手っ取り早く製品を作るためにハードからソフトまでをありあわせで済まそうとしたところから誕生しました。また、もしパソコン事業に失敗してもすべてを外から購入した方がリスクが少ないという訳です。当時のIBMは汎用機が好調でパソコンなどはちょっとした遊び程度だったので、IBMの実力からすれば本来ならばしっかりとしたOSを開発したのでしょうが、製品化を急いだあまりOSまでも他のメーカーから購入することにしたのです。その頃市場に出ていたパソコンは、アップルのものや、8ビットのOS(CP/M)が乗ったパソコンでしたので、小さいメモリーと遅い処理速度のものばかりでした。
 IBMはここで一気に16ビットのパソコンを作ろうとした訳です。当時16ビットのCPUはモトローラ社にMC68000とインテル社の8086や8088がありました。当時の評価からすればモトローラのものの方が人気があったようですが、IBMはインテルを選びました、その上8086よりもやや性能の劣る8088の方をです。8ビットCPUの時代では、使用できるもメモリーの量も64Kバイトと今から思えば恐ろしく小さいものでしたが、16ビットになると1Mバイトもの(これも現在の物差しで計ればものすごく小さい)メモリーをアクセスすることができる訳です。
 もっとも1Mバイトといってもこれをリニアーにアクセスできるのではなく、64Kバイト(セグメント)の固まりを並べたような感じになっているので、言ってしまえば8ビットのCPUがたくさん並んだようなメモリーのアクセス方法をとることになるのす。そしてDOSはその1Mバイトの下位の640Kバイトをアプリケーション用に、上位の残りの部分をOS用に配分しました。

 話を戻しましょう。IBMはOSを外から購入することにしていましたので、当時8ビットOSの主流だったCP/Mを開発したデジタルリサーチ社に16ビット版のCP/Mを欲しいと交渉に行ったのです。と、ここが運命の分かれ道。真相は不明ですが、社長のゲーリーキルドールが飛行機に乗って遊んでいたとか、彼の奥さんがつれなかったとかで、デジタルリサーチ社の対応が悪いのでIBMは頭にきたらしく、この会社を見限ってしまったのです。もしこのとき飛行機が故障していたり、奥さんの愛想がよかったら、現在のパソコンの地図はまったく違ったものになっていたでしょう。
 仕方なくIBMはBASICでパソコンの世界を席巻していたマイクロソフト社に話を持ち掛けるのです。本当のところはIBMはマイクロソフト社が16ビット版のOSを持っていると勘違いをしていたらしいのですが、このときマイクロソフト社は自社のOSは持ってはいなかったのです。
 頭のいいのはマイクロソフトのビルゲイツだった。彼は「それならあるよ」と事も無げに言い、まんまと契約をしてしまったのです。この大風呂敷が現在のマイクロソフトを作ったといっても過言ではないと思います。契約を結んだ後にOSを開発をしなければならないのですが、日程が間に合わないのでシアトルコンピュータアソシエイツ社のティムパターソンが作っていたDOSを慌てて購入することにしたのです。だまされたのはティムパターソンとその会社でした。二束三文でそれを手放してしまったからです。もしそのOSがIBMに採用されると知っていたらもっと高く売ったに違いありません。

 とにもかくにもこうしてマイクロソフト社はDOSの原形を手に入れ、最初の版にするために手を加えるのですが、最初の版は事実上8ビットOSの標準だったCP/Mとの互換をとることにつとめました。
 IBMはパソコン事業をあまり重要と考えていなかったので、周辺装置などをどこの会社でも簡単に作れるようにと、そのアーキテクチュアをすべて公開しました。これまでの歴史からいくと内部を公開したものや無料のものは驚異的に普及するのです。UNIXも殆ど無料で使用できる上、ソースプログラムまでも入手できたのでこれも急速に普及したのです。
 IBMパソコンは売れに売れ、またその互換機も売れたのはご存知のことと思います。マイクロソフトは徐々にDOSに磨きをかけていきます。UNIXの模倣を行なうのです。パイプやリダイレクションなどはUNIXの機能そのものですね。

 CPUも時代の変化とともに進化をし、80286、80386、80486とやがて32ビット化をし現在はPentiumになっていますが、DOSは未だに16ビットのままで、Windows95になって初めて32ビットになりました。

 話を少し戻して、パソコンにOSというものがなかった頃は一体どのようにして動かしていたかというと、アプリケーションプログラムが周辺機器の制御などを直接行なっていたのです。要するに最初の頃は本当にパソコンはハードのみが売られていた訳で、そこにプログラムを乗せることさえも恐ろしく大変なことでした。やがてBASICがパソコンに乗るようになってかなり楽になりました。
 BASICがパソコンで動くといっても、BASIC自体がファイルの管理や周辺機器の管理をおこなっていましたので、言ってみればこのBASICはOSの機能も兼ねていたということになります。
 余談ですが、最初はアルテアというパソコンにビルゲイツとポールアレンが書いたものが商用のパソコン用のBASICの最初だということになっています。彼らは、このBASICを書くためにアルテアをエミュレーションするプログラムをミニコンに作成し、そこで動作を確認しながら開発をしたということです。気の遠くなるような話です。
 このBASICが全盛のころが今から10年程昔のことです。日本でもNEC、富士通、沖などからパソコンが発売されて、そのどのパソコンにも彼らの書いたBASICが若干の手が加えられて乗っていました。その当時のパソコンの記憶はあまりないのですが、ファイルをコピーすることも消去することもすごく面倒だったような気がします。

 パソコンが8ビットの頃はCP/MというOSが使われていて、やがて16ビットになると先にもお話したようにDOSが使われるようになりました。私が初めてこのOSの名前を聞いたとき『どす』という響きがやけに不思議に聞こえたものです。どこかの訛りで、『です』の代わりに『どす』を使うところがあるので、日本人が冗談に命名したのかと真面目に考えたこともありました。

 DOSは16ビットのシングルタスク、シングルユーザのOSです。1つのメモリーセグメントが64Kバイトで最大640Kバイトのメモリーをユーザが使用することができます。仮想記憶はありません。最初の頃はこのメモリーがあればアプリケーションを動かすには十分だったのです。ところが、パソコンの性能が向上するとアプリケーションもどんどんと機能を上げていき、640Kバイトのメモリーでは足りなくなってしまいました。それも長い期間でそのようになったのではありませんでした。実にほんの数年のことで、まさにあっという間だったのです。
 そこで仕方なく、640Kバイト以上のメモリーを使用するために、データをハードディスクなどに置いて読み書きすることで大きなデータを扱うプログラムを実現していました。昔、私もBASICで1000個のデータをソートするのに配列を50個程度にしてフロッピーディスクとの間でデータを読み書きして行なったことがありましたが、8インチのフロッピーディスクが「ブーブーカタカタ」鳴るばかりでものすごく時間がかかったことがありました。
 その苦労も、DOSエクステンダーというソフトウェアが使えるようになって拡張メモリーを使用できるようになり、大きなデータもオンメモリーで扱えるようになりました。ただ、メモリーをいっぱい使えるようにはなったのですが、メモリーはリニアーではないので、離れ小島にピョンピョンと飛び回るようなプログラムにしなければならない面倒さがあります。

 結局DOSは構造の大きな変更もなされないまま、小さな改修と建て増しの連続で変なOSになってしまいました(私の印象です)。とにかくDOSの大きな問題点はメモリーの管理が最大の欠点です。「どうせパソコンのOSだからこんなもんでいいんだ」とでも考えていたのかも知れません。CPUがどんどん進化してセグメントなどといった過去の遺物を使用しなければ、ギガ単位のメモリーをリニアーに扱えるようになっているにもかかわらず、DOSの構造を変えずに無理に無理を重ねてしまったのはマイクロソフトの罪のような気もします。もし、DOSがCPUが32ビットになったときに32ビット化されて仮想記憶も備えてくれていたら、これからも生き残れるものになっていたかも知れません。もっともマイクロソフトもサボっていた訳ではなく、Windowsの開発に力を入れていたので、現状からみればDOSに大幅な変更を加えるということは無駄な努力になっていたことと思います。

 DOSのプログラムは、ファイルの拡張子がBAT、COM、EXE のものです。つまり実行できるファイルか否かはファイルの拡張子で判断しているのです。UNIXではこれとは違い、ファイルに実行できるファイルか否かの属性を示すフラグを持たせてあり、このフラグがオンのものが実行できることになります。またシェルプログラムはそれとは関係なく、 sh などのコマンドで実行することができます(厳密にいえば違うのですが)。VMSではファイルの拡張子はあくまでも単なる拡張子でしかなく、RUN コマンドでファイルの実行を行なうようになっています。
 このようにOSによって実行ファイルの考え方に違いがありますが、これの違いは特に問題になることはなく、「そんなものか」方式で慣れてしまえばいいことだと思います。かえってファイルの拡張子を見れば実行できるものか否かが分かりますので便利かも知れません。

 いま、

 A.EXE

というファイルがカレントのディレクトリにあったとします。このときには、

 A

と入力すると A.EXE を実行することができます。もし、

 A.EXE A.COM A.BAT

の3つのファイルがあったときに A と入力すると、実験したところ A.COM が実行されました。

 A.EXE A.BAT

の2つのファイルがあったときには A.EXE が実行されました。もし、このときに A.BATを実行したいときには A.BAT と入力します。あまりこのようにファイル名が同じで拡張子が違う3種類のもの実行ファイルが存在することはありませんので気にすることはないかと思います。

 だんだん話が外れてしまいました。DOSはOSとしてはそれほど感心させられるものではありませんが、もっと性能のいいOSを押しのけて、とにもかくにも世界の標準となってしまったものですので、次回からはもう少し突っ込んで考えてみましょう。

今回は短いのですが、また次回。


そのお悩み、
アポロ技研に話してみませんか?

アポロ技研でワンランク上の物創りへ!
そのお悩み、アポロ技研に話してみませんか?