Virtuaalikone

Wikiopistosta

Virtuaalikone (harv. näennäiskone, engl. Virtual Machine, VM) on tietokone, joka on toteutettu ohjelmallisesti. Virtuaalikoneessa ohjelmia voidaan ajaa kuten fyysisessä tietokoneessa. Alun perin virtuaalikoneet olivat aina fyysisen koneen ohjelmallisia vastineita, mutta nykyään on myös virtuaalikoneita, joille ei ole olemassa fyysistä toteutusta.


Periaate[muokkaa]

Tietoteknologiassa virtualisointi tarkoittaa menetelmää, jolla fyysiset resurssit, kuten palvelimet, käyttöjärjestelmät, sovellukset, tallennusvälineet tai tietokoneen laitteisto voidaan muuttaa useiksi erikokoisiksi loogisiksi resursseiksi. Tällä tavalla on mahdollista ajaa useampia virtuaalisia tietokoneita yhden fyysisen tietokoneen sisällä. Virtualisoinnilla tarkoitetaan myös tietotekniikassa sitä, että simuloidaan jotain resurssia, jota ei varsinaisesti ole oikeasti olemassa. Tämän menetelmän avulla voidaan käsitellä fyysisiä resursseja myös loogisina resursseina, joina niitä on helpompi käsitellä.[1]

Virtuaalikoneeseen asennettu käyttöjärjestelmä käyttää tietokoneelle tyypillisiä komponentteja samalla tavalla kuin fyysinenkin tietokone. Yhdellä fyysisellä tietokonejärjestelmällä voidaan suorittaa yhtäaikaisesti tai erikseen useampia virtuaalikoneen instansseja. Virtuaalikoneen käyttämä suoritinaika, muistit sekä muiden komponenttien käyttö voidaan yleensä allokoida isäntäkoneesta hyvinkin tarkasti.

Eräs käyttötarkoitus on myös usean fyysisen resurssin kuten tallennuslaitteiden tai palvelinten saaminen näkyviin yhtenä loogisena resurssina. Tämä mahdollistaa sen, että resurssien käyttöä ei rajoita niiden maantieteellinen sijainti, toteutus tai fyysinen konfiguraatio. Esimerkiksi monessa eri maantieteellisessä sijainnissa sijaitsevia tietokoneita voidaan käsitellä yhtenä resurssina, jolloin saadaan virtualisoitua kaikkien näiden koneiden tallennus- ja laskentakapasiteetit.

Historiaa[muokkaa]

Virtualisoinnin kehittämisen aloitti 1960-luvun alussa IBM:n (International Business Machines Corporation), kun haluttiin tapa, jolla yksi fyysinen kone saataisiin jaettua moneen virtuaalikoneeseen. Tuohon aikaan keskusyksiköt olivat hyvin kalliita ja sen takia alettiin miettimään miten yhden koneen resurssit saataisiin jaettua mahdollisimman tehokkaasti käytön maksimoimiseksi.

Alkuun keskusyksiköt suunniteltiin siten, että ne pystyvät suorittamaan vain yhden annetun tehtävän kerrallaan. Ajan myötä IBM havaitsi, että tämä ei enää riitä ja alkoi tutkimaan keinoja jakaa yhden keskusyksikön resurssit paremmin.

Yksi käyttäjä ei pystynyt käyttämään kaikkia tietokoneen resursseja tehokkaasti ja hyvin useasti käyttäjällä oli taukoja käsiteltävän tiedon syötössä koneelle. Nämä tauot saatiin täytettyä, kun pääsy yhdelle tietokoneelle annettiin useammalle käyttäjälle kerrallaan; kun yksi henkilö piti tauon tiedonsyötössä, tietokone pystyi käsittelemään toisen käyttäjän tehtäviä.

IBM:n ratkaisu ongelmaan oli hiukan erilainen. Sen sijaan, että yhden tietokoneen kaikki resurssit annettaisiin käyttöön suurelle ryhmälle, resurssit jaettiin pienempiin osiin, joista jokainen käyttäjä sai oman virtuaalikoneensa. Tämä oli paljon luotettavampi tapa, sillä yksittäinen käyttäjä ei pystynyt enää kaatamaan koko konetta toimillaan.

Virtuaalikoneen käytön hyödyt[muokkaa]

Virtuaalikonetta käytettäessä yhden fyysisen tietokoneen resurssit (kiintolevy, suoritinaika, jne.) voidaan hyödyntää mahdollisimman tehokkaasti jakamalla ne usealle virtuaalikoneelle. Tällaisella menetelmällä saadaan aikaiseksi tehokkaampi tietokoneen hyödyntäminen esimerkiksi tilanteissa, joissa useampaa virtuaalikonetta tarvitaan harvoin, mutta niiden tulisi olla aina saatavilla. Yrityskäytössä virtuaalikoneilla on helppoa testata mm. käyttöjärjestelmien päivityksiä, ohjelmien asentumista, tietoturvaa sekä muita erilaisia ongelmatilanteita, joiden testaaminen loppukäyttäjän laitteella voi olla epäkäytännöllistä tai mahdotonta. Virtuaalikoneilla on useita hyödyllisiä ominaisuuksia: pienempiä määriä fyysisiä laitteita on helpompaa ylläpitää ja niiden toimintaa valvoa, virtualisointi parantaa laitteiden vikasietoisuutta sekä virtuaalitietokoneita on mahdollista liikutella fyysisiltä palvelimilta toisille. [2]


