Windows on Windows - Wikiwand
For faster navigation, this Iframe is preloading the Wikiwand page for Windows on Windows.

Windows on Windows

維基百科,自由的百科全書

本條目翻譯自其他語言的維基百科,需要精通本領域的編者協助校對翻譯。如果您精通本領域,又能清楚地將來源語言翻譯為中文,歡迎您協助參與校對與修訂,原文參見維基數據。

Windows on Windows,常指16位元WOW[1]WOWEXEC[2]簡稱WOW[3]。它是一個Microsoft Windows NT作業系統家族中32位元版本的相容層,目的是擴充NTVDM英語Virtual_DOS_machine以為執行為Windows 3.x編寫的舊式Win16應用程式提供有限支援。64位元系統上的「WOW」通常指在64位元Windows上支援32位元應用程式的WOW64

背景

許多16位元Windows(Win16)舊式應用程式可以無需更改執行在較新的32位元Windows版本。原因是設計者允許應用程式開發者在行業從Windows 3.1x過渡到Windows 95及更新版本期間糾正他們的應用程式,在所有客戶使用的應用程式被妥善解決前,不限制客戶升級到新版本的作業系統。

Windows 9x系列的作業系統的根基採用DOS, 本質上採用16/32位元混合的系統,底層的作業系統不完全是32位元,因此原生執行Win16應用程式不需要特殊的仿真。而基於Windows NT的作業系統與Windows 9x的結構有很大不同,需要一個更複雜的解決方案。為了使16位元應用程式能未經修改地執行在基於NT的32位元Windows系統上(少許執行時限制),有兩個獨立策略被採用:形實替換(thunking)和墊片(shimming)。

形實替換

作業系統的WOWEXEC子系統會形實替換(thunks英語Thunk_(compatibility_mapping))舊的16位元API到較新的32位元環境,以提供16位元指標、記憶體模型和位址空間的支援。

所有16位元應用程式預設使用共享記憶體空間執行在一個DOS虛擬機器英語Virtual_DOS_machine中。但它們也可以被組態為使用單獨的記憶體空間執行,這種設定下每個16位元處理程序都有自己的專用的虛擬機器。單獨的記憶體空間可以增加應用程式穩定性,防止16位元應用程式互相干擾,但也增加16位元IPC和使用更多記憶體。

Win16子系統在32位元版本的Windows NT, 2000, XP, Server 2003, Vista, Server 2008, 78中可用。64位元版本的Windows中也有它,但不包括WoW Win16支援的子系統,因此無法執行Win16應用程式,也沒有提供NTVDM模擬器。DOS和16位元Windows應用程式因此不能執行在64位元版本的Windows上,除非使用第三方類比軟體(例如DOSBox)或虛擬機器軟體執行任何32位元Windows、Windows XP Mode或DOS本身。

Windows NT系統中的WOWEXEC.EXE處理程序用於輔助Windows-on-Windows。[4][5]此外Windows-on-Windows還類比了Windows 95Windows 98核心,WIN.COM檔案類比了一個Windows 3.x核心中的NTVDM英語NTVDM,在Windows NT上執行16位元基於DOS的Windows應用程式。

墊片

應用程式的相容性問題,不僅有長檔名、多使用者和最小特權概念的問題,其他部份也可能導致某些應用程式無法正常運作,例如錯誤地在NTFS安全情況下認為對整個檔案系統有寫入權限。

在Windows 95作業系統設計時,一項關鍵要求就是檔案系統要保持對8.3檔名的向下相容,以允許舊款應用程式繼續在平台上正常執行。因而Windows 95和之後的作業系統在檔案分配表(FAT)中支援一個相容性模式,同時儲存長檔名和短檔名。

另外,試圖直接存取硬體的舊款應用程式在使用者模式中不能這樣做。如果DOS和Windows 9x的系統設定檔案在Windows NT為基礎的核心中不存在,舊款應用程式也可能失敗。因此0位元組的AUTOEXEC.BATCONFIG.英語CONFIG.SYSSYS檔案在後續的、不使用它們的作業系統上繼續存在。

在之後的Windows版本中,有相當多的墊片以攔截和修改舊款應用程式的API呼叫。[6]這些修復在不斷更新,以解決仍在流行的舊款應用程式的問題。[7]

參見

參考資料

外部連結

{{bottomLinkPreText}} {{bottomLinkText}}
Windows on Windows
Listen to this article