DOS

一組密切相關的個人計算機兼容操作系統

DOS,是磁碟作业系统(英文:Disk Operating System)的缩写,是个人电脑上的一类作业系统。从1981年直到1995年的15年间,DOS在IBM PC相容机市场中占有举足轻重的地位。而且,若是把部份以DOS为基础的Microsoft Windows版本,如Windows 9598Me等都算进去的话,那么其商业寿命至少可以算到2000年。

DOS画面

DOS家族包括MS-DOSPC-DOSDR-DOSFreeDOSPTS-DOS英语PTS-DOSROM-DOS英语ROM-DOS、JM-OS等,其中以MS-DOS最为著名。虽然这些系统常被简称为“DOS”,但没有任何一个系统单纯以“DOS”命名(只有一个毫无关连的1960年代IBM大型主机作业系统英语DOS/360以此命名)。此外,有几个和DOS无关、在非x86的微电脑系统上执行的磁碟作业系统在名称中也有“DOS”字眼,而且在专门讨论该机器的场合中也会简称为“DOS”(例如:AmigaDOS英语AmigaDOSAMSDOS英语AMSDOSANDOS英语ANDOSApple DOSAtari DOS英语Atari DOSCommodore DOS英语Commodore DOSCSI-DOS英语CSI-DOSProDOSTRS-DOS英语TRS-DOS等),但这些系统和DOS执行档以及MS-DOS API并不相容。

设计架构

 
放于IBM原装软碟机的DOS 5.25吋系统开机磁片

所有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英语IBMBIO.COM文件中;而MS DOS则是放在IO.SYS英语IO.SYS。接下来这个HAL会载入位于IBMDOS.COM英语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这个档案。在CONFIG.SYS中,SHELL这个命令指定了SHELL的档案位置(通常是COMMAND.COM)。接下来这个SHELL会被执行,然后它会去开启开机启动项(通常是AUTOEXEC.BAT[8]

历史

MS-DOS(以及经授权更换商标而成的IBM PC-DOS)以及它的前身86-DOS是受到Digital Research公司的CP/MControl Program / (for) Microcomputers)启发而完成的。CP/M是当时使用Intel 8080Zilog英语Zilog Z80这两颗8位元CPU的微电脑上最受欢迎的磁碟作业系统。

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

IBM再次找上比尔·盖茨。盖茨转而找上了Seattle Computer Products英语Seattle Computer Products(SCP)。SCP的程式员Tim Paterson英语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英语DOS Plus,后来又发行了DR-DOS(这两者都同时与MS-DOS和CP/M-86的软体相容)。Digital Research被Novell买下,DR-DOS变成了Novell DOS 7。之后,它又成为Caldera Systems(以OpenDOS及DR DOS 7为名)、Lineo英语Lineo以及DeviceLogics英语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系统。

持续发展

有些电脑制造商(包括DellHP)会预载FreeDOS当作OEM作业系统出货。[18][19]

有一套以GPL方式授权的DOS,名为NX-DOS,目前正在开发中。它是一套16位元的即时作业系统,拥有网路功能,可以从软碟片开机,还有一个不太完整的USB驱动程式。NX-DOS专案从1992年就开始了,原本是个个人专案,在2005年的时候以GPL方式释出。[20]

目前仍可取得的DOS系统有DR-DOS(以及加强的DR-DOS)、俄国人开发的PTS-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英语DOSEMU(一套用来执行真实模式程式的Linux原生虚拟机器)可以执行DOS及其衍生版本。另外在各个版本的UNIX下也有许多用来执行DOS的模拟器,有些甚至在非x86的平台上也可以执行,像是DOSBox[23][24]

由于Windows XPVista无法和纯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(NT Virtual DOS Machine,缩写为NTVDM),在上面执行一个修改过的DOS。原本以DOS为基础的系统使用传统的COMMAND.COM做为命令列界面,而Windows NT及其衍生版本则是使用cmd.exe(不过cmd.exe也移植了许多DOS的命令)。x64架构的Windows也有cmd.exe(命令提示字元),但是无法执行16位元DOS程式(没有NTVDM)。