Resurssit[muokkaa]

Virtuaalikoneen käytössä olevat resurssit, kuten kiintolevytila sekä suoritinaika, voidaan alustasovelluksesta riippuen allokoida virtuaalikoneen käyttöön hyvinkin tarkasti. Esimerkiksi Oracle VM VirtualBoxissa uutta virtuaalikonetta luodessa voi virtuaalikoneen käyttöön allokoida esimerkiksi muistin, jonka voi joko lohkaista erilliseen tiedostoon tai johon voidaan allokoida isäntäkoneen vapaan muistin määrän puitteissa kiinteä tai dynaamisesti allokoitu määrä muistia. Mikäli virtuaalikoneelle allokoidaan vaikkapa 20GB dynaamisesti allokoitua muistia, VirtualBox osaa itsenäisesti allokoida virtuaalikoneelle lisää muistia virtuaalikoneen käytön lähetessä asetettua 20GB rajaa. Kiinteästi asetettu muisti virtuaalikoneessa saa virtuaalikoneen käyttäytymään muistin täyttyessä fyysisen koneen tavoin. GPU:lta muistia on Oracle VM VirtualBoxissa mahdollista allokoida virtuaalikoneen käyttöön kiinteä määrä.

Verkkoyhteyden voi jakaa virtuaalikoneelle suoraan isäntäkoneesta esimerkiksi Oracle VM VirtualBoxissa Bridged Adapterilla, jolloin isäntäkoneesta tai sen ulkopuolelta tarkasteltuna virtuaalikone näyttäisi olevan integroituna isäntäkoneeseen. Tämä tapahtuu siten, että virtuaalikone injektoi isäntäkoneen verkkoliikenteeseen oman verkkoliikenteensä ja se lähetetään isäntäkoneen verkon kautta ulkoverkkoon[3].

Suoritinaikaa esimerkiksi Oracle VM VirtualBoxissa virtuaalikoneelle voidaan allokoida isäntäkoneen fyysisten rajoitteiden mukaisesti, eli esimerkiksi isäntäkoneen kahdeksalta ytimeltä voidaan virtuaalikoneelle tarjota suoritinaikaa 1-8 ytimeltä. Suoritinaikaa voidaan myös allokoida prosentuaalisesti, eli suorittimen säikeiden lukumäärän lisäksi voidaan valita myös käyttöprosentti kyseisille prosessorisäikeille väliltä 1-100%. Virtuaalikone ei kuitenkaan varaa kokonaista prosessorisäiettä itselleen; kyse on enemmänkin siitä, kuinka paljon virtuaalikone voi fyysisen koneen tavoin saada suoritinaikaa sitä tarvitessaan.

Virtuaalikoneelle ulkoiset resurssit, kuten USB -tikut sekä isäntäkoneella sijaitsevat kansiot, voidaan jakaa virtuaalikoneen käyttöön samalla tavalla kuin jaettaessa ulkoisia resursseja fyysisten koneiden välillä; kansioita voidaan jakaa verkkoyhteyden välityksellä tai hyödyntäen virtualisointiin käytetyn ohjelmiston omia työkaluja. Esimerkiksi Oracle VM VirtualBoxissa isäntäkoneen USB-laitteita pääsee tarkastelemaan ja ohjaamaan ottamalla käyttöön USB Controllerin.


Testauskäyttö[muokkaa]

Virtuaalikone on nopea ja tehokas tapa kokeilla vaikkapa erilaista käyttöjärjestelmää. Tällaisessa tilanteessa, jossa käyttäjällä ei ole mahdollisuutta päästä kokeilemaan toista tietokonetta, jolle käyttöjärjestelmä on asennettuna, on virtuaalikoneen pystyttäminen ja tarvittaessa tuhoaminen hyvin edullista verrattuna uuden tietokoneen hankkimiseen ja asentamiseen. Lisäksi virtuaaliset kehitys- tai testiympäristöt voidaan jakaa muiden käyttäjien kanssa vaivattomasti ja ilman erillistä asennustyötä.

