トップQs
タイムライン
チャット
視点

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

ウィキペディアから

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

DOS ([dɒs], [dɔːs]) はディスクを基盤としたIBM PC互換機オペレーティングシステム (OS) のファミリーである[1]。DOSファミリーは主にIBM PC DOSと、それをリブランドしたマイクロソフトMS-DOSから構成され、どちらも1981年に発表された。後に他のメーカーからそれらの互換システムであるDR-DOS(1988年)、ROM-DOS英語版(1989年)、PTS-DOS(1993年)、FreeDOS(1994年)も発表された。MS-DOSは1981年から1995年までIBM PC互換機市場を独占していた。

Thumb
MS-DOS 6の起動画面とコマンドラインインタフェース、およびディレクトリ構造例。
Thumb
バージョン情報とディレクトリ構造例を表示したFreeDOSのブート画面とコマンドラインインタフェース。

DOSという名称はMS-DOSおよびその互換OSを明確に同一視するようになったが、これはプラットフォームに依存せずIBM PC以前から使われている、 "Disk Operating System" の頭字語である[2]。1966年のメインフレームDOS/360を皮切りに、他にも数十のオペレーティングシステムがこの頭字語を使用している。他にもApple DOS英語版Apple ProDOS英語版Atari DOS英語版Commodore DOS英語版TRSDOS英語版Commodore DOS英語版、そしてAmigaDOS英語版がある。

Remove ads

歴史

要約
視点

起源

Thumb
Apple IIZ-80 SoftCard上で実行されたデジタルリサーチ製CP/M

IBM PC DOS(および別売のMS-DOS)とその前身である86-DOSは、インテル16ビットマイクロプロセッサである8086で動作した。IBM PC DOSはデジタルリサーチのディスクオペレーティングシステムであるCP/Mと類似するよう開発された。これは当時CP/Mが8ビット8080およびZ80マイクロコンピュータを支配していたため、そのアプリケーション移植を容易にするためである。

Thumb
IBM Personal Computer (IBM 5150 PC)

IBMIntel 8088マイクロプロセッサを搭載したIBM PCを発表したが、それにはオペレーティングシステムが必要であった。ジョン・R・オペル会長がユナイテッド・ウェイ全国理事会執行委員会の同僚であるメアリー・マクスウェル・ゲイツと会談すると、彼女はCP/Mの8088互換品ビルドを支援するために自身の息子であるビル・ゲイツをオペルに紹介した[3]。その後IBMはデジタルリサーチへと向かい会議が設定されたものの、CP/M使用に関する当初の交渉は決裂した。なぜなら、デジタルリサーチはCP/Mをロイヤルティーに基づき販売することを希望したのに対し、IBMはCP/Mの買い切りと "PC DOS" への名称変更を求めたが、デジタルリサーチの創設者であるゲイリー・キルドールはこれを拒否したことでIBMは撤退したためである[4][5]

Thumb
シミュレーションによるSCP 86-DOSのセッション

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のライセンスを供与した[6]。それらの企業は自社ハードウェア用MS-DOSを供給したが、その中にはゼニス・データ・システムズ英語版Z-DOS英語版のようにMS-DOSではなく独自の名称を付ける企業もあった[7]。後にマイクロソフトは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として普及するようになった[4]

当初のマイクロソフトによる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のマルチタスク版を開発した[8][9]。一般的にこの版のDOSは "European MS-DOS 4" として知られるが、これはICL英語版向けに開発され、一部のヨーロッパ企業にライセンスされたからである。この版のDOSはプリエンプティブマルチタスク、共有メモリ、デバイスヘルパーサービス、およびNew Executable ("NE") フォーマットの実行ファイルをサポートしていた。これらの機能はいずれも以降のバージョンのDOSでは使用されなかったが、OS/2 1.0カーネルの基盤形成に使用された。なおこの版のDOSは、IBMが開発しDOS 3.3をベースとして幅広くリリースされたPC DOS 4.0とは別のものである。

