Я предполагаю, что вы имеете в виду такие приложения, как 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.
Если вы говорите о 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.
Ответы:
Там нет такого понятия , как эмуляторы Linux
Если вы говорите о Cygwin, то они буквально переопределяют все системные вызовы Unix в терминах вызовов Windows API в специальном файле DLL пользовательского пространства. Программы, скомпилированные для среды Cygwin, поэтому не могут работать независимо в Windows
Если вы говорите о MSYS / MSYS2 или MinGW, то это не симулятор в любом смысле. Программы компилируются в собственные двоичные файлы Windows с использованием библиотеки Microsoft C и могут работать без какой-либо специальной среды
В Windows 10 MS представила windows-subsystem-for-linux, которая на самом деле является симулятором Linux, а не эмулятором, точно так же, как Wine не является эмулятором . У них есть специальный компонент ядра для обработки системных вызовов Linux и преобразования их в версию Windows для запуска собственных двоичных файлов Linux ELF без перекомпиляции.
В прошлом были также подсистема Microsoft POSIX и службы Windows для UNIX, но они не предназначены для работы с Linux. Для получения дополнительной информации прочтите Поддержка POSIX и UNIX в Windows.
источник