Yrityskäytössä virtuaalikoneella on tehokasta suorittaa esimerkiksi yrityksen ohjelmistojen jakelu verkkoyhteyden välityksellä käyttäen erilaisia ohjelmistojakelupalveluita, kuten SCCM tai Miradore. Tällaiset palvelut vaatisivat normaalisti erillisen fyysisen tietokoneasennuksen toimiakseen tehokkaasti ja skaalautuvasti suurissakin yritysverkoissa. Hyödyntäen virtualisointia, tällainen jakeluohjelman asennukselle dedikoitu serveri voidaan kuitenkin tehdä osaksi dedikoitua suurempaa tietokoneasennusta, serveriä, joka on erityisesti verkkoyhteyden välityksellä palveluita tuottava modulaarinen tietokone. Tällaista servereitä, jotka kommunikoivat muiden tietokoneiden kanssa vaikkapa tarjoten palveluja, voidaan kutsua pilvipalvelimiksi. Ne voivat sijaita fyysisesti missä tahansa ja niiden käyttämiseen tarvitaan vain verkkoyhteys. Virtuaalikoneen uudelleenkäynnistäminen ja mahdollisten virhetilanteiden tutkiminen on huomattavasti helpompaa, kun palvelin on pilvessä sen sijaan, että palvelinta tulisi aina tutkia fyysisesti, mistä aiheutuisi ylimääräisiä kuluja. Virtuaalikonetoteutuksia mahdollistavat palvelut, kuten Oracle VM VirtualBox ja VMware, tarjoavat myös mahdollisuuden tehdä niin kutsuttuja snapshotteja, joiden avulla virtuaalikoneen erilaiset tilat on mahdollista tallentaa ja niihin on mahdollista palata myöhemmin. Esimerkiksi heti käyttöjärjestelmän asentamisen jälkeen virtuaalikoneen tilan voi tallentaa. Myöhemmin virtuaalikoneelle voidaan asentaa jokin ohjelma, ja kun tätä ohjelmaa ei syystä tai toisesta enää halutakaan, järjestelmä voidaan palauttaa siihen tilaan, jossa se on ollut välittömästi käyttöjärjestelmän asentamisen jälkeen. Luonnollisesti tällainen operaatio poistaa kaikki nk. snapshotin tallennushetken jälkeen tapahtuneet muutokset, kuten tiedostot ja muut ohjelmat sekä päivitykset, joita virtuaalikoneelle on mahdollisesti asennettu.

Kloonaaminen on myös erityisen tehokas tapa pystyttää toinen identtinen virtuaalikone vaikkapa LAMP -serveriksi. Virtuaalikoneen voi kloonata toiseksi erilliseksi instanssiksi vaikkapa yllä mainitun esimerkin mukaisesti vasta asennetusta virtuaalijärjestelmästä. Näin vältytään potentiaalisesti hyvin kalliilta operaatioilta, kuten uuden dedikoidun laitteiston hankkimiselta tilanteessa, jossa alkuperäinen virtuaalikoneen isäntäkone kykenee ajamaan useampaa virtuaalikonetta samanaikaisesti.


Kuvassa esimerkki virtuaalisesta testiympäristöstä, jossa fyysisellä koneella (harmaa) on käyttöjärjestelmä (tummansininen), jossa se ajaa virtualisointiohjelmaa (vaaleansininen), jossa ajetaan samanaikaisesti useampaa virtuaalikonetta (vaaleanharmaa), joilla kullakin ajetaan erillisiä käyttöjärjestelmiä, jotka ajavat kukin omia ohjelmiaan.


Turvallisuus[muokkaa]

Virtuaalikoneet lisäävät järjestelmän turvallisuutta isolaation, ylimääräisen abstraktiotason, tehokkaan ulkopuolisen valvonnan ja tallentamisen avulla. Koska virtuaalikoneet on suunniteltu toimimaan eristyksissä isäntäkäyttöjärjestelmästä ja toisistaan, niissä tapahtuneet vahingot rajoittuvat vain kyseiseen virtuaalikoneeseen. Isäntäkone voi helposti tarkkailla ja tallentaa virtuaalikoneen asetuksissa ja tiedostoissa tapahtuvia muutoksia, sekä tehdä järjestelmänlaajuisia muutoksia virtuaalikoneeseen tapahtumissa kuten virushyökkäys, tiedostojen poistaminen ja korruptoituminen.

Järjestelmään kohdistuvissa hyökkäyksissä isolaatio vaikeuttaa hyökkääjän käsiksipääsyä fyysisen koneen dataan ja resursseihin. Virtuaalikoneen luoma abstraktiotaso estää hyökkääjää saamasta tietoja isäntäkoneen laitteistosta, joka tekee koneen manipuloinnista vaikeampaa. Hyperviisorien yksinkertaisuus perinteisiin käyttöjärjestelmiin verrattuna helpottaa ohjelmointivirheiden ja haavoittuvuuksien minimointia. Snapshotit antavat käyttäjälle mahdollisuuden palauttaa virtuaalikoneen tilan ennen hyökkäystä tarjoten helpon tavan haitallisten ohjelmien poistamiseen ja datan säilytykseen. Käyttäjän mahdollisuus käynnistää ja sammuttaa virtuaalikoneet etänä jättää hyökkäyksille pienen aikavälin[4][5].

Virtuaalikoneen käytön riskit[muokkaa]

Virtuaalikoneella on myös jonkin verran haittoja ja riskejä, vaikka yleisesti ajatellaan, että virtuaalitietokoneen hyödyt kumoavat tehokkaasti sen riskit. Virtualisoinnin hyödyt tulevat esiin tehokkaammissa fyysisissä palvelimissa ja siten ne ovat myös yleensä kalliimpia. Organisaatiolle voi tuottaa haasteita sijoittaa tehokkaisiin palvelimiin, sekä tarjota palvelimille sopivat toimintatilat. Voidaankin ajatella, että isoilla organisaatioilla on pienempi riski lähteä mukaan virtualisointiin kuin esimerkiksi uusilla, pienemmillä yrityksillä ja organisaatioilla. Virtualisoinnissa pitää pystyä muuttamaan jo olemassa olevia tiedostoja ja järjestelmiä virtuaaliseksi, mikä vaatii sen tekijältä suunnitelmallisuutta. On olemassa myös pieni riski tehohäviöstä: virtualisoitu järjestelmä on aina raskaampi kuin fyysisellä laitteella toimiva järjestelmä. Tämä voi aiheuttaa lisääntynyttä rasitusta koneille, jotka toimivat samoilla fyysisillä resursseilla.[6]



