DOS (, ) はディスクを基盤としたIBM PC互換機用オペレーティングシステム (OS) のファミリーである。DOSファミリーは主にIBM PC DOSと、それをリブランドしたマイクロソフトのMS-DOSから構成され、どちらも1981年に発表された。後に他のメーカーからそれらの互換システムであるDR-DOS(1988年)、(1989年)、PTS-DOS(1993年)、FreeDOS(1994年)も発表された。MS-DOSは1981年から1995年までIBM PC互換機市場を独占していた。
DOSという名称はMS-DOSおよびその互換OSを明確に同一視するようになったが、これはプラットフォームに依存せずIBM PC以前から使われている、 "Disk Operating System" の頭字語であるDictionary.com 。1966年のメインフレーム用DOS/360を皮切りに、他にも数十のオペレーティングシステムがこの頭字語を使用している。他にも、、、、、、そしてがある。
歴史
起源
IBM PC DOS(および別売のMS-DOS)とその前身である86-DOSは、インテルの16ビットマイクロプロセッサである8086で動作した。IBM PC DOSはデジタルリサーチのディスクオペレーティングシステムであるCP/Mと類似するよう開発された。これは当時CP/Mが8ビットの8080およびZ80マイクロコンピュータを支配していたため、そのアプリケーションの移植を容易にするためである。
IBMはIntel 8088マイクロプロセッサを搭載したIBM PCを発表したが、それにはオペレーティングシステムが必要であった。ジョン・R・オペル会長がユナイテッド・ウェイ全国理事会執行委員会の同僚であるメアリー・マクスウェル・ゲイツと会談すると、彼女はCP/Mの8088互換品ビルドを支援するために自身の息子であるビル・ゲイツをオペルに紹介した。その後IBMはデジタルリサーチへと向かい会議が設定されたものの、CP/M使用に関する当初の交渉は決裂した。なぜなら、デジタルリサーチはCP/Mをロイヤルティーに基づき販売することを希望したのに対し、IBMはCP/Mの買い切りと "PC DOS" への名称変更を求めたが、デジタルリサーチの創設者であるゲイリー・キルドールはこれを拒否したことでIBMは撤退したためである。
IBMは再びビル・ゲイツに接触すると、次にゲイツはシアトル・コンピュータ・プロダクツ (SCP) へ接触した。同社ではプログラマのティム・パターソンがCP/M-80の派生版を開発していたが、これはS-100バス用新しい16ビットCPUである8086カードテストのため、SCPの社内製品として開発されていたものである。当初この派生版にはQDOS (Quick and Dirty Operating System) という名称が付けられたが、後に86-DOSという名称で市販された。マイクロソフトは推定50,000ドルで86-DOSを購入した。これがMicrosoft Disk Operating System、つまりMS-DOSとなり、1981年に発表され、それから1年以内にマイクロソフトは70社以上の企業にMS-DOSのライセンスを供与した。それらの企業は自社ハードウェア用MS-DOSを供給したが、その中にはののようにMS-DOSではなく独自の名称を付ける企業もあった。後にマイクロソフトはMS-DOSという名称の使用を義務付けたが、IBM版はその例外であった。IBMはIBM PC用の自社版である "PC DOS" の開発を継続したが、CP/Mの類似品であるOS(IBMがCP/Mに固執したのと同じ名称で)をIBMが販売していることを知ったデジタルリサーチから法的措置を取ると脅迫された。これを受けIBMは、PC DOSかキルドールの8086版であるCP/M-86のどちらかをPC購入者が選べるようにするという和解を申し出た。これらを比較すると、CP/M-86はPC DOSより200ドル高く、販売台数は低調だった。CP/Mは衰退し、MS-DOSとPC DOSがPCとその互換機用のOSとして普及するようになった。
当初のマイクロソフトによるMS-DOSの販売形式はOEMのみであった。その主な理由の1つとしては、初期のPCは全てがIBM PCと100%互換ではなかったことが挙げられる。DOSは非常に構造化されていたため、システム固有のデバイスドライバコード (IO.SYS) とDOSカーネル (MSDOS.SYS) が分離されていた。マイクロソフトはOEM Adaptation Kit (OAK) を提供し、OEMがデバイスドライバコードを自社の特定システムに合わせてカスタマイズできるようにした。1990年代初頭までにはほとんどのPCがIBM PC標準に準拠していたので、マイクロソフトはMS-DOS 5.0からMS-DOSの小売販売を開始した。
1980年代半ば、マイクロソフトはDOSのマルチタスク版を開発した。一般的にこの版のDOSは "European MS-DOS 4" として知られるが、これは向けに開発され、一部のヨーロッパ企業にライセンスされたからである。この版のDOSはプリエンプティブなマルチタスク、共有メモリ、デバイスヘルパーサービス、およびNew Executable ("NE") フォーマットの実行ファイルをサポートしていた。これらの機能はいずれも以降のバージョンのDOSでは使用されなかったが、OS/2 1.0カーネルの基盤形成に使用された。なおこの版のDOSは、IBMが開発しDOS 3.3をベースとして幅広くリリースされたPC DOS 4.0とは別のものである。
デジタルリサーチはCP/M-86で失った市場を取り返そうと、まずはConcurrent DOS、および(MS-DOSとCP/M-86両方のソフトウェアと互換性がある)を、次に(MS-DOSとCP/M-86両方のソフトウェアと互換性がある)とDR-DOS(MS-DOSのソフトウェアと互換性がある)を販売した。デジタルリサーチはノベルに買収され、DR-DOSはPalmDOSやNovell DOSとなった。その後は(カルデラにおける名称はOpenDOSおよびDR-DOS 7.02/7.03)、Lineo、そしてDeviceLogicsの一部門となった。
は1995年に、「DOSは、我々がそれを最初に書いた時点では、IBMを満足させて我々の言語を購入してもらうことを意図とした、一度きりの使い捨て製品に過ぎなかった」と記した。マイクロソフトはDOSをXENIX導入までの一時的な繋ぎとして期待していた。マイクロソフトはMS-DOSを時間を掛けて改良し、シングルユーザー版XENIXとほぼ区別がつかないOSである "XEDOS" にする計画を立てていた。さらにXEDOSは68000、Z8000、およびLSI-11でも動作する予定であった。XEDOSはXENIXの上位互換であり、バイトは1983年に「(XEDOSは)将来におけるマルチユーザー版MS-DOS」と評した。
しかしながら、IBMはDOSを置き換えるつもりはなかった。AT&TがUNIXの販売を開始後、マイクロソフトとIBMはDOSの後継としてOS/2の開発を開始した。両社はその後、DOSの後継OSであるOS/2とWindowsにおける意見の相違が積み重なっていった。その結果、両社はDOSシステムをそれぞれ個別に開発するようになった。MS-DOSの最後の小売版はMS-DOS 6.22であった。この後、MS-DOSはWindows 95、98、Meの一部となった。PC DOSの最後の小売版はPC DOS 2000(PC DOS 7 revision 1とも呼ばれる)であったが、後にIBMはOEMおよび社内利用向けとしてPC DOS 7.10を開発した。
マイクロソフトがMS-DOSの販売とサポートを終了すると発表した1994年6月26日に、FreeDOSプロジェクトが開始された。FreeDOSプロジェクトの提案者はその後、オープンソースの代替品開発を提案するマニフェストを投稿した。それから数週間以内にカーネル "DOS-C" の作者やティム・ノーマンなどのプログラマ達がこのプロジェクトに参加した。カーネル、COMMAND.COM互換のコマンドラインインタプリタ、および中核となるユーティリティは、スクラッチビルドと流用可能コードを組み合わせて作成された。FreeDOSは幾度かの公式プレリリース版配布後、バージョン1.0が2006年9月3日にリリースされた。FreeDOSはGNU General Public License (GPL) に基づいて利用でき、ライセンス料や使用料は不要である。
衰退
Microsoft Windowsの初期バージョンはMS-DOS上で実行されていた。1990年代初頭、Windowsのグラフィカルシェルは新しいシステムで頻繁に利用された。1995年、DOSライセンスを別途必要としないスタンドアローンオペレーティングシステムであるWindows 95が販売された。Windows 95(およびその後継であるWindows 98とME)はデフォルトOSカーネルを引き継いだが、互換性のためMS-DOSコンポーネントは残された。Windows 95と98ではWindowsを起動せずにMS-DOSコンポーネントを実行できたが、MEではそれができなくなった。Windowsの使用にDOSが不要となったため、ユーザーのほとんどはDOSを直接使用しなくなった。
継続使用
時点で使用可能な互換システムとしては、FreeDOS、、PTS-DOS、RxDOS、およびが挙げられる。コンピュータメーカーの中には、OEMオペレーティングシステムとしてFreeDOS搭載のコンピュータを販売しているメーカーも存在し、ハードウェアに近いことを理由に依然としてDOS互換システムを使用している開発者やコンピュータエンジニアも存在する。
組み込みシステム DOSはハードウェアへ直接アクセスする構造であるため、組み込みシステムで使用できる。DR-DOSの最終バージョンは未だにこの市場向けとなっている。ROM-DOSはキヤノンのPowerShot Pro 70用オペレーティングシステムとして使われた。
エミュレーション Linuxではが使用できる。これはDOSプログラムをネイティブ並みの速度で動作させるためのLinuxネイティブ仮想マシンである。UNIXやMicrosoft Windowsの様々なバージョンにおいて、DOSEMU以外にもDOSを実行するためのエミュレータは数多く存在するが、その中の1つがDOSBoxである。DOSBoxは現代のオペレーティングシステム上で(やDOOMなどの)レトロゲームを遊ぶために設計されている。DOSBoxに含まれるDOS実装はエミュレータと強固に結びつき実機では起動しないが、必要に応じてMS-DOSやFreeDOSなど他のDOSオペレーティングシステムもブートできる。
設計 MS-DOSとIBM PC DOSに関連するオペレーティングシステムは全て、インテルx86互換CPUを使うマシンを連想させる。特に連想されるマシンがIBM PC互換機である。MS-DOSのマシン依存版は、多くのIBM PCと互換性のないx86ベースマシン用に生産された。それらにはマイクロソフト配布をメーカー名で再ラベルしたものから、IBM PCと互換性のないハードウェアで動作するよう特別設計されたバージョンまで様々なバージョンが存在した。アプリケーションプログラムは、ハードウェアを直接制御せずその代わりにDOS APIを使用する限り、IBM PC互換機とそうでないマシンの両方で実行できた。FreeDOSカーネルの起源であるDOS-Cは、1990年代初頭の68000シリーズCPU用DOS/NTからの派生であった。これらのシステムはDOSアーキテクチャと大まかには似ていたものの、x86以外のCPU命令セットと互換性がないためアプリケーションはバイナリ互換ではなかった。ただし高水準言語で書かれたアプリケーションであれば移植は容易であった。
DOSはシングルユーザー・シングルタスクのオペレーティングシステムで、再入可能ではない基本的なカーネル機能が搭載されている。それらの機能は一度に1つのプログラムしか使うことができず、DOS自体は複数プログラムを同時実行する機能を持たない。DOSカーネルはプログラムに対し様々な関数 (API) を提供するので、これによりプログラムはキャラクタI/O、ファイル管理、メモリ管理、そしてプログラムのロードと終了などを行える。
DOSはバッチファイル(拡張子は.BAT)によるシェルスクリプトの使用を可能としている。バッチファイルの各行は実行プログラムとして解釈される。バッチファイルにはGOTOや条件文などの内部コマンドも使用できる。
DOSはキャラクタベースのアプリケーションを開発するためのAPIを提供するが、このAPIではグラフィックカード、プリンター、およびマウスなどのハードウェアのほとんどにアクセスできない。これを行うにはプログラマが直接ハードウェアにアクセスする必要があったため、各々のアプリケーションが各周辺機器用の独自デバイスドライバ一式を搭載することが普通となった。ハードウェアメーカーは、人気のアプリケーションがデバイスドライバを確保できるよう仕様を公開した。
ブートの流れ PC互換機のブートストラップローダであるマスターブートレコード (MBR) は、ブートディスクの中にある最初のトラック()の最初のセクタに存在するブートセクタの始めに置かれている。ROM BIOSはこのセクタをメモリの:番地にロードし、通常はオフセットにある署名 "" をチェックする。セクタが正常でなければROM BIOSは次の並びの物理ディスクを試行し、正常であれば特定のレジスタを設定してからロードアドレスへジャンプする。 ロードされたブートセクタが、パーティション化されたメディアで見つかったMBRであった場合、そのブートセクタはメモリの:番地に再配置される 090912 dewassoc.com。MBRでなかった場合この手順はスキップされる。ブートセクタはアクティブパーティションを探すためパーティションテーブルをスキャンする(新しいMBRはオフセットにビット7が設定されているかどうかをチェックするが、古いMBRは単に値が80hかどうかをチェックする)。アクティブパーティションが見つかった場合、そのパーティションは (VBR) を保持しているため、ROM BIOSによるMBRのロードと同じ方法でVBRはメモリの:番地にロードされる。その後MBRは特定のレジスタを設定してからロードされたVBRへ実行を渡す。 この時点で、:にロードされたセクタの内容はVBRで構成される。VBRはOS固有であり、一般的には異なるDOSバージョン間でVBRを交換することはできない。これはVBRの挙動がDOSバージョンにより微妙に異なるからである。DOS 1.xなどかなり古いDOSのバージョンでは、VBRはIO.SYS/IBMBIO.COMファイル全体をメモリの:番地にロードする 090912 pagetable.com。この作業のために、SYSによってこれらのセクタをディスクに連続した順序で格納する必要があった。後のDOSバージョンではルートディレクトリの最初の2つのエントリの内容を、メモリの:番地に配置して格納するようになり、これらがVBRに記録された通りの正しいブートファイルである場合、VBRはIO.SYS/IBMBIO.COMファイル内の先頭から三番目までのセクタを連続した順序でメモリの:番地にロードする。VBRはディスクパラメータテーブル (DPT) の内容も注意して保存する必要がある。最終的に特定のレジスタを設定してエントリポイントへジャンプすることにより、ロードされた部分に制御を渡す(この部分はDOSのバージョンによりかなりの違いがある)。 後のDOSバージョンでは、VBRはIO.SYS/IBMBIO.COMファイルの先頭から三番目までの3セクタのみをメモリにロードする。このロードされた部分には別のブートローダが含まれており、メモリの:番地に格納されたルートディレクトリ情報を使用して、自身の残りの部分をメモリにロードする。ほとんどのバージョンでは、従来通りファイルの内容をディスクに連続した順序で格納する必要があった。古いバージョンのDOSでは一括でロードされるため、この手順は省略される。 DOSシステムの初期化コードは組み込まれたデバイスドライバを初期化した後、MS-DOSシステムのMSDOS.SYSに配置されたDOSカーネルをメモリにロードする。Windows 9xでは、DOSシステムの初期化コード、組み込まれたデバイスドライバおよびDOSカーネルは、単一のIO.SYSファイルに統合されているが、MSDOS.SYSはテキスト設定ファイルとして使用される。 その後、パラメータ設定の構文解析を行うためにCONFIG.SYSファイルが読み込まれる。環境変数はシェルの存在位置を指定するが、デフォルトはCOMMAND.COMである。 シェルがロードされ実行される。 その後、シェルはスタートアップバッチファイルであるAUTOEXEC.BATを実行する 090913 academic.evergreen.edu。
ブートセクタがロードしたDOSシステムファイルは連続した順序で、かつ最初の2つのディレクトリエントリである必要がある 090912 arl.wustl.edu。このためDOSシステムファイルの追加や削除を行うと、メディアがブート不可能となる恐れがある。しかしながら、シェルを他のものへ自由に置き換えることはできるため、この置き換えにより専用アプリケーションの実行をより高速に開始できるようになる。DR DOSではどのバージョンにも、このブートセクタの制限は当てはまらないため、システムファイルをルートディレクトリ内の任意の場所に配置でき、かつ連続した順序で配置する必要もない。このため既にブートセクタがDR DOS互換ならば、単にシステムファイルをディスクへコピーするだけでよい。
PC DOSおよびDR DOSの5.0以降では、DOSシステムファイルのIO.SYSはへ、MSDOS.SYSはへとそれぞれ改名されている。古いバージョンのDR DOSではIO.SYSはDRBIOS.SYSへ、MSDOS.SYSはDRBDOS.SYSとそれぞれ改名されていた。
MS-DOS 7.0以降、バイナリシステムファイルIO.SYSとMSDOS.SYSは単一ファイルIO.SYSに統合され、MSDOS.SYSはCONFIG.SYSやAUTOEXEC.BATのような設定ファイルとなった。MSDOS.SYSにおいてBootGUIディレクティブが0に設定されると、ブートプロセスはコマンドプロセッサ(通常はCOMMAND.COM)をロードしてから、WIN.COMを自動的に実行せずコマンドプロセッサのまま起動する。
ファイルシステム DOSが使用するファイルシステムは、8.3形式のファイル名をサポートする。8.3形式のファイル名は、名称を表す8文字と拡張子を表す3文字から構成される。DOS 2からは階層的ディレクトリがサポートされるようになった。各ディレクトリ名も8.3形式であるが、DOSによって保守される内部のカレントディレクトリ構造 (CDS) テーブルの制約上、ディレクトリパスの最大長は64文字である。DOSによってサポートされる、ドライブ名をも含む完全修飾ファイル名の最大長は80文字で、その形式は "ドライブレター:\パス\ファイル名.拡張子" で末尾にヌルバイトが付けられた文字列である。
DOSが使用するファイルシステムはFile Allocation Table (FAT) である。FATは当初、1ドライブあたり最大4078個のクラスタをサポートするFAT12であった。DOS 3.0でFAT16のサポートが追加され、16ビットアロケーションエントリを使用し1ドライブあたり最大65518個のクラスタをサポートした。Compaq MS-DOS 3.31ではFAT16Bのサポートが追加され、これにより32MiBのドライブ制限が削除され最大512MiBまでサポートできるようになった。最終的にMS-DOS 7.1(Windows 9xのDOSコンポーネント)ではFAT32のサポートが追加され、32ビットアロケーションエントリを使用し最大137GB (127GiB) 以上のハードディスクドライブをサポートできるようになった。
DOS 3.1以降、ファイルリダイレクトのサポートがDOSに追加された。ファイルリダイレクトは当初ネットワークをサポートするために使用されていたが、後に (MSCDEX) のサポートに使用された。IBM PC DOS 4.0から予備のファイルシステムとして (IFS) もサポートされるようになったたが、使用されなかったためDOS 5.0でIFSは削除された。DOSはCONFIG.SYSからロードされたブロックデバイス(「ディスクドライブ」デバイス)もサポートしており、これをDOSファイルシステムの下で使用することでネットワークデバイスをサポートできた。
ドライブレターのスキーム
DOSにおいて、ドライブは識別文字であるドライブレターで参照される。通例として、"A" と "B" はフロッピーディスクドライブ用に予約される。フロッピーディスクドライブが1つしかないシステムでは、DOSは "A" と "B" の両方をそのドライブに割り当て、プログラムが交互にアクセスする際にユーザーへディスク交換を促す。この機能により、フロッピーからフロッピーへのコピーや、1枚のフロッピーからプログラム起動中に他のフロッピーへデータアクセスすることを容易となる。ハードドライブには当初 "C" と "D" が割り当てられていた。DOSは1台のドライブにアクティブパーティションは1つしかサポートできなかった。複数台のハードドライブがサポートされるようになると、まず最初に各ドライブのアクティブかつプライマリなパーティションへドライブレターを割り当て、次にドライブを渡り歩いて内の論理ドライブにドライブレターを割り当て、最後にアクティブではないパーティション(そのような追加パーティションが存在し、かつDOSがサポートするファイルシステムを含んでいた場合)にドライブレターを割り当てるように発展していった。最終的に、DOSはドライブレターを光学ドライブ、RAMディスク、そして他のハードウェアにも割り当てるようになった。ドライブレターは通常、ドライブがロードされた順に割り当てられるが、ドライバはDOSに異なる文字を割り当てることもできる。例えばネットワークドライブ用のドライバは、そのドライブレターとしてアルファベットの末尾に近い文字を割り当てることが多い。
DOSアプリケーションはこれらのドライブレターを直接使用する(Unix系はこれとは異なり /dev ディレクトリを使う)ため、ドライブレターを必要とするハードウェアが新たに追加されると、アプリケーションが異常終了する可能性がある。例として、既存のハードドライブの拡張パーティション内に論理ドライブが含まれている場合に、プライマリパーティションを持つハードドライブを新たに追加する場合を考える。新しいドライブには、拡張パーティション内に存在する論理ドライブのいずれか1つに対して、以前割り当てられていたドライブレターが割り当てられる。さらに拡張パーティション内に論理ドライブしか持たないハードドライブを新たに追加した場合でも、RAMディスクや光学ドライブに割り当てられるドライブレターが追加される前と異なってしまう。この問題はマイクロソフトのDOSベースであるWindows 9xシリーズでも引き続き発生していたが、NT系ベースのバージョンに置き換えられると、既存のドライブレターはユーザーが変更しない限り保持されるようになった。DOSにおいても、DOSプログラムをSUBSTで定義した論理ドライブにインストールすることでこの問題に対処できる。このドライブ割り当ては、アプリケーションを起動する度にバッチジョブで変更される。Concurrent DOSの一部のバージョン、Multiuser DOS、System Manager、およびREAL/32では、アプリケーションを起動する度にロードされた対応ドライブに対して、予約されたドライブレターである "L" が自動的に割り当てられる。
予約デバイス名
DOSには予約されたデバイス名が存在する。この名前は組み込まれたデバイスが占有しているため、どのような拡張子を付けてもファイル名として使用できない。この制限はWindowsのバージョンのいくつかに影響を与え、場合によってはクラッシュやセキュリティ脆弱性の原因となる。
予約された名前を以下に示す:
COM1からCOM9() LPT1からLPT9(ラインプリンター用パラレルポート) CON("console"、入力ストリームではキーボードを、出力ストリームではディスプレイを表す) AUX("auxiliary"、第1接続COMポートを表す) PRN("printer"、第1接続LPTポートを表す) NUL(nullデバイス)86-DOS 1.10およびPC DOS 1.0より追加
Windows 95およびWindows 98では予約されたデバイス名を含むパス(CON/CON、AUX/AUX、PRN/PRNなど)を入力するとオペレーティング システムがクラッシュするが、マイクロソフトはこの問題に対するセキュリティ修正プログラムを提供した。Windows XPではファイルやフォルダの名前を予約されたデバイス名に変更しようとすると、通知やエラーメッセージを出さずに黙って以前の名前へリバートしてしまう。Windows Vista以降からは、ファイルやフォルダの名前に予約されたデバイス名を付けようとすると、「指定されたデバイス名は無効です」というエラーメッセージが表示される。
予約されたデバイス名(NULを除く)はMS-DOS、PC DOS、およびDR-DOSの全てのバージョンでサポートされ続けてきた。MS-DOS 1.25では、一部のOEM版でLSTを使用できたが、それ以外のOEM版では既にPC DOSで導入されていたLPT1(第1ラインプリンタ)とCOM1(第1シリアル通信デバイス)を代わりに使用した。LPT1とLPT2およびCOM1からCOM3に加えて、MS-DOS 2.11の用ヒューレット・パッカード製OEM版では、LSTのエイリアスとしてLPT2を、82164AのエイリアスとしてCOM2をサポートし、プロッターのデバイス名であるPLTもサポートした。その他のデバイス名として、COM2、LPT2、LPT3、およびCLOCK$(MS-DOS 2.11の一部の版ではCLOCKという名前のまま (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.))クロックデバイスがDOS 2.0で導入され、COM3とCOM4がDOS 3.3で追加された。マルチタスク版MS-DOS 4のみ、KEYBD$とSCREEN$をサポートした。DR DOS 5.0以降とMultiuser DOSは、省電力とマルチタスク改善のための動的アイドル検出用デバイスに対応したデバイスをサポートした。LPT4はDR-DOS 7.02以降の一部のバージョンでサポートされた、オプションの組み込みドライバである。CONFIG$はMS-DOS 7.0から8.0における、リアルモードPnPマネージャを構成した。