LLM 解释
这篇文章简要概述了 DOS 从 1.x 演进到 2.x 系列的关键技术转折点。以下是对文中提到的技术演进、背景及历史细节的补充与修正:
1. 文件系统的重大演进:从 FCB 到文件句柄
MS-DOS 1.0 的文件操作完全沿袭了 CP/M 的**文件控制块(FCB, File Control Block)**模式。FCB 是一种定长的数据结构,包含文件名、扩展名、文件大小及磁盘位置等信息,且必须由应用程序在内存中维护。这种设计的局限性在于它不支持路径名,因为 FCB 结构中没有存储路径的空间。
随着 1983 年 IBM PC XT(机型 5160)的推出,引入了 10MB 的硬盘。为了管理庞大的存储空间,MS-DOS 2.0 引入了分层目录结构(Hierarchical Directory Structure)和文件句柄(File Handle)。
-
技术实现:文件句柄通过 DOS 内部的系统文件表(SFT)来追踪文件状态,程序只需操作一个整数索引(句柄)。
-
兼容性保障:为了保证 DOS 1.x 程序的兼容性,2.x 依然保留了对 FCB 的支持,但 FCB 无法直接访问子目录中的文件,只能访问当前目录。
2. UNIX 特性的引入与“句柄”的副产品
文中提到 DOS 2.0 受 UNIX 影响极深,这在技术实现上有明确体现:
-
重定向与管道:由于引入了文件句柄,DOS 能够模仿 UNIX 将标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)作为预定义的句柄(0, 1, 2)。这使得
>、< 和 | 等操作符在 DOS 命令行中得以实现。
-
路径分隔符的差异:虽然 DOS 借鉴了 UNIX 的目录结构,但由于 IBM 在 PC-DOS 1.0 中已经将斜杠
/ 定义为命令行开关(Switch)的分隔符,为了避免冲突,MS-DOS 2.0 被迫采用了反斜杠 \ 作为路径分隔符。
3. 可安装设备驱动程序与 CONFIG.SYS
在 DOS 1.x 中,支持新硬件(如特殊的串行卡或非标准磁盘驱动器)需要对 BIOS 或 DOS 内核进行二进制补丁。MS-DOS 2.0 引入了**可安装设备驱动程序(Installable Device Drivers)**架构,通过 CONFIG.SYS 文件动态加载 .SYS 文件。
- 这标志着操作系统从“针对特定硬件定制”向“平台化、可扩展化”的转变,是 DOS 能够适配大量兼容机硬件的关键。
4. 内存驻留(TSR)与早期“多任务”
由于 DOS 设计之初是单用户单任务系统,缺乏进程调度器。为了实现诸如后台打印(PRINT)或键盘热键激活(如后来的 SideKick),程序员利用了 DOS 2.0 完善后的 INT 27H 或 INT 21H AH=31H(Keep Process) 调用,使程序在退出后仍保留在内存中。这类程序被称为 TSR (Terminate and Stay Resident)。这并非严格意义上的多任务,而是通过中断拦截实现的协同式后台处理。
5. 版本演进的细节补充
文中提到的版本分支反映了当时 Microsoft 与 IBM 以及 OEM 厂商之间的复杂关系:
-
PC-DOS 2.1:主要是为了适应 IBM PCjr 的特定硬件需求(如不同的磁盘控制器时序)。
-
MS-DOS 2.11:这是 2.x 时代流传最广的 OEM 版本。它修正了 2.1 中的大量错误,并正式支持了更多的国际化特性(如不同国家的日期、货币格式)。
-
MS-DOS 2.25:这是一个鲜为人知的版本,其核心意义在于增加了对 DBCS(双字节字符集) 的初步支持。这为后来汉化 DOS 的出现(如后来的中文系统)奠定了处理东亚语言的基础,主要面向亚太和日韩市场。
6. 技术局限性与历史背景
尽管 DOS 2.0 引入了硬盘支持,但其 FAT12 文件系统在管理大容量磁盘时效率极低。在 2.x 版本中,FAT12 的簇寻址能力限制了分区大小,这导致在 3.0 版本之前,DOS 处理大硬盘的能力仍显稚嫩。文中提到的“定位故障”通常是指对磁盘坏道和分区表处理逻辑的改进。