DOS

**DOS**，是**磁碟作業系統**（英文：**D**isk **O**perating **S**ystem）的縮寫，是個人電腦上的一類作業系統。從 1981 年直到 1995 年的 15 年間，DOS 在 IBM PC 相容機市場中佔有舉足輕重的地位。而且，若是把部份以 DOS 為基礎的 Microsoft Windows 版本，如 Windows 95、98 和 Me 等都算進去的話，那麼其商業壽命至少可以算到 2000 年。

DOS 家族包括 MS-DOS、PC-DOS、DR-DOS、FreeDOS、PTS-DOS、ROM-DOS、JM-OS 等，其中以 MS-DOS 最為著名。雖然這些系統常被簡稱為「DOS」，但沒有任何一個系統單純以「DOS」命名（只有一個毫無關連的 1960 年代 IBM 大型主機作業系統以此命名）。此外，有幾個和 DOS 無關、在非 x86 的微電腦系統上執行的磁碟作業系統在名稱中也有「DOS」字眼，而且在專門討論該機器的場合中也會簡稱為「DOS」（例如：AmigaDOS、AMSDOS、ANDOS、Apple DOS、Atari DOS、Commodore DOS、CSI-DOS、ProDOS、TRS-DOS 等），但這些系統和 DOS 執行檔以及 MS-DOS API 並不相容。

## 設計架構

所有 DOS 類的作業系統都是在使用 Intel x86 或其相容 CPU 的機器上執行的（主要是 IBM PC 及其相容機）。最早的時候，DOS 並未受限於此；為了在許多以 x86 為基礎，但和 IBM PC 不相容的機器上執行，產生了不少特定機器版本的 DOS 及類似的作業系統。

DOS 是單一使用者、單工的作業系統，擁有不可重入的基本核心函式（意即同時間只能有一個程式呼叫這些函式）。有一個例外的狀況，就是常駐程式（Terminate and Stay Resident，縮寫為 TSR）。某些常駐程式允許使用者多工操作；然而此時仍有「核心不可重入」的問題：當一個行程（process）呼叫了作業系統核心中的服務函式（也就是系統呼叫）時，在這個呼叫結束之前，其他的行程絕對不能進行系統呼叫、打斷第一個行程。

DOS 的核心為使用者程式提供了各式各樣的函式，例如：在螢幕上顯示文字、從鍵盤讀入字元、存取磁碟上的檔案等等。

### 手稿語言

DOS 透過_批次檔_（副檔名為**.BAT**）提供介面指令碼的功能。這些檔案是純文字格式的，可以用任何的文字編輯器（像是 edit.com）編輯。他們執行起來和編譯而成的程式沒有兩樣。檔案中的每一行都被視為命令來執行。批次檔也可以使用數個內部命令，例如 goto 和條件運算式。

### 硬體存取

DOS 提供了簡單的硬體抽象層，讓程式員可以開發文字介面的應用程式；但這個硬體抽象層無法存取大部份的計算機硬體，像是顯示卡、印表機，或是滑鼠等。這使得程式員必須直接存取硬體，導致每個應用程式都有屬於自己的一組硬體週邊驅動程式。硬體製造商會將他們的硬體規格書釋出，以確保在受歡迎的應用程式中有它們的驅動程式。

### 裝置保留名稱

在 DOS 中，有數個名稱保留給裝置使用，無法拿來當一般檔案的名稱（不管副檔名是什麼）；這些保留名稱是用來將應用程式的輸出傳送給硬體週邊用的。這樣的限制也影響到數個版本的 Windows，在某些情況下甚至會造成當機和安全性弱點。

其中一些保留名稱有：`NUL:`、`COM1:` 或 `AUX:`、`COM2:`、`COM3:`、`COM4:`、`CON:`、`LPT1:` 或 `PRN:`、`LPT2:`、`LPT3:`，以及 `CLOCK$`。

### 磁碟命名法