Thumb
IBM Personal Computer Version 1.0用のデジタルリサーチのCP/M-86

デジタルリサーチはCP/M-86で失った市場を取り返そうと、まずはConcurrent DOSFlexOS英語版およびDOS Plus英語版(MS-DOSとCP/M-86両方のソフトウェアと互換性がある)を、次にMultiuser DOS英語版(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を満足させて我々の言語を購入してもらうことを意図とした、一度きりの使い捨て製品に過ぎなかった」と記した[10]。マイクロソフトはDOSをXENIX導入までの一時的な繋ぎとして期待していた。マイクロソフトはMS-DOSを時間を掛けて改良し、シングルユーザー版XENIXとほぼ区別がつかないOSである "XEDOS" にする計画を立てていた。さらにXEDOSは68000Z8000、およびLSI-11でも動作する予定であった。XEDOSはXENIXの上位互換であり、バイトは1983年に「(XEDOSは)将来におけるマルチユーザー版MS-DOS」と評した[11][12]

Thumb
MS-DOSと似たテキストモードを搭載したOS/2 1.0

しかしながら、IBMはDOSを置き換えるつもりはなかった[13]AT&TUNIXの販売を開始後、マイクロソフトとIBMはDOSの後継としてOS/2の開発を開始した[10]。両社はその後、DOSの後継OSであるOS/2とWindowsにおける意見の相違が積み重なっていった[14]。その結果、両社はDOSシステムをそれぞれ個別に開発するようになった[15]。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プロジェクトが開始された。その後ジム・ホール英語版オープンソースの代替品開発を提案するマニフェストを投稿した。それから数週間以内にパット・ヴィラニ英語版やティム・ノーマンなどのプログラマ達がこのプロジェクトに参加した。カーネル、COMMAND.COMコマンドラインインタプリタ(シェル)、および中核となるユーティリティは、スクラッチと流用可能コードを組み合わせて作成された。FreeDOSは幾度かの公式プレリリース版配布後、バージョン1.0が2006年9月3日にリリースされた。FreeDOSはGNU General Public License (GPL) に下づいて利用でき、ライセンス料や使用料は不要である[16][17]

衰退

Microsoft Windowsの初期バージョンはMS-DOS上で実行されていた[18]。1990年代初頭、Windowsのグラフィカルシェルは新しいシステムで頻繁に利用された。1995年、DOSライセンスを別途必要としないスタンドアローンオペレーティングシステムであるWindows 95が販売された。Windows 95(およびその後継であるWindows 98とME)はデフォルトOSカーネルを引き継いだが、互換性のためMS-DOSコンポーネントは残された。Windows 95と98ではWindowsを起動せずにMS-DOSコンポーネントを実行できたが、MEではそれができなくなった[19][20][21]。Windowsの使用にDOSが不要となったため、ユーザーのほとんどはDOSを直接使用しなくなった。

継続使用

Thumb
DOSBox

2025年現在時点で使用可能な互換システムとしては、FreeDOSROM-DOS英語版PTS-DOS、RxDOS[22]、およびREAL/32英語版が挙げられる。コンピュータメーカーの中には、OEMオペレーティングシステムとしてFreeDOS搭載のコンピュータを販売しているメーカーも存在し[23][24][信頼性要検証]、ハードウェアに近いことを理由に依然としてDOS互換システムを使用している開発者やコンピュータエンジニアも存在する[要出典]

組み込みシステム

DOSはハードウェアへ直接アクセスする構造であるため、組み込みシステムで使用できる。DR-DOSの最終バージョンは未だにこの市場向けとなっている[25]。ROM-DOSはキヤノンPowerShot Pro 70用オペレーティングシステムとして使われた[26]

エミュレーション

LinuxではDOSEMU英語版が使用できる。これはDOSプログラムをネイティブ並みの速度で動作させるためのLinuxネイティブ仮想機械である。UNIXやMicrosoft Windowsの様々なバージョンにおいて、DOSEMU以外にもDOSを実行するためのエミュレータは数多く存在するが、その中の1つが[DOSBox]]である[27][28] DOSBox is designed for legacy gaming (e.g. King's Quest, Doom) on modern operating systems.[18][27]。DOSBoxは現代のオペレーティングシステム上で(King's Quest英語版DOOMなどの)レトロゲームを遊ぶために設計されている[18][27]。DOSBoxに含まれるDOS実装はエミュレータと強固に結びつき実機では起動しないが、必要に応じてMS-DOSやFreeDOSなど他のDOSオペレーティングシステムもブートできる。

