每天学一些旧东西,第十一部分:DOS 目录搜索很奇怪

主要观点:作者开始使用[EMU2]软件模拟运行 MS-DOS 4.0 等程序,过程中遇到诸多问题,包括各种 DOS 程序在 EMU2 中的运行故障,如 Watcom wmake、Microsoft NMAKE、MS-DOS 4.0 TREE.COM 等,通过对 DOS 目录搜索机制的研究和对 EMU2 的修改来解决这些问题,同时探讨了 DOS 目录搜索设计的合理性及相关问题。

关键信息:

  • [EMU2]是简单的文本模式 x86 + DOS 模拟器,作者尝试用其在非 DOS 系统上构建 MS-DOS 4.0 但不顺利。
  • DOS 2.x 目录搜索使用 INT 21h/4Eh 和 INT 21h/4Fh,搜索结果存储在 DTA 中,不同 DOS 版本 DTA 结构不同。
  • Watcom wmake 在 EMU2 中因对 DTA 的操作方式不同而失败,通过在 DTA 中存储“cookie”解决。
  • NMAKE 运行时因大量目录搜索导致 EMU2 耗尽主机侧搜索资源,需解决搜索结束问题。
  • MS-DOS 4.0 TREE.COM 为打印目录树会保存和恢复 DTA 内容,需在 DTA 中增加位置信息。
  • MS-DOS 6.0 COMMAND.COM 使用 FCB 搜索,与普通目录搜索在 EMU2 中存在问题,需注意搜索延续信息的存储位置。
  • DOS 目录搜索设计存在问题,搜索有效时间取决于目录未被修改,实际中搜索可长期有效但结果不一定合理,重定向器需猜测搜索何时结束,启发式方法可减少打开搜索数量。

重要细节:

  • Watcom 运行时库设置 DTA 地址并调用 Find First 和 Find Next,在 EMU2 中因主机侧搜索关联问题导致失败。
  • NMAKE 运行大量目录搜索,因无 Find Close 调用导致搜索状态管理困难,需使用启发式方法。
  • TREE.COM 为打印目录树会巧妙地保存和恢复 DTA 内容以实现回退搜索,需在 DTA 中增加位置信息。
  • MS-DOS 6.0 COMMAND.COM 的 FCB 搜索与普通目录搜索在 EMU2 中存在冲突,需注意搜索延续信息的存储位置。
  • DOS 目录搜索设计无“Find Close”API,重定向器需猜测搜索结束,启发式方法可减少问题。
阅读 7
0 条评论