newsence

DOS 記憶體管理機制分析

Hacker News·大約 1 個月前

這篇文章探討了 DOS 記憶體管理的內部機制與歷史演進,詳細說明其如何利用記憶體控制區塊(MCB)運作,並指出了一些文件中未提及的陷阱與程式錯誤。

背景

這篇文章深入探討了 DOS 記憶體管理的歷史演進與技術細節,從 1981 年 DOS 1.x 缺乏明確管理機制,到 DOS 2.0 為了支援 IBM PC/XT 而引入的分配、釋放與調整功能。文章詳盡描述了記憶體控制區塊(MCB)的結構,以及 DOS 如何利用 16 位元的段位址架構來管理以 16 位元組為單位的記憶體單元。

社群觀點

在 Hacker News 的討論中,許多資深使用者對 DOS 時代「錙銖必較」的記憶體優化過程充滿懷念。當時最核心的挑戰在於如何最大化「傳統記憶體」,即 640KB 限制下的可用空間。留言者分享了他們在 386 時代的極限挑戰,透過將滑鼠驅動程式、光碟機驅動程式(MSCDEX)甚至是命令處理器(COMMAND.COM)全部塞進上位記憶體區塊(UMB),有人成功在 8MB RAM 的機器上擠出了高達 637KB 的傳統記憶體空間。這種對記憶體配置的執著,甚至讓當時的玩家為了省下幾 KB 的空間,寧願放棄使用滑鼠來玩遊戲。

針對微軟後來推出的自動優化工具 MEMMAKER,社群內存在不同的評價。雖然這項工具旨在簡化優化流程,但部分技術愛好者認為它過於強勢,會大幅修改 CONFIG.SYS 與 AUTOEXEC.BAT 等系統設定檔,因此他們更傾向於手動調整以獲得更高的精確度與信任感。這種手動調校的過程,不僅是技術實力的展現,更是那個時代程式設計師與進階使用者共同的集體回憶。

此外,關於 MCB 標誌位元組「MZ」的起源,社群也展開了有趣的考據。雖然有人猜測 M 代表 Memory 而 Z 代表最後一個區塊(Last),但多數留言者與歷史愛好者更傾向於認為這是開發者 Mark Zbikowski 的姓名縮寫。這與 EXE 執行檔格式頭部的 MZ 標記一致,幾乎已成為業界公認的軼事。討論中也提到了另一位關鍵開發者 Aaron Reynolds(ARR),他與 Mark Zbikowski 共同領導了後續 DOS 版本的開發,這些開發者的個人印記深深地烙印在 DOS 的底層架構中。

最後,有遊戲開發者分享了當時技術限制對創作的影響。由於某些遊戲僅能使用傳統記憶體,開發者被迫在美術表現上做出妥協,例如取消角色動畫以節省空間。這反映出 DOS 記憶體管理不只是純粹的系統議題,更直接形塑了早期個人電腦軟體與遊戲的樣貌。

延伸閱讀

  • DOS MZ 執行檔格式:維基百科上關於 EXE 標頭格式的詳細說明,可對照 MCB 的標記機制。
  • AARD 程式碼:由 Aaron Reynolds 相關技術所引發的歷史爭議,涉及偵測非微軟 DOS 環境的程式碼。
  • The Old New Thing:Raymond Chen 撰寫的微軟技術部落格,內容包含許多關於 Aaron Reynolds 與早期 Windows 團隊的開發故事。
https://os2museum.com/wp/dos-memory-management/