Remove ads

設計

要約
視点

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条件文などの内部コマンドも使用できる[29]

DOSはキャラクタベースのアプリケーションを開発するためのAPIを提供するが、このAPIではグラフィックカードプリンター、およびマウスなどのハードウェアのほとんどにアクセスできない。これを行うにはプログラマが直接ハードウェアにアクセスする必要があったため、各々のアプリケーションが各周辺機器用の独自デバイスドライバ一式を搭載することが普通となった。ハードウェアメーカーは、人気のアプリケーションがデバイスドライバを確保できるよう仕様を公開した[30]

ブートの流れ

  • PC互換機のブートストラップローダであるマスターブートレコード (MBR) は、ブートディスクの中にある最初のトラック(トラック0英語版)の最初のセクタに存在するブートセクタの始めに置かれている。ROM BIOSはこのセクタをメモリの0000h:7C00h番地にロードし、通常はオフセット+1FEhにある署名 "55h AAh" をチェックする。セクタが正常でなければROM BIOSは次の並びの物理ディスクを試行し、正常であれば特定のレジスタを設定してからロードアドレスへジャンプする。
  • ロードされたブートセクタが、パーティション化されたメディアで見つかったMBRであった場合、そのブートセクタはメモリの0000h:0600h番地に再配置される[31]。MBRでなかった場合この手順はスキップされる。ブートセクタはアクティブパーティションを探すためパーティションテーブルをスキャンする(新しいMBRはオフセット+1BEh+10h*nにビット7が設定されているかどうかをチェックするが、古いMBRは単に値が80hかどうかをチェックする)。アクティブパーティションが見つかった場合、そのパーティションはボリュームブートレコード英語版 (VBR) を保持しているため、ROM BIOSによるMBRのロードと同じ方法でVBRはメモリの0000h:7C00h番地にロードされる。その後MBRは特定のレジスタを設定してからロードされたVBRへ実行を渡す。
  • この時点で、0000h:7C00hにロードされたセクタの内容はVBRで構成される。VBRはOS固有であり、一般的には異なるDOSバージョン間でVBRを交換することはできない。これはVBRの挙動がDOSバージョンにより微妙に異なるからである。DOS 1.xなどかなり古いDOSのバージョンでは、VBRはIO.SYS/IBMBIO.COMファイル全体をメモリの0000h:0600h番地にロードする[32]。この作業のために、SYSによってこれらのセクタをディスクに連続した順序で格納する必要があった。後のDOSバージョンではルートディレクトリの最初の2つのエントリの内容を、メモリの0000h:0500h番地に配置して格納するようになり、これらがVBRに記録された通りの正しいブートファイルである場合、VBRはIO.SYS/IBMBIO.COMファイル内の先頭から三番目までのセクタを連続した順序でメモリの0070h:0000h番地にロードする。VBRはディスクパラメータテーブル (DPT) の内容も注意して保存する必要がある。最終的に特定のレジスタを設定してエントリポイントへジャンプすることにより、ロードされた部分に制御を渡す(この部分はDOSのバージョンによりかなりの違いがある)。
  • 後の[いつ?]DOSバージョンでは、VBRはIO.SYS/IBMBIO.COMファイルの先頭から三番目までの3セクタのみをメモリにロードする。このロードされた部分には別のブートローダが含まれており、メモリの0000h:0500h番地に格納されたルートディレクトリ情報を使用して、自身の残りの部分をメモリにロードする。ほとんどのバージョンでは、従来通りファイルの内容をディスクに連続した順序で格納する必要があった。古いバージョンのDOSでは一括でロードされるため、この手順は省略される。