Virtualisoinnin keskeiset osa-alueet[muokkaa]

Virtuaalikoneita ympäristöinä voidaan nykyään käyttää useissa eri toiminnoissa.

Palvelinvirtualisointi[muokkaa]

Palvelinvirtualisointi, toiselta nimeltään laitevirtualisointi, on yksi eniten hyödynnetyistä virtualisoinnin osa-alueista. Käytännössä palvelinvirtualisointi tarkoittaa sitä, että palvelimen fyysinen laitteisto virtualisoidaan loogisiksi resursseiksi. Näiden resurssien päälle pystytetään niitä käyttäviä virtuaalipalvelimia. Yleisimmin virtuaalipalvelin pystytetään asentamalla valittu käyttöjärjestelmä emuloidulle laitealustalle niin sanotun hypervisor-hallintasovelluksen kautta. Palvelinvirtualisoinnin toteuttamiseen on olemassa useampia eri tekniikoita. Näihin tekniikoihin kuuluvat täysvirtualisointi, laitteistoavusteinen virtualisointi, käyttöjärjestelmätason virtualisointi sekä paravirtualisointi. Palvelinvirtualisoinnin ratkaisuja suunniteltaessa on kannattavaa valita huolella haluttuun käyttötarkoitukseen parhaiten soveltuva tekniikka.

Useita palvelimia virtualisoidessa tulee isäntäkoneen olla tehokas. Tehokkuutta vaatii servereiden luonteenomainen käyttäytyminen siinä suhteessa, että erilaiset serverit haluaisivat käyttää päällekkäisiä käyttöjärjestelmän ohjelmistoresursseja[7]. Siksi useamman dedikoidun virtuaalipalvelimen sijoittaminen isäntäkoneeseen on tehokkaampaa, kuin yhdelle virtuaalikoneelle useamman palvelimen pystyttäminen. Tehokkuutta vaativat isäntäpalvelimet kasvavat myös helposti fyysistä kokoa lisämuistin ja -prosessorien myötä. Myös tästä syystä Data Centerit hyödyntävät virtualisointia palveluja tarjotessaan. Kaikki virtualisoidut palvelimet eivät kuitenkaan varaa palvelimelta resursseja staattisesti pitkällä aikavälillä, vaan palvelinten toimintapyrähdykset voivat olla myös dynaamisia. Palvelinvirtualisoinnilla voidaan hyödyntää palvelimen käyttämättömiä resursseja sijoittamalla yhdelle isäntäkoneelle useampi virtuaalinen palvelin.

Kuvassa CyberBunkerin Data Centerin servereitä .

Virtuaalipalvelimet tarjoavat myös palvelinten asiakkaille ja ylläpitäjille etuja vikatilanteissa. Virtuaalipalvelimesta on mahdollista tehdä varmuuskopioita vaikkapa snapshottaamalla tietyin aikavälein. Tällöin virtuaalipalvelimen vikaantuessa on huomattavasti tehokkaampaa palauttaa virtuaalipalvelin aiempaan, vikaantumattomaan versioon ohjelmistosta. Tällaisilla snapshoteilla on myös mahdollista testata erilaiset huolto-, ja testaustoimenpiteet, kuten päivitykset ja uusien ominaisuuksien asentaminen etukäteen, vaarantamatta jo käytössä olevaa palvelua. Palvelinten virtualisoinnilla on mahdollista ylläpitää jo rautatasolla vanhentuneita legacy - järjestelmiä uudemmissa isäntäkoneissa virtualisoimalla virtuaalipalvelimelle vanhemman ohjelmiston vaatimat emulaattorit. Virtuaalipalvelinten siirtäminen paikasta toiseen on myös vaivattomampaa, kun isäntäkonetta tai virtuaalipalvelimia ei tarvitse fyysisesti liikuttaa vaan tämä voidaan suorittaa internetin välityksellä paikoin huomattavasti nopeammin.

Palvelimen virtualisointi ei kuitenkaan ole aina hopealuoti jokaisen virtuaalitarpeen taltuttamiseen. Erilaiset palvelinsovellukset, jotka luonteenomaisesti syövät pitkällä aikavälillä suuren osan isäntäkoneen prosessointiajasta toimivat tehokkaammin omalla fyysisellä koneellaan ilman erillistä virtualisointia. Tällaisessa tapauksessa useampi virtuaalikone samalla isäntäkoneella paljon resursseja syövän palvelinohjelman ohella aiheuttaisi ongelmia resurssien allokoinnissa. Virtuaalipalvelimet käyttävät myös kiintolevytilaa yhtälailla fyysisten käyttöjärjestelmien ohella, joten usealla virtuaalipalvelimella kuormitetun isäntäkoneen tulee myös sisältää niille sopiva määrä muistia.

Täysvirtualisointi[muokkaa]

