Microsoft разкрива как работи подсистемата му Windows 10 Linux

Видео: РС DONI ft Ð¢Ð¸Ð¼Ð°Ñ Ð¸ Ð Ð¾Ñ Ð¾Ð´Ð° Ð Ñ ÐµÐ¼Ñ ÐµÑ Ð° клипа, 2014 2024

Видео: РС DONI ft Ð¢Ð¸Ð¼Ð°Ñ Ð¸ Ð Ð¾Ñ Ð¾Ð´Ð° Ð Ñ ÐµÐ¼Ñ ÐµÑ Ð° клипа, 2014 2024
Anonim

Bash on Ubuntu в Windows дава възможност на родните двоични файлове за ELF64 на Linux да се изпълняват в 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 в NT API и подражават на ядрото на Linux.

Основното предизвикателство в процеса е да накараме двете системи да работят заедно:

WSL изпълнява немодифицирани двоични файлове на Linux ELF64 чрез виртуализиране на интерфейс на ядрото на 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 превежда syscall на Linux в еквивалентния Windows NT разговор, което от своя страна прави тежкото повдигане.

Имайки предвид интереса на Microsoft към платформите с отворен код, много хора се питаха дали технологичният гигант трябва да придобие големи компании, фокусирани върху Linux, като Canonical, компанията зад операционната система Ubuntu. Въпреки че Microsoft и Canonical сътрудничиха на софтуер с отворен код, нито един от коментарите за тази възможност.

Ако ви е интересно как се развива взаимодействието Linux - Windows, отидете в блога на Microsoft. Екипът обеща, че ще последват още публикации в блога по тази тема.

Microsoft разкрива как работи подсистемата му Windows 10 Linux