*DOSシステムの初期化コードは組み込まれたデバイスドライバを初期化した後、MS-DOSシステムのMSDOS.SYSに配置されたDOSカーネルをメモリにロードする。Windows 9xでは、DOSシステムの初期化コード、組み込まれたデバイスドライバおよびDOSカーネルは、単一のIO.SYSファイルに統合されているが、MSDOS.SYSはテキスト設定ファイルとして使用される。

  • その後、パラメータ設定の構文解析を行うためにCONFIG.SYSファイルが読み込まれる。SHELL環境変数はシェルの存在位置を指定するが、デフォルトはCOMMAND.COMである。
  • シェルがロードされ実行される。
  • その後、シェルはスタートアップバッチファイルであるAUTOEXEC.BATを実行する[33][34]

ブートセクタがロードしたDOSシステムファイルは連続した順序で、かつ最初の2つのディレクトリエントリである必要がある[35]。このためDOSシステムファイルの追加や削除を行うと、メディアがブート不可能となる恐れがある。しかしながら、シェルを他のものへ自由に置き換えることはできるため、この置き換えにより専用アプリケーションの実行をより高速に開始できるようになる。DR DOSではどのバージョンにも、このブートセクタの制限は当てはまらないため、システムファイルをルートディレクトリ内の任意の場所に配置でき、かつ連続した順序で配置する必要もない。このため既にブートセクタがDR DOS互換ならば、単にシステムファイルをディスクへコピーするだけでよい。