Täysvirtualisointi tarkoittaa tekniikkaa, jossa käytössä olevan fyysisen laitteiston ja virtualisointitason välissä ei ole ylimääräistä kerrosta. Tämä tarkoittaa sitä, että virtuaalikoneet ovat hallintasovelluksen avulla suoraan yhteydessä niille varattuihin fyysisiin resursseihin käyttäen laite-emulointia. Täysvirtualisointi onnistuu vain ja ainoastaan, mikäli käytössä on oikea virtualisointisovelluksen ja fyysisen laitteiston yhdistelmä. Täysvirtualisointisovelluksissa ei aina tarvita alustaksi käyttöjärjestelmää, vaan joissain tapauksissa ne voidaan asentaa suoraan isäntäkoneelle. Merkittävä hyöty tässä virtualisoinnin tekniikassa on se, että virtualisointikerroksessa on mahdollista ajaa useampaa erilaista käyttöliittymää erillisillä virtuaalikoneilla. VMwaren täysvirtualisointi hyödyntää yhteistyössä suoran suorituksen kanssa binary translation -nimistä teknologiaa, jonka toimintaperiaate on kääntää kernelin koodia korvatakseen ei-virtualisoitavia koodinpätkiä uusilla ohjelmistosekvensseillä, joilla on alkuperäisen ohjelmistopätkällä haluttu saavutettava tarkoitus. Käyttäjälle näkyvä korkean tason koodi kuitenkin suoritetaan yleensä virtualisoituna. Täysvirtualisointi tarjoaa käyttöjärjestelmälle mahdollisuuden hyödyntää kaikkia virtualisoidun fyysisen ympäristön ominaisuuksia kuten virtualisoidun BIOS:n sekä virtualisoidun muistikapasiteetin hallintaa[8]. Binary translationin ja suoran suorittamisen yhteiskäyttö eristää virtuaaliympäristöllä virtualisoidun ohjelmiston kokonaan isäntäkoneen fyysisestä laitteistosta. Virtuaalinen käyttöjärjestelmä ei havaitse sijaitsevansa virtuaalisessa ympäristössä eikä vaadi muokkauksia ohjelmistotasolla toimiakseen kuten fyysisessä ympäristössä. VMwaren käyttämä hyperviisori kääntää isäntäkoneelle suoritettavat käskyt suoritettavaan muotoon mikäli ne eivät valmiiksi sellaisinaan lähde virtuaalisesta käyttöjärjestelmästä samalla kun käyttäjätason käskyt suoritetaan suoraan virtualisoituna.

Kuvassa esimerkki hyperviisoria hyödyntävästä täysvirtualisoidusta järjestelmästä .
Laitteisto-avustettu virtualisointi[muokkaa]

Laitteisto-avustettu virtualisointi mahdollistaa sen, että käytössä oleva fyysinen laitteisto kykenee ymmärtämään virtuaalikoneilta tulevia käskyjä suoraan ilman hallintaohjelman toimimista välittäjänä. Tätä virtualisointitekniikkaa voidaan käyttää yhdessä täys- ja paravirtualisoinnin kanssa, jolloin molemmissa tapauksissa kyetään käyttämään isäntäkoneen prosessoritehoa huomattavasti paremmin. Ensimmäisen generaation Intel Virtualization Technology ja AMD:n AMD-V hyödyntävät virtuaalikäyttöjärjestelmien käskyjen kääntämistä suoraan prosessorille. Täysvirtualisoidun ympäristön binaaritranslaatiota tai paravirtualisaatiota ei siis laitteistoavusteisessa virtualisoinnissa tarvita lainkaan vaan nämä käskyt kääntyvät suoraan hyperviisorille. Virtuaalikäyttöjärjestelmän tila tallentuu suoraan Intelin laitteissa Virtual Machine Control Structureen (VT-x) tai AMD:n vastikkeessa Virtual Machine control Blockkeihin [9].

Käyttöjärjestelmätason virtualisointi[muokkaa]

Käyttöjärjestelmätason virtualisointia käyttämällä saadaan isäntäkoneen käyttöjärjestelmä mahdollistamaan useampien samaa käyttöjärjestelmää käyttävien vieraskäyttöjärjestelmien ajaminen samanaikaisesti. Isäntäkoneeseen luodaan eristetty, uusi virtuaaliympäristö, eli säiliö tai instanssi, jolla pystytään käyttämään isäntäkoneen resursseja suoraan ilman emulointia. Tätä tekniikkaa hyödyntämällä voidaan siis varmistaa, ettei yksi käyttäjä vie isäntäkoneen kaikkia resursseja ja jumita koko järjestelmää vaan resurssit tulee jaettua tasaisesti.

Kubuntu -käyttöjärjestelmä Oracle VM VirtualBoxissa .













Paravirtualisointi[muokkaa]

Paravirtualisoinnin toimintaperiaate on jossain määrin sama verrattuna edellisen kohdan käyttöjärjestelmätason virtualisointiin. Suurin ero näiden kahden virtualisointitekniikan välillä on se, että paravirtualisoidun käyttöjärjestelmän päällä on mahdollista ajaa myös eri käyttöjärjestelmiä. Käyttöjärjestelmätason virtualisoinnissa edellä mainittu toiminto ei ollut mahdollinen, koska käytössä piti olla samaa käyttöjärjestelmää hyödyntäviä vieraskäyttöjärjestelmiä. Paravirtualisoinnissakaan kyseisen toiminnon suorittaminen ei kuitenkaan ole mahdollista tekemättä paravirtualisoituun käyttöjärjestelmään ohjelmallisia muutoksia. On kuitenkin huomioitava, että kaikki käyttöjärjestelmäyhdistelmät eivät ole tuettuja. Paravirtualisoinnissa hallintaohjelma ohjaa virtuaalikoneiden laiteresurssien käyttöä eikä emuloi laitekantaa. Paravirtualisoinnissa virtuaalinen käyttöjärjestelmä ja hyperviisori keskustelevat keskenään tehostaakseen ohjelmiston suorittamisen tehokkuutta. Paravirtualisointi vaatii virtuaalikäyttöjärjestelmään muutoksia, joilla korvataan ei-virtualisoitavissa oleva ohjeistus hyperkutsuilla, jotka kommunikoivat suoraan virtualisoitavan kerroksen hyperviisorin kanssa. Hyperviisori myös tarjoaa hyperkutsurajapintoja toisille kriittisille kernelin operaatioille kuten muistinhallinnalle, keskeytyksenhallinnalle sekä ajanhallinnalle[10].

