Microsoft verrät, wie sein Windows 10-Linux-Subsystem funktioniert

Video: Windows 10 Linux Subsystem - Einrichtung und Verwendung 2024

Video: Windows 10 Linux Subsystem - Einrichtung und Verwendung 2024
Anonim

Mit Bash on Ubuntu on Windows können native Linux-ELF64-Binärdateien unter Windows über das Windows-Subsystem für Linux (WSL) ausgeführt werden. Obwohl viele Leute von der Ankündigung von Bash on Ubuntu schockiert waren, ist es erwähnenswert, dass es neue Türen für die Kompatibilität zwischen verschiedenen Betriebssystemen öffnet. Microsoft macht einen weiteren Schritt nach vorne und zeigt, wie die WSL funktioniert, damit wir besser verstehen können, wie die beiden Systeme miteinander kommunizieren.

WSL wurde vom Microsoft Windows Kernel-Team erstellt und enthält sowohl Komponenten für den Benutzermodus als auch für den Kernelmodus. Genauer gesagt besteht das System aus:

  • Ein Session Manager-Dienst im Benutzermodus, der den Lebenszyklus der Linux-Instanz verwaltet
  • Pico-Provider-Treiber (lxss.sys, lxcore.sys), deren Aufgabe es ist, einen Linux-Kernel durch Übersetzen von Linux-Systemaufrufen zu emulieren
  • Pico verarbeitet das Hosting des unveränderten Benutzermodus Linux (z. B. / bin / bash).

Die Verbindung zwischen den drei Komponenten wird wie folgt beschrieben:

Es ist der Raum zwischen den Linux-Binärdateien im Benutzermodus und den Windows-Kernelkomponenten, in dem die Magie geschieht. Indem wir unveränderte Linux-Binärdateien in Pico-Prozessen platzieren, können Linux-Systemaufrufe in den Windows-Kernel geleitet werden. Die Treiber lxss.sys und lxcore.sys übersetzen die Linux-Systemaufrufe in NT-APIs und emulieren den Linux-Kernel.

Die größte Herausforderung besteht darin, die beiden Systeme zusammenarbeiten zu lassen:

WSL führt unveränderte Linux-ELF64-Binärdateien aus, indem eine Linux-Kernelschnittstelle über dem Windows NT-Kernel virtualisiert wird. Eine der bereitgestellten Kernel-Schnittstellen sind Systemaufrufe (Syscalls). Ein Syscall ist ein vom Kernel bereitgestellter Dienst, der vom Benutzermodus aus aufgerufen werden kann. Sowohl der Linux-Kernel als auch der Windows NT-Kernel setzen mehrere hundert Systemaufrufe für den Benutzermodus aus, haben jedoch eine andere Semantik und sind im Allgemeinen nicht direkt kompatibel. Zum Beispiel enthält der Linux-Kernel Dinge wie Fork, Open und Kill, während der Windows NT-Kernel über die vergleichbaren Funktionen NtCreateProcess, NtOpenFile und NtTerminateProcess verfügt.

Das Windows-Subsystem für Linux enthält Kernelmodustreiber (lxss.sys und lxcore.sys), die für die Verarbeitung von Linux-Systemaufrufanforderungen in Abstimmung mit dem Windows NT-Kernel verantwortlich sind. Die Treiber enthalten keinen Code aus dem Linux-Kernel, sondern sind eine Reinraum-Implementierung von Linux-kompatiblen Kernel-Schnittstellen. Unter nativem Linux wird ein Syscall, der aus einer ausführbaren Datei im Benutzermodus erstellt wird, vom Linux-Kernel verarbeitet. Wenn in WSL ein Syscall von derselben ausführbaren Datei ausgeführt wird, leitet der Windows NT-Kernel die Anforderung an lxcore.sys weiter. Wenn möglich, übersetzt lxcore.sys den Linux-Systemaufruf in den entsprechenden Windows NT-Aufruf, der seinerseits das schwere Heben übernimmt.

Angesichts des Interesses von Microsoft an Open-Source-Plattformen fragten sich viele, ob der Technologieriese große Linux-Unternehmen wie Canonical, das Unternehmen hinter dem Ubuntu-Betriebssystem, übernehmen sollte. Obwohl Microsoft und Canonical bei Open-Source-Software zusammengearbeitet haben, haben beide keine Kommentare zu dieser Möglichkeit abgegeben.

Wenn Sie daran interessiert sind, wie sich die Linux-Windows-Interaktion entwickelt, besuchen Sie den Microsoft-Blog. Das Team versprach, dass weitere Blogbeiträge zu diesem Thema folgen würden.

Microsoft verrät, wie sein Windows 10-Linux-Subsystem funktioniert