在 DOS 中，磁碟機是利用不同的字母命名的。標準的作法是保留「A」和「B」給軟碟機。若是系統只有一台軟碟機的話，DOS 允許這台軟碟機同時使用這兩個代號，然後 DOS 會要求使用者更換磁片。這麼做可以讓使用者把檔案拷貝到不同的軟碟片上，或是執行某一片軟碟片上的程式，然後把資料檔案存放在另一片軟碟片上。最早硬碟的代號為「C」和「D」。在一台硬碟機上，DOS 只允許一個活動分割區的存在。隨著支援的硬碟數量越來越多，磁碟代號的命名方法演變為：先將磁碟代號指派給每一顆硬碟機的活動主分割區，然後第二輪將代號指派給延伸分割區中的邏輯磁碟區，第三輪再把代號指定給非活動的主分割區。（前題是：它們存在，而且包含了 DOS 可以讀取的檔案系統。）最後，DOS 才將代號指派給光碟機、RAM disk，以及其他的硬體。一般來說，磁碟代號都是依照驅動程式的載入順序，按字母順序指派的，但驅動程式也可以要求 DOS 指派不同的字母。例如網路磁碟機的驅動程式通常會指派最後的幾個字母。

因為 DOS 的應用程式會直接使用這些磁碟代號（和 Unix 類系統使用／dev 目錄的方法不同），因此若是新增了需要分配磁碟代號的硬體，可能會導致這些應用程式出錯。舉例來說：若是原本硬碟中的延伸分割區中存在邏輯磁碟區，此時新增一顆有主分割區的硬碟的話，由於主分割區擁有較高的分配優先權，所以原本硬碟的邏輯磁碟區的代號就會改變。此外，就算是新增一顆只有延伸分割區和邏輯磁碟區的硬碟，還是會影響到 RAM disk 及光碟機的代號。這個問題一直到 9x 系列的 Windows 都仍然存在；NT 系列才有解決方案：磁碟代號會保留給已存在的磁碟機機，除非使用者手動更改。

### 啟動流程

PC 相容機的啟動磁區（MBR）位於第 0 磁區。對於 DOS 來說，這段代碼會將 DOS 的 HAL 讀入記憶體中然後執行。在 DR DOS 及 PC DOS 中，這個 HAL 放在 IBMBIO.COM 檔案中；而 MS DOS 則是放在 IO.SYS。接下來這個 HAL 會載入位於 IBMDOS.COM（PC DOS 或 DR DOS）或是 MSDOS.SYS（MS DOS）裡面的 DOS 核心。Windows 9x 中附的 DOS 版本（MS DOS 7 和 8）將 HAL 和核心合併放在 IO.SYS 裡面，而 MSDOS.SYS 則是文字格式的組態檔案。然後 DOS 核心會去執行 CONFIG.SYS 這個檔案。在 CONFIG.SYS 中，SHELL 這個命令指定了 SHELL 的檔案位置（通常是 COMMAND.COM）。接下來這個 SHELL 會被執行，然後它會去開啟開機啟動項（通常是 AUTOEXEC.BAT）

## 歷史

MS-DOS（以及經授權更換商標而成的 IBM PC-DOS）以及它的前身 86-DOS 是受到 Digital Research 公司的 CP/M（Control Program / (for) Microcomputers）啟發而完成的。CP/M 是當時使用 Intel 8080 及 Zilog Z80 這兩顆 8 位元 CPU 的微電腦上最受歡迎的磁碟作業系統。

在 1980 年的時候，IBM 使用 Intel 8088 微處理器，開發出了他們的第一台微電腦。他們需要一套能夠在這台微電腦上使用的作業系統。IBM 在找一套能和 Intel 8088 (1979-1982) 相容的 CP/M，一開始找上了微軟的執行長比爾・蓋茲（可能是因為當時微軟開發出了讓 CP/M 可以在 Apple II 上執行的 Z-80 SoftCard，所以 IBM 相信微軟擁有 CP/M）。IBM 被轉介到 Digital Research，並且舉行了相關的會議。然而，關於 CP/M 的使用權的初次談判破裂了 — 因為 Digital Research 希望以權利金的方式販售 CP/M，但 IBM 希望單一授權，並且將名稱改為 "PC-DOS"。DR 的創始人 Gary Kildall 拒絕簽約，IBM 因此放棄購買 CP/M。

IBM 再次找上比爾・蓋茲。蓋茲轉而找上了 Seattle Computer Products（SCP）。SCP 的程式員 Tim Paterson 開發了一套 CP/M-80 的變體作業系統，原本是打算用來測試 SCP 為 S-100 匯流排新開發的 16 位元 Intel 8086 CPU 介面卡。這套系統原本的名稱是「QDOS」（Quick and Dirty Operating System），後來在商業發行前改名為 86-DOS。微軟買下了 86-DOS（據說成交金額為 50,000 美元），後來成了 1981 年發行的 Microsoft Disk Operating System，簡稱 MS-DOS。

