Очевидно, они создают среду linux для запуска приложений linux в windows. Но,

  • какие методы используются для этого?
  • Есть ли какие-то особые механизмы?

1 ответ1

2

Эмуляторов Linux не существует

  • Если вы говорите о Cygwin, то они буквально переопределяют все системные вызовы Unix в терминах вызовов Windows API в специальном файле DLL пользовательского пространства. Программы, скомпилированные для среды Cygwin, поэтому не могут работать независимо в Windows

    Cygwin состоит из двух частей: динамически подключаемой библиотеки (DLL) в качестве уровня совместимости API в форме стандартной библиотеки C, обеспечивающей значительную часть функциональности API POSIX, и обширной коллекции программных инструментов и приложений, предоставляющих Unix -наглядный внешний вид

    ...

    Cygwin состоит из библиотеки, которая реализует API системных вызовов POSIX в терминах системных вызовов Win32, инструментария разработки GNU (включая GCC и GDB) для разработки программного обеспечения и запуска большого числа прикладных программ, эквивалентных программам в системах Unix.

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

  • Если вы говорите о MSYS/MSYS2 или MinGW, то это не симулятор в любом смысле. Программы компилируются в собственные двоичные файлы Windows с использованием библиотеки Microsoft C и могут работать без какой-либо специальной среды

    Хотя и Cygwin, и MinGW могут использоваться для переноса программного обеспечения Unix на Windows, у них разные подходы: Cygwin стремится предоставить полный уровень POSIX, включающий полную реализацию всех основных системных вызовов и библиотек Unix. Совместимость считается более высоким приоритетом, чем производительность. С другой стороны, приоритетами MinGW являются простота и производительность. Как таковой, он не предоставляет некоторые API POSIX, которые не могут быть легко реализованы с помощью Windows API, такие как fork() , mmap() и ioctl() . Приложения, написанные с использованием кроссплатформенной библиотеки, которая сама была портирована на MinGW, например SDL, wxWidgets, Qt или GTK+, обычно компилируются в 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
    • Процессы Pico, в которых размещается немодифицированный пользовательский режим Linux (например, /bin /bash)

    Блок-схема

    WSL выполняет неизмененные двоичные файлы Linux ELF64 путем виртуализации интерфейса ядра Linux поверх ядра Windows NT. Один из предоставляемых им интерфейсов ядра - это системные вызовы (системные вызовы). Системный вызов - это сервис, предоставляемый ядром, который можно вызвать из пользовательского режима. И ядро Linux, и ядро Windows NT предоставляют несколько сотен системных вызовов для пользовательского режима, но они имеют разную семантику и, как правило, не являются напрямую совместимыми. Например, ядро Linux включает в себя такие вещи, как fork , open и kill тогда как ядро Windows NT имеет сопоставимые NtCreateProcess , NtOpenFile и NtTerminateProcess .

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

В прошлом были также подсистема Microsoft POSIX и службы Windows для UNIX, но они не предназначены для работы с Linux. Для получения дополнительной информации прочтите Поддержка POSIX и UNIX в Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .