Linux 模拟器如何在 Windows 中工作?

Linux 模拟器如何在 Windows 中工作?

显然,他们创建了一个 Linux 环境,以便 Linux 应用程序在 Windows 中运行。但是,

  • 为此使用了什么样的技术?
  • 是否遵循任何特殊机制?

答案1

不存在这样的事情Linux 模拟器

  • 如果你谈论的是赛格威然后他们实际上重新实现所有Unix系统调用就 Windows API 调用而言,它位于一个特殊的用户空间 DLL 文件中。因此,为 Cygwin 环境编译的程序无法在 Windows 中独立运行

    Cygwin 由两部分组成:一个动态链接库 (DLL),以 C 标准库的形式作为 API 兼容层,提供大部分 POSIX API 功能;以及大量提供类 Unix 外观和感觉的软件工具和应用程序集合。

    ...

    Cygwin 包含一个按照 Win32 系统调用实现 POSIX 系统调用 API 的库、一个 GNU 开发工具链(包括 GCC 和 GDB),可用于软件开发,并运行大量与 Unix 系统相当的应用程序

    https://en.wikipedia.org/wiki/Cygwin

  • 如果你谈论的是 MSYS/管理系统2 家庭或 MinGW,那么它们在任何意义上都不是模拟器。程序被编译成原生 Windows 二进制文件使用 Microsoft C 库,无需任何特殊环境即可运行。

    尽管 Cygwin 和 MinGW 都可用于将 Unix 软件移植到 Windows,但它们的方法不同:Cygwin 旨在提供一个完整的 POSIX 层,其中包含所有主要 Unix 系统调用和库的完整实现。兼容性被认为比性能更重要。另一方面,MinGW 的优先事项是简单性和性能。因此,它不提供某些无法使用 Windows API 轻松实现的 POSIX API,例如 和fork()。使用已移植到 MinGW 的跨平台库(例如 SDL、wxWidgets、Qt 或 GTK+)编写的mmap()应用ioctl()程序在 MinGW 中的编译通常与在 Cygwin 中一样容易。

    https://en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin

  • 在 Windows 10 MS 中引入这实际上是一个 Linux模拟器而不是模拟器,就像Wine 不是模拟器. 他们有一个特殊的内核组件来处理 Linux 系统调用并将其转换为 Windows 版本,以便无需重新编译即可运行原生 Linux ELF 二进制文件

    WSL 是一组组件,可使本机 Linux ELF64 二进制文件在 Windows 上运行。它包含用户模式和内核模式组件。它主要由以下部分组成:

    • 处理 Linux 实例生命周期的用户模式会话管理器服务
    • Pico 提供程序驱动程序(lxss.sys、lxcore.sys)通过转换 Linux 系统调用来模拟 Linux 内核
    • 承载未修改的用户模式 ​​Linux 的 Pico 进程(例如 /bin/bash)

    块状图

    WSL 通过在 Windows NT 内核之上虚拟化 Linux 内核接口来执行未修改的 Linux ELF64 二进制文件。它公开的内核接口之一是系统调用 (syscalls)。系统调用是内核提供的一项服务,可以从用户模式调用。Linux 内核和 Windows NT 内核都向用户模式公开了数百个系统调用,但它们的语义不同,并且通常不直接兼容。例如,Linux 内核包括forkopen和 等内容,kill而 Windows NT 内核具有可比的NtCreateProcessNtOpenFileNtTerminateProcess

    https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

    请注意,它的后继者WSL2(2019 年发布)完全不同。它不再是一个模拟器,而是在真正的 Linux VM 中运行

过去也有Microsoft POSIX 子系统UNIX 的 Windows 服务但它们不适合运行 Linux。有关更多信息,请阅读

相关内容