Очевидно, они создают среду linux для запуска приложений linux в windows. Но,
- какие методы используются для этого?
- Есть ли какие-то особые механизмы?
Эмуляторов Linux не существует
Если вы говорите о Cygwin, то они буквально переопределяют все системные вызовы Unix в терминах вызовов Windows API в специальном файле DLL пользовательского пространства. Программы, скомпилированные для среды Cygwin, поэтому не могут работать независимо в Windows
Cygwin состоит из двух частей: динамически подключаемой библиотеки (DLL) в качестве уровня совместимости API в форме стандартной библиотеки C, обеспечивающей значительную часть функциональности API POSIX, и обширной коллекции программных инструментов и приложений, предоставляющих Unix -наглядный внешний вид
...
Cygwin состоит из библиотеки, которая реализует API системных вызовов POSIX в терминах системных вызовов Win32, инструментария разработки GNU (включая GCC и GDB) для разработки программного обеспечения и запуска большого числа прикладных программ, эквивалентных программам в системах Unix.
Если вы говорите о 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.
В Windows 10 MS представила windows-subsystem-for-linux, которая действительно является симулятором 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.