newsence
來源篩選

DOS Memory Management

Hacker News

This article explores the internal mechanisms and historical evolution of DOS memory management, detailing how it uses Memory Control Blocks (MCBs) and highlighting several undocumented pitfalls and bugs.

newsence

DOS 記憶體管理機制分析

Hacker News
3 天前

AI 生成摘要

這篇文章探討了 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 團隊的開發故事。