此條目介紹的是32位Windows NT中的Win16
子系统 。关于64位Windows中的32位兼容层,请见「
WOW64 」。
Windows on Windows ,常指16位WOW [ 1] 、WOWEXEC [ 2] 或简称 WOW [ 3] 。它是一个Microsoft Windows NT 操作系统 家族中32位 版本的兼容层 ,目的是扩展NTVDM 以为运行为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 )旧的16位API到较新的32位环境,以提供16位指针 、内存模型和地址空间 的支持。
所有16位应用程序默认使用共享内存空间运行在一个DOS虚拟机 中。但它们也可以被配置为使用单独的内存空间运行,这种设置下每个16位进程都有自己的专用的虚拟机。单独的内存空间可以增加应用程序稳定性,防止16位应用程序互相干扰,但也增加16位IPC 和使用更多内存。
Win16子系统在32位版本的Windows NT , 2000 , XP , Server 2003 , Vista , Server 2008 , 7 和8 中可用。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 95 和Windows 98 内核,WIN.COM文件模拟了一个Windows 3.x 内核中的NTVDM ,在Windows NT上运行16位基于DOS的Windows应用程序。
垫片
应用程序的兼容性问题,不仅有长文件名 、多用户和最小特权 概念的问题,其他部分也可能导致某些应用程序无法正常运作,例如错误地在NTFS 安全情况下认为对整个文件系统有写入权限。
在Windows 95操作系统设计时,一项关键要求就是文件系统要保持对8.3文件名 的向后兼容,以允许旧款应用程序继续在平台上正常运行。因而Windows 95和之后的操作系统在文件分配表 (FAT)中支持一个兼容性模式,同时存储长文件名和短文件名。
另外,试图直接访问硬件的旧款应用程序在用户模式 中不能这样做。如果DOS和Windows 9x的系统配置文件在Windows NT为基础的内核中不存在,旧款应用程序也可能失败。因此0字节的AUTOEXEC.BAT 和CONFIG.SYS 文件在后续的、不使用它们的操作系统上继续存在。
在之后的Windows版本中,有相当多的垫片 以拦截和修改旧款应用程序的API 调用。[ 6] 这些修复在不断更新,以解决仍在流行的旧款应用程序的问题。[ 7]
参见
参考资料
外部链接