Original-URL des Artikels: https://www.golem.de/news/wsl-2-wie-microsoft-den-linux-kernel-auf-windows-bringt-1905-141177.html    Veröffentlicht: 10.05.2019 15:15    Kurz-URL: https://glm.io/141177

WSL 2

Wie Microsoft den Linux-Kernel auf Windows bringt

Das Windows Subsystem für Linux nutzt in Version 2 einen echten Linux-Kernel. Microsoft erklärt Details zum Hypervisor und Tricks zur Speicher- und Dateiverwaltung, die für Windows-Container entstanden sind.

Kommende Versionen von Windows 10 werden einen Linux-Kernel ausliefern, der für die Verwendung in der neuen Version 2 des Windows Subsystems für Linux (WSL) eingesetzt werden soll. Auf der Hausmesse Build haben zwei der an den Arbeiten beteiligten Entwickler in einem Vortrag erläutert, wie das System funktioniert. Interessant daran ist vor allem, dass erst die in den vergangenen Jahren umgesetzten Entwicklungen für Windows-Container den Einsatz des Linux-Kernels überhaupt möglich gemacht haben.

Grundlage dafür sind die Arbeiten an Microsofts Virtualisierungsprodukt Hyper-V, das für WSL 2 als Typ1-Hypervisor eingesetzt wird. Darauf läuft der NT-Kernel des Windows-Systems als eigentliche Host-Umgebung für das WSL. Auf diesem Host wiederum wird dann eine sogenannte Lightweight VM gestartet, die in Teilen vergleichbar ist mit dem Container-Konzept unter Linux. Allerdings nutzen hier anders als bei üblichen Linux-Containern Gast und Host nicht denselben Kernel, sondern jeweils eigene, die durch Hyper-V zusätzlich voneinander isoliert werden. Eine spezielle VM für Container zu bauen, verfolgt für Linux etwa das Kata-Projekt.

Gemeinsamer Speicher für Gast und Host

Das Konzept dieser Mini-VMs unter Windows beschreibt ein Vortrag auf der Ignite-Konferenz von Microsoft aus dem vergangenen Herbst. Demnach wird diese Lightweight VM als Prozess auf dem Host-System repräsentiert. Die physischen Speicherbereiche des Gastsystems korrespondieren hierbei mit virtuellen Speicherbereichen auf dem Hostsystem.

Das hat den Vorteil, dass die Speicherverwaltung des Host-Systems wiederverwendet werden kann, wie etwa das Paging oder die Kompression. Bei üblichen VMs ist der Speicherbereich des Gastes komplett vom Host isoliert. Ziel der Arbeiten war es hingegen, möglichst viele Container, die zudem noch schnell starten sollen, auf einem einzigen Host-System betreiben zu können.

Zur Verwaltung des Gast-Containers wird darüber hinaus der sogenannte Host-Compute-Service (HCS) von Windows genutzt. Dieser Dienst liefert analog zu den Linux-Containern unter anderem Control Groups für die Job Objects, also eine zusammengefasste Menge von Prozessen.

Hinzu kommen Object Namespaces zur Isolierung der Windows Objects, eigene Prozesstabellen sowie ein eigenes Netzwerk. Der HCS kann außerdem ein Art Union-Dateisystem aufbauen, um mehrere Schichten zu einem einheitlich wirkenden Dateisystem zusammenzuführen.

Der HCS wird unter anderem für Docker auf Windows verwendet. Dank der Wiederverwendung dieser Windows-Servertechnik für WSL werde außerdem die Linux-Umgebung mit der Fortentwicklung von HCS und Hyper-V kontinuierlich verbessert, versprechen die Entwickler.



Spezielle Dienste und 9P zum Dateiaustausch

Die beschriebene Technik kann so auch für Windows-Gäste verwendet werden und wird es auch. Um Linux für das WSL zu verwenden, hat Microsoft aber einige eigene Dienste erstellt, die die Integration verbessern. Dazu gehören in der Version 1 wie auch in der Version 2 die wsl.exe als Einstiegspunkt in den Dienst.

Dieses Programm wird zur Verwaltung der verschiedenen verfügbaren Distributionen verwendet. Hinzu kommt der Dienst LXSS, der unter anderem den Zustand der tatsächlich verwendeten Distributionen verfolgt. Auch LXSS wurde bereits für WSL 1 verwendet.

Der HCS führt schließlich den von Microsoft speziell vorbereiten Linux-Kernel mit dem restlichen Root-Dateisystem (RootFS) der Distributionen eigener Wahl zusammen und führt diesen aus. In dem Gast-System startet dann der Init-Dienst das eigentliche Linux-System.

Dank dem Linux-Kernel kann hier ein RootFS mit Ext4 eingesetzt werden, ohne dass zusätzliche Treiber verwendet werden müssen. Und zusätzlich zu dem Ziel, sämtliche Systemaufrufe bereitstellen zu können, statt diese einzeln emulieren zu müssen, liefert der Linux-Kernel den Windows-Entwicklern einige vielfach gewünschte Funktionen schlicht mit dazu. Dazu gehört etwa die Unterstützung von Fuse.

Für die Kommunikation zwischen Bash-Shell und Host wird ein Socket benutzt, der an Stdin anbindet. Für den Dateiaustausch mit Windows-Gästen nutzt Microsoft das hauseigene SMB-Protokoll. Für die Linux-Gäste setzt der Windows-Hersteller stattdessen auf das aus der Unix-Welt stammende Protokoll 9P.

Je nach Richtung der Kommunikation für den Dateiaustausch läuft der 9P-Server als Dienst in Windows und der Client in Linux oder andersherum. Dieses System lässt sich schon länger zur Virtualisierung von Linux verwenden und kommt etwa auch für die Linux-Container auf ChromeOS zum Einsatz.

 (sg)


Verwandte Artikel:
Azure Speech Service: Microsofts Demos entstehen im fensterlosen Nerd-Keller   
(10.05.2019, https://glm.io/141141 )
Microsoft: Windows bekommt einen Linux-Kernel für WSL 2   
(07.05.2019, https://glm.io/141081 )
Microsoft: Windows bekommt einheitliches Terminal für mehrere Shells   
(06.05.2019, https://glm.io/141067 )
Betriebssysteme: Linux 5.1 optimiert asynchrone Zugriffe   
(06.05.2019, https://glm.io/141049 )
D9VK: Flüssigere D3D9-Spiele unter Linux dank Vulkan   
(10.05.2019, https://glm.io/141172 )

© 1997–2019 Golem.de, https://www.golem.de/