Ero täysvirtualisointiin ilmenee siitä, että muokkaamaton virtualisoitu käyttöjärjestelmä ei tiedä toimivansa virtuaalisessa isäntäkoneessa ja kääntymättömät käyttöjärjestelmäkutsut jäävät jumiin binääritranslaatioon. Paravirtualisaatio onkin siis työkuormasta riippuen täyttä virtualisaatiota tehokkaampi. Paravirtualisointi ei tue muokkaamattomia käyttöjärjestelmiä, kuten Windows 2000/XP. Paravirtualisoinnin avulla voidaan myös samalla tukea ylläpito-ongelmaa tuotantoympäristöissä, jotka vaativat käyttöjärjestelmän kernelin muokkausta. Tällaisesta ympäristöstä esimerkkinä on avoimen lähdekoodin Xen Project.

Data virtualisointi[muokkaa]

Joillakin yrityksillä saattaa olla valtava määrät dataa tallennettuna eri paikkoihin. Jotta näihin päästäisiin käsiksi, on data ensin kerättävä yhteen ja käsiteltävä haluttuun muotoon, minkä jälkeen sitä vasta päästään tutkimaan. Datan virtualisointi yksinkertaistaa tätä keräämällä kaiken tiedon yhteen paikkaan. Etuna perinteisiin tapoihin verrattuna on, että resursseja ei tarvitse käyttää datan keräämiseen yhteen. Dataa päästään käsittelemään reaaliajassa riippumatta sen sijainnista. Näin myös datan ylläpito on paljon helpompaa, kun kaikki data on keskitetty yhteen paikkaan.

Tallennusvirtualisointi[muokkaa]

Tallennustilan virtualisoinnissa isäntäkoneen fyysinen muisti jaotellaan ja allokoidaan virtuaalikoneille dynaamisesti. Tallennusvirtualisointi tällä tavalla on mahdollista myös käyttöjärjestelmän itsensä sisällä, mutta isäntäkoneen muut allokoimattomat muistilohkot eivät näy virtuaalikäyttöjärjestelmälle. Modernit x86 prosessorit sisältävät muistinhallintajärjestelmän (MMU) ja translation lookaside bufferin (TLB), joilla virtuaalinen muistinhallinta voidaan toteuttaa optimaalisesti. Useamman virtuaalikoneen toimintaa tukeakseen MMu täytyy virtualisoida, jotta se tukisi myös virtuaalikäyttöjärjestelmää. Virtuaalikäyttöjärjestelmä pitää yllä virtuaalisia muistiosoitteita omassa virtuaalimuistissaan ja sen fyysisissä osoitteissa, mutta virtuaalikäyttöjärjestelmällä ei ole pääsyä isäntäkäyttöjärjestelmän muistilohkoihin, joita ei ole virtuaalikoneelle allokoitu.

Verkkovirtualisointi[muokkaa]

Verkkovirtualisoinnin ideana on yhdistää useita verkkoja yhdeksi suuremmaksi virtuaaliverkoksi. Virtuaaliverkon joustavuuden takia tietoliikennettä pystytään jakamaan tarpeen mukaan. Tiedonsiirron tehostamiseksi siinä käytetään tiedonsiirtotekniikkana esimerkiksi kiihdytys- ja pakkaustekniikkaa. Uuden verkon tekeminen käy suhteellisen nopeasti. Hajautettujen verkkojen hallinta onnistuu yhden tietokeskuksen avulla. Useista verkoista voidaan tehdä yksi virtuaaliverkko, jota voidaan käyttää muuttumattomana, vaikka IP-osoite ja sijainti olisivat vaihtelevat. Myös yhtä verkkoa voidaan eriyttää useaksi virtuaaliverkoksi ja käyttää kuin useampana eri verkkona.

Sovellusvirtualisointi[muokkaa]

Kokonaisen käyttöjärjestelmän lisäksi voidaan myös virtualisoida yksittäinen sovellus. Tällaista palvelua tarjoaa mm. VMwaren ThinApp. Yksittäinen sovellus asennetaan ensin virtuaaliympäristössä käyttäen sen taltioimiseen tarkoitettua ohjelmaa. Ohjelma "asentaa sovelluksen pieneen virtuaalikoneinstanssiin" joka tarkoittaa sitä, että esimerkiksi suoritettavaan .exe tiedostoon tallennetaan sovelluksen tietojen lisäksi tietoa sovellusta ympäröivästä virtuaalikoneesta, erityisesti niistä osista, joita käytettävä sovellus tarvitsee toimiakseen.

