Microsoft onthult hoe het Windows 10 Linux-subsysteem werkt

Video: Windows 10 Bash & Linux Subsystem Setup 2024

Video: Windows 10 Bash & Linux Subsystem Setup 2024
Anonim

Met de Bash op Ubuntu op Windows kunnen native Linux ELF64-binaire bestanden op Windows worden uitgevoerd via het Windows Subsysteem voor Linux (WSL). Hoewel veel mensen geschokt waren door de aankondiging van Bash on Ubuntu, is het vermeldenswaard dat het nieuwe deuren opent voor de compatibiliteit tussen verschillende besturingssystemen. Microsoft zet nog een stap vooruit en onthult hoe zijn WSL werkt, zodat we beter kunnen begrijpen hoe de twee systemen met elkaar communiceren.

WSL is gemaakt door het Microsoft Windows Kernel-team en bevat componenten voor zowel de gebruikersmodus als de kernelmodus. Meer specifiek bestaat het systeem uit:

  • een sessiebeheerservice in de gebruikersmodus die de levenscyclus van een Linux-exemplaar afhandelt
  • Pico-providerstuurprogramma's (lxss.sys, lxcore.sys) wiens rol het is om een ​​Linux-kernel te emuleren door Linux-syscalls te vertalen
  • Pico-processen hosten de ongewijzigde gebruikersmodus Linux (bijv. / Bin / bash).

De verbinding tussen de drie componenten wordt als volgt beschreven:

Het is de ruimte tussen de Linux binaries in de gebruikersmodus en de Windows-kernelcomponenten waar de magie gebeurt. Door ongewijzigde Linux-binaire bestanden in Pico-processen te plaatsen, kunnen Linux-systeemaanroepen naar de Windows-kernel worden geleid. De stuurprogramma's lxss.sys en lxcore.sys vertalen de Linux-systeemaanroepen naar NT API's en emuleren de Linux-kernel.

De belangrijkste uitdaging in het proces is om de twee systemen samen te laten werken:

WSL voert ongewijzigde Linux ELF64-binaire bestanden uit door een Linux-kernelinterface te virtualiseren bovenop de Windows NT-kernel. Een van de kernel-interfaces die het blootstelt, zijn systeemaanroepen (syscalls). Een syscall is een service van de kernel die vanuit de gebruikersmodus kan worden aangeroepen. Zowel de Linux-kernel als de Windows NT-kernel stellen honderden syscalls bloot aan de gebruikersmodus, maar ze hebben verschillende semantiek en zijn over het algemeen niet direct compatibel. De Linux-kernel bevat bijvoorbeeld dingen als fork, open en kill, terwijl de Windows NT-kernel de vergelijkbare NtCreateProcess, NtOpenFile en NtTerminateProcess heeft.

Het Windows-subsysteem voor Linux bevat stuurprogramma's voor de kernelmodus (lxss.sys en lxcore.sys) die verantwoordelijk zijn voor het afhandelen van Linux-systeemaanroepverzoeken in coördinatie met de Windows NT-kernel. De stuurprogramma's bevatten geen code van de Linux-kernel, maar zijn in plaats daarvan een cleanroom-implementatie van Linux-compatibele kernelinterfaces. Op native Linux, wanneer een syscall wordt gemaakt van een uitvoerbaar in gebruikersmodus, wordt het afgehandeld door de Linux-kernel. Wanneer op WSL een syscall wordt gemaakt van hetzelfde uitvoerbare bestand, stuurt de Windows NT-kernel het verzoek door naar lxcore.sys. Waar mogelijk vertaalt lxcore.sys de Linux syscall naar de equivalente Windows NT-aanroep die op zijn beurt het zware werk doet.

Rekening houdend met de belangstelling van Microsoft voor open-sourceplatforms, vroegen veel mensen zich af of de technologiegigant grote op Linux gerichte bedrijven zou moeten overnemen, zoals Canonical, het bedrijf achter het Ubuntu-besturingssysteem. Hoewel Microsoft en Canonical hebben samengewerkt aan open-source software, hebben geen van beide opmerkingen over deze mogelijkheid uitgebracht.

Als je geïnteresseerd bent in hoe de Linux - Windows-interactie evolueert, ga dan naar Microsoft's Blog. Het team beloofde dat er meer blogberichten over dit onderwerp zouden volgen.

Microsoft onthult hoe het Windows 10 Linux-subsysteem werkt