MS-DOS

概要

MS-DOSは、1981年発売のIBM PC用のディスクオペレーティングシステムとして開発されて「IBM PC DOS」として発売されたが、1982年よりマイクロソフトがIBMとの共同開発契約に基づきコンパック等のIBM以外のメーカーに「MS-DOS」名称でOEM提供を開始した（ただしマイクロソフトは現在では「MS-DOS」は1981年発売と説明している）。MS-DOSはCP/M類似のオペレーティングシステムだが、IBM PCの成功により16ビットパーソナルコンピュータ市場でデファクトスタンダードとなった。
MS-DOSは主にIntel 8086系のパーソナルコンピュータ向けのオペレーティングシステムだが、後に8ビットなど各種のCPUやコンピュータ用にも移植され、また各種の組み込み機器でも使用された。
MS-DOSは基本的にはコマンドラインインタフェースやUNIX風の階層型のファイルシステムを持つシングルタスクのオペレーティングシステムだが、各種アプリケーションや、バージョン4より付属のDOSSHELLや、別売のMicrosoft Windows 2.0などの併用により、グラフィカルユーザインタフェースや疑似マルチタスクも使用可能となった。ただしMS-DOS自体は画面描画に関わるアプリケーションプログラミングインタフェースを持たないため、多くのMS-DOS用アプリケーションは機種依存であり、異なる機種間では稼働せず、また移植も容易ではなかった。
MS-DOSと互換性を持つオペレーティングシステムには、共同開発のIBM PC DOSの他、DR-DOS (Novell DOS)、オープンソースのFreeDOSなどがあり、またMicrosoft Windowsのコマンドプロンプトなどの互換環境がある。
バージョン6からはIBMとマイクロソフトのOS共同開発契約が終了し、MS-DOSとIBM PC DOSは並行して開発販売が続けられたが、マイクロソフトはMicrosoft Windows、IBMはOS/2に移行してゆき、2001年頃迄にはMS-DOSおよびIBM PC DOSの各サポートは終了した。

開発の経緯

1980年7月頃、IBMは後にIBM PCとなるパーソナルコンピュータの開発に着手した。しかし、IBMの主力商品である汎用コンピュータに比べるとごく少数のスタッフとわずかな予算しか与えられなかった。プロジェクトリーダーのフィリップ・ドン・エストリッジは、可及的速やかに商品化にこぎ着けるためにソフトウェアは自社開発せず、すべて外部から調達する方針を立てた。
当時のマイクロソフトはBASICインタプリタやアセンブラならびに各種言語のコンパイラ等を開発しており、それらの製品のほとんどが当時のパーソナルコンピュータ市場におけるデファクトスタンダードOSであるデジタルリサーチのCP/M上で動作するものであった。
IBMはマイクロソフトに対し当初はBASICなどの言語製品の開発を依頼していた。OSについても8086対応版のCP/Mをマイクロソフトに開発してもらおうとした。しかし彼らはCP/Mのソースの権利を持っていなかった為、ビル・ゲイツのアドバイスに従ってデジタルリサーチと交渉することにした。ところがデジタルリサーチとの交渉はうまくいかず、再びマイクロソフトに開発の依頼を持ち込んだ。
マイクロソフトは「M-DOS」というOSを開発した経験はあるが、販売したことはなかった。IBMから要求された期日は1年以内という厳しいもので、言語製品の開発に加えてOSにまで手を回す余裕はなかった。同じ頃、シアトル・コンピュータ・プロダクツはCP/Mが8086に移植されない事に業を煮やして独自に移植作業を行い、QDOSとして売り出した。マイクロソフトはこれを開発者込みで買収しIBM PC用に改修した。

各メーカーへのOEM供給

IBMは当初「PC DOS」名称でIBMのみへの供給を主張し、マイクロソフトはIBM以外のメーカーへのOEM供給を主張した結果、「IBM用はPC DOS名称。マイクロソフトによる各メーカーへのOEM供給も認めて普及を図る」という役割分担となったと言われる。この役割分担は後のOS/2 Ver. 1.Xでも同様となる。
リスクを軽減化するために買い取りを避けIBM PCの出荷台数に対して使用料を支払うというライセンス契約をしたこと、そしてマイクロソフトから各メーカーへの自由なOEM供給を認めた事が後のマイクロソフトの躍進の原動力と言え、また見方を変えれば、最終的に「軒先を貸して母屋を取られた」IBMの大失策であるとも言えるが、MS-DOS（およびPC DOS）の普及（デファクトスタンダード化）を決定づけたとも言える。
1982年、マイクロソフトはバージョン1.25からIBM以外のメーカーにMS-DOSのOEM供給を開始した。ライフボート・アソシエイツのSB-DOS、コンパックのCompaq-DOS、ゼニス・データ・システムズのZ-DOSなど、供給先メーカも名称も複数あった。1983年のバージョン2.0より、IBM以外の各メーカーへのOEM供給品は「MS-DOS」名称に一本化された。OEM供給品に自社の商標（MS）をつけ「MS-DOS」名称としたのは、OEM先メーカーが独自の名前をつけて混乱することを避けるために整理する意味があった。ただし、その後も富士通FM TOWNSのTownsOSや各種制御機器など、内部的にMS-DOSがOEM提供されている場合には「MS-DOS」の名称はユーザーには見えない場合があった。

