Näennäiskoneiden virtualisointi
- 11 minuuttia
Näennäiskoneet ovat pilvitekniikan runko. Kun luot EC2-esiintymän AWS:ssä tai näennäiskoneen Azuressa, pilvipalveluntarjoaja ei omista fyysistä palvelinta esiintymälle tai näennäiskoneelle. Sen sijaan se luo näennäiskoneen fyysiseen palvelimeen. Näennäiskone voi olla yksi monista palvelimella isännöidyistä. Virtualisoinnin vuoksi näennäiskone näyttää ja tuntuu erilliseltä palvelimelta. Se on loogisesti eristetty muista näennäiskoneista, ja virheellinen ohjelma, joka kaatuu tai muuten vaarantaa yhden näennäiskoneen, ei voi vaikuttaa muissa näennäiskoneissa suoritettaviin ohjelmiin, vaikka niillä olisi yhteinen fyysinen isäntä. Lisäksi palvelin, joka isännöi kahta näennäiskonetta, voi käyttää yhtä käyttöjärjestelmää (esimerkiksi Linuxia) yhdessä näennäiskoneessa ja toista käyttöjärjestelmää (kuten Windowsia) toisessa.
Näennäiskoneet löytävät käyttöjä myös pilvitekniikan ulkopuolelta. Esimerkiksi suosittu tuote nimeltä Parallels antaa Mac-käyttäjien käyttää Windowsia ja macOS:ää rinnakkain isännöimällä Windowsia näennäiskoneessa. Ohjelmistokehittäjät käyttävät usein näennäiskoneita ohjelmien testaamiseen, koska näennäiskoneet tarjoavat yhtenäisen ja eristetyn ympäristön, joka replikoi helposti tietokoneesta seuraavaan.
Kaikki nämä näennäiskoneet ovat järjestelmän näennäiskoneiden esiintymiä, jotka virtualisoivat koko järjestelmän (fyysinen kone). On kuitenkin olemassa myös prosessin näennäiskoneet, jotka muodostavat perustan suosituille ohjelmointikielille, kuten Java ja C#. Tutustutaan nyt molempiin tyyppeihin ja niiden toiminnasta sekä ymmärrämme, miksi juuri nämä kaksi näennäiskonetta toimivat pilvitekniikan pohjana.
Näennäiskoneiden käsittely
Prosessin näennäiskone (kuva 1) on näennäiskone, joka voi tukea yksittäistä prosessia niin kauan kuin prosessi on elossa. Prosessin näennäiskone päättyy, kun sen isännöima prosessi päättyy. Prosessin näennäiskoneen näkökulmasta kone koostuu virtuaalisesta muistiosoitetilasta, käyttäjätason rekistereista ja ohjelman suorittamisohjeista. Tämän määritelmän mukaan yleisen käyttöjärjestelmän prosessia voidaan kutsua myös koneeksi. Tavallinen prosessi voi kuitenkin tukea vain ohjelmabinaareja, jotka on käännetty suoritinarkkitehtuuria varten tai isäntäkoneen opetusjoukon arkkitehtuuria (ISA). Tavalliset prosessit eivät tue isa:lle koottuja binaariohjelmia, jotka poikkeavat isäntäkoneen binaarien suorittamisesta – esimerkiksi ARM-suorittimia varten käännettyjen ohjelmien suorittamisesta Intel CPUs -koneilla. Prosessin näennäiskone kuitenkin sallii sen.
kuva 1: Käsittele näennäiskone.
Prosessin näennäiskoneet tukevat isa-koneita, jotka eroavat isäntä-ISA:ista emuloinninavulla, mikä mahdollistaa yhden järjestelmän (lähteen) käyttöliittymät ja toiminnot käyttöön järjestelmässä, jossa on eri liittymät ja toiminnot (kohde). Esimerkki emulaatiosta on suorittamalla ohjelma, joka on käännetty vintage 6502/6510 -suorittimelle, jota varhaiset Apple-tietokoneet käyttävät x86 -suorittimessa. Prosessin näennäiskoneen abstraktion tarjoaa virtualisointiohjelmisto, jonka nimi on runtime. Suorituspalvelu sijaitsee isäntäkäyttöjärjestelmän ja pohjana olevan laitteiston yläpuolella. Tämä suorituspalvelu emuloi ohjeita ja/tai järjestelmäkutsuja, kun vieras- ja isäntä-ISA:t ovat erilaisia.
Prosessin näennäiskoneet ovat olleet olemassa 1960-luvun puolivälistä lähtien, ja niitä käytettiin ensimmäisen kerran muuntamaan kääntäjän luomat keskitason kielet isäntäprosessorin konekoodiksi, mikä osittain yksinkertaistaa kääntäjän siirtämisprosessia uusiin suoritinarkkitehtuureihin. Niillä on nykyään samanlaisia käyttötarkoituksia. Esimerkiksi Java-näennäiskone (JVM) on prosessin näennäiskone, joka kääntää Java-tavukoodin (Java-kääntäjän lähettämät ohjeet) alkuperäiseen konekoodiin ja suorittaa sen isäntäkoneessa. C#:llä kirjoitetuissa ohjelmissa ja muissa Microsoftin COMMON Language Runtime (CLR) -kielen tukemissa kielissä käytetään myös prosessin näennäiskoneita kääntämään konekoodiksi kääntäjän lähettämiä Common Intermediate Language (CIL) -ohjeita. Prosessin näennäiskoneita, joiden tarkoituksena on suorittaa kielen kääntäjien tuottamia keskitason kieliä, kutsutaan joskus nimellä korkean tason kielen näennäiskoneet,, tai lyhyesti HLL-näennäiskoneet.
Yhteenvetona prosessin näennäiskone muistuttaa tavallista prosessia, joka suoritetaan käyttöjärjestelmässä. Prosessin näennäiskone kuitenkin sallii emuloinnin avulla eri isa-kohteelle käännettyjen sovellusten suorittamisen kuin isäntäkoneen. Lisäksi HLL-prosessin näennäiskoneet luovat perustan suosituille hallituille kielille, kuten Javalle ja C#:lle. Tässä yhteydessä hallittu termi viittaa siihen, että Java ja C# hallitsevat muistia sovellustensa puolesta ja tarjoavat suojatoimia yleisille ohjelmointivirheille, kuten osoittimien väärinkäytölle ja muistissa olevien matriisien rajojen ylittämiseen.
Järjestelmän näennäiskoneet
Toisin kuin prosessi näennäiskoneet, järjestelmän näennäiskone virtualisoi koko koneen virtualisoimalla joukon laitteistoresursseja, kuten suorittimia, muistia ja I/O-laitteita. Virtualisointiohjelmisto eli hypervisor-, jota kutsutaan myös näennäiskoneen monitoriksi (VMM), sijaitsee laitteiston ja käyttöjärjestelmän välissä ja luo illuusion siitä, että käyttöjärjestelmä ja sen isännöimiä sovelluksia suoritetaan erillisissä koneissa (kuva 2).
kuva 2: Järjestelmän näennäiskone.
Hypervisor hallitsee -kohteen varaamista ja käyttöoikeuksia pohjana oleviin laitteistoresursseihin. Se sallii useiden näennäiskoneiden suorittamisen rinnakkain ja antaa jokaiselle virtuaalikomelle illuusion kaikkien näiden resurssien omistamisesta. Fyysisen tietokoneen nimi on isäntä-, ja näennäiskoneessa isäntäkoneessa suoritettavaa käyttöjärjestelmää kutsutaan vieraskäyttöjärjestelmäksitai vieraskäyttöjärjestelmäksi (kuva 3). Jokainen näennäiskone voidaan käynnistää, sulkea ja käynnistää uudelleen aivan kuten tavallinen isäntä. Näennäiskone voi toimia vain yhdessä isännässä kerrallaan, mutta se voidaan sulkea, siirtää toiseen isäntään ja aloittaa sieltä. Vaikka näennäiskone voi olla käynnissä vain yhdessä isännässä tiettynä ajankohtana, se voidaan siirtää eri isäntiin tietyllä aikavälillä.
kuva 3: Yksittäistä järjestelmää, jossa on useita näennäiskoneita,
Ibm-pääkehyksissä 1960-luvun ensimmäiset hypervisorit. Varhaiset hypervisorit toteutetaan joko kokonaan ohjelmistoissa tai ne luottivat laitteistoon suorituskyvyn parantamiseksi. Jotkin pääkehykset, jotka on toimitettu erityisellä laitteistolla vain virtualisoinnin tukemiseksi. Intelin ja AMD:n suosituissa mikroprosesstoreissa on tällä hetkellä sisäänrakennettuna virtualisointituki. Ominaisuus voidaan ottaa käyttöön tai poistaa käytöstä useimmissa tietokoneissa laiteohjelmistoasetusten kautta. CpUs-virtuaalikoneiden alkuperäinen virtualisoinnin tuki on ensisijainen syy siihen, että näennäiskoneiden suosio räjähti 2000-luvun puolivälissä. Se aiheutti sukupolven edullisia, mutta täysin suositeltuja hypervisoreja, kuten VMware, Hyper-V ja VirtualBox, sekä avoimen lähdekoodin hypervisoreja, kuten Xen1. Jo ennen kuin pilvitekniikka tuli vogueen, organisaatiot alkoivat käyttää näitä hypervisoreja kuormitusten virtualisointiin omissa palvelinkeskuksissaan. Tämä nopeutti siirtymistä pilvitekniikkaan antamalla virtualisoituja palvelimia käyttävien organisaatioiden "nostaa ja siirtää" kuormituksia pilvipalveluun lataamalla olemassa olevia näennäiskoneen kuvia ja luomalla virtuaalikoneita niistä.
Hypervisorit näkevät myös käytön pöytätietokoneissa tuotteissa, kuten Parallels ja Docker Desktop for Windows. Jälkimmäisessä käytetään isäntä hypervisoria (Hyper-V tai VirtualBox) Docker-säilöjen suorittamiseen Windowsissa isännöidyissä Linux-näennäiskoneissa. Suojaustutkijoiden mielestä hypervisorit ovat korvaamattomia, koska haittaohjelmien vaarantama näennäiskone ei vaikuta muihin näennäiskoneisiin, isäntäkäyttöjärjestelmään tai pohjana olevaan laitteistoon. Vaarantunut näennäiskone voidaan nopeasti repiä ja tarvittaessa luoda uudelleen keskeneräisessa tilassaan ilman riskiä muulle järjestelmälle.
Kuten prosessin näennäiskone, järjestelmän näennäiskone voi tukea eri isa-paketteja kuin isäntäjärjestelmä. Tällaisia näennäiskoneita käytetään laajalti emulattoreissa, joiden avulla Xboxille, PlayStationille ja muille laitteistoympäristöille kirjoitetut pelit voidaan käyttää työpöytätietokoneissa. Emulataattorit toteutettu tällä tavalla - suorittimien virtualisointitukea hyödyntäneiden hypervisorin kautta - toimivat yleensä paremmin kuin emulataattorit prosessien näennäiskoneissa, jotka virtualisoivat ohjeita kokonaan ohjelmiston kautta.
Toisin kuin prosessin näennäiskone, järjestelmän näennäiskone voi esiintyä käyttöjärjestelmässä ja sovelluksissa, joissa se isännöi resursseja, joiden määrä ja tyyppi on erilainen fyysisestä isännästä. Esimerkiksi järjestelmän näennäiskone voi tarjota enemmän suorittimia, joita kutsutaan joskus nimellä virtuaaliset suorittimet tai vCPUs-kuin isäntäjärjestelmä.
Palvelinkeskukset, jotka tarjoavat pilvitekniikan palveluna asiakkaille, käyttävät järjestelmän näennäiskoneita kuormitusten virtualisointiin ja palvelimien yhdistämiseen. Kun käytämme tästä eteenpäin termiä "näennäiskone" tai "näennäiskone", viittaamme järjestelmän näennäiskoneisiin, ellei toisin määritetä. Seuraavalla oppitunnilla keskustellaan siitä, miten järjestelmän näennäiskoneet hyötyvät pilvitekniikasta ja miksi pilvitekniikkaa ei ehkä edes ole olemassa - eikä se todellakaan voi olla yhtä kustannustehokasta - ilman virtualisointia.
Viittaukset
- Barham ym. (2003). "Xen ja virtualisoinnin taide". Käyttöjärjestelmien periaatteita koskevan 19. ACM, New York, NY, Yhdysvallat.