DOS

<image>

DOS，是磁盘操作系统（英文：Disk Operating System）的缩写，是个人电脑上的一类操作系统。从1981年直到1995年的15年间，DOS在IBM PC相容机市场中占有举足轻重的地位。且若将部分以DOS为基础的Microsoft Windows版本，如Windows 95、98和Me等都算入其寿命，那么其商业寿命至少可至2000年。

DOS家族包括MS-DOS、PC-DOS、DR-DOS、FreeDOS、JM-OS等，其中以MS-DOS最为著名。虽然这些系统常被简称为“DOS”，但没有任何一个系统单纯以“DOS”命名（只有一个毫无关连的1960年代以此命名）。此外，有几个和DOS无关、在非x86的微电脑系统上执行的磁盘操作系统在名称中也有“DOS”字眼，而且在专门讨论该机器的场合中也会简称为“DOS”（例如：、Apple DOS、ProDOS、等），但这些系统和DOS执行档以及MS-DOS API并不相容。

## 设计架构

<image>

所有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放在文件中；而MS DOS则是放在。接下来这个HAL会载入位于（PC DOS或DR DOS）或是MSDOS.SYS（MS DOS）里面的DOS内核。Windows 9x中附的DOS版本（MS DOS 7和8）将HAL和核心合并放在IO.SYS里面，而MSDOS.SYS则是文字格式的组态档案。然后DOS核心会去执行这个档案。在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及 Z80这两颗8位元CPU的微电脑上最受欢迎的磁盘操作系统。

在1980年的时候，IBM使用Intel 8088微处理器，开发出了他们的第一台微电脑。他们需要一套能够在这台微电脑上使用的操作系统。IBM在找一套能和Intel 8088 (1979-1982)相容的CP/M，一开始找上了微软的执行长比尔·盖茨（可能是因为当时微软开发出了让CP/M可以在Apple II上执行的，所以IBM相信微软拥有CP/M）。IBM被转介到Digital Research，并且举行了相关的会议。然而，关于CP/M的使用权的初次谈判破裂了—因为Digital Research希望以权利金的方式贩售CP/M，但IBM希望单一授权，并且将名称改为"PC-DOS"。DR的创始人盖瑞·基尔多拒绝签约，IBM因此放弃购买CP/M。

IBM再次找上比尔·盖茨。盖茨转而找上了（SCP）。SCP的程式员开发了一套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错失的市场。一开始是发行了，后来又发行了DR-DOS（这两者都同时与MS-DOS和CP/M-86的软件相容）。Digital Research被Novell买下，DR-DOS变成了Novell DOS 7。之后，它又成为Caldera Systems（以OpenDOS及DR DOS 7为名）、以及的一部分。

后来，微软和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之上执行的应用程序。大约在1990年代初，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）、俄国人开发的、ROM-DOS、FreeDOS、NX-DOS、 Multiuser DOS（以Digital Research的Concurrent DOS为基础）等等。

### 嵌入式系统

由于DOS可以直接存取硬件，因此它很适合拿来控制嵌入式装置。新版本的DR-DOS便瞄准了这块市场。佳能的数码相机PowerShot Pro 70使用ROM-DOS做为嵌入式系统。

### 模拟器

在Linux下，使用（一套用来执行真实模式程式的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）。

## 软件

<image>

由于DOS在长时间内是PC相容机的主要平台，有许多为DOS撰写的知名软件。例如：

- AutoCAD；一套工业用的绘图软件, 是少数能成功由DOS过度至WINDOWS的软件绘图软件
- Lotus 1-2-3；一套在企业市场中被广泛运用的试算表软件。被许多人视为IBM PC成功的主因
- 中文系统；外挂在DOS以便显示中文字形, 常见的有倚天、震汉、零壹、国乔等外挂中文系统
- WordPerfect；一套目前出在Windows平台的文字编辑器
- WordStar；文字编辑器
- PE；一套文字编辑器, 由IBM公司所开发, 只有简单排版功能, 当时常用于编写程式源代码.
- 一套拷贝软件, 用以备份具防拷保护的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 等多项功能于一身的软件, 以选单形式来操作.
- ; 调制解调器通讯软件, 是BBS时期常用的软件.
- ; 压缩软件 DOS 年代已出现的ZIP压缩格式, WINDOWS 现已内含这功能.
- Arachne；一套DOS版的网络浏览器
- DJGPP, gcc的DOS移植版
- 4DOS，取代原本的命令列界面的软件
- Borland的整合式开发环境，包括了Turbo Pascal、Turbo BASIC、Turbo C，以及
- 拨接式电子布告栏 (BBS)架站软件，以及
- BASIC语言工具程式BASICA以及GW-BASIC
- 许多的第一人称射击游戏：由Id Software以及Apogee Software（后来改名为3D Realms）合资开发的德军总部3D；Id Software的Doom以及Quake；3D Realms的Duke Nukem 3D、影武者系列，以及。3D Realms开发的这3套游戏使用的都是DOS上的“Build引擎”。Build引擎的作者是，这个引擎也被用于Silverman的这个游戏上。

## 易用性

### 用户界面

所有的DOS均使用命令列界面。执行程式的方法是在命令列中键入程式的名称。DOS系统包含一些公用程式，也提供了一些不是以程式方式存在的命令（通常被称为内部命令）。

为了提供对使用者更友善的操作环境，许多的软件厂商纷纷推出各式各样的档案管理程式。这些程式通常使用选单及图示做为界面。Microsoft Windows就是其中最有名的例子，最后发展成为完整的操作系统，取代DOS成了PC相容机上最受欢迎的操作系统。使用文字模式的使用者界面有：、Quarterdesk的，以及SideKick。使用图形用户界面的程式有：Digital Research的（最早是写给CP/M用的）以及。

发展到最后，主要的DOS厂商开始在DOS中加入自己的环境管理程式。MS/PC-DOS 4中有；而次年发行的DR-DOS 5则加入了以GEM为基础的。

### 多工

在最初的设计中，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个字元。

## 命令集

（部分）

命令｜备注

MD｜建立子目录

CD｜改变当前目录

RD｜删除子目录命令

DIR｜示磁盘目录命令

PATH｜路径设置命令

TREE｜显示磁盘目录结构命令

DELTREE｜删除整个目录命令

FORMAT｜磁盘格式化命令

SCANDISK｜检查磁盘当前状态命令

UNFORMAT｜恢复格式化命令

DISKCOPY｜整盘复制命令

VOL｜显示磁盘卷标命令

SCANDISK｜检测、修复磁盘命令

DEFRAG｜重整磁盘命令

SYS｜系统复制命令

COPY｜文件复制命令

XCOPY｜目录复制命令

TYPE｜显示文件内容命令

REN｜文件改名命令

FC｜文件比较命令

ATTRIB｜修改文件属性命令

DEL｜删除文件命令

UNDELETE｜恢复删除命令

VER｜查看系统版本号命令

DATE｜查看日期命令