在使用 DOS 计算机的过程中,我很欣赏的一点是,引导过程相对容易理解。在 DOS 中没有太多的变动组件。而今天,我想和大家分享一下电脑是如何引导和启动像 FreeDOS 这样的简单操作系统的概况。
初始引导当你打开计算机的电源时,系统会进行一些自我检查,如验证内存和其他组件。这被称为开机自检Power On Self Test(POST)。POST 之后,计算机使用一个硬编码指令,告诉它在哪里找到加载操作系统的指令。这就是“引导加载程序boot loader”,通常它将试图找到硬盘上的主引导记录Master Boot Record(MBR)。然后,MBR 加载主操作系统,在这里就是 FreeDOS。
这个定位一个信息以便计算机能够加载操作系统的下一个部分的过程被称为“引导bootstrapping”,来自于“通过你自己的努力振作起来picking yourself up by your bootstraps”的古老说法。正是从这个用法中,我们采用了“引导boot”一词来表示启动你的计算机。
内核当计算机加载 FreeDOS 内核时,内核所做的第一件事就是识别用户所表示要使用的任何参数。它被保存在一个叫做 FDCONFIG.SYS
的文件中,与内核保存在同一个根目录下。如果FDCONFIG.SYS
不存在,那么 FreeDOS 的内核就会寻找一个叫做CONFIG.SYS
的替代文件。
如果你在 20 世纪 80 年代或 90 年代使用过 DOS,你可能对 CONFIG.SYS
文件很熟悉。从 1999 年起,FreeDOS 首先寻找FDCONFIG.SYS
,以防你的 DOS 系统与其他 DOS(如 MS-DOS)做了双启动。请注意,MS-DOS 只使用CONFIG.SYS
文件。因此,如果你用同一个硬盘同时启动 FreeDOS 和 MS-DOS,MS-DOS 使用CONFIG.SYS
来配置自己,而 FreeDOS 则使用FDCONFIG.SYS
。这样一来,双方都可以使用自己的配置。
FDCONFIG.SYS
可以包含一些配置设置,其中之一是SHELL=
或SHELLHIGH=
。任何一个都会指示内核加载这个程序作为用户的交互式 shell。
如果 FDCONFIG.SYS
和CONFIG.SYS
都不存在,那么内核就会假定几个默认值,包括在哪里找到 shell。如果你在启动 FreeDOS 系统时看到 “Bad or missing Command Interpreter” 的信息,这意味着SHELL=
或SHELLHIGH=
指向了一个在你系统中不存在的 shell 程序。
你可以通过查看 SHELL=
或SHELLHIGH=
行来调试这个问题。如果做不到这一点,请确保你在 FreeDOS 系统的根目录下有一个名为COMMAND.COM
的程序。它就是shell,我接下来会讲到它。
在 DOS 系统中,“shell” 一词通常是指一个命令行解释器:一个交互式程序,它从用户那里读取指令,然后执行它们。在这里,FreeDOS 的 shell 与 Linux 的 Bash shell 相似。
除非你用 SHELL=
或SHELLHIGH=
要求内核加载一个不同的 shell,否则 DOS 上的标准命令行 shell 被称为COMMAND.COM
。当COMMAND.COM
启动时,它也寻找一个文件来配置自己。默认情况下,COMMAND.COM
会在根目录下寻找一个名为AUTOEXEC.BAT
的文件。AUTOEXEC.BAT
是一个“批处理文件”,它包含一组启动时运行的指令,大致类似于 Linux 上 Bash 启动时读取的~/.bashrc
“资源文件”。
你可以在 FDCONFIG.SYS
文件中用SHELL=
或SHELLHIGH=
改变 shell 以及 shell 的启动文件。FreeDOS 1.3 RC4 安装程序将系统设置为读取FDAUTO.BAT
而不是AUTOEXEC.BAT
。这与内核读取另一个配置文件的原因相同;你可以在硬盘上用另一个 DOS 双启动 FreeDOS。FreeDOS 将使用FDAUTO.BAT
而 MS-DOS 将使用AUTOEXEC.BAT
。
如果没有像 AUTOEXEC.BAT
这样的启动文件,shell 将简单地提示用户输入日期和时间。
就是这些了。当 FreeDOS 加载了内核,而内核也加载了 shell,FreeDOS 就准备好让用户输入命令了。