微軟也將這套系統授權給數個電腦公司。這些電腦公司販售給他們的硬體使用的 MS-DOS，有時使用他們自己的名稱。微軟後來要求他們使用 MS-DOS 這個名稱，除了 IBM 以外。IBM 持續為 IBM PC 開發新版的 PC-DOS。Digital Research 查覺到 IBM 正在販售和 CP/M 很類似的作業系統（而且還跟當初 IBM 談判時堅持的名稱相同），於是揚言要提出法律訴訟。IBM 以一項協定回應他們：IBM 讓使用者可以自行選擇要使用 PC-DOS 還是 CP/M-86（Kildall 開發的 8086 版 CP/M）。兩者相較，CP/M 比 PC-DOS 貴上近 200 美元，銷售量也低。CP/M 逐漸淡出，而 MS-DOS 和 PC-DOS 則成了 PC 和 PC 相容機的主力作業系統。

Digital Research 曾試圖挽回 CP/M-86 錯失的市場。一開始是發行了 DOS Plus，後來又發行了 DR-DOS（這兩者都同時與 MS-DOS 和 CP/M-86 的軟體相容）。Digital Research 被 Novell 買下，DR-DOS 變成了 Novell DOS 7。之後，它又成為 Caldera Systems（以 OpenDOS 及 DR DOS 7 為名）、Lineo 以及 DeviceLogics 的一部份。

後來，微軟和 IBM 在兩套 DOS 的繼任作業系統（微軟的 Windows 和 IBM 的 OS/2）上發生了一連串爭執。他們在 DOS 系統上的開發也因此分道揚鑣。 MS-DOS 在某些層面上轉型成為 Windows；而 PC-DOS 的最後一個版本為 1998 年發行的 PC-DOS 2000。

FreeDOS 計劃開始於 1994 年 6 月 26 日。當天微軟宣佈他們將不再販賣 MS-DOS，也不再提供支援。於是吉姆・霍爾張貼了一份宣言，宣佈要開發 DOS 的開放源始碼替代品。在幾個星期內，包括 Pat Villani 和 Tim Norman 的幾位程式員加入了這個計劃。他們利用共享他們撰寫或現有程式碼的方式，產生了核心、command.com 命令直譯器（shell 介面）以及核心公用程式。在歷經了數個版本的官方預覽版本之後，FreeDOS 1.0 版在 2006 年 9 月 3 日正式發佈。使用 FreeDOS 不需支付任何的著作權費用或權利金。

## 淡出

早期版本的 Microsoft Windows 只是在 DOS 之上執行的應用程式。大約在 90 年代初，Windows 仍相當依賴新版本的 DOS。一直到 Windows for Workgroups 3.11，DOS 才逐漸退居負責啟動及載入 Windows 核心的角色。在 Windows 95（以及其後推出的 Windows 98 與 Me）中，MS-DOS 核心依然存在，只是加上 Windows 當作系統的圖形介面。Windows 95 與 98 的 MS-DOS 元件可以在不開啟 Windows 的情況下獨立執行（但 Windows Me 不行）。隨著 Windows 的普及，大部份的電腦使用者都使用 Windows，DOS 也越來越少人使用。英特爾計畫於 2020 年徹底捨棄 Intel 平台的 UEFI CSM（即 UEFI 的 Legacy BIOS 啟動支援），屆時 Intel 平台的個人電腦將無法啟動 DOS 系統。

## 持續發展

有些電腦製造商（包括 Dell 和 HP）會預載 FreeDOS 當作 OEM 作業系統出貨。

有一套以 GPL 方式授權的 DOS，名為 NX-DOS，目前正在開發中。它是一套 16 位元的即時作業系統，擁有網路功能，可以從軟碟片啟動，還有一個不太完整的 USB 驅動程式。NX-DOS 專案從 1992 年就開始了，原本是個個人專案，在 2005 年的時候以 GPL 方式釋出。

目前仍可取得的 DOS 系統有 DR-DOS（以及加強的 DR-DOS）、俄國人開發的 PTS-DOS、ROM-DOS、FreeDOS、NX-DOS、Multiuser DOS（以 Digital Research 的 Concurrent DOS 為基礎）等等。

