3. rész - A legtöbbünkben a Virtuális világ az Internetet jelenti, bele sem gondolunk abba, hogy egy gépen belül is létezhet, sőt létezik virtualizáció.
Natív virtualizáció
A virtualizációs technológiák következtében a virtuális környezetben futó rendszerek mindenképpen némi teljesítménycsökkenéssel járnak a valós környezetben futókkal szemben. Azonban, ha csökkentjük a virtuális utasítások és hardverelérések számát, a teljesítménycsökkenés minimalizálható. Ezért alakult ki a natív virtualizáció, melynél a lényeg az, hogy szinte minden utasítás az eredeti hardveren fusson, kivételt csak azon utasítások képezzenek, melyek ütközést okozhatnának a több rendszer párhuzamos futtatása során. Manapság e módszer megkönnyítése érdekében a hardvergyártók is a programozók segítségére siettek, már megjelentek azok a processzorok, melyekbe beépítettek egy magasabb szintű védelmi rendszert a virtuális futtatókörnyezet számára, mely segítségével a virtuális környezetet biztosító alapkernel teljesen rejtve marad, és kontrollálhatja a kritikus folyamatokat a vendég operációs rendszerek tudta nélkül. Sőt, az új verziója a PCI-E standardnak már beépít magába olyan technológiákat is, melyek segítségével a virtuális rendszereket futtató kernel gyorsan tudja a hardverelem használatát egyik vendég operációs rendszertől a másikra ruházni, minimális időveszteséggel. Jelenleg még e technológia fejlődőben van, nem sok hardver, illetve szoftver használja, azonban egyértelműen ez a jövő PC technológiája (ezért is igyekeznek a gyártók minél előbb bekapcsolódni e hardverek gyártásába, e megoldások alkalmazásába).
A Natív virtualizáció a hardvertámogatás hiányában igen nehézkes tud lenni, sok problémát kell kiküszöbölni, és egyetlen program sem tudja jelenleg biztosítani a megfelelő virtualizáló alaprendszert. Törekvések azonban vannak, Vajdaság területén egy becskereki középiskolás fiatal már lassan két éve dolgozik saját ötletén, mely akár hardvertámogatás nélkül is képes lenne biztosítani a virtuális rendszerek működését natívan az eredeti hardver használatával.
Csordás Róbert nagybecskereki harmadik osztályos gimnáziumi tanulóval beszélgettem az egyik programjával kapcsolatban, mellyel már több díjat is nyert. Legutóbb az V. GENIUS diákversenyen a műszaki – informatikai szekcióban lett első díjas.
● Mi adta az ötletet, hogy belekezdj egy ilyen program, pontosabban operációs rendszer fejlesztésébe?
Az ötlet eredetileg úgy keletkezett, hogy elkezdtem egy kis hobbi operációs rendszer fejlesztését. Mikor ez már tűrhetően működött, azon gondolkodtam, mi újat lehetne vele kezdeni. Innen jött az ötlet. Mivel a kernelem semmilyen hardverelemet nem használ a processzoron, memórián, IRQ-vezérlőn és időzítőn kívül, ezért kivitelezhető a valódi hardverelemek használata a virtuális gépekben anélkül, hogy az én operációs rendszeremben drivereket (hardver meghajtó programokat) kellene hozzá implementálnom. Tovább gondolkodtam, és rájöttem, hogy az operációs rendszeremre írt viszonylag egyszerű driverek segítségével könnyen kivitelezhető, hogy a hardverelemet futásidőben más-más virtuális géphez rendeljük hozzá. Mindezen felül, mivel a virtuális gép a kernel szerves része, lehetővé válik a virtuális gép operációs rendszerének (al-kernel) az eddigieknél gyorsabb futtatása.
● Mi a különbség a te ötleted és a többi megoldás között, mivel jobb a te megoldásod?
Az eddigi megoldásoktól abban különbözik, hogy képes a számítógép valódi hardverét felosztani a futó virtuális gépek között. A másik lényeges különbség abban van, hogy az összes instrukciót, amely nem igényel speciális hardverelérést, user módban a valódi processzoron futtatja (ebben a módban az utasítás korlátozva van, nem végezhet el semmilyen közvetlen hardverelérési funkciót, ha hatáskörét megpróbálja túllépni, az kivételt okoz, melyet az operációs rendszer köteles lekezelni, akár a program futásának beszüntetésével – a szerk. megjegyzése). Az eddigi virtuális gépek ezt csak részben tudták megvalósítani, mivel programként futtatták. Így csak a felhasználói programok egyes részeit tudták a valódi gépen futtatni. A vendég operációs rendszer összes kernel instrukcióját (a user módú instrukciókat is) emulálták. Legtöbb esetben nagy gondot jelentett a memória-hozzáférések emulálása. E célra dinamikus újrafordítást is alkalmaztak, viszont az eddigi technológiák mind lassúbbak, ugyanis az általam kidolgozott virtuális gép teljes, üres címteret biztosít az al-kernelek részére. Így csak az egyes, speciális részek emulálására van szükség. Mindent összevetve az emulációt igénylő kód aránya jóval alacsonyabb. Hasonló projektum a Xen, viszont míg a Xen a vendég operációs rendszer portolását igényli (az eredeti rendszer módosítását ahhoz, hogy képes legyen kommunikálni az őt futtató alaprendszerrel – a szerk. megjegyzése), addig az általam kidolgozott megoldás teljesen transzparens számukra, a már kész operációs rendszerek újrafordítás, vagy bármi nemű valós időben történő módosítása, kódcseréje nélkül futtathatók rajta. Ez azért jelentős, mivel a zárt forráskódú operációs rendszerek esetében a portolás és újrafordítás nagy gondot jelenthet.
● Vannak-e mérési tapasztalataid a megoldásod sebességéről, előnyeiről, összehasonlításaid más megoldásokkal valós környezetben?
Mérési tapasztalataim nincsenek, ugyanis másfél év fejlesztés után (kb. 36 000 sor C nyelven és 4000 sor assembly kód) még mindég nem képes valódi operációs rendszerek futtatására. Ennek oka az, hogy a projektum realizálása túl nagy feladat egy ember számára, különösen, ha tanulás mellett, szabadidejében dolgozik rajta. A projektum proof-of-concept jellegű, azaz az eljárás kivitelezhetőséget hivatott bemutatni, így nem elsődleges cél a valós környezetben való tesztelés. A tesztkörnyezet sikeresen működik. A felmerülő nehézségeket és konfliktuslehetőségeket megoldottam, a teljes eljárást kidolgoztam elméleti szinten. Mivel nincs csapatom, sem ismerőseim, akik tudnak programozni, így a végleges, teljes egészében használható változat elkészítésére nincs lehetőség.
● Ezek szerint ismerősök nem segítenek a munkád során. Semmilyen támogatód sincsen?
Nem támogat senki. Jelenleg még mentorom sincs.
● Mik a jövőbeni terveid, hogyan látod, van jövője a fejlesztésednek?
Jövőbeni terveim közül a legfontosabb az Interneten való elérhetővé tétel. Ha elegen összegyűlnénk a fejlesztéshez, a projektum teljes egészében realizálhatóvá válna. Az új AM2-es ajzat az AMD processzoroknál már beépített virtualizációt segítő technika segítségével egy rendkívül gyors és sokoldalú virtuális gépet lehetne létrehozni, mely képes volna a számítógép összes hardverelemét felosztani a virtuális gépek között. Erre pillanatnyilag a hardverlehetőségeim sem adottak. AM2-es processzorokon lehetővé válik a majdnem teljesen natív emuláció, amelynél a sebességkülönbség észrevehetetlen. Ez azt is jelentheti, hogy a számítógép BIOS-ába integrálva lehetővé válna a számítógép teljes vizualizációja. Már létezik a BIOS-ba integrált Linux (LinuxBIOS), esetleg hasonló eljárással teljesen hardveralapra helyezhető a virtualizáció. Igaz, ennek nem sok köze van a vizualizációs megoldásomhoz.
Csordás Róbert a GENIUS versenyen
E megoldás nem tartozik a valódi számítógép virtualizáló eljárások közé, azonban elterjedt eljárásról van szó, különösen a szerverparkokban szokták alkalmazni. Cikksorozatunk végére hagyva most kielemezzük ennek az eljárásnak az előnyeit és hátrányait is.
Az eljárás során egy adott rendszerből másolatot készítünk, így valójában ugyanaz a rendszer fut több példányban, ahol csak az alattuk futó programok érzékelik azt, hogy önálló rendszereken futnak, holott valójában egyazon kernel alatt kerülnek végrehajtásra a feladatok. Ebből fakad e megoldás legnagyobb hátránya, egy rendszeren csak ugyanolyan rendszer emulálható, Linuxon Linux, Windowson Windows, stb. Habár arra van megoldás, hogy esetleg eltérő verziójú rendszerek fussanak, azonban túl nagy különbségek nem lehetnek. A megoldás előnye, hogy nagy sebességgel tud több virtuális rendszert egy időben futtatni. Valójában nincs jelentős sebességcsökkenés, ugyanakkor hatékonyan elkülöníthetőek a különbözőképpen bekonfigurált rendszerek, és az azok alatt futó programok. Továbbá nagyon jól lehet az erőforrások megosztását korlátozni, testre szabni, így a legtöbb esetben ezt a megoldást alkalmazzák a kibérelhető virtuális számítógépek megvalósítására a szerverparkokban. Több program is született a probléma megvalósítására, minden szervereken is futtatott operációs rendszerhez, mind ingyenes, mind kommerciális változatokban.
Elterjedt operációs rendszer szintű virtualizáló program a Virtuozzo http://www.swsoft.com/en/products/virtuozzo/), mely mind Linux, mind Windows rendszer virtualizálását lehetővé teszi (persze, csak az adott rendszer alatt, ahogy azt a technológia korlátozza). Sok fejlett kezelőfelülete van, akár a kliensek is könnyedén módosíthatják a rendszer paramétereit (csak azt, amit a rendszergazda megenged nekik), biztosítja, hogy az erőforrások megfelelően osztódjanak, a korlátozásokat figyeli, és végrehajtja. A Linuxos változat az OpenVZ-re épül (http://openvz.org/), mely teljesen szabad, ingyenesen használható, és nyílt a forráskódja. Valójában a két szoftver szinte ugyanazt adja, kivéve a kommerciális applikációkat, illetve a Microsoft Windows támogatását.
Nagy felhasználói tábora van a FreeVPS (http://www.freevps.com/), mely a Linux-VServer (http://linux-vserver.org/) másolata. Mindkettő nem más, mint Linux kernel patchelése, illetve a szükséges segédeszközök biztosítása a kényelmes virtuális rendszer telepítéséhez, szabályzásához, korlátozásához és megfigyeléséhez. Előnye, hogy egyetlen utasítás sem emulálódik, nincsenek virtuális diszkek, minek következtében a vészmentések kialakítása egyszerű és gyors folyamat, a virtuális hálózatok sincsenek emulálva, csupán el vannak különítve egymástól, ami előnyös a jó hálózati csomagfeldolgozás terén (nem dugul el a vonal az egyik rendszer hibás működése végett), azonban nagy hátránya a rendszernek, hogy nem lehet áthelyezni másik gépre a virtuális rendszert, még kikapcsolt állapotban sem. Sok előre előkészített szkriptet hoznak magukkal a vendég operációs rendszerek telepítéséhez, melyek mindent elvégeznek helyettünk.
Ez a virtualizálási eljárás problémája, hogy valamely mértékben módosítja a rendszer kernelét, annak érdekében, hogy az ál virtuális rendszerek ne vegyék észre, hogy ugyanarról a rendszerről van szó, ugyanazokat a rendszerrutinokat használják, csupán a programjaik (porceszeik) címtere van elkülönítve a memóriában, így csak a külvilág irányába viselkednek úgy, mintha egyedi rendszerek lennének, a gépen valójában egyetlen egy kernel fut. E módosítási probléma következtében nehézkes a zárt kódú rendszerekhez ezzel az eljárással virtualizáló programot írni, ezért kicsi a választéka a Windows, illetve a MacOS rendszerek e módú többszörözésére. Ugyanakkor probléma, hogy maga a kernel magja minden rendszernél ugyanaz, így egy hiba esetén az összes rendszer érintett, illetve könnyebben átjárhatók a virtuális rendszerek, ha valamely hiba végett nem különülnek el teljesen a memóriacímek (ugyanis az al-rendszer alatt is érzékelhető az alapkernel jelenléte).
Az elérni kívánt céltól függ, hogy melyik eljárás a leghatékonyabb. Minden esetre a legjobb eredmények elérésének érdekében a legtöbb modern program több eljárást is alkalmaz egy időben, sőt sokszor minden egyes speciális esetre és rendszerre optimalizált megoldásokkal. Ezért nehéz a különböző programokat és megoldásokat összehasonlítani. Legjobb, ha a választás előtt áttekintjük az igényeinket, lehetőségeinket, és az alapján döntünk a bőséges programválasztékok közül.
A wikipedia (http://en.wikipedia.org/wiki/Comparison_of_virtual_machines) oldalain találhatunk egy nagyon jó táblázatot, mely segítségével pillanatok alatt áttekintetjük, hogy mely szoftver milyen technológiával van ellátva, milyen licencelésű, és milyen rendszereket támogat.
Ezúttal áttekintettük a virtualizálás lehetőségeit, felhasználási területeit, és a jelenleg létező megoldásokat. A számítógép virtualizálása ma még nincs kihasználva teljes egészében, azonban bizonyos vagyok abban, hogy mind több rendszert építenek majd ezekre az alapokra. A cél az, hogy nagyobb biztonság mellett jobb gépkihasználtságot érjenek el, ugyanakkor az sem elvetendő tény, hogy a virtuális gépek könnyen mozgathatóak, melynek nyomán az egyes programok, felhasználói felületek még jobban elkülöníthetőek egymástól, illetve egymásba ágyazhatóak. Eljöhet az idő, amikor több különböző operációs rendszer egy idejű futtatásával kihasználjuk azok előnyeit, egységbe kovácsoljuk működésüket. Persze ma még azt mondhatjuk, hogy az egész gyermekcipőben jár, ami a PC-ket illeti, azonban ne feledjük azt se, hogy egyes nagyvállalatok már évtizedek óta állítanak elő olyan számítógépeket, melyek hardver szinten képesek virtualizált operációs rendszerek futtatására (például az IBM és a Sun). Az ilyen gépek felhasználási területe sokszor igen speciális, csak egyes vállalatok, kutatóintézetek alkalmazzák. Napjainkban azonban tanúi lehetünk annak, hogy a számítógép-virtualizáció lassan beköltözik a hétköznapi felhasználó életébe. Hogy mire fogjuk mindezt használni? Biztosat egyelőre nem lehet tudni, de hatalmasak a lehetőségek…