Очевидно, они создали среду Linux для приложений Linux для запуска в Windows. Но,
- Какие методы используются для этого?
- Существуют ли какие-либо специальные механизмы?
Очевидно, они создали среду 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.