正如我所理解的,仿真器(以一种简单的方式)确实将使用system函数的程序的函数调用转换或替换为运行程序的系统Y所使用的函数。葡萄酒项目声称葡萄酒不是仿真器,因为:
与其像虚拟机或仿真器一样模拟内部Windows逻辑,葡萄酒还可以动态地将Windows调用转换为POSIX调用,从而消除了其他方法的性能和内存损失,并允许您将Windows应用程序干净地集成到桌面中。
那么,模拟器和虚拟机是如何在主机非Windows系统上模拟内部Windows逻辑的呢?难道不是通过将Windows系统调用转换为主机自己的调用吗?仿真器和非仿真器(如葡萄酒)的区别是模拟器模拟整个操作系统,然后应用程序在不知道它正在与模拟器对话的情况下使用系统API,而非仿真器直接将应用程序的调用转换为主机的调用(应用程序也可能不知道)?额外的间接水平是仿真器和葡萄酒之间唯一的区别吗?
发布于 2013-11-11 11:06:12
那么,模拟器和虚拟机是如何在主机非Windows系统上模拟内部Windows逻辑的呢?难道不是通过将Windows系统调用转换为主机自己的调用吗?
不,或者至少在葡萄酒的意义上没有--通过字面翻译系统在用户空间中一对一地调用。仿真器通过更迂回的路由抽象地完成此操作;它不直接转换系统调用。
一个真正的仿真器创建一个虚拟机(例如x86-64),而不是一个虚拟操作系统。理论上,您可以针对这种类型的机器运行任何操作系统。通常,“模拟器”包括操作系统,但这并不是它真正要仿真的;它包含的操作系统与在真正的机器上运行的操作系统是相同的。
模拟器有时用于模拟与主机不同的硬件,但也用于在另一台操作系统中运行完全相同的硬件。
葡萄酒与此不同,因为它实际上不是窗户。您可以运行一个x86-64仿真器,里面有一个真正的窗口副本,但这不是葡萄酒。他们声称它实际上比仿真器更高效,这是有意义的--仅仅转换系统调用的开销可能比运行VM的开销要低。缺点是,葡萄酒只能是窗口;您不能像正常VM那样将它与其他操作系统一起使用。
发布于 2013-11-11 16:44:31
考虑一下Java虚拟机。没有JVM模仿任何其他的,它们都是规范的实现。Wine不是模仿win32 api,而是它的一个实现。规范和现实不一定是匹配的,微软的实现和葡萄酒的实现都有使buggy代码工作的解决办法,而且对于任何给定的项目来说,哪种实现是更好的目标并不一定是显而易见的。
发布于 2013-11-11 16:12:44
Linux是一个shim,它拦截windows调用并在动态中将它们转换为相应的Linux调用(S)。而仿真器或虚拟机则模拟物理机器。显然,shim更有效率,但可能无法完全模仿所需的功能。
https://unix.stackexchange.com/questions/100739
复制相似问题