XMGR and XHDD now do XMS moves in 8K blocks with 486+ CPUs, 4K blocks on slow 386 CPUs. XHDD size reduced by better XMS logic. Other drivers unchanged (re-dated only).
以滙編語言寫成,體積之小天下獨有!
千錘百鍊廿年改進,386以上適用,包括SATA硬碟、光碟驅動程序
http://optimizr.no-ip.org/dos/drivers.html
Gemini 解答
技术背景与原理解析
该帖子提到的
XMGR、XHDD及其配套驱动程序,是 DOS 时代后期(尤其是 2000 年后)由开发者 Jack R. Shave 开发并由 johnsonlam 等维护的轻量化、高性能系统驱动组件。这些驱动旨在替代 MS-DOS 原生的HIMEM.SYS、EMM386.EXE以及通用的磁盘和光驱驱动,以极小的内存占用提供 UltraDMA (UDMA) 支持。1. XMS 内存搬移优化(8K 与 4K 数据块)
XMGR作为 XMS 内存管理器,核心任务之一是处理常规内存(Conventional Memory)与扩展内存(Extended Memory)之间的数据交换。
- 技术原理:数据搬移通常涉及 CPU 的
REP MOVSW或REP MOVSD指令。由于 386 与 486+ 处理器在高速缓存(L1/L2 Cache)架构、总线宽度及流水线效率上存在显著差异,数据块的大小会直接影响吞吐量。- 优化逻辑:
- 4K 块(386 系统):386 处理器缺乏高效的内部缓存管理,且总线频率较低。较小的 4K 数据块更符合其内存分页机制,能减少由于大块数据传输导致的系统总线长时间占用(Bus Locking)。
- 8K 块(486+ 系统):486 及后续处理器引入了更完善的内部缓存。较大的 8K 数据块能更好地利用 L1 Cache 的预取功能和 32 位数据总线的带宽,减少指令循环的开销,从而提升 XMS 访问速度。
2. XHDD 与 UltraDMA 驱动机制
XHDD.SYS(及相关的XDMA.SYS)是专为 DOS 环境设计的硬盘驱动程序,其核心价值在于开启并管理磁盘控制器的 UltraDMA 模式。
- PIO vs UDMA:原生的 DOS BIOS 调用(INT 13h)通常运行在 PIO(程序输入输出)模式下,数据传输需经由 CPU 中转,极大地消耗系统资源且速度受限。
XHDD通过直接操作 IDE/SATA 控制器的寄存器,启用总线主控(Bus Mastering)DMA 传输,将数据直接在内存与磁盘间传递,大幅降低 CPU 占用并提升读写速率。- SATA 支持的实现限制:DOS 环境下对 SATA 硬盘的支持并非通过 AHCI 协议实现,而是依赖于主板 BIOS 中的 IDE 兼容模式(Legacy/IDE Mode)。在此模式下,SATA 控制器模拟传统的 IDE 寄存器接口,
XHDD才能识别并启用其 UDMA 功能。3. 驱动程序的微型化设计
帖子中提到的“体积之小”源于全汇编语言编写(Assembly Language)。
- 工程实现:相比于使用 C 语言编写并链接了运行时库的驱动(如某些版本的
UIDE),XMGR和XHDD通过手动优化机器码,去除了所有非必要代码段。这使得它们在加载后仅占用极少的常规内存(通常在几 KB 以内),为 DOS 游戏和大型专业软件腾出了宝贵的上位内存(UMB)和基本内存空间。4. 历史语境与环境兼容性
- 处理器要求:该驱动明确要求 386 以上 CPU,是因为其内部使用了 386 引入的 32 位寄存器(如 EAX, EBX)以及保护模式下的内存寻址特性。
- 硬件依赖:虽然
XHDD支持 SATA,但在 2010 年后的硬件上,如果 BIOS 彻底移除了 CSM(兼容性支持模块)或 Legacy IDE 选项(仅保留原生 AHCI 模式),此类驱动将无法识别磁盘控制器。- 稳定性:由于 DOS 缺乏内存保护机制,此类直接操作底层硬件端口的驱动程序在不同芯片组(Intel、VIA、SiS、AMD)上的兼容性存在差异。更新日志中提到的“廿年改进”主要解决了在不同 IDE/SATA 控制器上的同步与时序兼容问题。
