Глава 1. Приступая к WSL
Содержание
Windows Subsystem for Linux (WSL) это не самая первая подсистема которая когда либо существовала а операционной системе Windows; напротив, это более совершенный продукт многолетних исследований в разработке изолированных подсистем для изолированной программной среды приложений, которые выделены в песочнице от самой операционной системы хоста.
Прежде чем мы поглубже окунёмся в установку, настройку и работу с Подсистемами Windows для Linux, давайте вначале взглянем на то, как всё это запускается и затем быстро пройдёмся по некоторым ключевым словам и определениям, которые приведут нас к той же самой странице и помогут разобраться во всех главах этой книги.
Введение в WSL этой главы, несомненно, поможет, но не стесняйтесь, если пожелаете, пропустить её, если хотите сразу же перейти к настройке и практической работе.
Начиная с самых первых выпусков Microsoft Windows NT, эта операционная система разрабатывалась для сосуществования одной или более подсистем внутри самой операционной системы, которые были бы независимыми реализациями внутри своего ядра. Это позволяет нам запускать 32- битные приложения внутри 64- битной операционной системы Windows в её подсистеме Win32 и поддерживать прочие подсистемы, такие как POSIX и OS/2.
Эти подсистемы доступны через имеющийся API, который предлагается для работы их приложений в них и когда эти приложения выполняют некий вызов такого API, он транслируется в подходящий системный вызов системы Windows NT для снабжения запрошенного действия. Однако, со временем, эти первоначальные подсистемы замкнулись в себе и исследования привели к разработке и расширению их возможностей в Windows Subsystem for Linux.
Первоначальное понятие, которое привело к Подсистеме Windows для Linux возникло из проекта с названием "Проект Astoria", некого универсального инструментария моста платформы Windows, который позволил бы разработчикам собирать прикладные приложения Windows для телефонов повторно применяя свой код Android или запускать естественные приложения Android в Windows. Это сделало возможным допускать исполнение прикладных приложений Android в некой среде эмуляции с минимальными изменениями и выполнять доступ к API платформы Microsoft. Однако, 25 февраля 2016 Microsoft выпустил официальный анаонс о прекращении поддержки "Проект Astoria" и был выдвинут аргумент, что подобный эмулятор будет в конечном счёте избыточным для встроенного инструментария Objective-C. Позднее, идеи и исследования "Проект Astoria" и другого исследовательского проекта, известного как "Проект Drawbridge" (оба позднее описываются в этой главе), были преобразованы в службу совместимости с названием Windows Subsystem for Linux версии 1. Microsoft выпустила первоначальную версию для Подсистемы Windows для Linux, известную как WSL1, в том же самом 2016 году.
Подсистема Windows для Linux это некий новый уровень функциональных возможностей совместимости операционной системы Windows, который делает возможным запуск инструментов командной строки Linux и исполняемые файлы ELF64 естественным образом в Windows без изменений, запуская полную виртуальную машину Linux. Подсистема Windows для Linux была разработана в качестве инструмента для разработчиков, но она также набирает обороты и среди системных администраторов и в сфере кибер безопасности.
WSL далеко выходит за рамки просто "bash" оболочки Linux в Windows. Фактически, это целый уровень совместимости для запуска среды, которая выглядит и ведёт себя точно так же как операционная система Linux. Это сделало возможным для пользователей Windows запускать распространённые бесплатные программы командной строки, такие как "grep", "sed" и "awk" либо любых прочих исполняемых файлов ELF64 из дистрибутива по выбору Linux, который можно выгружать из Microsoft Store, обычно бесплатно. Это означает, что теперь мы можем применять инструменты Linux, такие как bash, vim и Emacs для пользователей с опытом Linux в операционных системах Windows без применения совместимых с POSIX сторонних разработчиков, таких как Cygwin.
Microsoft определённо раздвигает границы исследования операционных систем с помощью первоначальной версии WSL, а именно, версии 1, или wsl.exe. Теперь речь больше не идёт об операционной системе или сторонних пользователях Windows или Linux, а в основном речь ид1т о предоставлении конечному пользователю наилучших инструментов из присутствующих на рынкедля решения их задач и создания приложений независимо от лежащей в основе платформы.
Давайте предположим что вы являетесь системным администратором Windows или разработчиком Windows и вы намерены
посредством какой-то статьи в интернете по установке веб сервер или чего-то ещё и внезапно наталкиваетесь на
приглашение в виде знака доллара ($
) для оболочки bash в этих инструкциях.
Тут же происходит следующий внутренний монолог:
"О нет! Я не пользуюсь этим; этого нет в моей системе. Скорее всего, мне придётся раскрутить какую-то виртуальную машину и запустить в ней Linux, прежде чем я смогу следовать этим инструкциям статьи с практическими рекомендациями. Но это много работу. Ну её!"
Это одна из тех проблем, которая послужила источником подсистемы Windows для Linux. Проще говоря, возникла потребность предоставления разработчикам и системным администраторам возможности беспрепятственно запускать исполняемые файлы Linux, такие как bash, естественным образом в Windows. Это может избавить от беспокойства, хлопот и затрат времени, тратящихся на запуск виртуальной машины и установку операционной системы Linux для выполнения неких базовых задач.
Перечисляемые ниже пункты выделяют те пробелы и области, которые заполняются подсистемой Windows для Linux.
-
Потребление ресурсов - Виртуальные машины сослужили нам хорошую службу и они никуда не денутся, но несомненно имеются определённые накладные расходы ресурсов с точки зрения памяти, ЦПУ и систем хранения, которые уходят под них, тогда как в подсистеме Windows для Linux потребление ресурсов в основном хосте операционной системы минимальны. Честно говоря, нет никакого смысла запускать виртуальную машину исключительно для проверки нескольких команд Linux, когда у вас имеется оболочка bash, работающая внутри подсистемы Windows для Linux.
-
Доступ к инструментам Linux - Запуск исполняемых файлов в операционных системах Windows открывают целиком новое окно возможностей для пользователей Windows в мир Linux, делая доступными для них большинство мощных приложений Linux.
-
Кросс- платформенная разработка - Разработчики и системные администраторы могут применять подсистему Windows для Linux в работе с кросс- платформенными продуктами и инструментами, например ядром .Net. При этом я запросто могу протестировать некий проект в Windows, а следом в подсистеме Windows для Linux, даже не раскручивая виртуальную машину Linux.
-
Правильные инструменты для правильных заданий - Основная идея состоит в применении наилучших инструментов вне зависимости от лежащей в основе платформы. Это означает, что если мне комфортно развёртывать веб сервер nginx в Linux, тогда я могу сделать это в своей операционной системе Windows внутри некой подсистемы, которая допускает запуск nginx так, как будто вы действительно работаете на машине Linux.
-
Один и тот же опыт пользователя - WSL предлагает не просто интеграцию; она представляет разработчикам Linux бесшовную практику. В большинстве случаев разработчик даже не осознаёт, что он работает не в операционной системе Linux, а в неком слое трансляции, запускающем естественные исполняемые файлы Linux поверх своей операционной системы Windows.
-
Изоляция безопасности - Поскольку WSL является подсистемой, те приложения, которые запускаются в ней на самом деле исполняются в неком безопасном, изолированном контейнере, который не может быть скомпрометирован прочими приложениями в своей операционной системе хоста.
Теперь давайте взглянем на собственно архитектуру и некоторые внутренние компоненты WSL, которые превращают эту работу в бесшовную.
WSL это набор программных компонентов и драйверов, реализованных Microsoft, которые действуют в качестве транслирующего уровня между пространством пользователей Linux и лежащего в основе ядра Windows NT для трансляции системных вызовов, виртуальных файлов и самой файловой системы. WSL составляется как из компонентов режима пользователя, так и режима ядра и эта служба трансляции от пространства пользователя Linux в ядро Windows NT эмулируют ядро Linux, так что приложения Linux даже не представляют что они не взаимодействуют с ядром Linux, а вместо него выступает ядро Windows NT. Давайте попробуем разобраться с этим на Рисунке 1-1.
Когда “bash.exe” запускается в операционной системе хоста Windows, он следует далее и запускает некий процесс
Linux: /bin/bash
в неком экземпляре Linux, который придерживается структуры
данных для отслеживания всех процессов, потоков и состояния времени исполнения. “LX Session Manager Service”
(Служба диспетчера сеанса LX) обрабатывает весь жизненный цикл подобных экземпляров Linux. Основная роль этой
службы состоит в том,что она действует в качестве некого брокера для самого драйвера подсистемы Linux и эта
служба также способствует в случае установки и деинсталляции порядку синхронизации операций чтобы позволять за раз
выполнять эти операции только одному процессу.
В 2011 команда Microsoft Research приступила к проекту “Drawbridge”, который позднее ввёл некое понятие, носящее
название процесса PICO, который был реализован в Windows. Процесс PICO это изолирующий контейнер на основе некого
процесса с небольшой поверхностью API ядра, которая позволяет подсистеме удерживать внутри себя исполняемый файлы
Linux. Когда вы выполняете любые действия с этими исполняемыми файлами Linux, сам контейнер или соответствующий
процесс PICO в сочетании с lxss.sys
и
lxcore.sys
, также именуемыми драйверами поставщика PICO, выполняют
необходимую трансляцию системных вызовов Linux в API NT для эмуляции ядра Linux. Проще говоря, поставщики PICO
выпускают эквивалентные системные вызовы в установленное ядро Windows NT для системных вызовов Linux и наоборот.
Как показано на Рисунке 1-2, эти процессы PICO являются
урезанной версией обычных процессов хоста с изолированным адресным пространством, в котором не отображается исполняемая
библиотека ntdll.dll
режима пользователя и не создаётся в качестве
дифференциатора Process Environment Block (PEB, блок среды процесса) , дабы хост понимал, что такие процессы управляются
этим хостом не активно. Сам хост по- прежнему предоставляет некую лежащую в основе поддержку ОС для этих процессов, такую
как планирование потоков, управление памятью и тому подобное.
Драйверы режима ядра не содержат никакого кода ядра Linux, поэтому когда из некого исполняемого файла выполняется
системный вызов Linux, тогда установленное ядро Windows NT направляет соответствующий запрос в
lxcore.sys
, который осуществляет всё тяжёлой поднятие трансляции
соответствующих системных вызовов Linux в эквивалентные вызовы Windows. Тем не менее, имеются некоторые системные
вызовы Linux, такие как fork()
, которые не имеют эквивалентных вызовов в
Windows NT. По этой причине lxcore.sys
приходится копировать и
создавать некий новый процесс с правильными данными применяя внутренние API ядра Windows NT для обеспечения подобных
запросов из подсистемы Windows для Linux.
В точности как и все прочие программные средства, подсистема Windows для Linux версии 1 также обладает ограничениями и недостатками и мы обсудим некоторые из них в приводимом ниже перечислении. Честно говоря, WSL постоянно развивающийся продукт и некоторые из этих ограничений будут смягчены со временем по мере эволюции этого продукта:
-
Linux является быстро развивающейся операционной системой с открытым исходным кодом и время от времени появляются новые выпуски, однако реализуемая в WSL служба трансляции полностью управляется Microsoft и им приходится обновлять её при выходе нового выпуска. Это привносит некую задержку в новые функциональные возможности текущего выпуска Linux до тех пор, пока Microsoft не приступит к их реализации.
-
Ядра Windows NT и Linux обладают очень отличающимися файловыми системами, моделями полномочий и управлением памятью, и хотя всё работает в наилучшем случае в подсистеме Windows для Linux, существует ряд моментов, которые WSL не способен транслировать в ядро Windows NT по той причине, что в наихудших случаях они не поддерживаются самим ядром Windows NT.
-
WSL v1 не способна запускать всё программное обеспечение Linux, к примеру, 32- битные исполняемые файлы, и вы можете столкнуться с программным обеспечением, которое не работает в WSL, ибо оно требует определённых служб ядра Linux, которые пока не реализованы Microsoft. Вот ссылка на перечень поддерживаемых сообществом программ, которые запускаются и не запускаются в WSL: https://github.com/ethanhs/WSL-Programs. WSL решает большинство из этих проблем через запуск ядра Linux в облегчённой служебной виртуальной машине при помощи Hyper-V.
Замечание Вышеупомянутый список поддерживаемого и не поддерживаемого программного обеспечения сопровождается сообществом пользователей подсистемы Windows для Linux и независимыми разработчиками, а не Microsoft.
-
Подсистема Windows для Linux поддерживает приложения с графическим интерфейсом пользователя (GUI, graphical user interface) и полноценный рабочий стол за счёт установки сред рабочего стола Linux с применением Xfce и xRDP, однако по прежнему не имеет аудио поддержки и обеспечивает низкую производительность графики. Это может быть исправлено в последующих выпусках WSL1, если продолжится какая- то активная разработка WSL1. Более того, Microsoft теперь бросает все дрова в одном направлении за WSL2, который нацелен на те же задачи с применением иного подхода и многие из таких проблем будут исправлены автоматически.
Замечание WSL2 поддерживается только в Windows 10, версии 2004 (сборка 19041), и вам придётся присоединиться к “windows insider program” и выбрать кольцо “Release Preview”. Это может быть в целом доступно в конце мая или к моменту выпуска данной книги.
-
Microsoft предполагает, что подсистема Windows для Linux предназначена для разработки приложений и улучшения удобства работы разработчиков, а не для рабочих мест и производственных серверов, что исключает большое число вариантов примения и приложений.
-
Внедрение нового формата исполняемого файла в Microsoft Windows совместно с очень большим числом новых приложений Linux, представляет собой огромную проблему для поставщиков программного обеспечения в отношении обеспечения безопасности терминалов. В 2017 году компания Check Point, занимающаяся безопасностю термиалов, опубликовала исследование, в котором они отчеканили термин bashware (bash + malware, bash + вредоносное ПО), который применяет и эксплуатирует механизмы, лежащие в основе WSL для запуска исполняемых файлов ELF64 в Windows.
Вот цитированное выше исследование.
В этом изыскании исследователи пытаются подчеркнуть, что они смогли запускать вредоносные программы, которые атакуют Windows из его подсистемы Linux, но, по правде говоря, Microsoft уже работает на предоставлением совместимости межсетевого экрана и антивирусной защиты в WSL.
В этом разделе мы выполним обзор некоторых ключевых терминов и важных понятий, которые составляют WSL. Таблица 1-1 предоставляет некоторые сокращения, которыми мы будем пользоваться в последующих главах этой книги.
Сокращение | Пояснение |
---|---|
|
New Technology |
|
Пакет распространения, дистрибутив |
|
Операционная система |
|
Виртуальная машина |
|
Подсистема Windows дляLinux |
|
executable and Linking Format, формат исполняемых и компонуемых модудей |
|
Portable Executable, формат исполняемого кода Win32 в Windows |
|
Application Programming Interface, интерфейс прикладных программ |
|
Process Environment Block, блок операционной среды процесса |
Теперь мы быстро пройдёмся по некоторым существенным ключевым словам, понятиям и определениям чтобы загрузить ваше осознание подсистемы Windows для Linux и выстроить для вас некую основу, прежде чем мы приступим к обучению. Если вы не являетесь пользователем, Linux, вероятно вы не знакомы с некоторыми из этих понятий, и, если вы применяете Windows, это ускорит ваше обучение.
Distro это сокращение для дистрибутива Linux, который представляет собой просто некую операционную систему, состоящую из коллекции программных пакетов с открытым исходным кодом, инструментов и библиотек. Пользователи Linux обычно могут выгружать и устанавливать дистрибутив Linux по своему выбору из широкого разнообразия находящихся в интернете доступных дистрибутивов и именно таким образом они получают свои операционные системы. Дистрибутивы Linux для WSL могут быть выгружены дибо из Microsoft Store, либо вручною, что мы опишем позднее в этой книге. Такие дистрибутивы поставляются третьими партнёрами, не Microsoft. В то время как существует более 500 доступных в настоящее время дистрибутивов Linux и большинство из них к тому же активно разрабатываются, имеется и ряд коммерческих дистрибутивов, таких как Fedora, openSUSE и Ubuntu. Ubuntu, фактически, один из наиболее популярных настольных дистрибутивов Linux. Более того, некоторые дистрибутивы Linux полностью продвигаются сообществом, например такие как Debian, Slackware, Gentoo и Arch Linux.
С самого своего начала Windows NT обладает историей, позволяющей подобно подсистеме Win32 сосуществовать со своим ядром NT. В контексте самой операционной системы, некая подсистема это автономная система внутри более крупного программного обеспечения, например, операционной системы.
В Windows NT такие подсистемы действуют как некий интерфейс между приложениями режима пользователя и функциями ядра его операционной системы, причём существует более одной подсистемы, которые реализуют совершенно различные наборы API для поддержки приложений, написанных для многих различных типов операционных систем. В операционных системах Windows 10 имеется лишь подсистема Win32, которая способна запускать приложения Win32, в то время как подсистема OS/2 и подсистема POSIX более не присутствуют и были прекращены в сопровождении.
Современные операционные системы собираются из множества уровней, причём ядро является самым центральным компонентом некой операционной системы, что демонстрируется на Рисунке 1-3. Своё название ядро получило просто потому, что также как семя внутри твёрдой скорлупы, ядро Linux присутствует внутри самой операционной системы Linux в качестве центрального компонента. Это ядро в первую очередь действует как некий интерфейс между имеющимися приложениями пользователя и собственно оборудованием.
На Рисунке 1-3, самое внешнее кольцо с "зелёным" цветом представляет собой наименее привилегированное; что означает, что к приложениям в Кольце 3 меньше всего доверия и им потребуются более высокие полномочия для выполнения критических действий, в то время как ядро является самым внутренним кольцом с "красным" цветом, представляющим наиболее привилегированное, или наиболее доверенное, то есть Кольцо 0.
Основной целью этого является обеспечение программно- аппаратного взаимодействия и выполнения прочих операций нижнего уровня, таких как:
-
Управления процессами
-
Обработку прерываний
-
Управление памятью
-
Управление устройствами
-
Взаимодествие ввода/ вывода
-
Файловой системы
При запуске компьютера его начальный загрузчик сначала загружает некое ядро в основную оперативную память {Прим. пер.: подробнее в нашем переводе Практика загрузки. Изучение процесса загрузки Linux, Windows и Unix Йогеша Бабара}. Важно иметь небольшое ядро, так как оно остаётся в памяти для выполнения всех вышеупоминаемых существенных служб и оно должно исполняться в защищённом режиме в памяти с тем, чтобы оно не перекрывалось прочими исполняемыми программами, что имело бы катастрофические последствия.
Проще говоря, программы и инструкции, исполняемые в режиме ядра обладают полным и неограниченным доступом к лежащему в основе оборудованию. Как правило, режим ядра зарезервирован для наиболее важных функций операционной системы нижнего уровня, когда любые сбои могут иметь катастрофические последствия и способны привести к нарушению работы всей системы целиком. Все пользовательские процессы будут выполняться в режиме пользователя, пока они не получают системный вызов. Всякий системный вызов исполняется в режиме ядра, в котором вырабатывается системное прерывание, а бит режима устанавливается в ноль (0). Когла это выполнение завершено, вырабатывается другое системное прерывание для установки бита режима в единицу (1). Рисунок 1-4 показывает взаимосвязь между режимом ядра и режимом пользователя.
Большая часть исполняемых в вычислительной системе программ и кода запускается в режиме пользователя, который не обладает прямым доступом к оборудованию системныи может выполнять доступ к ресурсам через системные API. Такая изоляция предусмотрена самой разработкой и обеспечивается при помощи колец защиты, которые выступают одним из двух или более уровней полномочий в архитектуре вычислительной системы. Это сделано для того, чтобы любые сбои в пользовательском режиме (ка правило, это самое внешнее кольцо) не оказывали влияния ни на что другое в общей системе из-за ограничений на уровне полномочий и такие сбои всегда можно исправить. Вся цель состоит в том, чтобы предотвратить случайное удаление пользовательской программой важных файлов операционной системы, перезаписав их данными пользователя или, может быть, несколькими процессами, пытающимися выполнить запись или воздействие на одни и те же файлы и в конечном счёте получить бедственный отказ.
Проще говоря, некий системный вызов, или syscall (system call) это какая- то служба, предоставляемая ядром, которая может быть вызвана из программ режима пользователя для взаимодействия с лежащей в основе операционной системой. С точки зрения вычислений, некий системный вызов это способ которым вычислительная программа программным способом запрашивает некую службу из ядра этой исполняемой операционной системы через API (Application Program Interfaces, интерфейсы прикладных программ). Системные вызовы являются точками входа в имеющуюся систему ядра для доступа к ресурсам системы, таким как память, процесс, файловый доступ и тому подобное.
Таблица 1-2 предоставляет некоторые системные вызовы Windows и Linux просто чтобы дать вам представление о том виде служб, которые предоставляются системными вызовами и кокие типы доступны.
Категория | Syscall Windows | Syscall Unix |
---|---|---|
Управление процессом |
|
|
|
|
|
|
|
|
Обработка файла |
|
|
|
|
|
|
|
|
|
|
|
Управление устройством |
|
|
|
|
|
|
|
|
Взаимодействие; |
|
|
|
|
|
|
|
|
Доступ и защита |
|
|
|
|
|
|
|
|
Различное |
|
|
|
|
|
|
|
|
Вычислительные системы с операционной системой Microsoft Windows составляются ядром Windows, которое также носит название ядра Windows NT. Самая ранняя версия Windows NT была разработана в двух вариантах, первом для рабочих станций, а второй для компьютеров серверов. Это был преемник основанных на MS-DOS систем и позднее он был переработан в используемую в наши дния операционную систему Windows 10.
Архитектура ОС Windows составляется из целого ряда компонентов и грубо разделяется на режимы пользователя и ядра:
-
HAL (Hardware Abstraction Layer, уровень аппаратных абстракций), который является неким программным уровнем, действующим в качестве интерфейса между лежащим в основе оборудованием и более высокими уровнями его операционной системы.
-
Ядро Windows
-
Драйверы режима ядра
-
Исполнительные службы режима ядра, которые обслуживают следующие цели:
-
Управление объектами
-
управление памятью
-
управление процессами и потоками
-
управлегие вводом/ выводом
-
Драйверы управления конфигурацией и прочие службы поддержки, которые работают в режиме ядра
-
-
Драйверы режима пользователя
-
Подсистемы среды режима пользователя
Замечание | |
---|---|
Большинство драйверов с целью стабильности работают в режиме пользователя, но всё же, з некоторыми исключениями, например, видео-драйверы, сегментированы как на пользовательский режим, так и на режим ядра для повышения производительности, что было снова изменено после протестов по поводу проблем с производительностью Windows Vista, причём до сих пор нет чётких границ где удерживать эти драйверы и это является предметом обсуждения и экспериментов. |
Ядро Linux является центральным компонентом операционной системы Linux, которая действует как интерфейс между системным оборудованием и его процессами. Одна из основных причин для её популярности является то, что она бесплатна и является открытым исходным кодом, что притягивает разработчиков из всех частей света. Самое основное отличие между ядром Windows NT и ядром Linux является то, что ядро Windows поставляется с коммерческим программным обеспечением (операционной системой), в то время как ядро Linux является открытым исходным кодом и доступно бесплатным для выгрузки.
Поскольку подсистема Windows для Linux версии 2 (WSL2) в целом доступна, Microsoft начнёт поставку полного ядра Linux с операционной системой Windows, которое будет целиком управляться Microsoft и будет изменяться через обновления Windows.
ELF выступает сокращением от Executable and Linking Format, который выступает общим стандартным форматом файла для исполняемых файлов, кода объекта, совместно используемых библиотек и дампов ядра. ELF спроектирован чтобы быть гибким, расширяемым и кросс- платформенным, что означает, что он был разработан чтобы не ограничиваться неким особым процессором, набором инструкций или архитектурой оборудования. Это сделало возможной адаптацию формата ELF во многих различных операционных систем на большом числе аппаратных платформ.
Некий исполняемый файл, применяющий формат файла ELF составляется из заголовка ELF, за которым следуют данные файла, которые содержат:
-
Таблица заголовка программы - Это список из 0 или более сегментов памяти; эти сегменты памяти содержат сведения, которые требуются для осуществления работ времени выполнения данного файла.
-
Таблица заголовка раздела - Это перечень из 0 или большего числа разделов для связывания и передислокации.
-
Данные файла - Данные, на которые имеются ссылки из табдиц заголовка программы и заголовка разделов.
В традиционных вариантах применения запуска приложений в некой изолированной среде мы используем виртуальные машины, устанавливаемые со специфическими операционными системами для отделения этого приложения от любых лежащих в основе зависимостей операционной системы хоста. Это срабатывало для нас и достигало цели, предоставляя безопасную изоляцию для приложений, независимых от подлежащей операционной системы, причём в то же самое время обеспечивая совместимость и непрерывность выполнения, что предоставляет нам двже возможность перемещать конкретное приложение в иные операционные системы или компьютеры.
Несмотря на эти преимущества, виртуальные машины обладают большими накладными расходами с точки зрения дисков, памяти, ЦПУ и тому подобного. Поэтому Microsoft запустила исследование проекта с названием Drawbridge, имеющего целью разработку нового способа вычислений с основным назначением в реализации облегчённого подхода к запуску приложения в какой- то изолированной среде, причём зависимости ОС самого приложения не привязаны к лежащей в основе ОС хоста. Проект Drawbridge сочетает в себе две основные технологии:
-
Процесс PICO - Process-based Isolation COntainer - изоляция контейнером на основе процесса
-
Библиотека ОС - Целевая операционная система для рабочих нагрузок приложений, запускаемое независимо от лежащей в основе ОС. Именно здесь находят свое место пакеты распространения WSL для того чтобы заработала подсистема Windows для Linux.
Процессы PICO были отчеканены для ограничения базовой операционной системы на управление адресным пространством пользовательского режима внутри данного процесса, которые всего лишь являются уменьшенной версий обычного хост- процесса, работающего с драйвером режима ядра, действующего в качестве брокера между ядром своей ОС хоста и данной библиотекой ОС в режиме пользователя.
Чтобы лежащая в основе операционная система прекратила управление этими процессами PICO, они помечаются как минимальные процессы, что указывает всей оставшейся части хоста не управлять этими процессами. В отличии от обычных процессов NT, при порождении минимального процесса не созаются потоки для запуска в таком процессе и всё адресное пространство пользовательского режима остаётся нетронутым. Проще говоря, PICO - это минимальный процесс, связанный с неким драйвером режима ядра.
В своих предыдущих подразделах мы изучили архитектурный обзор и компоненты подсистемы Windows для Linux, а также его преимущества и недостатки. Мы также взглянули на некоторые важные ключевые слова и понятия, относящиеся к работе систем Windows для Linux и некоторые центральные идеи и понятия, такие как процесс PICO, что поможет вам понять внутреннюю работу WSL.
В своей следующей главе мы намерены изучить установку и настройку WSL в операционной системе Windows 10.