From 129c4d1b5b52861291f04ba1c7559691e460fe7a Mon Sep 17 00:00:00 2001 From: mayx Date: Sun, 8 Dec 2024 15:07:29 +0000 Subject: [PATCH] Update 2024-12-08-simulator.md --- _posts/2024-12-08-simulator.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/_posts/2024-12-08-simulator.md b/_posts/2024-12-08-simulator.md index 3053e14..ae4344a 100644 --- a/_posts/2024-12-08-simulator.md +++ b/_posts/2024-12-08-simulator.md @@ -7,12 +7,12 @@ tags: [模拟器, Windows, Android, Linux, macOS] 在一个系统模拟另一个系统有多困难呢? # 起因 - 前段时间我在网上和人聊天的时候谈到了安卓模拟器,在我看来所有除了Linux上可以[使用Waydroid原生运行Android](/2023/12/24/android.html)之外,其他系统只能通过虚拟机的方式运行,毕竟如果能在完全不相干的系统上运行安卓我感觉还是挺不可思议的。不过随后就被打脸了🤣,网易在前几年出过一个包含“星云引擎”的安卓模拟器——[MuMu Nebula](https://www.mumuplayer.com/mumu-nebula.html),据说这个模拟器是不需要使用虚拟化技术的,所以这次我来探索一下各种模拟器。 + 前段时间我在网上和人聊天的时候谈到了安卓模拟器,在我看来所有除了Linux上可以使用例如Waydroid的[容器原生运行Android](/2023/12/24/android.html)之外,其他系统只能通过虚拟机的方式运行,毕竟不用虚拟机能在完全不相干的系统上运行安卓我感觉还是挺不可思议的。不过随后就被打脸了🤣,网易在前几年出过一个包含“星云引擎”的安卓模拟器——[MuMu Nebula](https://www.mumuplayer.com/mumu-nebula.html),据说这个模拟器是不需要使用虚拟化技术的。所以这次我打算探索一下这个安卓模拟器和它类似的模拟器。 # 关于虚拟机和模拟器的区别 - 在我看来,模拟硬件的就是虚拟机,模拟软件的就是模拟器。不过到现在这些也挺难分的,好多融合的也挺多。比如QEMU+KVM使用硬件虚拟化显然是虚拟机,QEMU System模式使用二进制翻译的方式模拟硬件也是虚拟机,但是QEMU User模式使用了当前系统的资源,没有模拟硬件,所以是模拟器(不过也有叫仿真器的?)……不过也许不是这样?模拟指令集也算模拟了一个CPU吧,像Java虚拟机似乎就是这样,只是单模拟一个CPU叫虚拟机又感觉不太对……并且macOS的Rosetta 2甚至还有硬件加速(硬件模拟x86的内存一致性模型?),还有用了AOT已经翻译完的再执行就不算模拟器了吧……另外还有什么容器之类的……搞得这些概念很难分清。 - 那至少使用了硬件虚拟化技术的肯定是虚拟机吧?其实这也一定,现在的Windows有个叫基于虚拟化的安全性使用了硬件虚拟化技术,但是不能说明现在的Windows是运行在虚拟机上吧?这些大公司搞的乱七八糟的黑科技把我都绕晕了😂。 - 总之接下来我要说的模拟器是一定基于某个系统,然后模拟另一个系统的环境,不使用硬件虚拟化技术,而且翻译的不是「指令集」,而是「系统调用」,这样感觉才算我心目中的模拟器🫠,也就是OS模拟器。 + 在我看来,模拟硬件的就是虚拟机,模拟软件的就是模拟器。不过现在这些挺难分的,融合的也挺多。比如QEMU+KVM使用硬件虚拟化显然是虚拟机,QEMU System模式使用二进制翻译的方式模拟硬件也是虚拟机,但是QEMU User模式使用了当前系统的资源,没有模拟硬件,所以应该是模拟器(不过也有叫仿真器的?)……不过也许不是这样?模拟指令集也算虚拟了一个CPU吧,像Java虚拟机似乎就是这样,只是单模拟一个CPU叫虚拟机又感觉不太对……并且macOS的Rosetta 2甚至还有硬件加速(硬件模拟x86的内存一致性模型?),还有用了AOT已经翻译完的程序再执行那应该不算模拟器吧……另外还有什么容器之类的……搞得这些概念很难分清。 + 那至少使用了硬件虚拟化技术的肯定是虚拟机吧?其实这也不一定,现在的Windows有个叫“基于虚拟化的安全性”的功能使用了硬件虚拟化技术,但是不能说现在的Windows是运行在虚拟机上吧?这些大公司搞的乱七八糟的黑科技把我都绕晕了😂。 + 总之接下来我要说的模拟器是一定基于某个系统,然后模拟另一个系统的环境,不使用硬件虚拟化技术,而且翻译的不是「指令集」,而是「系统调用」,这样感觉才算我心目中的模拟器🫠,也就是OS模拟器。 # 各种各样的OS模拟器 ## MuMu Nebula(Windows模拟Android) @@ -28,4 +28,5 @@ tags: [模拟器, Windows, Android, Linux, macOS] 这种倒是挺多的,像DOSBox,还有GBA模拟器之类的,我以前在手机上就试过[用DOSBox Turbo安装Windows3.2](/2020/09/27/vm.html#%E6%89%8B%E6%9C%BA%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%BD%BF%E7%94%A8%E5%8F%B2),也用GBA模拟器玩过宝可梦,不过这些其实不算我心目中的模拟器😆,因为它们不是翻译的系统调用,而是模拟了一块古董CPU,然后装了对应的系统能直接用,只不过大家都说这类算模拟器所以提了一下。 # 感想 - 看起来模拟器相比虚拟机还是有很多优势啊,省**内存**这一优势还是很重要的,虽然现在内存倒是不贵(苹果内存除外),但是消耗本不必要的内存就是浪费吧。只不过这种东西对技术要求果然还是太高了,实在是费力不讨好,所以没有企业愿意投入精力来做,所以就都凉了吧……不过Wine倒是活得不错,大概是因为Windows的软件太多了吧……生态真的很重要啊。 \ No newline at end of file + 看起来模拟器相比虚拟机还是有很多优势啊,省**内存**这一优势还是很重要的,虽然现在内存倒是不贵 ~~(苹果内存除外🤣)~~ ,但是消耗本不必要的内存就是浪费吧。只不过这种东西对技术要求果然还是太高了,实在是费力不讨好,所以没有企业愿意投入精力来做,所以就都凉了啊…… + 不过Wine倒是活得不错,大概是因为Windows的软件太多了吧……生态很重要啊。 \ No newline at end of file