Virtualizáció
Virtualizáció fogalma: Virtualizáció egy hardveren több virtuális rendszer működik egyszerre, virtuális gépekben futó önálló vendég (guest) operációs rendszerek formájában A virtualizáció fő alkalmazási területei: virtuális környezet biztosítása hardver- és szoftverfejlesztők számára virtuális szerverek létrehozása egy nagyteljesítményű számítógép erőforrásait osztjuk fel, több feladatcsoportot elkülönítetten és biztonságosan kezelő virtuális környezetek között, melyek külön-külön nem igénylik a rendelkezésre álló összes erőforrást
A virtualizáció kialakulása A virtualizáció kialakulását motiváló tényezők: a TCO csökkentése beruházási költségtakarékosság hely és energia takarékosság üzemeltetés egyszerűsítése flexibilis infrastruktúra létrehozása leállási idők csökkentése skálázhatóság növelése megbízhatóság növelése A virtualizáció járulékos előnyei: egységes virtuális hardverfelület hatékony erőforrás-felhasználás biztosítása
A virtualizáció célja az IT és a menedzsment területén szerver konszolidáció alkalmazás konszolidáció sandboxing (nem megbízható programok zárt környezetben futtatása) több végrehajtási környezet biztosítása virtuális eszközök biztosítása különböző operációs rendszerek futtatási lehetősége egyidejűleg hibakeresés szoftver migráció szoftver fejlesztési környezet létrehozása tesztelés, minőségbiztosítás
Virtualizációs technológiák Folyamat szintű virtualizáció (hibrid VMM) Emuláció teljes hardverkörnyezet szimulációja Operációs rendszer szintű virtualizáció Hypervisor alapú virtualizáció (Type-1) Paravirtualizáció teljes virtualizáció kernel alapú virtualizáció (KVM) API virtualizáció Alkalmazás szintű futtatókörnyezet (Type-2) Hardveres (natív) virtualizáció támogatás
A virtualizáció alapproblémái A vendég (guest) operációs rendszert nem befolyásolhatja az, hogy a valódi hardver helyett virtuális környezetben fut Ehhez két alapproblémát kell megoldani: a futtatórendszernek a speciális (privilegizált) utasításokat el kell fognia és ki kell cserélnie a saját rendszerhívásaira x86 architektúrán a privilegizált utasítások egy részére nem lehet hardveres elfogást beállítani az operációs rendszerek a virtuális memórialapok hatékony kezeléséhez hardveres támogatást (MMU) használnak a virtuális gépek számára azonban egy indirekciós réteget kell beiktatni
Az alapproblémák megoldási módjai Emuláció: egy futtató rendszer vizsgálja és átalakítja a vendég operációs rendszer által végrehajtott utasításokat saját maga tart karban egy legfelső szintű laptáblát a memóriaelérések kezelésére ez a leglassúbb de legrugalmasabb megoldás (lehetővé teszi, hogy fizikai processzorétól eltérő utasításkészletet használjon a virtuális gép) az emuláció megvalósítható: futás közben interpretált módon dinamikus újrafordítással (JIT: Just in Time) ez a jobb
Az alapproblémák megoldási módjai Paravirtualizáció: a vendég operációs rendszert módosítja úgy, hogy a problémás utasítások helyett speciális rendszerhívásokat használjon a memória laptáblák kezelésére is speciális rendszerhívásokat használ a közvetlen MMU elérés helyett a vendég operációs rendszer CPU ütemezése kooperálhat a virtualizációs keretrendszer ütemezőjével jelenleg ez a leggyorsabb megoldás, de nem mindig használható (ha nem lehet a vendég operációs rendszert módosítani) Linux: a legújabb kernel kiadások eleve beépítetten támogatják a paravirtualizációt Windows: a kernel nem módosítható, ezért az emuláció és a paravirtualizáció kombinációját használják
Az alapproblémák megoldási módjai Natív virtualizáció: a CPU utasításkészletének és üzemmódjainak olyan kiegészítése, amely lehetővé teszi a vendég operációs rendszer kódjának módosítás nélküli futtatását az újabb processzorok tartalmaznak ilyen kiegészítéseket (Intel VT, AMD-V) teljesítménye jelenleg még elmarad a paravirtualizációs változatokhoz képest nem minden virtualizációs környezet képes kihasználni ezt a lehetőséget
Folyamatszintű virtualizáció jellemzői tulajdonképpen a hypervisor (hibrid VMM) egy folyamatként fut a gazda (host) gépen utasításkészlet szintű virtualizáció célja: másik típusú (utasításkészletű) virtuális eszköz (teljes számítógép) előállítása a teljes virtuális gépet egy hagyományos felhasználói program (process) valósítja meg ha a gazdarendszerrel megegyező architektúrájú gépet emulálunk lehetőség van a virtualizált rendszer gyorsítására egy a host rendszerbe beépülő modul biztosítja, hogy a virtuálisgépen futó program a valódi processzoron fusson (annak szoftveres emulációja helyett) különleges hasznosítási lehetőségei: szoftverfejlesztés még nem létező hardverre más architektúra operációs rendszerének futtatása
Folyamatszintű virtualizáció
Ismertebb emulátor szoftverek Bochs nyílt forráskódú, x86 architektúrájú PC emulátor több környezetre (pl. PowerPC, Alpha, SUN, MIPS) lefordítható Crusoe (Transmeta) egy dinamikus x86 emulátor a VLIW processzorban ún. code morphing engine, melynek célja az erőteljes utasításszintű optimalizálás az x86 utasításokat hajtja végre, de saját hatékonyabb VLIW utasításkészletén interpretálva Qemu nyílt-forráskódú processzor emulátor szoftver képes x86, ARM, PowerPC és Sparc processzorok emulálására a Crusoe-hoz hasonló technikával fordítja az utasításokat saját utasításkészletére, de ezt szoftverként teszi
Teljes hardver környezet szimuláció VMware Player, Workstation, Server ipari célú virtuális gép szolgáltató szoftverek az x86 gép nem teljes virtualizációját biztosítják a vendég operációs rendszerre specializált driverek telepítése szükséges létezik Windowsos és Linuxos változatuk is VirtualBox a VMware-hez hasonló, de egyszerűbb nyílt-forráskódú multiplatform szoftver MS Virtual PC és Virtual Server szintén a VMware-hez hasonló de csak Windowson fut (a Connectix cégtől vette meg a Microsoft)
Operációs rendszer szintű virtualizáció maga az operációs rendszer (kernel) hoz létre több egymástól független környezetet ezek a környezetek a felhasználói programok számára valódinak tűnnek minden környezetnek saját rendszergazdája és felhasználói lehetnek mivel a kernel közös így nem lehetnek különböző operációs rendszerre írtak az egymástól elszigetelt alkalmazások az elszigetelés lehetséges szintjei: Állományrendszer lemezterület kvóta I/O sebesség korlátozás memóriaterület korlátozás CPU használat korlátozás
Linux Vserver Operációs rendszer szintű Open VZ / Virtuozzo Solaris Containers FreeBSD Jail (börtön) virtualizáció
Hypervisor alapú virtualizáció a hardveren egy speciális VMM (Virtual Machine Monitor) a hypervisor fut a hypervisor feladata a hardverhez történő hozzáférések szabályozása a hypervisor felett egymástól független operációs rendszerek futnak nem hardvert virtualizál, csupán hívásokat (IO, Syscall, stb.) kap el pl. API wrapperrel és azokat valósítja meg az alatta lévő architektúrán
Hypervisor alapú virtualizáció
Kernel alapú virtualizáció (KVM) A 2.6.20-as változattól a Linux kernel egyik figyelemre méltó újdonsága a KVM (Kernel-based Virtual Machine) A patch a Linux kernel virtualizációs képességeit javítja A KVM teljes virtualizációs megoldást nyújt x86 architektúrájú gépeken futó Linuxra Egy betölthető kernel modulból (kvm.ko) és user space komponensekből áll A KVM segítségével felhasználója módosítás nélküli Windows és Linux image-eket futtathat egymástól függetlenül (gép a gépben hatás) Mindegyik virtuális gépnek saját virtualizált "hardvere" van, azaz szeparált hálózati kártyával, lemezmeghajtóval, grafikus adapterrel, stb. rendelkezik