PC DOSおよびDR DOSの5.0以降では、DOSシステムファイルのIO.SYSはIBMBIO.COM英語版へ、MSDOS.SYSはIBMDOS.COM英語版へとそれぞれ改名されている。古いバージョンの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に追加された。ファイルリダイレクトは当初ネットワークをサポートするために使用されていたが、後にMicrosoft CD-ROM Extensions英語版 (MSCDEX) のサポートに使用された。IBM PC DOS 4.0から予備のファイルシステムとしてInstallable File System英語版 (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に異なる文字を割り当てることもできる。例えばネットワークドライブ用のドライバは、そのドライブレターとしてアルファベットの末尾に近い文字を割り当てることが多い[36]

DOSアプリケーションはこれらのドライブレターを直接使用する(Unix系はこれとは異なり /dev ディレクトリを使う)ため、ドライブレターを必要とするハードウェアが新たに追加されると、アプリケーションが異常終了する可能性がある。例として、既存のハードドライブの拡張パーティション内に論理ドライブが含まれている場合に、プライマリパーティションを持つハードドライブを新たに追加する場合を考える。新しいドライブには、拡張パーティション内に存在する論理ドライブのいずれか1つに対して、以前割り当てられていたドライブレターが割り当てられる。さらに拡張パーティション内に論理ドライブしか持たないハードドライブを新たに追加した場合でも、RAMディスクや光学ドライブに割り当てられるドライブレターが追加される前と異なってしまう。この問題はマイクロソフトのDOSベースであるWindows 9xシリーズでも引き続き発生していたが、NT系ベースのバージョンに置き換えられると、既存のドライブレターはユーザーが変更しない限り保持されるようになった。DOSにおいても、DOSプログラムをSUBSTで定義した論理ドライブにインストールすることでこの問題に対処できる。このドライブ割り当ては、アプリケーションを起動する度にバッチジョブで変更される。Concurrent DOSの一部のバージョン、Multiuser DOS、System Manager、およびREAL/32では、アプリケーションを起動する度にロードされた対応ドライブに対して、予約されたドライブレターである "L" が自動的に割り当てられる。

予約デバイス名

Thumb
ファイルやフォルダを予約された名前にしようと試みると出力されるエラーメッセージ

DOSには予約されたデバイス名が存在する。この名前は組み込まれたデバイスが占有しているため、どのような拡張子を付けてもファイル名として使用できない。この制限はWindowsのバージョンのいくつかに影響を与え、場合によってはクラッシュやセキュリティ脆弱性の原因となる[37]

予約された名前を以下に示す:

Windows 95およびWindows 98では予約されたデバイス名を含むパス(CON/CON、AUX/AUX、PRN/PRNなど)を入力するとオペレーティング システムがクラッシュするが、マイクロソフトはこの問題に対するセキュリティ修正プログラムを提供した。Windows XPではファイルやフォルダの名前を予約されたデバイス名に変更しようとすると、通知やエラーメッセージを出さずに黙って以前の名前へリバートしてしまう。Windows Vista以降からは、ファイルやフォルダの名前に予約されたデバイス名を付けようとすると、「指定されたデバイス名は無効です」というエラーメッセージが表示される。

予約されたデバイス名(NULを除く)はMS-DOS、PC DOS、およびDR-DOSの全てのバージョンでサポートされ続けてきた[39]。MS-DOS 1.25では、一部のOEM版でLSTを使用できたが、それ以外のOEM版では既にPC DOSで導入されていたLPT1(第1ラインプリンタ)とCOM1(第1シリアル通信デバイス)を代わりに使用した。LPT1LPT2およびCOM1からCOM3に加えて、MS-DOS 2.11のHP Portable Plus英語版ヒューレット・パッカード製OEM版では、LSTエイリアスとしてLPT2を、82164AのエイリアスとしてCOM2をサポートし[40][41]プロッターのデバイス名であるPLTもサポートした[40][41]。その他のデバイス名として、COM2LPT2LPT3、およびCLOCK$(MS-DOS 2.11の一部の版ではCLOCKという名前のまま[42][40][41])クロックデバイスがDOS 2.0で導入され、COM3COM4がDOS 3.3で追加された[39]。マルチタスク版MS-DOS 4のみ、KEYBD$SCREEN$をサポートした。DR DOS 5.0以降とMultiuser DOSは、省電力とマルチタスク改善のための動的アイドル検出用デバイスに対応した$IDLE$英語版デバイスをサポートした。LPT4はDR-DOS 7.02以降の一部のバージョンでサポートされた、オプションの組み込みドライバである。CONFIG$はMS-DOS 7.0から8.0における、リアルモードPnPマネージャを構成した。

通常、AUXCOM1が、PRNLPT1 (LST) がデフォルトである[39]が、DOSの一部のバージョンではこれらのデフォルトを他のシリアルポートやパラレルデバイスへ変更できる[40][41][43]PLTデバイス(一部のHP OEMバージョンのMS-DOSにのみ存在)も同様にしてデフォルトを変更できた[40][41]

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

ECHO This achieves nothing > NUL

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

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

メモリ管理

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

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

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

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-64x86-64)版はNTVDMをサポートせず16ビットDOSアプリケーションを直接実行できない。DOSboxなどサードパーティーのエミュレータは64ビットマシンでDOSプログラムを実行するために使用できる。

Remove ads

ユーザインタフェース

要約
視点

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

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

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

終了および常駐維持

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

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

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

ソフトウェア

Thumb
Arachneウェブブラウザ

開発ツール

Remove ads

関連項目

  • COMMAND.COM - DOSとWindows 9x系用のコマンドラインインタプリタ
  • CP/M - DOSと類似したデジタルリサーチのOS
  • Disk Control Programドイツ語版 - DCP、西ドイツのVEB Robotron英語版によるMS-DOS派生
  • DOS API
  • DOS/V
  • DOSゲームの索引英語版
  • DOSと称されるディスクオペレーティングシステムの一覧英語版
  • PC-MOS/386英語版 - DOS互換のマルチユーザーOS
  • VGAテキストモード英語版 - IBM PC互換機におけるDOSのTUI基盤

脚注

参考文献

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads