Как эмуляторы Linux работают в Windows?

0

Очевидно, они создали среду Linux для приложений Linux для запуска в Windows. Но,

  • Какие методы используются для этого?
  • Существуют ли какие-либо специальные механизмы?
arulappan
источник
Я предполагаю, что вы имеете в виду такие приложения, как MSYS / MinGW / Cygwin?
Кейси Кубалл
Добро пожаловать в Супер пользователя. Пожалуйста, найдите время, чтобы прочитать FAQ . В частности, обратите внимание, что вопросы, содержащие детали и детали, с большей вероятностью получат хорошие ответы. Вы можете отредактировать свой вопрос, чтобы предоставить дополнительную информацию о том, что вы хотели бы знать.
Майкл Хэмптон
О каких именно эмуляторах Linux вы говорите? С какой реальной проблемой вы сталкиваетесь?
Slhck
Я не использую никаких эмуляторов Linux. Мне просто интересно узнать, как они этого добиваются? Потому что в Linux и Windows используются разные форматы исполняемых файлов. Должна быть какая-то базовая или общая техника, используемая всеми эмуляторами, вот и все. Если нет, то чем они отличаются друг от друга?
arulappan
Вы сталкиваетесь с определенной проблемой? Этот сайт предназначен для вопросов и ответов, касающихся вопросов, которые на самом деле возникают у пользователей, а не обсуждений или теорий о том, как все работает.
MaQleod

Ответы:

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.

phuclv
источник