DOS (オペレーティングシステム)

**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" の頭字語である。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であった場合、そのブートセクタはメモリの:番地に再配置される。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ファイル全体をメモリの:番地にロードする。この作業のために、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を実行する。

ブートセクタがロードしたDOSシステムファイルは連続した順序で、かつ最初の2つのディレクトリエントリである必要がある。このため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`という名前のまま）クロックデバイスが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マネージャを構成した。

通常、`AUX`は`COM1`が、`PRN`は`LPT1` (`LST`) がデフォルトであるが、DOSの一部のバージョンではこれらのデフォルトを他のシリアルポートやパラレルデバイスへ変更できる。`PLT`デバイス（一部のHP OEMバージョンのMS-DOSにのみ存在）も同様にしてデフォルトを変更できた。

通例として、`NUL:`のようにコロン () で終わるファイル名はデバイス名を表すが、実際にはこのコロンは組み込みデバイスドライバの名前の一部ではなく、場合によってはコロンを入力する必要はない。その例を以下に示す：

```dosbatch
ECHO This achieves nothing > NUL
```


現在においても、ディスクセクタ内にあるディレクトリデータ構造を直接編集するなどの方法により、予約されたデバイス名でファイルやディレクトリを作成することができる。ウイルスやハッキングプログラムは、ファイル名に予約されたデバイス名を付けたり先頭を空白文字にするなどして、そのような名前のファイルへアクセスする方法を知らないユーザーからファイルを隠蔽してしまうことがある。

ファイル名をスペースで始めるなどこのような命名は、ウイルスやハッキングプログラムによって、これらのパスへアクセスする方法を知らないユーザーからファイルを隠蔽するために使用されることがある。

### メモリ管理

DOSは8088プロセッサ用に設計されており、直接アクセスできるRAMは最大1MiBまでである。IBMとマイクロソフトの両社は、プログラムが使用できるメモリの最大量を640KiBと定め、残りの384KiBをビデオメモリ、一部のビデオおよびネットワーク周辺機器のアダプタの読み取り専用メモリ、およびシステムのBIOS用に予約した。1985年までに、一部のDOSアプリケーションが既にメモリの限界へ到達してしまった一方で、マシンの仕様によっては予約領域の大部分が未使用となっていた。

追加メモリへのアクセスを可能にする仕様が開発された。最初の仕様はExpanded Memory Specification (EMS) で、予約された上位メモリ領域内にある64KiBページフレームを介して追加カード上のメモリへアクセスできるように設計された。80386以降のシステムからは、EMM386のような仮想86モード (V86) メモリマネージャを使用することで、追加カードがなくとも拡張メモリから拡張メモリを作成できるようになった。もう一つの仕様は80286以降からのExtended Memory Specification (XMS) である。これは初期メモリとUpper Memory Area (UMA) の1メガバイトより上位にある65,520バイトのへの直接アクセスで、拡張メモリとデータをやり取りする方法を提供する。通常、XMSはまたはQEMMやなどのEMSもサポートするV86モードメモリマネージャにより提供された。

DOS 5以降HMAを直接活用できるようになり、CONFIG.SYSに`DOS=UMB`という文を記述すればDOSのカーネルコードとディスクバッファをHMAにロードできるようになった。またCONFIG.SYSに`DOS=UMB`いう文を記述すれば、UMBもHMAと同じ様に活用できるようになった。

### OS/2およびWindows配下のDOS

OS/2およびWindowsにおけるDOSエミュレーションは、ネイティブアプリケーションとほぼ同じ方法で実行される。それらはドライバやサービスのの全てにアクセスが可能で、ホストのクリップボードすらも使用できる。ファイルシステムなどのドライバはホストシステムに存在するため、DOSエミュレーションにはDOSコールをOS/2やWindowsシステムコールへ変換するDOS API変換レイヤーのみ必要となる。一般的にその変換レイヤーはBIOSコールも変換して、DOSプログラムの多くによく使用される共通I/Oポートへのアクセスを仮想化する。

Windows 3.1および9xにおいて、DOS仮想マシンはWinOldApにより提供される。WinOldApはプログラムのPIFファイルと、Windowsがロードされた際のシステム情報とをベースに仮想マシンを作成する。DOSグラフィックモードは、文字表示でもグラフィック表示でも、ウィンドウ内にキャプチャされ起動される。DOSアプリケーションは、WinOldApが特別に公開するコールにアクセスすることでグラフィックWindowsクリップボードを使用でき、WinOldApグラフィックによりテキストを貼り付けることができる。

OS/2とWindows NTでエミュレートされたDOSはDOS 5ベースである。デフォルト設定（CONFIG.SYSおよびAUTOEXEC.BAT）は存在するが、セッション毎に異なるファイルを使用することもできる。これらのファイル内のドライバをロードしてホストシステムにアクセスできるが、通常これらはサードパーティー製である。

バージョン2.x以降のOS/2配下では、DOSエミュレーションはDOSKRNLにより提供される。これはIBMBIO.COMとIBMDOS.COMを統合したファイルで、システムコールはOS/2ウィンドウサービスへと渡される。DOSプログラムは独自の環境で実行されるが、DOSユーティリティの大半は、バインドされた\OS2ディレクトリ内のDOS / OS2アプリケーションによって提供される。OS/2はWindowsの改変コピー (Win-OS/2) を使用してWindows 3.1アプリケーションを実行できる。この改変コピーにより、Windows 3.1プログラムをシームレスにOS/2デスクトップで実行でき、またDOSからのWindows起動と同じ様にWin-OS/2デスクトップを起動できるようになった。

OS/2は「ドライブA:からのDOS」 (VMDISK) を認めている。これはMS-DOS 6.22やPC DOS 5.00のように実際のDOSである。ブート可能なDOSのフロッピーディスクを作成し、OS/2から数多くのドライバを追加してから特殊なイメージを作成する。この方法でブートされたDOSはシステムへフルアクセスできるが、ハードウェア用のドライバは独自提供される。このディスクを使うことで、OS/2用ドライバが存在しないCD-ROMドライブにもアクセスできる。

1993年以降におけるWindows NTファミリーの全ての32ビット (IA-32) 版では、DOSエミュレーションは仮想DOSマシン (NTVDM) の手段で提供される。Windowsの64ビット（IA-64とx86-64）版はNTVDMをサポートせず16ビットDOSアプリケーションを直接実行できない。DOSboxなどサードパーティーのエミュレータは64ビットマシンでDOSプログラムを実行するために使用できる。

## ユーザインタフェース
DOSシステムはコマンドラインインタフェースを使用し、プログラムはそのファイル名をコマンドプロンプトへ入力して開始する。DOSシステムにはユーティリティプログラムが含まれ、対応するプログラムが存在しない内部コマンドを提供する。

よりユーザーフレンドリーな環境を提供するため、ソフトウェアメーカーの多くがインタフェースをユーザーに提供するファイルマネージャプログラムを作成した。その顕著な例はMicrosoft Windowsで、最終的にはMicrosoft Windows 9xが自己充足したプログラムローダーとなり、DOSに代わり最も使用されるPC互換機のプログラムローダーとなった。テキストユーザインタフェースプログラムにはNorton Commander、、、DESQview、およびSidekickがある。グラフィカルユーザインタフェースにはデジタルリサーチのGEM（元々はCP/M用に作成された）やGEOSがある。

最終的に主要なDOSシステムのメーカーは独自の環境マネージャを組み込むようになった。MS-DOS/IBM DOS 4にはDOSシェルが含まれ、その翌年にはGEMベースのViewMAXを搭載したDR DOS 5.0がリリースされた。

### 終了および常駐維持

DOSはマルチタスクオペレーティングシステムではないが、*Terminate and Stay Resident* (TSR) 機能を提供し、これによってプログラムをメモリへ常駐させ続けることが可能となる。システムタイマーやキーボードの割り込みをフックすることで、常駐プログラムにバックグラウンドタスク実行や、任意タイミングでの呼び出しが可能となる。これにより、現在実行中のプログラムのプリエンプトや、プログラム独自基盤における単純形式マルチタスクの効果的実装が可能となる。コマンドは、バックグラウンド印刷スプーリングを実装するために常駐プログラム化される。ポップアップのPersonal Information Manager (PIM) であるSidekickもこの技術を利用する。

Terminate and Stay Residentプログラムは、デフォルトでは利用できない追加機能も提供する。CEDやのようなプログラムは、COMMAND.COMで利用可能な機能を超えるコマンドライン編集機能を提供する。Microsoft CD-ROM Extensions (MSCDEX) のようなプログラムは、CD-ROMディスクへのファイルアクセスを提供する。

一部のTSRでは原始的形式のタスク切り替えを行える。例えば、シェアウェアプログラムのBack and Forth（1990年）は、ホットキーにより現在実行中のプログラムの状態をディスクにセーブし別のプログラムをロードしてそれに切り替える、つまりプログラムの「前と後 (Back and Forth) 」を切り替えるためのソフトウェアである（ただし、ディスクアクセスが必要なため低速である）。Back and Forthではバックグラウンドプロセスの実行はできない。バックグラウンドプロセスの実行にはDESQviewが必要であった（80386以上）。

## ソフトウェア

*  - 16ビットグラフィカルウェブブラウザ
* dBase - データベースプログラム
*  - プレゼンテーショングラフィックデザインプログラム
* Lotus 1-2-3 - IBM PCの成功要因とされる表計算ソフト
* Norton Commanderと - ファイル管理ユーティリティ
*  - 急速にファイル圧縮の標準となったユーティリティ
* ProComm、、および - モデム通信プログラム
* Sidekick - 他のプログラムから利用可能なPersonal Information Manager
* WordPerfect - 1980年代に主流だったワープロソフト
* WordStar - 元々はCP/M用であったがIBM PCで普及したワープロソフト

### 開発ツール
* BASICAとGW-BASIC - BASICインタプリタ
* DJGPP - gccの32ビットDPMI移植
* Microsoft Macro Assembler、Microsoft Cおよび - マイクロソフト
*  - 
* Turbo Pascal、Turbo BASIC、Turbo C、Turbo PrologおよびTurbo Assembler - ボーランド

## 関連項目
* COMMAND.COM - DOSとWindows 9x系用のコマンドラインインタプリタ
* CP/M - DOSと類似したデジタルリサーチのOS
*  - DCP、西ドイツのによるMS-DOS派生
* DOS API
* DOS/V
* 
* 
*  - DOS互換のマルチユーザーOS
*  - IBM PC互換機におけるDOSのTUI基盤

## 脚注

## 参考文献
* IBM Corp., IBM, (January 1984). "IBM DOS Release 2.10 Cloth bound retail hard board box". 1st edition. IBM Corp. Item Number. 6183946
* IBM Corp., IBM, (January 1984). "Disk Operating System User's guide (DOS Release 2.10)". 1st edition. Microsoft Corp. (100 pages including colour illustrations) Item Number. 6183947
* IBM Corp., IBM, (January 1984). "Disk Operating System Manual (DOS Release 2.10)". 1st edition. Microsoft Corp. (574 looseleaf pages in 3 ring folder) Item No. 6183940
* 
* 

## 外部リンク
* Origins of DOS - ティム・パターソンによる記事とマニュアル
* 
* 
* Batfiles: The DOS batch file programming handbook
* 
*  "(...) An archive of carefully hand selected FREE [and abandoned] software for DOS."
* Online Windows XP Simulator
* MS-DOS v1.25, v2.0, v4.0 Source Code