DOS
DOS(Disk Operation System),磁盘操作系统,是一类统治了20世纪80年代到90年代的个人计算机操作系统的统称
它包含以下几个主流分支
- MS-DOS(Microsoft DOS),1981年微软购入Tim Paterson写的86-DOS,最初叫QDOS(Quick and Dirty Operating System),并以此为基础为IBM PC打造了操作系统
- PC DOS(IBM Personal Computer DOS),由微软为IBM专门定制的版本。在早期(DOS 1.0到5.0),PC DOS 和 MS-DOS的核心代码几乎完全一样,只是改了名字和部分内置工具;到了1993年(DOS 6.0),微软和IBM结束了合作关系,IBM开始独立开发PC DOS,并内置了IBM自己的高级实用工具
- DR DOS(Digital Research DOS),由CP/M系统的开发商Digital Research推出,是MS-DOS最强劲的竞争对手,DR-DOS经常在技术上领先微软一步,比如,DR-DOS 5.0/6.0率先引入了优秀的内存管理(把驱动移到高端内存,留出宝贵的640KB常规内存给游戏和软件)和磁盘压缩功能,逼得微软不得不紧急开发MS-DOS 5.0和6.0来应对
- FreeDOS(自由操作系统),一个开源、免费的纯16位DOS兼容系统,于1994年因微软宣布全面转向Windows且准备放弃DOS而由民间发起;它完全兼容MS-DOS的软件和游戏,且至今仍持续更新内核和现代网络/包管理工具。很多现代主板刷BIOS用的引导盘,或者无系统的笔记本出厂预装的系统,很多就是FreeDOS
DOS作为主流桌面操作系统的时代已经在2000年就结束了,但DOS并没有彻底消亡。凭借着极地的硬件开销、无虚拟化延迟的直接硬件访问能力,以及庞大的历史遗产,仍活跃在四大特定领域
- 工业控制、医疗与嵌入式系统的底层控制软件都是80-90年代基于DOS编写的,因为它很稳定,重写底层控制软件的代价很大;一些特定的嵌入式设备,这里指的是只需要跑但个控制程序的硬件,DOS启动速度很快而且不用担心像Windows那样频繁更新或联网蓝屏的风险
- 现代硬件维护和固件刷写,虽然许多现代主板(UEFI)支持在Windows内或直接在BIOS里升级固件,但在许多服务器、工控机或某些特定显卡固件刷写工具中,官方依然会提供一个纯DOS版的闪存工具;一些极其追求“干净运行环境”的底层维护工具(如硬盘检测修复工具MHDD,早期的Memtest86等),仍需要通过DOS引导盘启动。在纯DOS下,没有多任务调度,没有复杂的内存分页和虚拟化保护,软件可以直接向主板I/O端口和寄存器发送K&R/汇编指令,从而获得精准的硬件控制权
- 开源世界中的延续,社区正处于FreeDOS 3.0时代,主要在优化现代硬件的兼容性、引入更完善的网卡驱动等;如果今天去买一台没有预装Windows系统的“裸机”联想、戴尔或惠普笔记本,为了证明电脑硬件完好并应付合规检查,厂商往往会在硬盘里预装FreeDOS
- 怀旧游戏与文化保护,这也是我研究DOS的原因,DOSBox及其变体(DOSBox-Staging, DOSBox-X):由于现代CPU已经彻底抛弃了纯16位实模式(甚至Intel最新架构正在逐步削减32位支持,全力转向64-bit-only),直接在现代PC上跑旧DOS是不可能的。但通过DOSBox这类模拟器,玩家可以在Windows11, Linux甚至手机上完美模拟出一台拥有Sound Blaster 16声卡和VGA显卡的486电脑;时至今日,很多无数经典的DOS游戏仍然在售卖,它们的底层都捆绑着一个配置好的DOSBox
FreeDOS的安装
在Linux上使用QEMU来模拟DOS所需硬件环境
先创建虚拟机所在目录~/freedos_sandbox/
从https://freedos.org/下载Live CD,得到一个.zip压缩包,将其内容解压到~/freedos_sandbox/中\
- qemu
- mtools
DOS的使用
命令
dir(Directory)
输入dir回车,它会列出当前目录下的所有文件和文件夹(在DOS里叫”子目录“),并显示它们的大小和最后修改时间
dir/p:如果文件太多一屏显示不下,加上/p会分屏显示,按下任意键看下一页dir/w:宽屏紧凑显示,只看文件名,不看大小和时间
cd(Change Directory)
DOS的文件系统是树状结构的,需要用cd命令来回穿梭
cd game:进入当前目录下名为game的文件夹cd ..:返回上一级母文件夹cd \:直接回到当前盘符的根目录
切换盘符
DOS不用cd来切换硬盘分区或软驱,而是直接输入盘符加冒号
A:切换到A盘(通常是软驱)C:切换到C盘(主硬盘)
运行
在DOS下,只有后缀名为.EXE, .COM, .BAT的文件才是可执行文件;如果进入一个游戏目录,看到一个叫PLAY.EXE的文件
C:\GAMES\PAL\> play
文件操作
| 命令 | 示范 | 作用 |
|---|---|---|
md(Make Dir) | md work | 新建一个名叫work的文件夹 |
rd(Remove Dir) | rd work | 删除work文件夹(必须是空文件夹) |
copy | copy a.txt c:\backup | 把a.txt复制到C盘的backup目录下 |
del/erase | del test.txt | 删除test.txt文件 |
ren(Rename) | ren old.txt new.txt | 将文件重命名 |
type | type readme.txt | 直接在屏幕上打印出文本文件的内容 |
磁盘与内存管理
mem
查看当前系统的内存分配情况\
mem
会显示类似
Memory Type Total Used Free
--------------- ----------- ----- -----
Conventional 640K 85K 555K
Upper 128K 60K 68K
Reserved 64K 64K 0K
Extended (XMS) 16384K 512K 15872K
--------------- ----------- ----- -----
Total memory
常规内存(Conventional Memory)
上位内存(Upper Memory)
保留内存(Reserved Memory)
扩展内存(Extended Memory)
/c参数,Classify分类显示内存,它会按程序、驱动程序和TSR(Terminate and Stay Resident,驻留内存程序)分类,显示每个模块占用了多少内存
chkdsk/scandisk
检查磁盘错误、修复逻辑坏道
在传统MS-DOS下用scandisk,在FreeDOS下可以使用兼容的chkdsk。当觉得QEMU镜像写入异常或者文件损坏时,用它来扫描
fdisk
fdisk是磁盘分区工具。FreeDOS的fdisk极为强大,支持现代的大容量硬盘分区以及FAT32格式
format
format c: /s:格式化C盘,加上/s参数(System),它会在格式化后自动把DOS的引导核心和系统文件传输过去,让这个盘具备独立启动的能力
文本与效率文件命令
提升文件操作效率
xcopy
传统的copy只能拷贝一个目录下的文件,xcopy可以拷贝整个磁盘
xcopy c:\src d:\dest /s /e
把src文件夹下的所有子目录(/e意为包含空文件夹)原封不动地复制到D盘
tree
以直观的字符画形式,把当前盘符下的所有文件结构打印成一颗“树”
tree /f
不仅显示文件夹,连文件夹里面的文件名也一起列出来
edit
DOS的御用编译器。蓝底白字,支持快捷键(按Alt键可以呼出文件、编辑菜单),可以直接使用鼠标操作
网络与现代进化命令
这些是FreeDOS专属命令,如果用QEMU开启了网络模拟(如-net nic -net user),FreeDOS里内置了一套现代操作系统才有的网络命令
fdimples/fdnpm
fdimples是图形化/菜单式的软件仓库管理器,用来装游戏和开发工具fdnpm是FreeDOS Network Package Manager(类似Linux的apt或npm)。联网上网后,可以通过类似fdnpm install wget的命令直接在线下载DOS软件
fdn
FreeDOS自动化联网脚本,一键加载Packet Driver并通过DHCP获取IP
ifconfig
查看当前FreeDOS网卡的IP地址、子网掩码
ping
测试网络连通性
批处理
DOSBox-X 的使用
开发环境
- open watcom








