Microsoft avslører hvordan Windows 10 linux-undersystemet fungerer

Video: Rock Pi X: Low-Cost x86 Windows & Linux SBC 2024

Video: Rock Pi X: Low-Cost x86 Windows & Linux SBC 2024
Anonim

Bash på Ubuntu på Windows gjør det mulig for innfødte Linux ELF64-binærprogrammer å kjøre på Windows via Windows Subsystem for Linux (WSL). Selv om mange mennesker ble sjokkerte av kunngjøringen fra Bash on Ubuntu, er det verdt å nevne at det åpner nye dører for kompatibiliteten mellom forskjellige operativsystemer. Microsoft tar et skritt videre og avslører hvordan WSL-en fungerer slik at vi bedre kan forstå hvordan de to systemene kommuniserer med hverandre.

WSL ble opprettet av Microsoft Windows Kernel-teamet og inneholder både brukermodus og kjernemoduskomponenter. Mer spesifikt er systemet sammensatt av:

  • en brukermodus sesjonsbehandlingstjeneste som håndterer livssyklusen for Linux-instansen
  • Drivere til Pico-leverandører (lxss.sys, lxcore.sys) hvis rolle er å etterligne en Linux-kjerne ved å oversette Linux-syscalls
  • Pico behandler hosting for umodifisert brukermodus Linux (f.eks. / Bin / bash).

Forbindelsen mellom de tre komponentene er beskrevet på følgende måte:

Det er mellomrommet mellom Linux-binærene for brukermodus og Windows-kjernekomponentene der magien skjer. Ved å plassere umodifiserte Linux-binærfiler i Pico-prosesser, gjør vi det mulig for Linux-systemsamtaler å bli sendt inn i Windows-kjernen. Drivere for lxss.sys og lxcore.sys oversetter Linux-systemanropene til NT API-er og emulerer Linux-kjernen.

Hovedutfordringen i prosessen er å få de to systemene til å fungere sammen:

WSL utfører umodifiserte Linux ELF64-binærprogrammer ved å virtualisere et Linux-kjernegrensesnitt på toppen av Windows NT-kjernen. Et av kjernen grensesnitt som den eksponerer er systemanrop (syscalls). En syscall er en tjeneste som tilbys av kjernen som kan ringes fra brukermodus. Både Linux-kjernen og Windows NT-kjernen utsetter flere hundre syscalls for brukermodus, men de har forskjellig semantikk og er generelt ikke direkte kompatible. For eksempel inkluderer Linux-kjernen ting som gaffel, åpen og drep mens Windows NT-kjernen har den sammenlignbare NtCreateProcess, NtOpenFile og NtTerminateProcess.

Windows Subsystem for Linux inkluderer kjernemodusdrivere (lxss.sys og lxcore.sys) som er ansvarlige for å håndtere Linux-anropsforespørsler i koordinering med Windows NT-kjernen. Driverne inneholder ikke kode fra Linux-kjernen, men er i stedet et rent romimplementering av Linux-kompatible kjernegrensesnitt. Når en syscall er laget av en utførbar brukermodus på Linux, blir den håndtert av Linux-kjernen. Når en syscall er laget av samme kjørbar på WSL, overfører Windows NT-kjernen forespørselen til lxcore.sys. Der det er mulig, oversetter lxcore.sys Linux-syscall til det tilsvarende Windows NT-anropet som igjen gjør tunge løft.

Tatt i betraktning Microsofts interesse for open source-plattformer, lurte mange på om tech-giganten skulle skaffe seg store Linux-fokuserte selskaper som Canonical, selskapet bak Ubuntu-operativsystemet. Selv om Microsoft og Canonical samarbeidet om åpen kildekode-programvare, ga ingen av dem kommentarer om denne muligheten.

Hvis du er interessant i hvordan Linux - Windows-interaksjonen utvikler seg, gå til Microsofts blogg. Teamet lovet at flere blogginnlegg om dette emnet ville følge.

Microsoft avslører hvordan Windows 10 linux-undersystemet fungerer