Virtuaaliympäristöjä[muokkaa]

Oracle VM VirtualBox[muokkaa]

Virtualbox on alustariippumaton ja yksityishenkilöille ilmainen virtualisointiohjelma, jota kehittää Oracle Corporation. Ohjelmasta on kaksi versiota, joista toinen perustuu avoimeen lähdekoodiin. Ohjelman käyttö kaupallisiin tarkoituksiin on maksullista. Oracle VM VirtualBox on ollut saatavilla jo vuodesta 2007 ja on käytettävissä GNU General Public License, version 2:aa mukaillen[11]. VirtualBox mahdollistaa usean rinnakkaisen virtuaalisen käyttöjärjestelmän suorittamisen sekä helpon virtuaalikoneen siirtämisen toiselle laitteelle myös eri isäntäkäyttöjärjestelmien kesken. VirtualBox tukee useita käyttöjärjestelmiä kuten Windows 2000-, Mac OS X 10.11- sekä Linux-käyttöjärjestelmiä kuten Ubuntu 12.04.5 LTS[12].

Java Virtual Machine[muokkaa]

Java Virtual Machine (JVM) on Java Runtime Environment-ympäristöön sisältyvä virtuaalikone, jolla voidaan ajaa Java-kielellä kirjoitettuja ohjelmia. Virtuaalikone tukee Javan ajonaikaista käännöstä konekielelle.

Java Virtual Machinen arkkitehtuuri.

VMware Workstation[muokkaa]

VMware workstation on ollut markkinoilla jo kaksikymmentä vuotta ja kattaa laajan alan erilaisia virtualisointiominaisuuksia tukemalla esimerkiksi DirectX 10:ä sekä OpenGL 3.3:aa, jotka auttavat virtuaalikonetta suoriutumaan graafisesta suorituksesta tehokkaammin. VMware workstationilla on myös mahdollista suunnitella ja implementoida kokonaisia datacenter topologioita. VMware workstationissa on myös mahdollista suorittaa aiemmin artikkelissa mainittuja toimintoja kuten snapshottaamista, kloonaamista ja kopiointia. VMWare workstationista on saatavilla kaksi versiota: Workstation Player ja Workstation Pro. Edellä mainittu on ilmaisversio ja tukee yllä mainittuja ominaisuuksia rajatusti, antaen käyttäjän esimerkiksi luoda vain yhden virtuaalikoneen kerrallaan[13]. VMware tukee ainakin seuraavia käyttöjärjestelmiä: Windows 7 ja uudemmat (64bit only), Windows Server 2008 R2 ja uudemmat, useimmat 64bit Linux-jakelut[14]

Parallels Desktop[muokkaa]

Parallels Desktop on suunniteltu pääasiallisesti Windowsin virtualisointia Mac:ia varten ja on maksullinen virtuaaliympäristö. Parallels Desktop tukee virtuaaliympäristölle tyypillisiä ominaisuuksia kuten tiedostojen drag&droppaamista isäntä- ja virtuaalikoneen välillä. Macille erikoissuunnittelun huomaa erityisistä ominaisuuksista kuten mahdollisuudesta avata isäntäjärjestelmän Safari-verkkoselaimesta Internet Explorer- tai Microsoft Edge-selaimia. Parallels Desktopissa voi Windowsin lisäksi virtuaalikoneeksi asentaa myös Chrome OS:n, Linuxin jakelun tai toisen Mac OS:n. Parallels Desktopista on kolme erilaista jakelua; kullekin ympäristölle (Mac, Linux, Windows) omansa. Parallels Desktopin voi asentaa MacOS/OS X 10.10 tai uudemmille käyttöjärjestelmille.

QEMU[muokkaa]

QEMU on Linux, MacOS sekä Windows-käyttöjärjestelmille saatavilla oleva open-source-emulaattori, joka simuloi rautatasolle hyödyntäen dynaamista kääntäjää[15]. QEMU ei tarvitse järjestelmänvalvojan oikeuksia ilman erillistä erikoistapausta, kuten tarvetta päästä käsiksi isäntäjärjestelmän I/O resursseihin kuten muistitikkuun. QEMUlla suoritettava kernel -tason KVM-emulointi mahdollistaa sulavan virtuaalikäyttöjärjestelmän operoinnin.

Hyper-V[muokkaa]

Hyper-V on Microsoftin oma ratkaisu virtuaalikone maailmaan. Se korvasi Windows Virtual PC:n, joka oli Microsoftin aiempi virtualisointiohjelma. Se julkaistiin ensin Windows Server 2008:n kanssa ja tuli myöhemmin saatavaksi ilmaiseksi Windows Server 2012 ja Windows 8 (Pro, Enterprise, Education) rinnalla.

Nykyään Hyper-V on saatavana kahta eri kautta:

  • Joko vapaasti lisättävänä osana Windows Serveriin (2008 tai uudempi) tai Windows 8, 8.1, 10 käyttöjärjestelmiin
  • Hyper-V Palvelimena, ilmainen versio Windows Serveristä rajoitetuilla toiminnoilla (Mm. käyttöliittymä on komentorivi tyylinen graafisen sijaan).

Hyper-V tukee Windows käyttöjärjestelmiä ja suurinta osaa eri Linux-versioista.