软体

 
Arachne互联网浏览器

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

易用性

用户界面

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

为了提供对使用者更友善的操作环境,许多的软体厂商纷纷推出各式各样的档案管理程式。这些程式通常使用选单及图示做为界面。Microsoft Windows就是其中最有名的例子,最后发展成为完整的作业系统,取代DOS成了PC相容机上最受欢迎的作业系统。使用文字模式的使用者界面有:Norton Commander英语Norton CommanderDos Navigator英语Dos NavigatorVolkov Commander英语Volkov Commander、Quarterdesk的DESQview英语DESQview,以及SideKick。使用图形用户界面的程式有:Digital Research的Graphical Environment Manager英语Graphical Environment Manager(最早是写给CP/M用的)以及GEOS英语GEOS

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

多工

在最初的设计中,DOS是一个单工的作业系统。MS/PC-DOS使用DOS shell做到工作切换的功能,[30]而DR-DOS则是在DR-DOS 6中利用TaskMAX做到类似的功能。[31] MS/PC-DOS自始至终都没有多工的能力;[32] DR-DOS则是在DR-DOS 7中提供了这个功能(DR-DOS的DPMI必须启用)。[33]

限制

DOS的架构有数项恼人的限制。最早的8088微处理器只能定址到1 MB的实体记忆体空间。由于附加的硬体装置也必须映射到这段空间,因此最高可以使用的记忆体只有640 KB(被称为“传统记忆体”)。在DOS的结构上,640 KB被视为最大的记忆体空间,DOS无法定址更高的位址。早期避开这个问题的做法是使用扩展记忆体80286出来之后,发展出了延伸记忆体。虽然这些技术提供了更多的记忆体应用程式,但应用程式仍必须从传统记忆体开始执行,占用640 KB中的部份空间。80386微处理器使用了重新设计的保护模式,应用程式可以透过DOS extenderDOS保护模式界面(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 查看日期命令

参考文献

  1. ^ 参阅MS-DOS条目
  2. ^ Hyde, Randall. CHAPTER EIGHTEEN: RESIDENT PROGRAMS (Part 3). The Art of Assembly Language Programming. 1996-09-30 [2008-09-02]. (原始内容存档于2008-06-27). 
  3. ^ Batch File Help. computerhope.com. [2008-09-10]. (原始内容存档于2008-09-07). 
  4. ^ Matczynski, Michael. ZINGTECH - Guide to the New Game Programmer. [2008-09-02]. (原始内容存档于2008-12-19). 
  5. ^ Microsoft Windows MS DOS Device Name DoS Vulnerability. [2008-09-02]. (原始内容存档于2011-07-25). 
  6. ^ DOS device names definition. PC Magazine. [2008-09-02]. (原始内容存档于2008-09-29). 
  7. ^ 7.0 7.1 Drive Letter Assignment and Choosing Primary vs. Logical Partitions. The PC Guide. 2007-05-17 [2008-09-02]. (原始内容存档于2008-09-19). 
  8. ^ Kozierok, Charles. The DOS Boot Process. The PC Guide. 2001 [2008-09-02]. (原始内容存档于2008-07-19). 
  9. ^ 9.0 9.1 9.2 Rolander, Tom. The rest of the story: How Bill Gates beat Gary Kildall in OS war, Part 1 (访谈). [2008-08-30]. (原始内容存档于2008-08-21). 
  10. ^ Bove, Tony. Just Say No to Microsoft. No Starch Press. 2005: 9-11 [2020-09-25]. ISBN 159327064X. (原始内容存档于2017-01-22). 
  11. ^ Bellis, Mary. The Unusual History of MS-DOS The Microsoft Operating System. [2008-09-02]. (原始内容存档于2012-04-27). 
  12. ^ Pollack, Andrew. Microsoft Widens Its Split With I.B.M. Over Software. New York Times. 1991-07-27 [2008-09-02]. (原始内容存档于2010-11-02). 
  13. ^ Brinkley, Joel. I.B.M. Executive Describes Price Pressure by Microsoft. New York Times. 1999-05-28 [2008-09-02]. (原始内容存档于2008-12-11). 
  14. ^ Jim Hall. The past, present, and future of the FreeDOS Project. 2002-03-25 [2008-06-14]. (原始内容存档于2012-05-29). 
  15. ^ Hall, Jim. History of FreeDOS. freedos.org. 2006-09-23 [2007-05-28]. (原始内容存档于2007-05-27). 
  16. ^ 16.0 16.1 James Bannan. HOW TO: Coax retro DOS games to play on Vista. 2006-10-13 [2008-07-03]. (原始内容存档于2008-08-01). 
  17. ^ Finding The DOS In Windows 95. Smart Computing. 1996年3月 [2008-07-12]. (原始内容存档于2004-07-07). 
  18. ^ Hall, Jim. Jim Hall. 2007-07-13 [2008-06-12]. (原始内容存档于2008-06-02). 
  19. ^ Dell PCs Featuring FreeDOS. [2008-06-14]. (原始内容存档于2008-03-19). 
  20. ^ GPL'd DOS workalike adds features. 2007-04-01 [2008-06-01]. (原始内容存档于2012-05-29). 
  21. ^ DR DOS Embedded DOS. [2008-09-26]. (原始内容存档于2008-12-21). 
  22. ^ Datalight DOS Selected for Canon's New Line of Digital Still Cameras. Business Wire. 1999-08-24 [2008-09-26]. (原始内容存档于2012-07-09). 
  23. ^ 23.0 23.1 DOSBox Information. [2008-05-18]. (原始内容存档于2008-05-25). 
  24. ^ DOSEMU Home. 2007-05-05 [2008-07-03]. (原始内容存档于2008-07-23). 
  25. ^ DOS Games on Vista. 2008-03-11 [2008-09-02]. (原始内容存档于2008-09-17). 
  26. ^ Darrow, Barbara. Whatever Happened To Lotus 1-2-3?. 2002-02-01 [2008-07-12]. (原始内容存档于2009-01-09). 
  27. ^ Murdock, Everett. DOS the Easy Way. EasyWay Downloadable Books. : 7–12. ISBN 0923178023. 
  28. ^ Murdock, Everett. DOS the Easy Way. EasyWay Downloadable Books. : 71 [2009-02-03]. ISBN 0923178023. (原始内容存档于2012-11-12). 
  29. ^ Dvorak, John; Nick Anis. Dvorak's Guide to DOS and PC Performance. Osborne McGraw-Hill. 1991: 442–444. 
  30. ^ Murdock, Everett. DOS the Easy Way. EasyWay Downloadable Books. : 83. ISBN 0923178023. 
  31. ^ DR DOS 6.0 User Guide. Digital Research. 1991: 320–324. 
  32. ^ Perry, Greg; Jill Freeze. Sams Teach Yourself Windows XP Computer Basics All in One. Sams Publishing. 2003: 445 [2009-02-03]. ISBN 0672325357. (原始内容存档于2011-05-20). 
  33. ^ Chapter 13 Multitasking and Task Switching. Caldera DR-DOS 7.02 User Guide. Caldera Systems. 1998 [2008-09-12]. (原始内容存档于2008-07-04). 
  34. ^ DOS: still thriving after all these years. Software Magazine. Findarticles.com. 1990年5月 [2008-07-10]. (原始内容存档于2012-05-29). 
  35. ^ Duncan, Ray. Extending DOS: A Programmer's Guide to Protected-Mode DOS 2. Addison-Wesley. 1991. ISBN 0201567989. 
  36. ^ Mueller, Scott. Upgrading and Repairing PCs. Que Publishing. 2003: 812. ISBN 0789729741. 
  37. ^ The Int 13 Interface. The PC Guide. storagereview.com. [2008-07-10]. (原始内容存档于2008-07-04). 

参见