### 嵌入式系統

由於 DOS 可以直接存取硬體，因此它很適合拿來控制嵌入式裝置。新版本的 DR-DOS 便瞄準了這塊市場。 佳能的數位相機 PowerShot Pro 70 使用 ROM-DOS 做為嵌入式系統。

### 模擬器

在 Linux 下，使用 _DOSEMU_（一套用來執行真實模式程式的 Linux 原生虛擬機器）可以執行 DOS 及其衍生版本。另外在各個版本的 UNIX 下也有許多用來執行 DOS 的模擬器，有些甚至在非 x86 的平台上也可以執行，像是 DOSBox。

由於 Windows XP 和 Vista 無法和純 DOS 相容，DOS 模擬器在這些系統上也越來越流行。這些模擬器可以用來執行過去的老軟體或其他 DOS 軟體。其中一個最為知名的是 DOSBox，主要的設計目標是在當前的作業系統上執行 DOS 的遊戲程式。

在 Microsoft Virtual PC 下也可以執行 DOS 的應用程式，相容性比 DOS 模擬器好。使用者可以安裝合法的 MS-DOS，然後除了那些最難對付的應用程式以外，絕大部份的 DOS 應用程式都可以在上面執行。

### 與 Microsoft Windows 的關係

純 32 位元版本的 Windows（從 NT 開始；包含了 2003、XP 和 Vista）並非以 DOS 為基礎的。這些系統中內含了一個 NT DOS 虛擬機器（NT Virtual DOS Machine，縮寫為 NTVDM），在上面執行一個修改過的 DOS。原本以 DOS 為基礎的系統使用傳統的 COMMAND.COM 做為命令列介面，而 Windows NT 及其衍生版本則是使用 cmd.exe（不過 cmd.exe 也移植了許多 DOS 的命令）。x64 架構的 Windows 也有 cmd.exe（命令提示字元），但是無法執行 16 位元 DOS 程式（沒有 NTVDM）。

## 軟體

由於 DOS 在長時間內是 PC 相容機的主要平台，有許多為 DOS 撰寫的知名軟體。例如：

* AutoCAD；一套工業用的繪圖軟體，是少數能成功由 DOS 過度至 WINDOWS 的軟體繪圖軟體
* Lotus 1-2-3；一套在企業市場中被廣泛運用的試算表軟體。被許多人視為 IBM PC 成功的主因
* 中文系統；外掛在 DOS 以便顯示中文字形，常見的有倚天、震漢、零壹、國喬等外掛中文系統
* WordPerfect；一套目前出在 Windows 平台的文字編輯器
* WordStar；文字編輯器
* PE；一套文字編輯器，由 IBM 公司所開發，只有簡單排版功能，當時常用於編寫程式原始碼.
* Copywrite；一套拷貝軟體，用以備份具防拷保護的 5.25 吋軟碟片.
* CopyIIPC；另一套拷貝軟體，用以備份具防拷保護的 5.25 吋磁片.
* WPS，DOS 時代中國最流行的文書處理軟體，現已改名為 WPS Office 執行於 Windows 平台。
* CCED; DOS 時代在中國流行的中文字表處理軟體。
* 慧星一號，DOS 時代香港及台灣最流行的中文文書處理軟體，引入視窗操作概念。
* dBase；最早的資料庫軟體之一
* CLIPPER；是 dBASE 的編譯器.
* Dr compiler；是 CLIPPER 的加強版，台灣在原有的 CLIPPER 加上新加入的 LIB 而成資料庫軟體之一
* Pctools; 工具軟體整合 DOS 的 COPY DISKCOPY FORMAT 等多項功能於一身的軟體，以選單形式來操作.
* Telix; 數據機通訊軟體，是 BBS 時期常用的軟體.
* PKZIP; 壓縮軟體 DOS 年代已出現的 ZIP 壓縮格式，WINDOWS 現已內含這功能.
* Arachne；一套 DOS 版的網路瀏覽器
* DJGPP, gcc 的 DOS 移植版
* 4DOS，取代原本的命令列介面的軟體
* Borland 的整合式開發環境，包括了 Turbo Pascal、Turbo BASIC、Turbo C，以及 Turbo Assembler
* 撥接式電子佈告欄 (BBS) 架站軟體 RemoteAccess、Spitfire、Maximus、McBBS，以及 TAG
* BASIC 語言工具程式 BASICA 以及 GW-BASIC
* 許多的第一人稱射擊遊戲：由 Id Software 以及 Apogee Software（後來改名為 3D Realms）合資開發的德軍總部 3D；Id Software 的 Doom 以及 Quake；3D Realms 的 Duke Nukem 3D、Shadow Warrior，以及 Rise of the Triad。3D Realms 開發的這 3 套遊戲使用的都是 DOS 上的「Build 引擎」。Build 引擎的作者是 Ken Silverman，這個引擎也被用於 Silverman 的 Ken's Labyrinth 這個遊戲上。