Xen Project[muokkaa]

Xen Project sai alkunsa tutkimusprojektista Campbridgen yliopistossa. Ensimmäinen julkinen versio Xenistä julkaistiin vuonna 2003. Sittemmin projektin isäntäyhtiö on myyty Citrix Systemsille vuonna 2007, jonka alaisena projektin kehittämistä on jatkettu.

Xen Project on avoimeen lähdekoodiin perustuva ”tyypin 1 hypervisor”, joka tarkoittaa sitä, että virtuaalikone on suorassa yhteydessä käytettävään laitteistoon sen sijaan, että virtuaalikoneen ja laitteiston välissä olisi vielä käyttöjärjestelmätaso. Tämä myös tekee siitä ainoan avoimen lähdekoodin tyypin 1 hypervisorin.

Tärkeimpinä ominaisuuksina markkinoidaan sen keveyttä, turvallisuuta, kykyä eristää laiteohjaimia virtuaalikoneisiin ja paravirtualisointia.

Nykypäivänä Xeniä käytetään useissa julkisissa pilvipalveluissa, kuten Amazon Web Servicessä, Linodessa ja Rackspace Hostingissa.

Virtuaalikoneita[muokkaa]

Dalvik oli avoimeen lähdekoodiin perustuva Android-käyttöjärjestelmän virtuaalikone, joka vastasi sovellusohjelmien ja joidenkin järjestelmäkirjastojen ajamisesta. Dalvik optimoitiin varta vasten järjestelmille, joissa muistin ja prosessorin suorituskyky on vähäinen. Ennen kaikki sovellukset suoritettiin Dalvik-koneella, mutta Androidin uusimmissa versioissa se ei enää ole käytössä.

Palvelut[muokkaa]

Useat pilvipalvelut tarjoavat erilaisia virtuaalikoneita kuuttaja-asiakkaille. Näitä ovat mm. Amazon Elastic Compute Cloud, Google Compute Engine sekä Nvidia Cloud Gaming (GaaS).

Amazon Web Services[muokkaa]

Amazon web services (AWS) on Amazonin tarjoama pilvipalvelu, joka on vuonna 2017 suurin palveluntarjoaja[16]. Keskeisiä palveluita, jota amazon web services tarjoaa ovat esimerkiksi Amazon EC2 ja Amazon S3. Amazonin pilvipalvelua on mainostettu yhtenä tehokkaimmista pilvilaskenta-alustana[17]. Käyttöjärjestelmäksi voi valita esimerkiksi Linux-pohjaisia jakeluversioita tai Windows server- käyttöjärjestelmän.[18]

Google Cloud[muokkaa]

Google Cloud on Googlen tarjoama pilvilaskentapalvelu. Google Cloud laskuttaa pilvipalvelimen käyttämän laskenta-ajan mukaisesti ja tarjoaa erilaisia klusterointimahdollisuuksia[19]. Google Cloudissa on mahdollista käyttää kerrallaan jopa 160 vCPU:a ja 3.75TB muistia. Google Cloud tarjoaa muistiksi perinteisen HDD muistin lisäksi myös nopeampaa SSD muistitilaa. Google Cloud tukee useita käyttöjärjestelmiä, kuten Debian, CentOS, SUSE, Red Hat Enterprise Linux sekä Windows Server 2008 R2. Google Cloud tukee myös Docker Containereita sovellusten virtualisointia varten.

Nvidia Cloud gaming (GaaS)[muokkaa]

Nvidian Cloud Gaming – Gaming as a Service (GaaS) on pilvipelaamispalvelu, jossa käyttäjä saa valita ennalta määrättyjen pelien valikoimasta pelin, jota haluaa pelata. Peli renderöidään Nvidian pilvipalvelimilla, josta se virtautetaan käyttäjän valitsemalle laitteelle. Tuettuihin laitteisiin lukeutuvat esimerkiksi älypuhelimet, tabletit, PC-tietokoneet tai jopa smart-TV:t.

Lähteet[muokkaa]

  1. Nopanen J. 2007. Virtualisointi-ilta
  2. CA 2010. Virtualization Best Practices.
  3. https://www.virtualbox.org/manual/ch06.html
  4. https://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.server_configclassic.doc_40/esx_server_config/security_for_esx_systems/c_security_and_virtual_machines.html
  5. https://www.cse.wustl.edu/~jain/cse571-09/ftp/vmsec/
  6. CA 2010. Virtualization Best Practices.
  7. https://computer.howstuffworks.com/server-virtualization.htm
  8. https://www.vmware.com/techpapers/2007/understanding-full-virtualization-paravirtualizat-1008.html
  9. https://en.wikipedia.org/wiki/X86_virtualization
  10. https://www.vmware.com/techpapers/2007/understanding-full-virtualization-paravirtualizat-1008.html
  11. https://www.virtualbox.org/wiki/Licensing_FAQ
  12. https://www.oracle.com/technetwork/server-storage/virtualbox/support/index.html
  13. https://www.vmware.com/products/player/faqs.html
  14. https://www.vmware.com/resources/compatibility/search.php?deviceCategory=software
  15. https://wiki.qemu.org/Main_Page
  16. https://yle.fi/uutiset/3-10541125
  17. https://aws.amazon.com/what-is-cloud-computing/
  18. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html
  19. https://cloud.google.com/compute/