DOSの限界と開発の終焉

DOSは標準でグラフィカルユーザインターフェースやマルチタスク機能や仮想記憶を持たず、80386などの32ビット環境でも「高速な8086」としか使用できなかったため、DOSの拡張や次世代OSが待望された。
1985年にはDOSエクステンダーであるDESQview、同年にDOS上で稼働する「オペレーティング環境」としてMicrosoft Windowsが登場した。更に1987年には本格的なDOSの後継OSとしてIBMとマイクロソフトから OS/2 Ver. 1.0 が登場した。OS/2はDOSと同様に、IBMおよびマイクロソフトの両者から供給されたが、性能やDOS互換環境の問題もあり広く普及しなかったためDOSは継続して使われた。
1990年に日本ではIBM DOSのバージョン4からDOS/Vが生まれ、マイクロソフトもバージョン5からDOS/VのOEM供給を開始したため、日本でもPC/AT互換機の市場が立ち上がり始めた。
1993年のバージョン6からは、IBMとマイクロソフトのOS共同開発契約（OSクロスライセンス契約）が終了したため以後はIBMまたはマイクロソフトの単独開発となった。両者は基本部分の互換性は保たれているが、付属ユーティリティの相違などが広がった。マイクロソフトはこのMS-DOS 6を単体販売の最終バージョンとし、1995年のMicrosoft Windows 95以降は単体のDOSも不要となった。IBMはDOSの改良を続けたが、1998年のPC DOS 2000が最終バージョンとなり、2001年にはサポートも終了した。

機能

MS-DOSと名付けられているように、マイクロソフトのパーソナルコンピュータ向けのDOS（ディスク・オペレーティング・システム）であり、主にディスクの管理を行うシングルタスクOSであった。開発当初のCPUにマルチタスク機能・メモリ保護機能がなかったためMS-DOSも対応しておらず、CPUにそれらの機能が搭載された後もMS-DOSが対応することはなかった。またグラフィック画面やサウンドの操作・ネットワーク機能などは、Microsoft WindowsやLAN Managerのほかアプリケーションが直接I/Oを操作するかデバイスドライバなどで提供されていた。

ファイル管理

ファイルの管理は、FATとクラスタにより構成される。
ファイル名は8.3形式、つまり、8バイトまでのベース名と3バイトまでの拡張子の合計最大11バイト（拡張子の前の「.」を数えれば12バイト）で表す。アルファベットの大文字と小文字は区別しない（全て大文字と見なされる）。
バージョン2以降では、ディレクトリの作成が可能となり、ファイル属性にも対応した。

実行ファイル

MS-DOSにおける実行ファイルの形式は、現在のUNIX系環境で言うシェルスクリプトに類似したコマンドのバッチ処理を記述するバッチファイル(拡張子はBAT)と、CPUが直接実行するバイナリファイルに大別することができる。
このうちバイナリファイルには、単一のセグメントを使うCOM形式、複数のセグメントが使用される場合のEXE形式、さらにデバイスドライバとしてSYS形式が存在し、それぞれ同名の拡張子を持つ。
COM形式の実行ファイルは、バイナリ読み込み時に設定されるコード・データ・エクストラ・スタックの各セグメントレジスタの値が同一アドレスに設定され、プログラム内部でセグメントレジスタを操作しない場合は単一セグメント、最大64KBのメモリ空間を操作する。CP/M 80用に書かれた8080用のアセンブリ言語のソースコードを8086へコンバートした場合を想定したメモリモデルであるが、COM形式のバイナリであってもプログラム側で適切にセグメントレジスタを操作することで64KB以上の空間へのアクセスが可能である。
このうち.SYS形式のバイナリは、原則的に起動時に一度だけ実行されるCONFIG.SYSに記述する以外の方法では直接読み込むことができない。

システムコール

