Microsoft ujawnia, jak działa jego podsystem Linux 10

Wideo: Dlaczego Windows 10 jest lepszy niż MacOS i Linux?! 2024

Wideo: Dlaczego Windows 10 jest lepszy niż MacOS i Linux?! 2024
Anonim

Bash na Ubuntu w systemie Windows umożliwia uruchamianie natywnych plików binarnych ELF64 w systemie Linux za pośrednictwem podsystemu Windows dla systemu Linux (WSL). Chociaż wiele osób było zszokowanych ogłoszeniem Bash na Ubuntu, warto wspomnieć, że otwiera nowe drzwi dla kompatybilności między różnymi systemami operacyjnymi. Microsoft robi kolejny krok do przodu i ujawnia, jak działa jego WSL, abyśmy mogli lepiej zrozumieć, w jaki sposób oba systemy komunikują się ze sobą.

WSL został stworzony przez zespół jądra systemu Microsoft Windows i zawiera składniki trybu użytkownika i trybu jądra. Mówiąc dokładniej, system składa się z:

  • usługa menedżera sesji trybu użytkownika obsługująca cykl życia instancji Linuksa
  • Sterowniki dostawcy Pico (lxss.sys, lxcore.sys), których rolą jest emulacja jądra systemu Linux poprzez tłumaczenie wywołań systemu Linux
  • Pico przetwarza hosting niezmodyfikowanego trybu użytkownika Linux (np. / Bin / bash).

Połączenie między trzema komponentami opisano w następujący sposób:

Jest to przestrzeń między binariami Linuksa w trybie użytkownika a komponentami jądra systemu Windows, w których dzieje się magia. Umieszczając niezmodyfikowane pliki binarne systemu Linux w procesach Pico, umożliwiamy kierowanie wywołań systemu Linux do jądra systemu Windows. Sterowniki lxss.sys i lxcore.sys tłumaczą wywołania systemowe Linux na NT API i emulują jądro Linux.

Głównym wyzwaniem w tym procesie jest połączenie dwóch systemów:

WSL wykonuje niemodyfikowane pliki binarne Linux ELF64 poprzez wirtualizację interfejsu jądra Linux na jądrze systemu Windows NT. Jednym z ujawnianych interfejsów jądra są wywołania systemowe (wywołania systemowe). Syscall to usługa zapewniana przez jądro, którą można wywołać z trybu użytkownika. Zarówno jądro Linux, jak i jądro systemu Windows NT wystawiają kilkaset wywołań systemowych na tryb użytkownika, ale mają one inną semantykę i generalnie nie są bezpośrednio kompatybilne. Na przykład jądro Linuksa zawiera funkcje takie jak rozwidlenie, otwieranie i zabijanie, podczas gdy jądro systemu Windows NT ma porównywalne NtCreateProcess, NtOpenFile i NtTerminateProcess.

Podsystem Windows dla systemu Linux zawiera sterowniki trybu jądra (lxss.sys i lxcore.sys), które są odpowiedzialne za obsługę żądań wywołań systemowych Linux w koordynacji z jądrem systemu Windows NT. Sterowniki nie zawierają kodu z jądra Linuksa, ale są czystą implementacją interfejsów jądra kompatybilnych z Linuksem. W natywnym Linuksie, gdy syscall jest wykonywany z pliku wykonywalnego trybu użytkownika, jest on obsługiwany przez jądro Linuksa. W WSL, gdy wywołanie systemowe jest wykonane z tego samego pliku wykonywalnego, jądro systemu Windows NT przekazuje żądanie do lxcore.sys. Tam, gdzie to możliwe, lxcore.sys tłumaczy wywołanie systemowe systemu Linux na równoważne wywołanie systemu Windows NT, co z kolei powoduje duże obciążenie.

Biorąc pod uwagę zainteresowanie Microsoftu platformami typu open source, wiele osób zastanawiało się, czy gigant technologiczny powinien przejąć duże firmy koncentrujące się na Linuksie, takie jak Canonical, firma stojąca za systemem operacyjnym Ubuntu. Chociaż Microsoft i Canonical współpracowały w zakresie oprogramowania typu open source, żadne z nich nie wydało żadnych uwag na temat tej możliwości.

Jeśli interesuje Cię ewolucja interakcji Linux - Windows, przejdź do bloga Microsoft. Zespół obiecał, że pojawi się więcej postów na ten temat.

Microsoft ujawnia, jak działa jego podsystem Linux 10