Bash Ubuntussa Windowsissa mahdollistaa alkuperäisten Linux ELF64 -binaarien suorittamisen Windowsissa Windows-alijärjestelmän Linuxille (WSL) kautta. Vaikka monet ihmiset olivat järkyttyneitä Bash on Ubuntu -ilmoituksesta, on syytä mainita, että se avaa uudet ovet eri käyttöjärjestelmien yhteensopivuudelle. Microsoft ottaa uuden askeleen eteenpäin ja paljastaa WSL-toimintansa, jotta voimme paremmin ymmärtää, miten nämä kaksi järjestelmää kommunikoivat keskenään.
WSL: n on luonut Microsoft Windows Kernel -tiimi, ja se sisältää sekä käyttäjä- että ytintilan komponentteja. Tarkemmin sanottuna järjestelmä koostuu:
- käyttäjätilan istunnonhallintapalvelu, joka käsittelee Linux-ilmentymän elinkaarta
- Pico-palvelun ohjaimet (lxss.sys, lxcore.sys), joiden tehtävänä on jäljitellä Linux-ydintä kääntämällä Linux-järjestelmäkutsut
- Pico käsittelee muokkaamattoman käyttäjätilan Linuxin (esim. / Bin / bash).
Kolmen komponentin välinen yhteys kuvataan seuraavasti:
Taika tapahtuu käyttäjätilassa olevien Linux-binäärien ja Windows-ytimen komponenttien välillä. Sijoittamalla modifioimattomat Linux-binaarit Pico-prosesseihin mahdollistamme Linux-järjestelmäkutsujen ohjaamisen Windows-ytimeen. Lxss.sys- ja lxcore.sys-ohjaimet kääntävät Linux-järjestelmän puhelut NT-sovellusliittymiksi ja jäljittelevät Linux-ydintä.
Suurin haaste prosessissa on saada nämä kaksi järjestelmää toimimaan yhdessä:
WSL suorittaa muokkaamattomat Linux ELF64 -binaaritiedostot virtualisoimalla Linux-ytimen käyttöliittymän Windows NT -ytimen päälle. Yksi sen esittämistä ytimen rajapinnoista on järjestelmäkutsuja (syscalls). Syscall on ytimen tarjoama palvelu, johon voidaan soittaa käyttäjätilasta. Sekä Linux- että Windows NT -ydin altistavat useita satoja syscalleja käyttäjätilalle, mutta niillä on erilainen semantiikka ja ne eivät yleensä ole suoraan yhteensopivia. Esimerkiksi Linux-ydin sisältää asioita, kuten haarukka, avaa ja tappaa, kun taas Windows NT -ydin sisältää vastaavat NtCreateProcess-, NtOpenFile- ja NtTerminateProcess-toiminnot.
Windows-alijärjestelmä Linuxille sisältää ydintilan ohjaimet (lxss.sys ja lxcore.sys), jotka vastaavat Linux-järjestelmän puhelupyyntöjen käsittelystä koordinoidusti Windows NT -ydimen kanssa. Ohjaimet eivät sisällä koodia Linux-ytimestä, mutta ne ovat sen sijaan Linux-yhteensopivien ytimen rajapintojen puhdastilan toteutus. Alkuperäisessä Linuxissa, kun syscall tehdään käyttäjätilan suoritettavasta tiedostosta, sitä hoitaa Linux-ydin. Kun WSL: ssä tehdään syscall samasta suoritettavasta tiedostosta, Windows NT -ydin välittää pyynnön lxcore.sys: lle. Jos mahdollista, lxcore.sys kääntää Linux-syscallin vastaavaksi Windows NT-kutsuksi, joka puolestaan tekee raskaan nostamisen.
Kun otetaan huomioon Microsoftin kiinnostus avoimen lähdekoodin alustoille, monet ihmettelivät teknisen jättiläisen pitäisi hankkia suuria Linux-keskittyviä yrityksiä, kuten Canonical, yritys Ubuntu-käyttöjärjestelmän takana. Vaikka Microsoft ja Canonical tekivät yhteistyötä avoimen lähdekoodin ohjelmistojen alalla, kumpikaan ei kommentoinut tätä mahdollisuutta.
Jos olet kiinnostunut siitä, miten Linux - Windows-vuorovaikutus kehittyy, siirry Microsoftin blogiin. Tiimi lupasi, että lisää aiheeseen liittyviä blogiviestejä seuraisi.
Aiheeseen liittyvät tarinat, jotka sinun on tarkistettava:
- Linux-käyttäjät ilmoittavat ongelmista, että kuulokkeet eivät enää toimi Windows 8.1: ssä
- Microsoft ja Canonical tuovat Bashin Windows 10: een Build 2016: ssa
- München alkaa jakaa ilmaisia Ubuntu-CD-levyjä Windows XP -käyttäjille