解決 640KB 記憶體瓶頸 WINSTART.BAT 的設計初衷
【科技考古 ㊙️】很多用家都知道 autoexec.bat 批次檔是什麼,但卻鮮有人知道其實早期 Windows 也有一個 winstart.bat 批次檔。Microsoft 資深軟體工程師 Raymond Chen 近日分享了早期 Windows 作業系統原來存在 winstart.bat 機制,用途是在系統啟動時載入僅供 Windows 環境使用的常駐程式(TSR),從而避免佔用 MS-DOS 虛擬機器極為珍貴的傳統記憶體(Conventional Memory),這個做法隨著 Windows 徹底擺脫 MS-DOS 架構而退役。
據 Raymond Chen 指出,在 1990 年代初期,DOS 作業系統受限於著名的 640KB 傳統記憶體限制,當時用家若需要執行各類工具軟體或網路驅動程式,通常必須透過常駐程式(Terminate-and-Stay-Resident, TSR)載入記憶體中。
在預設情況下,開機時會執行 autoexec.bat 批次檔來載入這些 TSR 程式。然而,當 Windows 3.x 或 Windows 95 開啟並建立獨立的 MS-DOS 虛擬機器(DOS VM)以執行舊版 DOS 應用程式時,所有透過 autoexec.bat 載入的 TSR 程式都會被強制繼承至每一個 DOS 虛擬機器中,進一步壓縮原本就相當吃緊的 640KB 可用記憶體空間。
為解決此一技術瓶頸,Microsoft 早期推出了 winstart.bat 批次檔機制,winstart.bat 與 autoexec.bat 的主要差異在於其執行時機與作用範圍:
autoexec.bat 會在 MS-DOS 引導階段最先執行,所載入的 TSR 程式會同時暴露給 Windows 本身以及後續建立的所有 DOS 虛擬機器。
winstart.bat 僅當使用者放置於 C:\windows\ 目錄下時生效。當用家啟動 Windows 時,虛擬機器管理器(VMM)完成初始化並建立「系統虛擬機器」(System VM)後,VMM 才會呼叫執行 winstart.bat。
透過這種順序設計,利用 WINSTART.BAT 所載入的 TSR 程式(例如僅有 Windows 應用程式會呼叫的特定網路驅動程式或周邊工具),將專屬於 Windows 系統環境使用,而不會被複製載入至獨立的 MS-DOS 虛擬機器內,成功實現記憶體資源分流。
隨著作業系統技術演進,這些早期的設計不僅呈現了當年開發人員在極限資源約束下所展現的巧思,也記錄了 Windows 作業系統從 DOS 附屬環境逐步發展為獨立系統的演進歷程。
資料來源: