The Баш на Ubuntu под Windows дава възможност на родните двоични файлове на ELF64 на Linux да работят на Windows чрез подсистемата на Windows за Linux (WSL). Въпреки че много хора бяха шокирани от съобщението Bash on Ubuntu, заслужава да се спомене, че това отваря нови врати за съвместимостта между различните операционни системи. Microsoft прави още една крачка напред и разкрива как работи нейният WSL, за да можем по-добре да разберем как двете системи комуникират помежду си.
WSL е създаден от екипа на ядрото на Microsoft Windows и съдържа компоненти както в потребителски режим, така и в режим на ядро. По-конкретно, системата се състои от:
- услуга за управление на сесии в потребителски режим, обработваща жизнения цикъл на инстанцията на Linux
- Драйвери за доставчици на Pico (lxss.sys, lxcore.sys), чиято роля е да емулират ядро на Linux чрез превод на Linux syscalls
- Pico обработва хостинг на немодифициран потребителски режим Linux (напр. / Bin / bash).
Връзката между трите компонента е описана по следния начин:
Това е пространството между бинарните файлове на потребителския режим на Linux и компонентите на ядрото на Windows, където се случва магията. Поставяйки немодифицирани двоични файлове на Linux в процесите на Pico, ние позволяваме на системните повиквания на Linux да бъдат насочени в ядрото на Windows. Драйверите lxss.sys и lxcore.sys превеждат системните повиквания на Linux в NT API и емулират ядрото на Linux.
Основното предизвикателство в процеса е да накараме двете системи да работят заедно:
WSL изпълнява немодифицирани двоични файлове на ELF64 на Linux, като виртуализира интерфейс на ядрото на Linux върху ядрото на Windows NT. Един от интерфейсите на ядрото, които той излага, са системни повиквания (syscalls). Syscall е услуга, предоставена от ядрото, която може да бъде извикана от потребителски режим. Както ядрото на Linux, така и ядрото на Windows NT излагат няколкостотин syscalls на потребителски режим, но те имат различна семантика и обикновено не са пряко съвместими. Например ядрото на Linux включва неща като fork, open и kill, докато ядрото на Windows NT има сравними NtCreateProcess, NtOpenFile и NtTerminateProcess.
Подсистемата на Windows за Linux включва драйвери за режим на ядрото (lxss.sys и lxcore.sys), които отговарят за обработката на заявките за системни повиквания на Linux в координация с ядрото на Windows NT. Драйверите не съдържат код от ядрото на Linux, а вместо това са реализация на чиста стая на интерфейси на ядро, съвместими с Linux. В родния Linux, когато syscall е направен от изпълним файл в потребителски режим, той се обработва от ядрото на Linux. На WSL, когато syscall е направен от същия изпълним файл, ядрото на 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