
В Bash в Ubuntu в Windows позволяет запускать собственные двоичные файлы Linux ELF64 в Windows через подсистему Windows для Linux (WSL). Хотя многие люди были шокированы объявлением Bash on Ubuntu, стоит упомянуть, что он открывает новые возможности для совместимости между различными операционными системами. Microsoft делает еще один шаг вперед и показывает, как работает ее WSL, чтобы мы могли лучше понять, как две системы взаимодействуют друг с другом.
WSL был создан командой Microsoft Windows Kernel и содержит компоненты как пользовательского режима, так и режима ядра. В частности, система состоит из:
- служба диспетчера сеансов пользовательского режима, обрабатывающая жизненный цикл экземпляра Linux
- Драйверы поставщика Pico (lxss.sys, lxcore.sys), роль которых заключается в эмуляции ядра Linux путем перевода системных вызовов Linux.
- Процессы Pico, размещающие немодифицированный пользовательский режим Linux (например, / bin / bash).
Связь между тремя компонентами описывается следующим образом:
Это пространство между двоичными файлами Linux пользовательского режима и компонентами ядра Windows, где происходит волшебство. Помещая немодифицированные двоичные файлы Linux в процессы Pico, мы позволяем направлять системные вызовы Linux в ядро Windows. Драйверы lxss.sys и lxcore.sys переводят системные вызовы Linux в API NT и эмулируют ядро Linux.
Основная задача в этом процессе - заставить две системы работать вместе:
WSL выполняет немодифицированные двоичные файлы Linux ELF64 путем виртуализации интерфейса ядра Linux поверх ядра Windows NT. Один из интерфейсов ядра, который он предоставляет, - это системные вызовы (системные вызовы). Системный вызов - это служба, предоставляемая ядром, которую можно вызывать из пользовательского режима. И ядро Linux, и ядро Windows NT предоставляют несколько сотен системных вызовов пользовательскому режиму, но они имеют разную семантику и, как правило, не совместимы напрямую. Например, ядро Linux включает такие вещи, как fork, open и kill, в то время как ядро Windows NT имеет сопоставимые NtCreateProcess, NtOpenFile и NtTerminateProcess.
Подсистема Windows для Linux включает драйверы режима ядра (lxss.sys и lxcore.sys), которые отвечают за обработку запросов системных вызовов Linux в координации с ядром Windows NT. Драйверы не содержат кода ядра Linux, а представляют собой чистую реализацию Linux-совместимых интерфейсов ядра. В собственном Linux, когда системный вызов выполняется из исполняемого файла пользовательского режима, он обрабатывается ядром Linux. В WSL, когда системный вызов выполняется из того же исполняемого файла, ядро Windows NT перенаправляет запрос на lxcore.sys. Там, где это возможно, lxcore.sys преобразует системный вызов Linux в эквивалентный вызов Windows NT, который, в свою очередь, выполняет тяжелую работу.
Принимая во внимание интерес Microsoft к платформам с открытым исходным кодом, многие люди задавались вопросом: технологический гигант должен приобрести крупные компании, ориентированные на Linux, такие как Canonical, компания, стоящая за операционной системой Ubuntu. Хотя Microsoft и Canonical сотрудничали в области программного обеспечения с открытым исходным кодом, никто не комментировал эту возможность.
Если вам интересно, как развивается взаимодействие Linux и Windows, перейти в блог Microsoft. Команда пообещала, что последуют и другие сообщения в блоге на эту тему.
СВЯЗАННЫЕ ИСТОРИИ, КОТОРЫЕ НЕОБХОДИМО ВЫБРАТЬ:
- Пользователи Linux сообщают о проблемах «Наушники перестали работать в Windows 8.1»
- Microsoft и Canonical представляют Bash в Windows 10 на выставке Build 2016
- Мюнхен начинает распространять бесплатные компакт-диски Ubuntu для пользователей Windows XP