## 易用性

### 使用者介面

所有的 DOS 均使用命令列介面。執行程式的方法是在命令列中鍵入程式的名稱。DOS 系統包含一些公用程式，也提供了一些不是以程式方式存在的命令（通常被稱為_內部命令_）。

為了提供對使用者更友善的操作環境，許多的軟體廠商紛紛推出各式各樣的檔案管理程式。這些程式通常使用選單及圖示做為介面。Microsoft Windows 就是其中最有名的例子，最後發展成為完整的作業系統，取代 DOS 成了 PC 相容機上最受歡迎的作業系統。使用文字模式的使用者界面有：Norton Commander、Dos Navigator、Volkov Commander、Quarterdesk 的 DESQview，以及 SideKick。使用圖形使用者介面的程式有：Digital Research 的 Graphical Environment Manager（最早是寫給 CP/M 用的）以及 GEOS。

發展到最後，主要的 DOS 廠商開始在 DOS 中加入自己的環境管理程式。MS/PC-DOS 4 中有 DOS Shell；而次年發行的 DR-DOS 5 則加入了以 GEM 為基礎的 ViewMAX。

### 多工

在最初的設計中，DOS 是一個單工的作業系統。MS/PC-DOS 使用 DOS shell 做到工作切換的功能，而 DR-DOS 則是在 DR-DOS 6 中利用 _TaskMAX_ 做到類似的功能。 MS/PC-DOS 自始至終都沒有多工的能力； DR-DOS 則是在 DR-DOS 7 中提供了這個功能（DR-DOS 的 DPMI 必須啟用）。

## 限制

DOS 的架構有數項惱人的限制。最早的 8088 微處理器只能定址到 1 MB 的實體記憶體空間。由於附加的硬體裝置也必須對映到這段空間，因此最高可以使用的記憶體只有 640 KB（被稱為「傳統記憶體」）。在 DOS 的結構上，640 KB 被視為最大的記憶體空間，DOS 無法定址更高的位址。早期避開這個問題的做法是使用擴展記憶體；80286 出來之後，發展出了延伸記憶體。雖然這些技術提供了更多的記憶體應用程式，但應用程式仍必須從傳統記憶體開始執行，佔用 640 KB 中的部份空間。80386 微處理器使用了重新設計的保護模式，應用程式可以透過 DOS extender 及 DOS 保護模式介面（DOS Protected Mode Interface，縮寫為 DPMI）等技術使用額外的記憶體，也可以有多工的功能。

DOS 還有硬碟分割區大小的限制。造成這個問題的原因有兩個。首先，許多 DOS 類的作業系統只支援到 FAT16，而 FAT16 在設計上就不支援超過 2.1 GB 的硬碟分割區。另外，DOS 存取硬碟的方式是透過 INT 13 這個中斷呼叫，然後往下再利用 CHS 系統對應到磁碟上的資料。在這個架構下，作業系統只能看到 8 GB 的硬碟空間。比較新的作業系統使用軟體的方式（例如：32 位元磁碟存取）存取硬碟。

FAT16 和 FAT12（用於軟碟片）上的檔案名稱必須遵守「8.3 命名規則」：檔案的主檔名不得超個 8 個字元，而副檔名則不得超過 3 個字元。

## 命令集

 **（部分）** 

## 參考文獻

## 參見

* COMMAND.COM，DOS 和 Windows 9x 的命令列直譯器
* DOS API
* MS-DOS
* IBM PC DOS
* DR-DOS
* FreeDOS
* 作業系統
* 作業系統列表
* 微軟作業系統列表