システムコールは、ソフトウェア割り込みにより呼び出されるが、8080やZ80などの8ビットのコンピュータではメジャーな存在だったCP/Mとの互換性、特に8080用にアセンブリ言語で書かれたソースコードを8086にコンバートして用いる場合を想定し、call 5でも利用可能としてCP/M 80からの移行を促した。

メモリ管理

MS-DOSにおいて、DOS自身のカーネルを含むプログラムの実行に確保できるメモリ空間（ユーザーメモリ、コンベンショナル・メモリ）は、8086のアドレス空間の最大1MBである。ほとんどのコンピュータでは、この空間にBIOS ROMやメモリマップドI/O、VRAMなどの空間も存在するため、バンク切替えや様々なメモリ拡張手段などを用いずに一時にアクセス可能なメモリ空間は最大でも640KBから768KB程度であった。
日本語入力用のFEPなどの常駐型のデバイスドライバを使用すると一度に使用できるユーザーメモリはさらに減少するため、ユーザーはEMSやXMS、HMAやUMBなどの拡張メモリの管理機能を利用して、辞書や常駐部やMS-DOSシステムの一部をそれらへ配置し、コンベンショナルメモリの圧迫を少しでも避けることが重視されるようになった。
そのため、RAMディスクドライブやディスクキャッシュなどはバンクメモリやEMS、プロテクトメモリ（80286/386以降）の機能を用いて、コンベンショナルメモリ以外の領域を使用するのが一般的であった。
これらのメモリ配分の設定はCONFIG.SYSやAUTOEXEC.BATを記述することで行い、事実上ユーザーに一任されていた。
バージョン3まではメモリドライバやデバイスドライバはOSには付属せずサードパーティー製のメモリドライバ等を使用する必要があったが、バージョン5では標準機能としてOSに付属するようになった。また、これらの環境設定を半自動的に行う設定アプリケーションも添付された。
各種デバイスドライバには自動でインストールを行うスクリプトやプログラムが整備され、動く状態を作るだけであればエンドユーザーがこれらを直接操作する必要はなくなったが、全ての環境に対応するのは難しく最適な設定や問題発生時の対応など初心者にとっては設定のハードルは高かった。

Windows 9x

従来のWindows 3.xはMS-DOSから起動するアプリケーションであったが、Windows 9x系では互換性のためにMS-DOS相当の機能が一部内部に組み込まれているものの「MS-DOSを必要としないWindowsという単体のOS」となった。Windows 95・98などのWindows本体を起動している状態ではプロテクトモードの完全なマルチタスク（プリエンプティブマルチタスク）で稼働しているが、シングルタスクのMS-DOSモード（DOSプロンプトとは異なる）に切り替えることが可能である。Windows上で起動するDOSプロンプトもMS-DOSと互換性があるが一部動作しないアプリケーションがあり、この問題を解決するための機能がMS-DOSモードで、完全なCUI表示となり、MS-DOSアプリケーションのみが動作し、DOSプロンプト上ではロングファイルネームで表示されるVFATであっても8文字+拡張子3文字のショートファイルネーム形式のファイル名で表示され、MS-DOSとほぼ同じ状態になる。

バージョン4（1986年）

バージョン3.20から派生し、8086上で限定的な擬似マルチタスク環境を実現したもの。マイクロソフトが開発したが不十分であるとしてIBMには採用されず、アプリコットコンピューターズにネットワークOSとしてOEMされた他、僅かの用途に留まり絶滅亜種になってしまった。非同期I/O対応やバックグラウンドタスク規約など資産の一部は Windows 2.x に流用され、また80286プロテクトモードを前提に並行開発されていたもの（当初バージョン5と呼ばれていた）はIBM主導で大幅に改訂され、世に出た時にはOS/2バージョン1.0になっていた。

バージョン7（マイクロソフト版）

Windows 95/98/98SE に含まれているバージョン。ファイルシステムでは長いファイル名がサポートされたのが最大の特徴。従来のMSDOS.SYSは名前こそ同じであるがプログラムではなく設定ファイルとなった。IO.SYSが実行する標準シェルはWindowsを起動するためのWIN.COMであるが、MSDOS.SYSを編集することでWindows 95/98ではWindowsを起動せずにMS-DOSモード（COMMMAND.COM）で起動することができた。Windows 95のOSR2以降ではFAT32にも対応しているバージョン7.1である。

バージョン8（マイクロソフト版）

Windows Meに含まれているバージョン。IO.SYSにHIMEM.SYSおよびSMARTDRV（ディスクキャッシュ）の機能を統合した最終版であり、MS-DOSモードでの起動も廃止されWindowsのブートローダの機能のみとなった。Windows MeやWindows XP以降で起動ディスクを作成するとこのMS-DOSが書き込まれる。