Microsoft avslöjar hur dess Windows 10 linux subsystem fungerar

Video: Det här är Isabella Larka - Bachelor (TV4) 2024

Video: Det här är Isabella Larka - Bachelor (TV4) 2024
Anonim

Bash på Ubuntu på Windows gör det möjligt för ursprungliga Linux ELF64-binärer att köras på Windows via Windows Subsystem for Linux (WSL). Även om många människor blev chockade av Bash på Ubuntu-tillkännagivandet, är det värt att nämna att det öppnar nya dörrar för kompatibilitet mellan olika operativsystem. Microsoft tar ytterligare ett steg framåt och avslöjar hur dess WSL fungerar så att vi bättre kan förstå hur de två systemen kommunicerar med varandra.

WSL skapades av Microsoft Windows Kernel-teamet och innehåller både användarläge och kärnläge-komponenter. Mer specifikt består systemet av:

  • en användarläge session manager service som hanterar livscykeln för Linux-instansen
  • Pico-leverantörsdrivrutiner (lxss.sys, lxcore.sys) vars roll är att emulera en Linux-kärna genom att översätta Linux-syscalls
  • Pico behandlar värd för det omodifierade användarläget Linux (t.ex. / bin / bash).

Anslutningen mellan de tre komponenterna beskrivs på följande sätt:

Det är utrymmet mellan användarläget Linux-binärer och Windows-kärnkomponenter där magin händer. Genom att placera omodifierade Linux-binärer i Pico-processer gör vi det möjligt för Linux-systemsamtal att dirigeras in i Windows-kärnan. Drivrutinerna lxss.sys och lxcore.sys översätter Linux-systemsamtal till NT-API: er och emulerar Linux-kärnan.

Huvudutmaningen i processen är att få de två systemen att fungera tillsammans:

WSL kör omodifierade Linux ELF64-binärer genom att virtualisera ett Linux-kärngränssnitt ovanpå Windows NT-kärnan. Ett av kärngränssnitten som den exponerar är systemsamtal (syscalls). En syscall är en tjänst som tillhandahålls av kärnan som kan anropas från användarläge. Både Linux-kärnan och Windows NT-kärnan utsätter flera hundra syscalls för användarläge, men de har olika semantik och är i allmänhet inte direkt kompatibla. Till exempel innehåller Linux-kärnan saker som gaffel, öppna och döda medan Windows NT-kärnan har jämförbara NtCreateProcess, NtOpenFile och NtTerminateProcess.

Windows-subsystemet för Linux inkluderar drivrutiner för kärnläge (lxss.sys och lxcore.sys) som är ansvariga för att hantera Linux-systemanropsförfrågningar i samordning med Windows NT-kärnan. Drivrutinerna innehåller inte kod från Linux-kärnan utan är istället en renrumsimplementering av Linux-kompatibla kärngränssnitt. När en syscall görs från ett externt körbart användarläge hanteras det av Linux-kärnan. När WSL skapas från samma körbara Windows NT-kärna vidarebefordrar begäran till lxcore.sys. Om möjligt översätter lxcore.sys Linux-syscall till motsvarande Windows NT-samtal som i sin tur gör det tunga lyft.

Med hänsyn till Microsofts intresse för open source-plattformar undrade många om teknikjätten skulle förvärva stora Linux-fokuserade företag som Canonical, företaget bakom Ubuntu-operativsystemet. Även om Microsoft och Canonical samarbetade om öppen källkodsprogram, lämnade ingen av kommentarerna om denna möjlighet.

Om du är intresserad av hur Linux-Windows-interaktionen utvecklas, gå till Microsofts blogg. Teamet lovade att fler blogginlägg om detta ämne skulle följa.

Microsoft avslöjar hur dess Windows 10 linux subsystem fungerar