DOS
DOS,是磁盘操作系统(英文:Disk Operating System)的缩写,是个人电脑上的一类操作系统。从1981年直到1995年的15年间,DOS在IBM PC兼容机市场中占有举足轻重的地位。而且,若是把部份以DOS为基础的Microsoft Windows版本,如Windows 95、98和Me等都算进去的话,那么其商业寿命至少可以算到2000年。
_on_Bochs_sshot20040912.png.webp)
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及类似的操作系统[1]。
DOS是单一用户、单工的操作系统,拥有不可重入的基本内核函数(意即同时间只能有一个程序调用这些函数)。有一个例外的状况,就是常驻程序(Terminate and Stay Resident,缩写为TSR)。某些常驻程序允许用户多任务操作;然而此时仍有「内核不可重入」的问题:当一个行程(process)调用了操作系统内核中的服务函数(也就是系统调用)时,在这个调用结束之前,其他的行程绝对不能进行系统调用、打断第一个行程[2]。
DOS的内核为用户程序提供了各式各样的函数,例如:在屏幕上显示文本、从键盘读入字符、访问磁盘上的文件等等。
脚本语言
DOS通过批量档(扩展名为.BAT)提供界面脚本的功能。这些文件是纯文本格式的,可以用任何的文本编辑器(像是edit.com)编辑。他们运行起来和编译而成的程序没有两样。文件中的每一行都被视为命令来运行。批量档也可以使用数个内部命令,例如goto和条件表达式[3]。
硬件访问
DOS提供了简单的硬件抽象层,让程序员可以开发文本界面的应用程序;但这个硬件抽象层无法访问大部份的计算机硬件,像是显卡、打印机,或是鼠标等。这使得程序员必须直接访问硬件,导致每个应用程序都有属于自己的一组硬件周边驱动程序。硬件制造商会将他们的硬件规格书发布,以确保在受欢迎的应用程序中有它们的驱动程序[4]。
设备保留名称
在DOS中,有数个名称保留给设备使用,无法拿来当一般文件的名称(不管扩展名是什么);这些保留名称是用来将应用程序的输出发送给硬件周边用的。这样的限制也影响到数个版本的Windows,在某些情况下甚至会造成当机和安全性弱点。[5]
其中一些保留名称有:NUL:
、COM1:
或AUX:
、COM2:
、COM3:
、COM4:
、CON:
、LPT1:
或PRN:
、LPT2:
、LPT3:
,以及CLOCK$
[6]。
磁盘命名法
在DOS中,磁盘机是利用不同的字母命名的。标准的作法是保留「A」和「B」给软驱。若是系统只有一台软驱的话,DOS允许这台软驱同时使用这两个代号,然后DOS会要求用户更换磁片。这么做可以让用户把文件拷贝到不同的软盘片上,或是运行某一片软盘片上的程序,然后把数据文件存放在另一片软盘片上。最早硬盘的代号为「C」和「D」。在一台硬盘机上,DOS只允许一个活动分割区的存在。随着支持的硬盘数量越来越多,磁盘代号的命名方法演变为:先将磁盘代号指派给每一颗硬盘机的活动主分割区,然后第二轮将代号指派给延伸分割区中的逻辑磁盘区,第三轮再把代号指定给非活动的主分割区。(前题是:它们存在,而且包含了DOS可以读取的文件系统。)最后,DOS才将代号指派给光驱、RAM disk,以及其他的硬件。一般来说,磁盘代号都是依照驱动程序的加载顺序,按字母顺序指派的,但驱动程序也可以要求DOS指派不同的字母。例如网络磁盘机的驱动程序通常会指派最后的几个字母。[7]
因为DOS的应用程序会直接使用这些磁盘代号(和Unix类系统使用/dev目录的方法不同),因此若是添加了需要分配磁盘代号的硬件,可能会导致这些应用程序出错。举例来说:若是原本硬盘中的延伸分割区中存在逻辑磁盘区,此时添加一颗有主分割区的硬盘的话,由于主分割区拥有较高的分配优先权,所以原本硬盘的逻辑磁盘区的代号就会改变。此外,就算是添加一颗只有延伸分割区和逻辑磁盘区的硬盘,还是会影响到RAM disk及光驱的代号。这个问题一直到9x系列的Windows都仍然存在;NT系列才有解决方案:磁盘代号会保留给已存在的磁盘机机,除非用户手动更改。[7]
开机流程
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)[8]
历史
MS-DOS(以及经授权更换商标而成的IBM PC-DOS)以及它的前身86-DOS是受到Digital Research公司的CP/M()启发而完成的。是当时使用Intel 8080及Zilog Z80这两颗8比特的微电脑上最受欢迎的磁盘操作系统。
在1980年的时候,使用Intel 8088微处理器,开发出了他们的第一台微电脑。他们需要一套能够在这台微电脑上使用的操作系统。在找一套能和兼容的,一开始找上了微软的首席执行官比尔·盖茨(可能是因为当时微软开发出了让可以在Apple II上运行的Z-80 SoftCard,所以相信微软拥有[9])。被转介到,并且举行了相关的会议。然而,关于的使用权的初次谈判破裂了—因为希望以权利金的方式贩售,但希望单一授权,并且将名称改为。的创始人盖瑞·基尔多拒绝签约,因此放弃购买。[9][10]
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。[11]
微软也将这套系统授权给数个电脑公司。这些电脑公司贩售给他们的硬件使用的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兼容机的主力操作系统。[9]
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)上发生了一连串争执。[12]他们在DOS系统上的开发也因此分道扬镳。[13] 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不需支付任何的版权费用或权利金。[14][15]
淡出
早期版本的Microsoft Windows只是在DOS之上运行的应用程序。[16]大约在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不行)。[17]随着Windows的普及,大部份的电脑用户都使用Windows,DOS也越来越少人使用。英特尔计划于2020年彻底舍弃Intel平台的UEFI CSM(即UEFI的Legacy BIOS开机支持),届时Intel平台的个人电脑将无法启动DOS系统。
持续发展
有些电脑制造商(包括Dell和HP)会预载FreeDOS当作OEM操作系统出货。[18][19]
有一套以GPL方式授权的DOS,名为NX-DOS,目前正在开发中。它是一套16比特的即时操作系统,拥有网络功能,可以从软盘片开机,还有一个不太完整的USB驱动程序。NX-DOS项目从1992年就开始了,原本是个个人项目,在2005年的时候以GPL方式发布。[20]
目前仍可取得的DOS系统有DR-DOS(以及加强的DR-DOS)、俄国人开发的PTS-DOS、ROM-DOS、FreeDOS、NX-DOS、Multiuser DOS(以Digital Research的Concurrent DOS为基础)等等。
嵌入式系统
由于DOS可以直接访问硬件,因此它很适合拿来控制嵌入式设备。新版本的DR-DOS便瞄准了这块市场。[21] 佳能的数字相机PowerShot Pro 70使用ROM-DOS做为嵌入式系统。[22]
仿真器
在Linux下,使用DOSEMU(一套用来运行实模式程序的Linux原生虚拟机)可以运行DOS及其衍生版本。另外在各个版本的UNIX下也有许多用来运行DOS的仿真器,有些甚至在非x86的平台上也可以运行,像是DOSBox。[23][24]
由于Windows XP和Vista无法和纯DOS兼容,DOS仿真器在这些系统上也越来越流行。这些仿真器可以用来运行过去的老软件或其他DOS软件。其中一个最为知名的是DOSBox,主要的设计目标是在当前的操作系统上运行DOS的游戏程序。[23][16]
在Microsoft Virtual PC下也可以运行DOS的应用程序,兼容性比DOS仿真器好。用户可以安装合法的MS-DOS,然后除了那些最难对付的应用程序以外,绝大部份的DOS应用程序都可以在上面运行。[25]
与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成功的主因[26]
- 中文系统;插件在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、影武者系列,以及Rise of the Triad。3D Realms开发的这3套游戏使用的都是DOS上的「Build引擎」。Build引擎的作者是Ken Silverman,这个引擎也被用于Silverman的Ken's Labyrinth这个游戏上。
易用性
用户界面
所有的DOS均使用命令行界面。运行程序的方法是在命令行中键入程序的名称。DOS系统包含一些公用程序,也提供了一些不是以程序方式存在的命令(通常被称为内部命令)。[27]
为了提供对用户更友善的操作环境,许多的软件厂商纷纷推出各式各样的文件管理程序。这些程序通常使用菜单及图标做为界面。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;[28]而次年发行的DR-DOS 5则加入了以GEM为基础的ViewMAX。[29]
限制
DOS的架构有数项恼人的限制。最早的8088微处理器只能寻址到1 MB的物理内存空间。由于附加的硬件设备也必须映射到这段空间,因此最高可以使用的内存只有640 KB(被称为「传统内存」)。在DOS的结构上,640 KB被视为最大的内存空间,DOS无法寻址更高的地址。早期避开这个问题的做法是使用扩展内存;80286出来之后,发展出了延伸内存。虽然这些技术提供了更多的内存应用程序,但应用程序仍必须从传统内存开始运行,占用640 KB中的部份空间。80386微处理器使用了重新设计的保护模式,应用程序可以通过DOS extender及DOS保护模式界面(DOS Protected Mode Interface,缩写为DPMI)等技术使用额外的内存,也可以有多任务的功能。[34][35]
DOS还有硬盘分割区大小的限制。造成这个问题的原因有两个。首先,许多DOS类的操作系统只支持到FAT16,而FAT16在设计上就不支持超过2.1 GB的硬盘分割区。[36]另外,DOS访问硬盘的方式是通过INT 13这个中断调用,然后往下再利用CHS系统对应到磁盘上的数据。在这个架构下,操作系统只能看到8 GB的硬盘空间。[37]比较新的操作系统使用软件的方式(例如: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 | 查看日期命令 |
参考文献
- 参阅MS-DOS条目
- Hyde, Randall. . The Art of Assembly Language Programming. 1996-09-30 [2008-09-02]. (原始内容存档于2008-06-27).
- . computerhope.com. [2008-09-10]. (原始内容存档于2008-09-07).
- Matczynski, Michael. . [2008-09-02]. (原始内容存档于2008-12-19).
- . [2008-09-02]. (原始内容存档于2011-07-25).
- . PC Magazine. [2008-09-02]. (原始内容存档于2008-09-29).
- . The PC Guide. 2007-05-17 [2008-09-02]. (原始内容存档于2008-09-19).
- Kozierok, Charles. . The PC Guide. 2001 [2008-09-02]. (原始内容存档于2008-07-19).
- Rolander, Tom. (访谈). [2008-08-30]. (原始内容存档于2008-08-21).
- Bove, Tony. . No Starch Press. 2005: 9-11 [2020-09-25]. ISBN 159327064X. (原始内容存档于2017-01-22).
- Bellis, Mary. . [2008-09-02]. (原始内容存档于2012-04-27).
- Pollack, Andrew. . New York Times. 1991-07-27 [2008-09-02]. (原始内容存档于2010-11-02).
- Brinkley, Joel. . New York Times. 1999-05-28 [2008-09-02]. (原始内容存档于2008-12-11).
- Jim Hall. . 2002-03-25 [2008-06-14]. (原始内容存档于2012-05-29).
- Hall, Jim. . freedos.org. 2006-09-23 [2007-05-28]. (原始内容存档于2007-05-27).
- James Bannan. . 2006-10-13 [2008-07-03]. (原始内容存档于2008-08-01).
- . Smart Computing. 1996年3月 [2008-07-12]. (原始内容存档于2004-07-07).
- Hall, Jim. . 2007-07-13 [2008-06-12]. (原始内容存档于2008-06-02).
- . [2008-06-14]. (原始内容存档于2008-03-19).
- . 2007-04-01 [2008-06-01]. (原始内容存档于2012-05-29).
- . [2008-09-26]. (原始内容存档于2008-12-21).
- . Business Wire. 1999-08-24 [2008-09-26]. (原始内容存档于2012-07-09).
- . [2008-05-18]. (原始内容存档于2008-05-25).
- . 2007-05-05 [2008-07-03]. (原始内容存档于2008-07-23).
- . 2008-03-11 [2008-09-02]. (原始内容存档于2008-09-17).
- Darrow, Barbara. . 2002-02-01 [2008-07-12]. (原始内容存档于2009-01-09).
- Murdock, Everett. . EasyWay Downloadable Books. : 7–12. ISBN 0923178023.
- Murdock, Everett. . EasyWay Downloadable Books. : 71 [2009-02-03]. ISBN 0923178023. (原始内容存档于2012-11-12).
- Dvorak, John; Nick Anis. . Osborne McGraw-Hill. 1991: 442–444.
- Murdock, Everett. . EasyWay Downloadable Books. : 83. ISBN 0923178023.
- . Digital Research. 1991: 320–324.
- Perry, Greg; Jill Freeze. . Sams Publishing. 2003: 445 [2009-02-03]. ISBN 0672325357. (原始内容存档于2011-05-20).
- . Caldera DR-DOS 7.02 User Guide. Caldera Systems. 1998 [2008-09-12]. (原始内容存档于2008-07-04).
- . Software Magazine. Findarticles.com. 1990年5月 [2008-07-10]. (原始内容存档于2012-05-29).
- Duncan, Ray. 2. Addison-Wesley. 1991. ISBN 0201567989.
- Mueller, Scott. . Que Publishing. 2003: 812. ISBN 0789729741.
- . The PC Guide. storagereview.com. [2008-07-10]. (原始内容存档于2008-07-04).
参见
- COMMAND.COM,DOS和Windows 9x的命令行解释器
- DOS API
- MS-DOS
- IBM PC DOS
- DR-DOS
- FreeDOS
- 操作系统
- 操作系统列表
- 微软操作系统列表