一个新的操作系统诞生了
起源
可以毫不夸张地说,DOS是历史的偶然。在1970年代后期,当Intel 8086/8088处理器被引入时,占主导地位的微型计算机操作系统是Digital Research的CP / M(其名称是IBM命名的双关语,代表控制程序/监视器)。CP/M 在 8 位微处理器上运行,如 Zilog Z-80 或 Intel 8080。应用程序开发人员预计Digital Research会将CP / M移植到8086。然而,这花费的时间比预期的要长得多。
1979年,西雅图计算机产品公司(SCP)是最早开发基于8086系统的公司之一。基于S-100总线的SCP系统面临着大多数新系统相同问题:缺乏应用。SCP可以提供的唯一软件是微软的软盘BASIC,这是一个BASIC版本,从软盘加载(而不是在系统的ROM中提供),并包括软盘文件管理逻辑。
SCP计划开发自己的高级操作系统,但SCP的年轻员工Tim Paterson建议开发一种应急系统,以满足对某种操作系统的迫切需求。为了反映系统的性质,它被称为QDOS,一个快速但是存在一些瑕疵并不完善的的操作系统。
为了使现有应用程序的移植尽可能简单,Paterson决定在QDOS中实现CP / M系统调用接口。设想了一种转换工具,该工具可以自动执行大部分移植过程,因为8086指令集已经设计出来,可以从8080直接转换。最后,DOS中的CP / M兼容性几乎没有实际用途,但引起了很多争议。
FAT文件系统
虽然DOS提供了CP/M兼容的系统调用接口,但也存在显著差异。也许其中区别最大的是在磁盘管理领域。Paterson拥有CP / M以及其他几个磁盘操作系统(例如North Star DOS)的经验,并且对其性能没什么好印象。20世纪70年代后期常用的微型计算机磁盘操作系统通常存在严重的缺陷,几十年后似乎无法理解。
在某些情况下(North Star DOS),为了防止性能下降太多,文件必须连续存储;这意味着磁盘空间利用效率不高,有时即使磁盘还有空间,也无法创建超出一定大小的新文件。另一方面,CP / M可以处理碎片文件,但对于大型(相对而言)文件存在性能问题。每个 16KB 文件扩展数据块都需要一个单独的目录条目。由于单个文件的目录条目没有链接,因此操作系统必须执行线性目录搜索,最坏情况的性能非常差。
DOS 使用了不同的磁盘管理策略,在其核心结构之后命名为文件分配表 (FAT)。FAT文件系统由微软的Marc McDonald于1977年为独立磁盘BASIC设计。Tim Paterson熟悉这项技术,并通过小幅修改将其应用于DOS。
FAT背后的想法是,有关整个磁盘上文件分配的完整信息存储在称为文件分配表的单个结构中(通常将辅助副本存储在磁盘上)。FAT被设计得足够小,可以始终保存在内存中,即使在1980年内存非常有限的系统上也是如此。FAT中的条目被链接在一起,文件的目录条目(存储在单独的结构中)指向第一个元素。此方案使得查找文件的任何部分变得非常快,因为通常不需要磁盘读取。
FAT适用于容量为几百KB的软盘,并且性能良好,尽管随着磁盘上的可用空间变得不连续,它倾向于对文件进行碎片化。
FAT 文件系统的一个重要特性是它完全独立于底层磁盘结构。分配单元(一个或多个扇区的簇)是线性寻址的,而不考虑底层磁盘的几何形状。一方面,这可能会导致FAT文件系统错过某些特定于磁盘的优化。另一方面,FAT磁盘结构和代码保持简单,系统可以很容易地首先扩展到固定磁盘,然后再扩展到非旋转介质(紧凑型闪存卡和后来的固态磁盘)。
进入 IBM
1980年,IBM开始了由Don Estridge领导的秘密“国际象棋项目”。Estridge小团队的目标是定义适合小型企业使用的计算机的要求。该产品必须相对便宜,以使IBM能够以大众(相对而言)市场可接受的价格出售计算机。最终结果是个人电脑(PC)。
IBM很快就开始为其即将推出的PC(代号为Acorn)寻找操作系统。与QDOS非常相似,IBM PC是作为临时一次性产品开发的,旨在在不久的将来被一些设计更好的产品所取代。IBM在PC上主要使用现成的硬件组件,软件也不例外。IBM决定将软件开发外包,部分原因是为了防止潜在的诉讼。例如,如果有人声称DOS侵犯了他们的专利,那将是微软的责任,而不是IBM。在那个时候(1980年),微软并不是专利诉讼的重要目标(因为该公司规模很小),不像IBM。
1980年左右,微软是微机语言产品的首要供应商。首先,也是最重要的一点,那就是微软的BASIC,IBM决定将其构建到1990年之前制造的几乎所有PC和PS/2机器的ROM中。IBM还与微软签订合同,提供汇编程序,链接器,以及Pascal,FORTRAN和COBOL编译器。
然而,虽然BASIC将内置到PC的ROM中,但其他工具需要一个操作系统,而IBM没有。微软建议IBM联系Digital Research,定制一个CP/M系统。但早期的谈判失败了,IBM又回到了微软。
1980年9月28日,微软(比尔·盖茨、保罗·艾伦和微软副总裁凯·尼西)决定也为IBM提供操作系统。他们的想法是,他们已经注册交付的工具总共将有大约400KB的(二进制)代码,而操作系统最多只能再增加20KB。微软已经想到了Paterson的QDOS,现在以86-DOS的名义出售。微软还担心,如果IBM需要更长的时间才能找到合适的操作系统,这将使微软将其语言产品移植到PC上的工作变得更加困难,也许不可能按时完成。
SCP同意先授权,然后向微软出售86-DOS,却不知道微软的OEM客户其实是IBM。微软和IBM于1980年11月签署了DOS交付合同。
将 86-DOS 移植到 IBM PC
1980年末,微软开始在IBM PC原型上推出SCP的86-DOS(nee QDOS)。该项目的主要开发人员是Robert O'Rear,他的名字在PC DOS 1.0引导扇区永垂不朽。
移植过程并不容易,因为PC硬件及其ROM BIOS仍在开发中。更复杂的是,86-DOS支持8英寸软盘驱动器,而IBM PC是5.25英寸软盘驱动器。在1980年末和1981年初,Tim Paterson对86-DOS进行了多项改进,并实现了微软要求的其他功能。1981年5月,Paterson加入微软,终于得知了神秘OEM客户的身份。
86-DOS 与 PC DOS
接口按计划完成,PC DOS与86-DOS没有实质性区别。事实上,许多86-DOS可执行文件可以在PC DOS和MS-DOS上运行。
上面的屏幕截图表面上显示了1981年4月下旬的版本中的86-DOS。但是,它是通过获取PC DOS 1.0映像,在其上复制86-DOS(在此过程中覆盖 COMMAND.COM 等)并在VirtualBox中启动生成的映像来创建的。换句话说,86-DOS COMMAND.COM 运行在PC DOS 1.0(1981年8月)的 IBMBIO.COM 和 IBMDOS.COM 之上,PC DOS 1.0是一个真正的跨品种操作系统。
EDLIN 和 DEBUG 实用程序对于早期 DOS 版本的任何用户都应该熟悉。据推测,微软决定不将SCP的汇编程序与DOS一起提供,而是将他们自己的MASM(授权给IBM)作为单独的产品出售。
86-DOS可执行文件比PC DOS 1.0对应文件略小,并且集合不同。请注意,在上面的屏幕截图中,日期为 08-04-81 的文件来自 PC DOS,而日期为 04-18-81 的文件来自 86-DOS。实际上,屏幕截图不是PC DOS并不是很明显。下一个是:
CHKDSK消息略有变化,从“总系统内存(total system RAM)”到“总内存(total memory)”,后者可能更容易理解。但最明显的区别在于命令提示符,它应IBM的要求从A:更改为A>。
现在应该清楚的是,PC DOS(和MS-DOS)或多或少就是86-DOS,而Tim Paterson被的确是DOS的作者。