Masini Virtuale

PROIECT DE LICENȚĂ

Mașini virtuale

CUPRINS

1. INTRODUCERE

2. HAL (Hardware Abstraction Layer)

2.1 Cum funcționează HAL ?

2.2 Componentele HAL

3. Mașina virtuală JAVA

3.1 Componența mașinii virtuale Java

3.2 Caracteristici

3.3 Arhitectura masinii Java

3.4 Mediul de execuție

3.5 Formatul bytecode

3.6 Fișiere de tip „.class"

3.7 Constrângeri ale codului utilizat de JVM

4. VMware

4.1 Aplicațiile VMware

4.2 Dispozitivele VMware

4.3 VMware ESX Server

4.4 VMware Converter

4.5 Îmbunătățirea performanțelor VMware

5. x86 virtualization

6. Virtuozzo

6.1 Caracteristici

6.2 OpenVZ

6.3 Comparație

7. Z-machine

7.1 O privire asupra structurii mașinii

7.2 Maparea memoriei

8. Instalarea unei masini virtuale cu Virtual Box

8.1 Instalarea Oracle Virtual Box

8.2 Instalarea unei masini virtuale Fedora Linux cu VirtualBox

9. Securitatea mașinilor virtuale, o problemă încă ignorată

10.Bibliografie

Cărți:

Site-uri de internet:

INTRODUCERE

Mașina virtuală este un calculator imaginar, dotat cu un set de instrucțiuni ce constituie limbajul (codul)virtual.

Lucrul cu cod virtual decurge astfel: textul sursă este tradus de către compilator în limbaj virtual; programul rezultat constituie intrare pentru o procedură numită executiv, care este de fapt un interpretor al limbajului virtual. Executivul este scris într-un limbaj recunoscut de calculatorul țintă (cel pe care urmează să ruleze programul compilat). Rolul executivului este acela de a parcurge codul virtual obținut de la compilator și de a executa fiecare instrucțiune, în termenii limbajului mașina al calculatorului țintă .

Avantajul acestui mod de lucru este acela că dacă un limbaj sursă trebuie tradus în mai multe limbaje obiect, compilatorul propriu-zis se scrie o singură dată (el generează doar cod virtual), iar pentru fiecare limbaj obiect se construiește câte un executiv. A scrie un executiv este un lucru mult mai ușor decât a scrie un compilator. Pe de altă parte, programul generat în cod virtual poate fi transportat pe orice mașină dotată cu interpretorul codului respectiv, deci programul are o portabilitate crescută.

Un dezavantaj al lucrului cu cod virtual este acela că viteza de execuție a programelor respective este mai mică, deoarece ele sunt executate "software" (prin intermediul interpretorului) și nu "hardware" (direct de către procesor).

Limbajul virtual și structura mașinii virtuale sunt stabilite în principiu de către proiectantul compilatorului, după următoarele criterii:

Comenzile virtuale să fie suficiente pentru a permite transpunerea corectă a instrucțiunilor limbajului sursă;

funcționarea mașinii virtuale să poată fi cât mai ușor de simulat cu ajutorul executivelor, pentru fiecare limbaj obiect.

În general, limbajul virtual este inspirat din limbajele de asamblare existente la un moment dat, având însa un grad ceva mai mare de abstractizare.

Virtualizarea este un termen larg ce se referă la abstractizarea resurselor unui calculator. Este o tehnică de ascundere a caracteristicilor resurselor unui calculator prin felul în care alte sisteme de operare, aplicații și utilizatorii interacționează cu aceste resurse. Virtualizarea include crearea unei singure resurse fizice (server, sistem de operare, hard disk), pentru a funcționa ca multiple resurse logice sau invers (mai multe mașini fizice formând una singură, o mașina virtuală).

Virtualizarea permite multiple mașini virtuale, cu sisteme de operare heterogene, să ruleze separat, una lângă alta, pe aceeași mașina fizică. Fiecare mașină virtuală are propriul ei set de hardwere (RAM, CPU, NIC, etc) pe care este încărcat un sistem de operare cu tot cu aplicații. Mașinile virtuale sunt încapsulate în fișiere, făcând posibilă copierea și salvarea rapidă a mașinii. Întregul sistem poate fi mutat în câteva secunde (sistemul de operare, aplicațiile, Bios-ul virtual, hardware-ul virtual).

Există două categorii de virtualizare: virtualizare pe platformă (implică simularea mașinilor virtuale) și virtualizare pe resurse (implică simularea combinării, simplificării sau fragmentării resurselor. Termenul de virtualizare este o creație a mașinii virtuale, folosind o combinație între hardware și software. Virtualizarea pe platformă conține o platformă hard și un program de control.

HAL (Hardware Abstraction Layer)

La nivelul superior, HAL este doar o cale de a permite unui număr de „blocuri de construcție" să fie încărcate si interconectate pentru a reuni un sistem complex. Partea „Hardware" este pentru că HAL a fost inițial conceput să ușureze configurarea EMC-ului pentru o plajă largă de echipamente hardware. Multe dintre blocurile de construcție sunt drivere pentru echipamentele hardware. Totuși, HAL poate face mai mult decât doar configurarea unor drivere de echipamente.

HAL se bazează pe aceleași principii care sunt folosite în proiectarea circuitelor și sistemelor hardware, deci se recomandă studierea acelor principii înainte. Orice sistem (incluzând un echipament CNC = computer numerical control), constă în componentele interconectate. Pentru echipamentul CNC, acele componente pot fi controller-ul principal, amplificatoare servo, motoare, codificatoare. Constructorul mașină trebuie să aleagă, sa monteze și să cableze aceste părți pentru a realiza întregul sistem.

2.1 Cum funcționează HAL ?

Constructorul mașină nu trebuie să aibă grijă de fiecare componentă, luând-o ca atare. La nivelul de proiectare, el decide ce componente va folosi. Decizile sunt luate în funcție de ce face fiecare componentă și de specificațiile furnizate de producător.

Proiectantul unui sistem hardware nu numai că alege componentele, dar și decide cum vor fi interconectectate acestea cu ajutorul unei schițe ce arată toate legăturile.

De îndată ce schița este gata, se trece la constuirea mașinii. HAL posedă mai multe utilitare să ajute la construirea sistemului. Unele dintre acestea permit conectarea/deconectarea unui singur fir, iar altele păstrarea listei complete de componente, fire și alte informații despre sistem, astfel încât să poată fi „reconstruit" printr-o singură comandă.

Foarte puține mașini funcționează cum trebuie de prima dată. Pe durata testării, constructorul poate folosi diverse aparate de măsura pentru a verifica parametrii de funcționare. Este posibil să gaseasca o problema care poate duce la schimbarea schiței. HAL furnizează echivalente software pentru voltmetru, osciloscop, generator de semnal și alte utilitare pentru a testa si calibra un sistem.

2.2 Componentele HAL

Programe externe

motion- un modul în timp real ce acceptă comenzi de mișcare NML și interacționează cu HAL.

iocontrol – un modul de spațiu al utilizatorului ce acceptă comenzi de I/O NML și interacționează cu HAL

classicladder – un PLC (Programmable logic controller) care folosește HAL pentru toate I/O (intrări/ieșiri)

halui – un program de spațiu al utilizatorului ce interacționează cu HAL și trimite comenzi NML.

Componente interne

stepgen – generator de puls

encoder- numărător codificator bazat pe software

pid – bucle de control proporționale/integratoare/derivatoare

siggen – generator de testare a undelor sinusoidale / cosinusoidale / triunghiulare / pătratice

supply- o simplă sursă de testare

blocks- combinații de componente uzuale (mux, demux, or, and, integ, ddt, limit, wcomp)

Utilitare

halcmd – utilitar cu linie de comandă pentru configurare si ajustare

halgui – utilitar GUI (Graphical user interface)pentru configurare si ajustare (neimplementat incă)

halmeter – un multimetru de mână pentru semnale HAL

halscope – un osciloscop cu stocare digitală pentru semnale HAL

Mașina virtuală JAVA

Limbajul Java reprezintă un limbaj de programare orientat pe obiecte, dezvoltat la origine de firma SUN Microsystems și devenit public în 1995 ca parte componentă a platformei Java dezvoltată de Sun. Sintaxa acestui limbaj este asemănătoare cu a limbajelor de nivel înalt C și C++, însă deosebirile dintre cele două sunt importante.

Fundamentul platformei Java este dat de mașina virtuală, reprezentând mediul în care se execută programele. Astfel, orice limbaj Java compilat, corect scris, poate fi rulat pe orice computer pe care e instalată o mașină virtuală, independent de arhitectura acestuia. Acest lucru este posibil deoarece, în urma compilării, sursele sunt transformate în bytecode, acesta reprezentând formatul standard intermediar între codul mașină și codul sursă.

3.1 Componența mașinii virtuale Java

Mașina virtuală Java poate fi împărțită în mai multe componente:

ClassLoader: se ocupă cu aducerea fișierelor bytecode necesare execuției programului, fișiere ce se pot găsi pe orice calculator dintr-o rețea dată;

Bytecode Verifier: este utilizat pentru a verifica dacă fișierele de tip bytecode respectă setul de reguli Java; fișierele ce nu sunt în concordanță cu aceste norme sunt respinse;

Interpreter + Java RunTime: se folosesc pentru analiza și transformarea fiecărei instrucțiuni de tip bytecode din cod mașină în instrucțiuni ale mașinii reale. Deoarece mașina virtuală Java constituie un nivel suplimentar deasupra platformei de lucru (componente hardware și sistem de operare) execuția programelor Java este mai lentă decât execuția codurilor native;

JIT (Just-in-Time): oferă ca soluție pentru problema expusă anterior o executare a programului printr-un compilator JIT ce transferă din primul moment programul Java în instrucțiuni ale procesorului, reușind astfel să crească viteza de execuție a programelor;

Garbage Collector: reprezintă componenta ce se ocupă de eliberarea zonelor de memorie alocate ce nu mai sunt utilizate de program. Specificațiile mașinii virtuale nu impun un algoritm de dezalocare, lăsând stabilirea acestuia la latitudinea celui ce implementează aplicația. Cu toate acestea, deoarece în Java nu îi este permis programatorului să aibă acces la resurse, de ocuparea și eliberarea propriu-zisă se ocupă mediul de execuție;

Security Manager: asigură respectarea restricțiilor de securitate impuse de lucrul cu sisteme deschise. Arhitectura mașinii virtuale asigură un control foarte fin asupra acțiunilor pe care aplicația are voie să le întreprindă în interiorul mașinii. Astfel, această parte este concepută pentru a asigura execuția în siguranță a unui cod „nesigur" provenit din surse îndepărtate, caracteristică utilizată îndeosebi de către applet-uri ce rulează pe mașini virtuale încorporate în browser-ele folosite de către utilizatori și care execută codurile descărcate de pe server-ele http de la distanță.

3.2 Caracteristici

Mașina virtuală Java poate fi considerată un calculator abstract, dispunând, ca și calculatoarele reale, de un set de instrucțiuni, unul de registre și diferite zone de memorie. Aplicațiile scrise în Java nu sunt astfel compilate pentru o platformă anume, ducând la o separare de platformă a limbajului. Nefiind impusă o implementare anume, mașina virtuală se poate implementa ca interpretor de cod binar, compilator (generează cod nativ), sau pe Siliciu, dar păstrând funcționalitatea. Arhitectura JVM, este, ca a majorității mașinilor virtuale, de tip stivă.

Această mașină virtuală folosește un bytecode obținut, de obicei, din codul sursă al programului scris în Java. Deoarece acest lucru nu este necesar, un JVM poate fi folosit și pentru implementarea altor programe, cum ar fi, de exemplu Ada. Pentru o securitate sporită, fișierelor cu extensia „.class" (bytecode-ul) li se impun constrângeri importante, atât în ceea ce privește formatul, cât și structura.

În paralel cu mașina virtuală, sunt distribuite o serie de librării care formează așa-numitul Java API (Application Programming Interface). Deoarece cele două componente trebuie să se susțină reciproc, ele sunt încorporporate în Java Runtime Environment. Această structură este reprezentată în figuta de mai jos. [Figura 3.1]

3.3 Arhitectura masinii Java

Mașina virtuală Java are o arhitectură de tip stivă, această struc cod nativ), sau pe Siliciu, dar păstrând funcționalitatea. Arhitectura JVM, este, ca a majorității mașinilor virtuale, de tip stivă.

Această mașină virtuală folosește un bytecode obținut, de obicei, din codul sursă al programului scris în Java. Deoarece acest lucru nu este necesar, un JVM poate fi folosit și pentru implementarea altor programe, cum ar fi, de exemplu Ada. Pentru o securitate sporită, fișierelor cu extensia „.class" (bytecode-ul) li se impun constrângeri importante, atât în ceea ce privește formatul, cât și structura.

În paralel cu mașina virtuală, sunt distribuite o serie de librării care formează așa-numitul Java API (Application Programming Interface). Deoarece cele două componente trebuie să se susțină reciproc, ele sunt încorporporate în Java Runtime Environment. Această structură este reprezentată în figuta de mai jos. [Figura 3.1]

3.3 Arhitectura masinii Java

Mașina virtuală Java are o arhitectură de tip stivă, această structură fiind folosită pentru furnizarea parametrilor pentru operații, preluarea rezultatelor, transferarea parametrilor metodelor ș.a.m.d. Ca și în orice alt limbaj si în Java stack frame-ul are o structură ce conține 3 elemente: variabilele locale, mediul de execuție și stiva de operanzi. În timpul apelării unei metode se va aloca spațiu pentru variabilele locale și mediul de execuție, în timp ce pentru stiva de operanzi schimbările vor surveni în timpul execuției.

Variabilele locale reprezintă un format stocat pe 32 de biți, pentru valorile datelor reprezentate prin tipuri de date long și double fiind alocate câte două variabile locale. Aceste elemente sunt stocate într-un vector, fiind adresate prin registrul „vars" și încărcate cu ajutorul stivei de operanzi.

Mediul de execuție este o componentă a ferestrei de stivă utilizată pentru păstrarea operațiilor efectuate aici. Ea conține informații ce se folosesc la depanare, precum și pointeri către fereastra de stivă precedentă și către baza și vârful stivei de operanzi și variabilele locale.

Stiva de operanzi funcționează după principiul First-In-First-Out (FIFO) și are dimensiunea de 32 de biți. Aici se stochează argumentele și rezultatele obținute în urma încărcării instrucțiunilor mașinii virtuale Java, pentru fiecare tip de date putând fi utilizate numai operații specifice.

O importanță deosebită o au și clauzele „catch" conținute în fiecare metodă din Java. Fiecare clauză se ocupă de tratarea excepțiilor, aici fiind inclus domeniul pentru care este activă, tipul excepției tratate, precum șimodalitatea de rezolvare a problemei. La aruncarea oricărei excepții se va executa o căutare în lista „catch", corespondențele fiind valide în cazul în care excepția tratată este inclusă în domeniul în care este validă clauza, sau dacă aceasta este derivată din excepția tratată. Dacă cele două elemente sunt compatibile se vor executa comenzile din blocul ce tratează excepția, în caz contrar aceasta fiind aruncată la un nivel superior aceluia în care a apărut.

3.4 Mediul de execuție

Orice program ce se dorește a fi utilizat de către o JVM trebuie compilat într-un format binar standard, ce conține extensia „.class". Aceste programe pot conține clase multiple aflate în fișiere diferite, de aceea este preferată utilizarea arhivelor Java (fișiere „.jar") pentru manevrarea programelor de dimensiuni extinse.

Deși mașina virtuală Java a fost concepută la bază pentru rularea programelor Java compilate anterior și alte programe pot fi acum astfel rulate. Printre aceste programe compatibile se numără Ruby (se utilizează JRuby), JavaScript (cu Rhino) sau Phyton (cu Jytho). În prezent, Java are de asemenea implementat suport pentru clasele și metodele ce se modifică dinamic, lucru posibil însă numai în mediile de depanare.

Execuția oricărui program se desfășoară în jurul duratei de viață a mașinii virtuale, a claselor, interfețelor și obiectelor care formează un program. Mașina virtuală pornește execuția în momentul în care este apelată metoda „main" a unei clase prin trimiterea unui singur argument, sub forma unui șir de caractere. Astfel, clasele utilizate sunt încărcate, inițializate și conectate cu celelalte tipuri folosite. Pentru acestea, metoda „main" trebuie declarată public, static și void (exemplu: public static void main(String Args[]) {}).

Încărcarea este efectuată de către ClassLoader și subclasele conținute de acesta. De asemenea, un rol suplimentar al ClassLoader-ului este acela de a semnala erori din timpul încărcarii claselor prin aruncarea de excepții.

Conectarea are loc în urma încărcării și folosește forma binară a unei clase sau interfețe și intercalarea în procesul de rulare al mașinii virtuale. Activitățile implicate în procesul de conectare sunt: verificarea, pregătirea și analiza referințelor simbolice.

Inițializarea unei clase cuprinde executarea inițializatorilor statici pentru câmpuri și metode declarate în clasă. Pentru interfețe, inițializarea cuprinde câmpurile din interfață. Înainte de acest proces, trebuiesc inițializate întâi superclasele, dar nu și interfețele implementate de clasa în discuție. În mod similar, superinterfețele trebuiesc și ele inițializate înaintea interfeței de bază.

Mașina virtuală Java își încheie activitatea atunci când se întâmplă unul din următoarele lucruri:

toate thread-urile sunt terminate;

unul din thread-uri invocă metoda „exit" a clasei Runtime sau System și operația de ieșire este permisă de către managerul de securiatate.

3.5 Formatul bytecode

Limbajul Java este considerat a fi un limbaj sigur, în sensul că nici un utilizator nu poate să afecteze funcționarea mașinii gazdă, să intervină într-un mod neadecvat în operațiile efectuate de aceasta sau ca funcțiile și structurile de date ce aparțin codului „sigur" să nu fie afectate sau corupte de un cod considerat „nesigur" cerulează pe aceeași mașină virtuală. Mai mult, se consideră că se poate împiedica apariția erorilor comune de programare, cum ar fi depășirea dimensiunilor unui array sau folosirea de pointeri neinițializați, care duc la un comportament neprevăzut al compilatorului sau la afectarea datelor existente.

Pentru a evita aceste probleme, mașina virtuală Java verifică bytecode-ul înainte de execuție, verificare ce se desfășoară în 3 pași:

toate variabilele indică locații valide din memorie;

datele sunt întoatdeauna inițializate;

accesul la datele declarate „private" este strict controlat.

Primele două din aceste etape au loc în timpul pasului de „verificare", care are loc atunci când o clasă este încărcată și gata pentru a fi folosită. Cel de al treilea pas se efectuează în mod dinamic, atunci când datele sau metodele unei clase sunt pentru prima oară accesate de o altă clasă. Această verificare impune anumite restricții asupra programelor valide, cum ar fi cele ce afectează instrucțiunile de salt care pot face referire numai la funcții din aceeași funcție sau metodă. De asemenea, verificarea bytecode-ului oferă siguranța că modelele arbitrare de biți nu se pot folosi ca și adrese valide. Astfel, protecția memoriei este asigurată fără utilizarea unei MMU (Memory Management Unit), iar JVM-ul devine o metodă eficientă pentru protecția memoriei chiar și pe arhitecturi simple.

Așa cum s-a precizat, bytecode-ul reprezintă tipul de instrucțiuni pe care mașina virtuală Java poate să îl execute, reprezentând echivalentul de limbaj de asamblare a unei aplicații Java. La fel ca orice aplicație C, rezultatul obținut în urma compilării este un cod binar, cu deosebirea că aici nu este strâns legat de un microprocesor.

Instrucțiunile Java sunt formate dintr-un opcode și operanzi. Opcode-ul are lungimea de un octet, în timp ce operandul este de lungime variabilă. Cu toate acestea, nu toate cele 256 de instrucțiuni posibile sunt utilizate, existând un anumit număr ce sunt mereu libere. Operanzii cu lungimi mai mari de un octet se vor păstra în memorie folosind modelul „big endian", în care octetul cel mai semnificativ este primul.

Operanzii din memoria de date a JVM-ului sunt prelucrate de instrucțiunile binare Java ca aparținând unui grup redus de tipuri primitive. Aceste tipuri de date primitive pot fi: byte, short, int, long, char, floar, double sau boolean. Ele sunt tratate de către compilator și nu de programul Java compilat sau mediul de execuție Java, instrucțiunile Java conținând cod operație separat pentru diferitele tipuri de date primitive.

Mașina virtuală Java conține instrucțiuni pentru următoarele grupuri de sarcini:

operații aritmetice;

conversii;

încărcare și înmagazinare;

crearea și manipularea de obiecte;

controlul stivei cu operanzi;

controlul transferurilor;

apelarea metodelor și elementele returnate;

aruncarea de excepții;

Toate aceste reprezentări binare au ca scop compatibilitatea între sisteme, deoarece fiecare sistem de operare de pe unitățile de prelucrare are nevoie de versiunea proprie de JVM. Aceste mașini virtuale interpretează însă bytecode-ul similar din punct de vedere semantic, deși implementările pot să difere de la caz la caz. Un caz mai special decât cel legat de portabilitatea bytecode-ului este dat de implementare eficientă a Java API, care trebuie sa fie în concordanță cu cerințele fiecărui sistem de operare.

Din punctul de vedere al unui compilator, bytecode-ul reprezintă doar un alt tip de procesor cu un set de instrucțiuni care poate trata codul generat. Astfel, deși mașina virtuală Java a fost inițial concepută pentru a executa programe scrise în limbajul Java, aceasta oferă un mediu de execuție în format bytecode îndeajuns de dezvoltat pentru a suporta compilări ale programelor scrise în alte limbaje.

3.6 Fișiere de tip „.class"

În urma compilării, fișierul ce trebuie executat de către mașina virtuală Java este reprezentat utilizând un format binar hardware și independent de sistemul de operare, gasit de obicei în fișiere cu extensia „.class". Acest format definește în mod precis și detaliat reprezentarea unei clase sau a unei interfețe.

3.7Constrângeri ale codului utilizat de JVM

Codul mașinii virtuale Java pentru o metodă, metodă de inițializare a instanțelor, sau metode de inițializare a claselor și metodelor sunt localizate în structura method_info a unui fișier „.class". Constrângerile care sunt asociate cu conținutul structurii Code_attribute se împart în două categorii: constrângeri statice și constrângeri structurale.

Constrângerile statice asupra unui fișier de tip „.class" sunt acelea care definesc corectitudinea formatului acestui tip de fișier. Aceste constrângeri impuse asupra codului din mașina virtuală Java arată structura instrucțiunilor mașinii virtuale și operanzii ce vor fi folosiți pentru fiecare instrucțiune.

Din constrângerile legate de instrucțiunile aflate în vectorul de instrucțiuni și operazi putem aminti:

Valoarea elementului code_legth nu poate fi 0 și trebuie să fie mai mică decât 65536;

Opcode-ul primei instrucțiuni din tabloul code are întotdeauna indexul 0;

Pentru fiecare instrucțiune din vectorul de instrucțiuni, cu excepția ultimeia, indexul opcode-ului următoarei instrucțiuni trebuie să fie egal cu indexul opcode-ului de la instrucțiunea curentă la care se adaugă lungimea instrucțiunii în discuție, incluzând toți operanzii;

Registrul la care face referire o instrucțiune de salt trebuie să fie un opcode al unei instrucțiuni din aceeași metodă;

Constrângerile structurale coordonează relațiile dintre instrucțiunile mașinii virtuale Java. Dintre acestea putem menționa:

Fiecare instrucțiune trebuie executată în funcție de tipul și numărul de argumente din vectorul variabilelor locale. Cu toate acestea, o instrucțiune ce operează asupra unei valori de tip int poate să

prelucreze și date de tipul boolea, byte, char și short, deoarece mașina virtuală Java convertește automat aceste tipuri la tipul int;

În timpul execuției nu se poate schimba ordinea dintr-o pereche de variabile locale ce conțin elemente de tip long sau double;

Nici o variabilă locală nu poate fi accesată înainte de inițializare;

Înaintea accesării unei metode sau instanțe a unei variabile, instanța clasei ce conține metoda sau variabila trebuie să fi fost deja inițializată;

La apelul unei metode, argumentele utilizate trebuie să fie compatibile cu tipul utilizat în descrierea metodei;

Fiecare element returnat trebuie să aibă tipul specificat în descrierea metodei. Toate metodele de inițializare, fie ele pentru clase sau interfețe, sau metodele ce returnează void trebuie să utilizeze numai instrucțiunea „return". Pentru metodele ce returnează date de tip boolean, byte, char, short sau int se folosește instrucțiunea „ireturn", în timp ce pentru metode ce returnează o referință la obiect se va utiliza „areturn";

Nici o valoare de tipul returnAddress nu poate fi accesată folosind o variabilă locală. În fișierele de tip „.class" se mai întâlnesc următoarele limitări:

În rezerva de constante (constant pool) asociate fiecărei clase Java se va păstra numele tuturor câmpurilor, metodelor și informațiile ce pot fi utilizate de orice metodă a clasei. Această rezervă se comportă ca o limitare internă a complexității clasei sau interfeței create, deoarece dimensiunea ei nu poate depăși 65535 de instrări;

Numărul de câmpuri ce pot fi declarate în interiorul unei clase sau interfețe este limitat la 65535 de către valoarea elementului „fields_count". Această valoare nu include însă câmpuri moștenite de la superclase sau superinterfețe;

Numărul de metode ce pot fi declarate într-o clasă sau interfață este dat de valoarea maxima de 65535 a valorii lui „methods_count" din structura ClassFile, în această valoare nefiind incluse metodele moștenite;

Numărul de superinterfețe sau de superclase este și el limitat de aceeași valoare (65535) prin valoarea maximă a elementului interfaces_count;

Într-o metodă, numărul parmetrilor este limitat la 255 în definirea descriptorului metodei, în această limită fiind inclus un loc și pentru cuvântul cheie „this", în cazul în care se invocă o instanță sau interfață a respectivei metode. Descriptorul metodei este definit în funcție de dimensiunea parametrilor, astfel că limita se reduce în cazul utilizării tipurilor long sau double cărora le sunt alocate două unități;

Lungimea numelor câmpurilor și metodelor, descriptorilor de câmpuri și metode sau alte string-uri cu valoare constantă trebuie să aibă dimensiuni mai mici de 65535 de caractere datorită dimensiunii pe 16 biti a elementului length din structura CONSTANT_Utf8_info. Limita este de fapt impusă asupra numărului de octeți si nu asupra numărului de caractere codate, de aceea string-urile ce conțin caractere codate pe mai mulți octeți sunt supuse unor limitări mai importante.

VMware

VMware este o mașina virtuală ce permite accesul la sisteme de operare diferite de sistemul de operare nativ. Spre exemplu pe o platformă hardware ce rulează sistemul Windows XP se poate rula simultan un alt sistem de operare cum ar fi Linux sau o altă versiune de Windows.

VMware se bazează pe o arhitectură de tip Pentium (sau superioară acesteia) și este disponibilă pentru sistemele de operare Windows și Linux. Mașina virtuală funcționează pe o platformă hardware reală copiind arhitectura acesteia. Astfel dacă avem la dispoziție o arhitectură Intel Core 2 atunci mașina virtuală va prelua toate elementele acesteia (setul de instrucțiuni, accesul la memorie etc.) și nu va funcționa ca un alt tip de arhitectură Pentium.

Ca principiu de funcționare mașina virtuală VMware se comportă asemănător unui emulator însă cu câteva diferențe majore. Emulatorul se bazează pe resurse software interceptând și interpretând instrucțiunile mașinii client pe când VMware interceptează și transmite platformei hardware reale instrucțiunile. Rezultă de aici mai multe avantaje printre care cele mai importante sunt viteza de lucru mai mare și reducerea probabilității de apariție a erorilor. Creșterea vitezei este rezultatul direct al modului în care sunt tratate instrucțiunile. Dacă la emulator acestea sunt tratate la nivel software la VMware acestea sunt preluate de hardware-ul mașinii gazdă. Sunt astfel diminuate și sansele de a apărea erori întrucât procesorul gazdei are mult mai puține șanse să genereze erori decât o aplicație software. Totuși, viteza de lucru a sistemului client este mai scazută decât a sistemului gazdă întrucât este nevoie de timp pentru a comunica între hardware-ul virtual și cel real.

4.1 Aplicațiile VMware

Una dintre cele mai importante întrebuințări ale VMware este aceea de a testa noile sisteme de operare. În principiu, pentru testarea unui sistem de operare este nevoie de un calculator fizic, fiind nevoie ca pentru orice modificare în nucleu (kernel) să se facă o restartare a întregului sistem. Testarea pe un alt calculator este iarăși o soluție consumatoare de timp fiind permanent nevoie de a se copia informațiile de pe o mașină pe alta. VMware elimină această necesitate întrucât noul sistem poate fi rulat pe același calculator, împărțind același mediu de stocare fizic cu mașina pe care este dezvoltat. Datele pot fi astfel transferate foarte ușor, depanarea este mult mai facilă întrucât VMware pune la dispoziție unele instrumente specifice (Snapshot Record) precum și un disc de revenire în caz ca sistemul client cedează pentru a-l readuce la setările inițiale.

VMware este folosit de asemenea și la simularea și testarea retelelor, acestea putând fi create la nivel virtual fără cabluri sau terminale fizice. Se pot stabili legături de tip client-client sau client server între gazdă și sistemul de operare găzduit. Toate setările pot fi efectuate de pe un singur calculator și se pot testa oricâte conexiuni simultane fără posibilitatea de supraîncărcare și apariție a fenomenului de bottleneck la nivelul rețelei.

4.2 Dispozitivele VMware

Magistralele

Sunt trei dispozitive de bază pe care VMware le simulează. Ca la orice sistem de calcul acestea sunt: procesorul, memoria și dispozitivele Input/Output. La un calculator obișnuit procesorul este conectat de restul componentelor prin intermediul magistralelor (bus), acest lucru fiind necesar să fie implementat și pentru mașina virtuală. VMware are două magistrale virtuale, prima dintre ele cu o funcționare similară modelului PCI, iar cea de-a doua denumită PCI-to-ISA bridge. ISA este un standard hardware vechi, provenit de la sistemele IBM, la care s-a renunțat din cauza unor limitări ale acestuia. Una dintre limitări ține de controlul întreruperilor. Dispozitivele trimit cereri de întreruperi prin magistrală către UPC. Acesta își încetează activitatea și procesează întreruperea. ISA numerotează aceste întreruperi (IRQ) pentru a le diferenția. Din păcate pentru ISA nu sunt foarte multe numere, iar atunci când apare situația în care două întreruperi poartă același numere, rezultă conflicte grave. Acest lucru este rezolvat de PCI care nu are numere fixe pentru întreruperi, iar întreruperile PCI poartă mai multă informație astfel încât într-o singură întrerupere PCI și mai multe dispozitive pot împărți același IRQ.[Figura 4.1]

Figura 4.1 – VMware – hardware real si virtual

În figură, partea virtuală este încadrată în chenarul punctat. Se observă foarte bine cum dispozitivele sunt conectate la UCP prin intermediul magistralei PCI și a PCI-to-ISA bridge și a interfețelor acestora.

Discurile IDE și CD-ROM

VMware posedă două controllere IDE (Integrated Device Electronics) numite primar și secundar. Hardware-ul virtual pentru acestea este chipsetul Intel 82371AB PIIX3 având porturile IRQ asignate ca în tabelul de mai jos. [Tabelul 4.1]

Tabelul 4.1 – Controllerele IDE

Ca orice interfață IDE aceste porturi pot suporta maximum două dispozitive (numite master și slave), fiind limitate în cazul VMware la discurile CD-ROM/DVD-ROM, CD-R și CD-RW care pot fi configurate în mai multe moduri. Aceste discuri sunt stocate pe suportul hardware real sub formă de imagini virtuale, ocupand o parte din spatiul discului real. Un disk "raw" este o mapare a discurilor sistemelor gazdă ce poate fi folosită sub VMware. Un avantaj al acestor discuri virtuale e că se pot manipula mult mai ușor și se pot folosi imagini virtuale de pe sistemul gazdă.

Discurile SCSI (Small Computer System Interface)

SCSI e un standard de magistrală folosit la calculatoarele personale, independent de arhitectura acestora. Un astfel de hardware virtual folosește și VMware care poate suporta până la 60 discuri virtuale, față de 15 cât poate suporta o magistrală SCSI reală și folosește un cotroller LSI Logic LSI53C10xx Ultra320 SCSI I/O. Modul de funcționare al interfeței SCSI este asemănător cu cel al IDE, fiind tratată ca un dispozitiv PCI și având numerele IRQ și porturile alocate dinamic la fiecare pornire.

Discurile Floppy

În VMware se pot configura 2 discuri floppy ca mapări ale discurilor reale de pe sistemul gazdă. Acestea se pot accesa atât de pe sistemul gazdă cât și prin intermediul VMware. Controllerul floppy are IRQ 6 cu porturile I/O la adresele 0x03f0 – 0x3f5 si 0x3f7.

Interfețele Ethernet

Interfața Ethernet virtuală a VMware este AMD PCnet bazată pe chipul AMD 79C970A sau pentru sistemele client pe 64 de biți Intel Pro/100MT Server Adapter. Se pot adăuga până la 10 interfețe Ethernet care sunt de mai multe tipuri:

Rețea host-only, numai pe sistemul gazdă și este folosită la comunicarea între client și sistemul pe care rulează VMware.

Rețea bridged, care funcționează asemănător modului în care VMware funcționează pentru UCP, multiplexând interfața Ethernet pentru ca sistemul client să comunice cu gazda.

Rețea NAT (Network Address Translation), este o rețea de tip host-only care folosește NAT pentru a comunica cu rețelele exterioare prin intermediul rețelei gazdă.

Interfața virtuală Ethernet este un dispozitiv PCI, deci întreruperile și porturile I/O sunt setate la pornire.

Porturi seriale

VMWare are 4 porturi seriale virtuale 16550A UART ce sunt configurate ca in tabelul de mai jos. [Tabelul 4.2]

Tabelul 4.2 – Porturi seriale VMWare

Deoarece porturile COM 2 si COM 4, respectiv COM 1 și COM3 împart același număr IRQ pot apărea erori la folosirea simultană a lor.

Porturile paralele

Porturile paralele sunt folosite pentru a transmite un număr mai mare de biți simultan decât porturile seriale. VMware suportă două porturi PC paralele în moduri unidirecționale și bidirecționale. [Tabelul 4.3]

Tabelul 4.3 – Porturi paralele VMWare

Similar cu portul serial, datele de ieșire pentru porturile paralel pot fi direcționate către un fișier în locul unui dispozitiv real.

Interfața USB

VMware emulează controllerul UHCI (Universal Host Controller Interface) pentru USB 1.1 sau EHCI (Extended Host Controller Interface) pentru USB 2.0, suportând o gamă variată de dispozitive: imprimante, scannere, cititoare de carduri, mouse, tastaturi etc.

Adaptor grafic

VMware are un adaptor grafic VGA16 și unul SVGA care permite folosirea extensiilor VGA și poate afișa la aceleași rezoluții ca și sistemul gazdă. Totusi, pentru folosirea acestor opțiuni este nevoie să se instaleze un software auxiliar numit VMware Tools pentru sistemul client care permite comunicarea directă cu sistemul video de pe calculatorul gazdă.

Mouse, tastatură și tablete grafice

Toate aceste dispozitive sunt virtualizate astfel:

Tastatura: 104 Key Windows enhanced

Mouse: PS/2 Mouse

Tablete grafice: Generic Serial Tablets

Plăci de sunet

VMware emulează dispozitivul Creative Technology SoundBlaster 16, IRQ 5, porturi I/O 0x220 – 0x22f, canal DMA 16 biti. Deoarece placa de sunet folosește IRQ 5, pot apărea conflicte dacă unul din porturile paralele dorește să folosească simultan această întrerupere.

BIOS-ul(Basic Input Output System)

VMware folosește versiunea de BIOS PhoenixBIOS 4.0 Release 6 VESA și emulează totodată RTC-ul (Real-Time Clock) sistemului gazdă.

4.3 VMware ESX Server

VMware ESX Server este un produs oferit de VMware Inc. pentru virtualizarea sistemelor de tip server. Principala diferență între VMware ESX Server și Workstation este aceea că cel dintâi funcționează direct pe hardwareul serverului și nu necesită un sistem de operare gazdă. Avantajul este acela de a rula mai multe sisteme de operare simultan folosind direct resursele hardware ale mașinii. ESX server este destinat în special utilizatorilor din mediul de afaceri și nu utilizatorilor individuali, pretându-se cel mai bine sistemelor de tip multiprocesor performante.

ESX Server încorporează un manager de resurse și o consolă de servicii care asigură controlul pornirii precum și alte servicii. Designul arhitecturii ESX Server implementează mecanisme care permit resurselor hardware să fie alocate mai multor sarcini de lucru simultan în medii complet izolate.

Elementele cheie ale designului sistemului sunt:

Stratul de virtualizare VMware care asigură un mediu hardware ideal și virtualizarea resurselor hardware

Managerul de resurse care permite partiționarea și garantarea UPC, memoriei, lățimii de bandă a rețelei și a discurilor pentru fiecare mașină virtuală.

Interfața componentelor hardware care include driverele dispozitivelor, ce permite livrarea unor servicii hardware specifice, ascunzând totodată diferențele hardware pentru alte componente ale sistemului.

Virtualizarea ESX Server presupune ca și în cazul Workstation definirea pentru fiecare mașină virtuală a unui procesor virtual, a unei memorii s.a.m.d. Pentru fiecare stație virtuală se pot de asemenea defini mai multe interfețe Ethernet (maxim 4) fiecare cu adresa IP si MAC proprii ce pot fi conectate la un switch virtual care la rândul lui poate fi conectat printr-o legatură de tip bridge la rețeaua fizică a sistemului gazdă. Virtualizarea ESX server poate fi ușor interpretată din figura de mai jos (fiecărei mașini virtuale îi corespunde o UPC, o memorie și un disc propriu, în realitate toate împărțind aceleași resurse). [Figura 4.2]

Figura 4.2 – Configurația mașinii virtuale

Procesele și fișierele Consolei de Servicii (Service Console)

Consola de servicii este o componentă cheie a VMware Server și oferă control API (Application Programming Interface) care permite mașinilor virtuale și resurselor alocate să fie manageriate. Administratorul poate de asemenea să acceseze aceste controale direct prin pagini Web de pe serverul web ce rulează în interiorul consolei de servicii. Consola de servicii este practic un sistem de operare cu nucleul vmkernel. [Figura 3.3]

Pe lângă serverul web, în consola de servicii mai rulează următoarele procese:

Server daemon (vmserverd): execută acțiuni în consola de servicii din parte VMware Remote Console (controlul consolei de pe un alt sistem) bazate pe Interfața de management Web.

Authentification daemon (vmauthd): autentifică utilizatorii interfeței de management și consolele folosind un sistem bazat pe un nume de utilizator și parolă.

Server SNMP (Simple Network Management Protocol) (ucd-snmpd): implementează structurile de date SNMP.

Cerințe minime pentru stația pe care se instalează VMware ESX Server.

4.4 VMware Converter

Un alt produs al companiei VMware Inc. care are la bază virtualizarea este VMware Converter. Acesta are mai multe întrebuințări:

Convertește mașini fizice în mașini virtuale pentru a putea fi folosite cu alte produse VMware (Ex: convertește un disc real în timp ce acesta rulează într-o imagine virtuală ce poate fi acesată din VMware)

Convertește mașini virtuale pentru a putea fi folosite cu alte produse VMware.

Schimbă locul mașinilor virtuale pe diferite platforme VMware.

Importă sau exportă aplicații virtuale din sistemul local sau le downloadeaza de pe un URL.

Reajustează rapid mărimile discurilor și tipurile partițiilor pentru a maximiza utilizarea resurselor de stocare.

Spre exemplu, VMware Converter este foarte util atunci când se dorește migrarea de la un sistem de operare la altul, dar să se păstreze vechiul sistem de operare.

4.5 Îmbunătățirea performanțelor VMware

VMware este o aplicație consumatoare de resurse însă performanțele pot fi îmbunătățite renunțănd la unele elemente în favoarea altora. Cel mai mare plus de performanță se obține pornind de la sistemul gazdă.

Procesorul mașinii gazdă trebuie să execute cât mai puține instrucțiuni așadar este recomandat să se ruleze o singură mașină virtuală la un moment dat.

Deși producătorul recomandă un minim de 512 MB de memorie RAM, ideal sunt 2 GB pentru a obține o performanță cât mai bună. Trebuie să fie destulă memorie astfel încât să se ruleze atât sistemul gazdă cât și clientul simultan. Pentru gazdele Linux cu nucleu din seria 2.2.x maximul de memorie suportat este 1GB așadar este nevoie fie de un upgrade al kernelului la o versiune 2.4.x fie o recompilare a nucleului folosind opțiunea CONFIG_2GB astfel încât să se aloce 2GB pentru nucleu și 2 GB pentru utilizator (în mod normal se alocă 1GB pentru kernel și 3 GB pentru utilizator).

Trebuie evitate situațiile în care nu există suficient spațiu liber pe hard diskul stației gazdă. Performanța poate scădea considerabil atunci când VMware Workstation (sau alt produs VMware) vrea să execute operații cu discurile virtuale (de crestere, snapshot, redo etc.). O altă idee pentru îmbunătățire este de a împărți mașinile virtuale pe hard diskuri diferite sau folosirea unei interfețe RAID și defragmentarea periodică a discurilor virtuale.

Se recomandă ca în cazul în care sistemul posedă mai multe plăci de interfață cu rețeaua (NIC) să se activeze doar cea care este folosită la un moment dat și nu toate simultan.

Dezactivarea CD-ROM-ului în VMware pentru fiecare mașină virtuală îmbunătățeste de asemenea performanța.

Din punct de vedere grafic performanța se poate îmbunătăți dacă se dezactivează efectele vizuale (Windows) sau se rulează VMware în full-screen.

Instalarea VMware Tools aduce de asemenea îmbunătățiri.

x86 virtualization

x86 virtualization este o metodă prin care un x86 de bază cu un sistem de operare poate să ruleze sub un alt calculator numit gazdă, ce are un x86, cu sistem de operare, cu puține sau fară nicio modificare asupra primului sistem de operare.

Termenul general de x86 se referă la un set de instrucțiuni pentru cele mai de succes arhitecturi de procesoare din istoria calculatoarelor personale. Aceste instrucțiuni sunt folosite in procesoarele de la INTEL, AMD, VIA si derivă de la primele generații de procesoare, începând cu procesorul pe 16 biți Intel 8086 ce a apărut la sfârșitul anilor 86. De atunci setul de instrucțiuni a fost frecvent extins.

Arhitectura procesorului x86 nu a corespuns la început cerințelor de virtualizare Popek si Goldberg. Astfel a fost greu să se implementeze o mașina virtuală pe un processor x86.

Cerințele Popek și Goldberg sunt un set de condiții suficiente pentru ca un calculator să suporte eficient un sistem virtualizat. Acestea au fost introduce de Gerald J. Popek si Robert P. Goldberg intr-un articol din anul 1974 sub numele de : "Formal Requisements for Virtualizable Third Generation Arhitectures". Chiar dacă cerințele sunt derivate luând forme simplificate, ele tot reprezintă o cale convenabilă pentru a determina dacă arhitectura unui calculator suportă eficient virtualizarea.

Pentru a obține aceste cerințe de virtualizare Popek și Goldberg au introdus o clasificare a instrucțiunilor in 3 grupe diferite:

Instrucțiuni privilegiate: acestea sunt accesibile daca procesorul este în user mode și nu sunt accesibile dacă procesorul este in sistem mode.

Instrucțiuni pentru controlul sensibilității: sunt instrucțiuni ce încearcă sa schimbe configurația resurselor în sistem.

Instrucțiuni pentru funcționarea sensibilității: acele instrucțiuni ale căror funcționări depinde de configurarea resurselor.

Rezultatul principal al analizei Popek și Goldberg poate fi exprimat sub forma a 2 teoreme:

Teorema 1 – Pentru cea de-a treia generație de calculatoare un VMM ("Virtual Machine Monitor") poate fi construită daca setul 2 de instrucțiuni este un subset al primului. Intuitiv enunțul teoremei exprimă faptul că instrucțiunile care ar putea afecta funcționarea corectă a VMM (instrucțiuni pentru controlul sensibilității) trebuie blocate și controlul trebuie trecut VMM-lui. Acest lucru garantează controlul calitativ al resurselor. Nicio altă instrucțiune privilegiată nu trebuie executată.

Teorema 2 – O a treia generație de calculatoare este recursiv virtualizată dacă:

Este virtualizată

Poate fi construit un VMM fără a depinde de timp

Intel si AMD au dezvoltat independent exdinderea virtualizarii arhitecturii x86. Ele nu sunt direct compatibile intre ele, dar satisfac in mare aceleași funcții. Oricum vor permite unei masini virtuale ce are mai multe sisteme de operare pe același calculator gazdă în același timp, sa ruleze un sistem de operare nemodificat, secundar, fără a suporta penalitați importante de emulare a perforamntelor.

Virtuozzo

Spre deosebire de soluțiile prezentate până acum , acest program folosește tehnologia de virtualizare host based , neincluzând astfel modelul de abstractizare al componentelor hardware. Acest program se evidențiază printr-un nivel ridicat de performanță in utilizare și dispune de utilitare de administrare complete .

Virtuozzo ofera un set complet de utilitare de monitorizare, acestea oferind informații utile administratorilor care gestionează mediul virtual. Creează mai multe recipiente izolate , (cunoscute ca medii virtuale sau virtual environments (VE)) sau Servere Virtuale Private (VPS) pe un singur server fizic . Aceasta metoda permite punerea in comun a resurselor hardware , a sistemelor de management și câteodată a licențelor software in diferite sarcinii .

Fiecare VPS se comporta exact ca un server obișnuit în ceea ce privește utilizatorii si aplicațiile, poate fi resetat independent si are acces individual de nivel root, utilizatori si adrese IP individuale, memorie, fișiere de configurare, procese, aplicații, librării de sistem si fișiere de configurare proprii. Ușor de întreținut si cu un design eficient, Virtuozzo este o soluție eficientă de virtualizare atât pentru sisteme Linux/UNIX, cât si Microsoft Windows.

6.1 Caracteristici

Platformele Linux sunt considerate cele mai potrivite pentru Virtuozzo, având documentația completă pentru cele mai cunoscute distribuții . Avantajele principale ale Virtuozzo sunt : partiționarea inteligentă , prin care un server se împarte in multe recipiente cu funcționalități complete a unui server obișnuit; izolarea completă , recipientele sunt in siguranță și au izolare din punct de vedere al performanței , funcționalității și a eroriilor;alocarea de resurse dinamice – unitatea de control si procesare (CPU) , memoria , rețeaua , discurile și intrările/ieșirile pot fi schimbate fară resetarea serverului; Magement in masă – un set de utilitare și șabloane pentru automatizare,multi-recipiente și multi-administrarea de server.

Modelul de virtualizare SO a Virtuozzo este ideal pentru cea mai buna performanță, management și eficiență. La bază sta un sistem de operare gazdă standard care poate fi atât Windows cât și Linux. Următorul este un strat de virtualizare cu un sistem al gestiunii de fișiere și un strat abstractizat al kernelului care asigură izolarea și securizarea resurselor dintre diferite recipiente. Stratul de virtualizare face din fiecare recipient să pară un server de sine stătator.

Soluția de virtualizare a SO Virtuozzo are cea mai mare eficientă și scalabilitate, astfel încât e considerată cea mai bună soluție pentru organizațiile din domeniul infrastructurii IT și eficientizarea utilizării resurselor. Setul complet de utilitare de management și arhitectura unică fac din Virtuozzo cea mai soluția perfectă pentru intreținerea usoară, monitorizare și administrarea resurselor serverului virtual.

Diagrama de mai jos reprezintă un model tipic al structurii de sistem Virtuozzo. [Figura 6.1]

Recipientul insăși găzduiește aplicația, se comportă ca și cum ar fi un server de sine-stătător. Fiecare recipient are superutilizatorul său (root sau Administrator), un set de useri sau grupuri, adrese IP, procese, fișiere, aplicații, fișiere, aplicații, librării de system și fișiere de configurare. Recipientul este accesibil prin retea. Datorită stivei de rețea virtuală, recipientul are tabele proprii de rutare si seturi de reguli ale firewall-ului (iptables).

6.2 OpenVZ

OpenVZ este o soluție de virtualizare și automatizare completă a serverului. Această creează mai multe Server Virtuale Private (VPS) izolate intre ele pe un singur server fizic pentru a eficientiza la maxim resursele oferite. Fiecare VPS realizează și execută asemănător unui server de sine stătător pentru utilizatorii săi și aplicații, putând fi resetat independent și având access la root-ul său, utilizatori, adrese IP, memorie, fișiere, aplicații, librarii de sistem și fișiere de configurare. Designul eficient a OpenVZ îl recomandă ca fiind alegerea potrivită pentru serverele de producție cu aplicații live și date in timp real.

Posibilitățiile de bază a OpenVZ sunt :

Partiționarea dinamică în timp real – un server fizic se poate partiționa în zeci de VPS-uri, fiecare cu funcționalități diferite și cu atribuții de server dedicat.

Managementul resurselor – atribuie și controlează resursele parametrilor VPS și realoca resursele în timp real.

Management în masă – Administrează o rețea de server fizice și servere virtuale private printr-o metodă unitară.

Din punct de vedere al aplicațiilor și a utilizatorilor de VPS, fiecare server virtual este un sistem independent. Această independență este oferită de un strat de virtualizare in kernelul sistemului de operare a gazdei. Interesant este faptul că o mică parte a resurselor CPU sunt ocupate cu virtualizarea (aproape de 2 %).

Principalele caracteristici a stratului virtual implementat în OpenVZ sunt următoarele:

VPS arată ca un sistem de operare Linux normal. Are scripturile de început standard, software care rulează în VPS fără OpenVZ – modificări specifice sau adaptări .

Un utilizator poate schimba orice fișier de configurare și poate instala software adițional.

Servere virtuale private sunt izolate complet între ele (fișiere de sistem, procese, Comunicate Inter Procese (IPC) ).

Procese ce aparțin unui VPS sunt programate pentru execuție pentru toate resursele CPU valabile. În consecință, VPS-urile nu sunt legate doar la un singur CPU și pot utiliza toată puterea CPU.

6.3 Comparație

Spre deosebire de alte soluții de virtualizare, Virtuozzo nu alocă decât sub 3% din resursele serverului pentru taskurile de virtualizare si administrare, permițând instalarea unui număr foarte mare de servere virtuale pe un singur server fizic. Tehnologia avansată de virtualizare permite ca orice VPS sa poată fi mutat ușor de pe un server fizic pe altul.

Z-machine

Prima schiță a unei mașini Z a apărut pe o masă de cafea în 1979 în Pittsburg. Este un calculator virtual a cărui programe sunt jocuri de aventură, perfect adaptat acestei misiuni, întrucât reușește să implementeze jocuri complexe pentru perioada sa într-un mod compact. Se poate spune că erau totuși un pic prea mari pentru memoria disponibilă calculatoarelor personale din acele zile, dar mașina Z pare să fi fost prima care să utilizeze memoria virtuală într-un microcalculator. Mult mai impresionant decât acest amănunt este posibilitatea de a salva si a reporni programul exact în locul unde a fost lăsat într-un mod eficient.

Principiul cardinal al designului acestei mașini esta de a putea fii 100% portabil pe orice tip de calculator. Această portabilitate este facută posibilă din dorința de a face constrânge programele la un minim de memorie precum și cerințele cât mai mici hardware (spre exemplu alocarea dinamică este imposibilă).

Jocurile create de Infocom continuă să fie vândute și jucate sub programe interpretor create ori de Infocom ori de surse independente. În jur de 130 de jocuri-povești compilate sub Zilch (care este compilatorul firmei Infocom) mai supraviețuiesc și din 1993 mult mai multe jocuri-povești au fost create ținând cont de sistemul de referință Inform. Există 8 versiuni ale mașinii Z iar primul byte din orice "joc-poveste" (adică orice program al mașinii Z) dă numarul versiunii sub care trebuie interpretat codul.

7.1 O privire asupra structurii mașinii Z

Mașinile Z sunt precum spuneam un calculator virtual. "Z" vine de la "Zork", jocul de aventură text pentru care a fost originar conceput. Ca orice calculator își ține informațiile (majoritatea lor) într-o matrice de variabile numerotate de la 0 în sus care constituie memoria sistemului. Un număr de 240 de locuri locații de memorie sunt separate de restul sistemului pentru un acces rapid si ușor, iar la aceste adrese de memorie sunt denumite variabile globale (pentru că sunt disponibile oricărei părți ale programului in execuție, la orice moment de timp).

Cele mai importante două informații neținute în memorie sunt contorul de program (PC) și stiva. Mașina Z rulează programul în mod continuu luând instrucțiunea de la poziția ținută în PC, executând respectiva instrucțiune după care incrementează în mod automat PC-ul. Setul de instrucțiuni al mașinii Z (plaja tuturor acțiunilor posibile și cum sunt ele codate ca și numere în memorie) ocupă cea mai mare parte a unui program menit să ruleze pe o astfel de mașină.

Programele sunt divizate în rutine : mașina Z executând mereu rutina care este indicată de contorul de program. Totuși, unele instrucțiuni cer efectuarea unor salturi sau execuția unor rutine noi după care trebuie să se întoarcă în locul unde a fost lăsată rutina precedentă. Pentru informațiile privitoare la locul unde să se întoarcă mașina se folosește de stivă. Stiva este un al doilea banc de memorie, total separat de memoria principală, de unde sunt luate sau în care se adaugă anumite informații. Stiva este de tip FIFO (first in first out). În afară de a reține locurile de întoarcere în rutină în stivă se mai rețin variabilele locale (folosite doar de anumite rutine din program), cât și pentru a ține minte pentru o perioadă scurtă de timp rezultatele parțiale ale unor calcule.

Astfel, în timp ce majoritatea procesoarelor fizice au un număr de variabile ușor de accesat ăn afara memoriei principale (zone numite "registre") și o stivă in interiorul memoriei principale, mașina Z are exact invers : variabilele globale sunt ținute in interiorul memoriei și stiva in afara acesteia. Accesul la resursele hardware ale calculatorului pe care rulează mașina Z nu se pot face decât apelând instrucțiuni specifice. Spre exemplu, instrucțiunile read și read_char permit folosirea tastaturii; print și draw_picture permit folosirea ecranului. Imaginea afișată pe ecran nu este reținută nicăieri in memorie. În mod simetric, resursele hardware pot intrerupe rutina curentă a mașinii. Acest lucru se întâmplă doar dacă programul a cerut în prealabil acest lucru, cum ar fi de exemplu dacă se cere o întrerupere pentru treizeci de secunde pentru a da timp jucătorului timp de gâmdire pentru a scrie un răspuns. După expirarea timpului programul va genera o întrerupere pentru a analiza răspunsul utilizatorului.

Această simplă arhitectură este intercalată cu mai multe structuri speciale pe care mașina Z le menține inăuntrul memoriei. Sunt in jur de douăsprezece astfel de structuri dar cele mai importante sunt :

Header-ul, care se află mereu la adresa cu numărul de ordine cel mai mic, unde se țin informații privind programul și o mapare a restului memoriei

Dicționarul, care conține o listă de cuvinte pe care programul se așteaptă să le îi fie date de la tastatură

Arborele obiectelor, care reprezintă un aranjament de bucăți de memorie

Mașina Z este folosită cel mai adesea pentru jocuri de aventură tip text, astfel că dicționarul ține minte nume de obiecte sau verbe pe care utilizatorul trebuie să le introducă, în timp ce obiectele ce compun arborele sunt locuri si artefacte care compun jocul. Orice obiect din arbore poate avea un părinte, un frate sau un copil.

Obiectele sunt colecții de variabile în principiu, variabile care se împart in două categorii: atribute și proprietați.

Atributele sunt simple fanioane, în sensul că pot fii doar active sau inactive, ele neavând nicio valoare numerică. Proprietațile conțin numere, care la rândul lor pot reprezenta bucăți de text sau alte tipuri de informații. Spre exemplu, o proprietate a obiectului „cutie poștală" conține informația despre denumirea obiectului. Un atribut al acestui obiect este faptul că este un container, în sensul că el conține la rândul lui alte obiecte copil. Acest atribut este dezactivat în cazul obiectului „notiță".

Programele pentru mașini Z sunt stocate local pe disc, sau arhivate pe Internet, în ceea ce se numesc „fișiere poveste"(story files). Aceste fișiere conțin doar un cadru al memoriei principale. Procesorul începe să ruleze un astfel de fișsier începând cu o stivă goală și o valoare a contorului de program în concordanță cu informațiile conținute in headerul fișierului. Trebuie menționat că în prealabil fișierele poveste trebuie să fie corelate cu structurile de memorie care conțin dicționarul au arborele de obiecte.

Primul byte din orice fișier poveste, cel conținut la adresa 0, conține întotdeauna numărul versiunii mașinii Z ce trebuie folosite. Designul acestei mașini a fost unul revoluționar pe o perioadă de o decadă. Astfel pe măsură ce numărul versiunii creștea, setul de instrucțiuni creștea și tabelele de memorie erau reformatate pentru a face loc jocurilor mai complicate și mai mari din punct de vedere al necesității memoriei. Toate jocurile făcute de Infocom pot fi jucate folosind versiuni variind între 3 (majoritatea) si 6. Toate jocurile compilate de Inform în anii '90 folosesc preponderent versiunile 5 și 8.

7.2 Maparea memoriei

Regiunile memoriei

Memoria mașinii Z este impărțită in trei regiuni : "dinamică", "statică" și "mare"(high) . Memoria dinamică începe la adresa byte-ului $00000 și merge până la byte-ul înainte de adresa byte-ului conținut în cuvântul aflat la adresa $0e din header. Memoria dinamică trebuie să conțină cel puțin 64 de bytes. Memoria statică pornește imediat după ultima adresa a memoriei dinamice. Lungimea acesteia nu este specificată nicăieri, dar trebuie să se termine la ultimul byte al fișierului poveste sau la adresa $0ffff (oricare este mai mică). Memoria high incepe de la fanionul de memorie high (adresa stocată în cuvântul aflat la adresa $04 din header) și se continuă până la sfârșitul fișierului poveste. Începutul stivei de memorie high se poate suprapune peste sfârșitul stivei de memorie statică însă nu și cu memoria dinamică.

Memoria dinamică poate fi scrisă sau citită (fie direct folosind instrucțiunile loadb , loadw și storeb și storew, sau în mod indirect folosind opcode-urile insert_obj sau remove_obj)

Prin tradiție, primii 64 de bytes sunt cunoscuți drept header. Majoritatea jocurilor nu le este permis să modifice biții aflați in header. Este în schimb permis jocurilor să altereze orice tabele stocate în memoria dinamică, cu condiția să lase tabelele respectând regulile versiunii de mașină Z pe care ruleză.

Memoria statică poate fi citită folosind opcode-urile loadb si loadw. În schimb este ilegal pentru un joc de a încerca să scrie in memoria statică.

În afară de posibila suprapunere cu memoria statică, memoria high nu poate fi accesată direct de un program joc. În schimb aceasta conține rutine, care pot fi rulate, sau șiruri de caractere care pot fi printate folosind comanda print_paddr.

Lungimea maximă permisă a unui fișier poveste depinde de versiune, cum urmează.

V1-3 V4-5 V6 V7 V8

256 512320 512

Adrese

Sunt trei tipuri de adrese în mașina Z, toate putând fi stocate într-un număr de doi bytes : adrese de bytes, adrese de cuvinte și adrese împachetate.

O adresă de byte specifică adresa respectivului byte în memorie ți poate varia între 0 și ultimul byte alocat memoriei statice.

O adresă de cuvânt specifică o adresă pară în ultimii 128K ai memoriei (dând astfel adresa divizată cu doi). Adresele de cuvânt sunt folosite doar in tabela de abreviere.

O adresa împachetată specifică locul unde o rutină sau un șir începe în memoria high. Fiind dată o adresă împachetată P, formula corespunzătoare pentru a obține adresa byte-ului B este :

2P Versiunile 1, 2 and 3

4P Versiunile 4 and 5

4P + 8R_O Versiunile 6 și 7, pentru adresarea rutinelor 4P + 8S_O Versiunile 6 and 7, pentru print_paddr

8P Versiunea 8

R_O și S_O sunt offsetul pentru rutine și șiruri (specificate în header la cuvintele de la adresele $28 și$2a )

Inform niciodată nu compilează suprapunerea dintre memoria statică și cea high (își plasează toate tabelele în memoria dinamică). Totuși, jocurile Infocom grupează tabelele chiar deasupra fanionului de memorie high, chiar înainte de a începe rutinele.Unele jocuri intercaleză datele statice între rutine astfel încât memoria statică se suprapune peste cod, și alte jocuri pot conține rutine plasate sub fanionul de memorie high. (Ideea originală din spatele fanionului de memorie high a fost că tot ceea ce se află sub el ar trebui stocată în RAM-ul interpretorului, în timp ce se află deasupra ar putea fii ținut în memoria virtuală). De asemenea ar trebui menționat faptul că memoria dinamică si cea statică nu ar trebui să depășească 64K. Aceasta era cea mai mare limitare a mașinii Z, cu toate că această limită nu a fost niciodată atinsă.

Instalarea unei masini virtuale cu Virtual Box

8.1 Instalarea Oracle Virtual Box

Virtual Box creează mașini virtuale pentru diferite sisteme de operare (Microsoft Windows, Linux, Solaris) și poate rula sub sistemele menționate anterior.

VirtualBox este un program Open Source distribuit sub o licență GPL duală: comercială și non comercială. Spre deosebire de alte astfel de moduri de distribuții puteți folosi VirtualBox în scopuri comerciale pe mai multe calculatoare doar dacă sunteți proprietarul acelor calculatoare. Dacă instalați programul pe calculatoarele ce aparțin unei firme trebuie cumpărată o licențe pentru acestea.

Puteți lua programul de pe https://www.virtualbox.org/wiki/Downloads. Salvați fișierul într- un director preferat.

Instalarea programului este descrisă pentru sisteme Windows. Intrați în directorul în care ați salvat fișierul și dați dublu click.

Pasul 1: pentru instalare apare fereastra ce indică faptul că urmeaza a instala Virtual Box.

Pasul 2: este cel pentru licență. Da dacă folosiți Virtual Box în scopuri personale, de educare sau comerciale proprii (i.e. în cadrul propriei firme).

Pasul 3: Personalizare instalație prin alegerea componentelor ce doriți a fi instalate. Opțiunile se referă la:

VirtualBox USB Support suport USB pentru mașinile virtuale ce permite mașinilor instalate să comunice cu diferitele dispozitive ce se conectează prin USB

VirtualBox Networking permite instalarea de drivere pentru Host Interface Networking ce "imită" o placă de rețea pentru mașinile oaspete

directorul în care va fi instalat VirtualBox. Eu recomand să instalați programul pe o partiție separată de celelalte sau în cea dedicată lucrului în propriul director

Pasul 4: Alegerea locurilor unde vor fi puse shortcut-uri

Pasul 5: Fereastra indică faptul că conexiunea prin placa de rețea va fi resetată și nu puteți accesa rețeaua momentan. De aceea pune întrebarea dacă doriți să instalați programul acum în caz că folosiți internetul sau alte programe în acel moment.

Pasul 6: Fereastra de progres al instalării pe parcursul acesteia veți fi întrebat dacă doriți să instalați driverele de către Windows.

Pasul 7: Va apare o simpla fereastră ce vă întreabă dacă doriți să rulați VirtualBox acum. La rulare VirtualBox apare o fereastra pentru înregistrare a datelor despre dumneavoastră și statisticile despre modul de utilizare a VirtualBox. Opțiunea de la sfârsit este dacă doriți a fi contacta de newsletter Sun.

Am terminat cu instalarea. Vom da un restart și apoi dacă este necesar vom reface conexiunea la internet. Aici nu vă pot ajuta prea mult datorită diferitelor configurații existente. Dar veți lucra cu Control Panel\ Network Add Network și urmați asistentului și instrucțiunele de la ISP.

8.2 Instalarea unei masini virtuale Fedora Linux cu VirtualBox

Acum că am instalat VirtualBox, să instalăm o mașină virtuală. Deoarece lucrăm în Windows vom instala o mașină Linux.

De ce acest sistem?

Pentru dumneavoastră deoarece vă ajută la învățarea sau testarea Linux, dezvoltarea de aplicații. Pentru mine mă ajuta în următoarele tutoriale pe care le voi publica. Aceste tutoriale se vor referi la unele aspecte de configurare Linux, instalare programe și programare sub Linux și este bine util pentru cititorii care încerca să aplice ideile conținute.

Linux în sine este un nucleu de sistem de operare, adică reprezintă un mediu pe care pot rula programele. Acest mediu este compus din drivere și diferite programe ce permit rularea respectivelor programe. Vom downloada o distribuție Linux aceasta "unește" nucleaul (kernelul) cu diferite aplicații sau pachete de aplicații pentru a putea fi rulat. Distribuțiile sunt multiple ce se pretează pentru diferite tipuri de utilizatori (experți, administratori sau începători) pentru scopurile acestora (servere dedicate, servere web, desktop, netbook, etc).

Pentru începători distribuțiile recomandate sunt Ubuntu, Mandriva și altele.

Eu voi instala în acest tutorial Fedora Core. Fedora este o distribuție construită de către o comunitate ce dorește să construiască un sistem de operare Linux care este cel mai nou, puternic și stabil. Deoarece este construit de către o comunitate este gratuit și ajutorul primit pe situl forumului comunității este prompt și edificator.

Pentru a downloada Fedora accesați situlhttp://fedoraproject.org/en/get-fedora, apăsați Download now.

În noua pagină apare un întreg tabel ce se referă la versiunile, sub ce sistem rulează și tipul de download. Dacă aveți procesor pe 64Biti (mai noi decât Intel D sau Athlon 64) downloadati versiunea x86_64. Dacă nu aveți luați versiunile ce conțin i386.

Vom downloada versiunea dorita.

Deschidem VirtualBox și apasăm pe butonul New (Nouă pentru versiunea în limba română). Va apare o fereastră un asistent ce va ajuta în creeare mașinii.

Prima fereastră a asistentului vă cere să dați un nume mașinii virtuale ce doriți a instala. Încercați să dați un nume cât mai bun despre aceasta mașina de exemplu Fedora_18_Dezv. Apoi tipul acestuia. Vom selecta Linux ca sistem de operare și versiunea Fedora sau Fedora (64 bit) dacă aveți procesor pe 64 biți.

Fereastra Memory vă cere să stabiliți memoria RAM pentru mașina virtuală. Valoarea implicită de 256Mb este insuficientă de aceea vom introduce 512Mb.

Fereastra Hard Disk va solicita creerea hard diskului pe care sistemul se va instala.

Putem lasa programul să creeze un harddisk implicit prin selectarea Create new hard disk și apasăm pe butonul New. În noua fereastra creem un hard disk după opțiunile dumeavoastră. Dar cum nu am creat nici un hard disk select prima opțiune.

Va apare un nou asistent ce ne ajuta în creerea hard -ului.

În următoarea fereastră apărută avem de ales între a creea un hard disk care va crește în timp până la dimensiunea stabilită, reprezentat de opțiunea Dynamically expanding storage. Sau unul care va fi creeat în acel moment Fixed sized storage. A doua opțiune este mai sigură deoarece avem de la început spațiul dorit și nu vom avea problema să ne trezim fără spațiu dacă instalăm de- a lungul timpului aplicații pe partiția pe care lucrăm. Deci selectăm doua opțiune.

În fereastra de dimensiune și locație selectăm locația pe disc unde VirtualBox va scrie imaginea hard virtual și mărimea acestuia. Aici avem posibilitatea alegerii unei partiții fixe(dedicata) sau dinamice. Eu am creeat o imagine de 10Gb pe care am scris- o pe o partiție dedicată.

Fereastră de Sumarry arată opțiunile alese pentru un moment neintrusiv de a le schimba dacă am greșit.

După creearea discului și fișierelor necesare pentru acesta, VirtualBox va indica prezența mașinii noi create. Înainte de a porni mașina verificăm setările date de VirtualBox și dacă e cazul le modificăm. Pentru aceasta apăsați butonul Settings.

Vom intra în secțiunea pentru CD- ROM și vom selecta opțiunea dată de a monta dar nu unitatea optică a gazdei ci imaginea ISO.

Apăsați pe butonul din dreapta pentru a indica ce imagine ISO să folosească. Apare fereastra Virtual Media Manager conține o listă de imagini împărțită în trei categorii (a căror nume este elocvent): Hard- disk, CD\DVD Images, Floppy.

Deoarece este prima mașină virtuală și lucrăm cu imagini ISO este selectată automat CD\DVD Images și aceasta este goală Apăsați pe butonul Add și apare o fereastră de navigare pentru a indica calea spre imagine. Indicați locul unde ați salvat imaginea. Apăsați Open în fereastră după selectarea imaginii apoi Select.

Următoare setare pe care o vom vizita este Network. Aici avem 4 adaptoare de plăci de rețea virtuale. Selectați NAT din lista derulantă a Attached to. Am ales NAT deoarece mașina virtuală să acceseze Internetul din spatele firewall care rulează pe Windows.

Alte motive: Nu sunt într- o rețea ce dă adrese de IP statice (aveți o adresă de la o anumită persoană care se ocupă de rețeaua de cartier) sau într- o rețea mică din care pot seta IP static sau dinamic pentru această mașină. Dacă aveți aceste posibilități selectați Host pentru ca mașina virtuală să aibă propria adresă IP.

Atenție din momentul în care am intrat pe mașina virtuală tastatura și mouse răspund numai în aceea mașină. Pentru a- le scoate din mașină apăsați pe tasta Ctrl din dreapta tastaturii.

Pornim mașina din butonul Start. Apare atenționarea pe despre tastatura pe care o închidem și dacă mașina s- a inițializat corect trebuie să apară fereastra în care va rula Fedora.

După această fereastră trebuie să se lanseze automat programul de instalare a Fedorei. Nu intrați în panică urmează o listă de setări și verificări pe care acesta le face.

Nu vom verifica CD deoarece noi folosim imaginea ISO deci Skip.

Ecranul de start al instalării

Selectăm Engleza ca limba deoarece există puține tutoriale și forumuri în limba română care să vă ajute. La fel și în fereastra următoare cea pentru tastatură.

În cazul în care primiți același avertisment ca mai jos selectați Re-initialize the drive pentru a începe instalația.

Introduceți un nume pentru calculator (în special dacă ați selectat Host în tabul Network al Settings).

Setați fusul orar dorit.

Introduceti o parola puternică, formată din cel puțin 12 caractere și numere care nu se repetă și unele sunt majuscule, pentru root.

Folosiți opțiunea dată implicit deoarece aceasta va rescrie sistemul de fișiere existent pe disc. La apariția ferestrei de confirmare selectați astfel:

Sistemul va rescrie sistemul de fișiere, operație ce durează câteva minute.

În fereastra de personalizare a instalării Fedora selectați Software Development (motivul pentru care instalez Fedora) și Customize Now. Apoi desigur Next.

Setările implicite din această pagină sunt suficiente pentru un utilizator începător.

Ca exemplu să spunem că vrem să adaugăm librării Java pentru dezvoltare pentru acesta intrați în Development selectați Java ca în poza de mai jos și bifați. Butonul Optional Packages este util dacă vreți să personalizați unul din pachetele software ce urmează a fi instalate.

Fedora verifica pachetele de instalat pentru a vedea daca sunt complete sau necesită alte pachete. După această verifică copie pachetele necesare pentru instalare, urmează o reverificare a acestora pregătire pentru instalare și pe urmă instalarea în sine.

Instalarea o să dureze un pic așa că luați o mică pauză.

La terminarea instalării va cere să restartați mașina prin Reboot. Opriți mașina prin apăsarea butonului din dreapta Ctrl apoi butonul de închidere al ferestrei și selectați Power Off. Apoi dați jos imaginea ISO din setări selectând unitatea optică existentă. Dacă nu luați imaginea ISO la reboot VirtualBox va boota de pe DVD nu harddisk.

Dați start. Nu se va întampla nimic mașinii deoarece pentru aceasta ați executat Reboot.

Fedora la prima rulare vă va informa despre licență și vă va cere să faceți anumite setări: setarea timpului, crearea unui utilizator, necesar deoarece de la versiunile mai noi Fedora nu se mai acceptă logarea ca root de pe interfața grafică.

Vi se va cere datele tehnice ale mașinii pentru a folosi programatorilor Fedora în a înțelege ce componente folosesc cel mai des utilizatorii Fedorei pentru a îmbunătăți pe aceasta. Noi nu vom trimite profilul deoarece am făcut o mașină virtuală și în plus nu am configurat rețeaua încă. Deci în următoarea fereastra apăsați pe No, do not send.

Fereastra de logare apăsați pe utilizator și introduceți parola.

Dacă ați introdus datele corect trebuie să apăra o astfel de fereastră.

Felicitări, tocmai ați instalat Fedora Linux!

Securitatea mașinilor virtuale, o problemă încă ignorată

Trebuie facute anumite mentiuni cand vorbim de virtualizarea unui multiprocesor. Trebuie luat in seama faptul ca atunci cand vorbim de un singur procesor, virtualizarea se face prin time sharing-ul resurselor singurului procesor. Cu multiprocesor, virtualizarea se poate face prin impartirea multiplelor procesoare intre sistemele virtuale. Optiunea dintre time sharing si partitionare (sau folosirea amandurora) aduce alternative de design pe baza virtualizarii multiprocesorlui.

Sistemele de VM s-au bucurat de o mare popularitate in ani 70 si 80, dar au parut ca se sting spre anii 90 odata ce calculatoarele single-user au devenit mai ieftine si accesibile. Recent s-a reinnouit interesul pentru sisteme virtuale, mai ales in partea de web, odata cu nevoia unui numar masiv de sisteme simple single-thread (care tebuiesc foarte rar sa comunice intre ele dar care impart resurse de stocare). Pentru aceste aplicati, masinile virtuale tind sa utilizeze resursele procesorului in locul clusterelor mari de uniprocesoare. Masinile virtuale reduc in acelasi timp costurile prin faptul ca a inchide sau a deschide o masina virtuala este foarte facil.

Desi popularitatea initiala a masinilor virtuale se datora abilitatii de a permite useri multiplii sa foloseasca un sistem sofisticat ca si cum ar fi fost al lor, folosirea masinilor virtuale in viitor se va datora altor factori. Exista probleme in curs de dezvoltare, cum ar fi securitatea și incapsulare de sistem, modele emergente, cum ar fi Grid, care vor spori gradul de utilizare a tehnologiei de masini virtuale.

Virtualizarea serverelor rămâne și în 2013 o prioritate pentru departamentele IT. Fie că este vorba de startarea unor proiecte-pilot, fie că este vorba de extinderea unor proiecte deja existente, argumentele economice ale virtualizării vor fi la fel de atractive și anul viitor. Însă, ca în cazul oricărui „lucru bun“, există și o serie de provocări, mai puțin mediatizate decât beneficiile pe care virtualizarea le poate genera. Una dintre acestea este cea a securității mașinilor virtuale.

Securitatea reprezintă o provocare importantă în mediile virtuale. Există în acest sens numeroase studii care trag semnale de alarmă asupra gradului de risc la care sunt expuse companiile care au adoptat sau își extind deja proiectele de virtualizare a serverelor:

• Gartner 2010: în următorii doi ani, 60% din serverele virtuale vor fi mai expuse riscurilor de securitate decât serverele fizice pe care le înlocuiesc;

• Symantec 2011: 56% din companiile intervievate întâmpină probleme în ceea ce privește securitatea serverelor virtuale și operațiunile de patch;

• Kaspersky 2012: 55% din companiile europene care au adoptat proiecte de virtualizare a serverelor nu au nicio intenție de a implementa o soluție de securitate dedicată.

Ultimul studiu citat, și cel mai recent, indică un element interesant: 42% din companiile intervievate consideră riscurile de securitate din mediul virtual ca fiind considerabil mai mici decât cele specifice infrastructurii fizice.

Este o abordare eronată, dar care nu are efecte negative grave foarte costisitoare, atât timp cât mașinile virtuale sunt folosite doar pentru test și dezvoltare. Iar cum marea majoritate a companiilor „verifică“ beneficiile pe care le pot obține prin adoptarea soluțiilor de virtualizare a serverelor startând un proiect-pilot, lucrurile merg bine un timp. Însă, atunci când proiectul de virtualizare capătă amploare și când numărul mașinilor virtuale crește rapid, preluând aplicații critice din mediul de producție, perpetuarea acestei abordări devine foarte riscantă.

Și, cu toate acestea, ignorarea riscurilor de securitate aferente mediului virtual este un fenomen foarte frecvent, așa cum o arată și studiile citate. Situație oarecum explicabilă din perspectiva faptului că principalele obiective urmărite atunci când se demarează un proiect de virtualizare sunt:

– reducerea CapEx – 70%;

– reducerea OpEx – 68%;

– mai puține servere pentru același număr de aplicații – 67% (potrivit studiului Symantec citat).

Cu aceste obiective axate clar pe realizarea de economii, puține companii mai iau în calcul și necesitatea unor investiții în soluții de securitate dedicate mediului virtual. Prin urmare, pentru a minimiza riscurile, companiile se concentrează pe securizarea serverelor fizice, fidele „credinței“ că mașinile virtuale sunt mai sigure decât cele fizice.

Provocări specifice

Schimbarea acestei percepții este dificilă nu doar din cauza costurilor suplimentare, ci și pentru că provocările de securitate pe care le implică utilizarea mașinilor virtuale sunt, parțial, similare mediului fizic – și la nivel virtual se folosesc firewall-uri, sisteme de detecție a intruziunilor (IDS/IPS) etc. Dar există și un nivel de specificitate care necesită utilizarea unor soluții dedicate.

De exemplu, una dintre problemele specifice constă în controlul și monitorizarea traficului de date dintre mașinile virtuale găzduite pe același server. Tehnologiile de virtualizare a serverelor permit crearea facilă și rapidă nu numai de servere, ci și de rețele și switch-uri virtuale. Însă, fără un instrument de monitorizare a modului în care se realizează comunicarea dintre serverele virtuale, riscul erorilor de configurare crește sensibil. Iar device-urile de securitate a rețelei nu acoperă această necesitate. Dar, destul de frecvent, acest lucru este dedus „pe propria piele“ de către administratorii care se ocupă de managementul mașinilor virtuale.

O altă problemă cu un grad de incidență crescut, evidențiată și de studiul Symantec, este cea a realizării patch-urilor. Aparent și aici este o situație similară celei cu care se confruntă administratorii în cazul serverelor fizice.

Însă, dacă în acest ultim caz atribuțiile de management sunt clar stabilite și pot fi controlate rapid, în cazul serverelor virtuale situația se schimbă sensibil. În numeroase cazuri, administratorii IT nu au informații exacte și/sau actuale asupra numărului de mașini virtuale existente la un moment dat, nici despre unde sunt hostate sau ce departamente se folosesc de ele, ce date accesează mașinile virtuale respective etc. Pentru a avea acces la astfel de informații este din nou nevoie de soluții dedicate de management și monitorizare, astfel încât, atunci când apare o problemă, să poată fi identificată rapid sursa și găsită soluția. Revenind la problema menționată, fără aceste unelte sarcina unui administrator de a identifica pentru ce mașini virtuale trebuie făcut patching-ul devine dificilă. Iar dacă mai luăm în calcul că patch-urile trebuie aplicate și backup-urilor mașinilor virtuale situația se complică considerabil.

Cele două probleme descrise succint mai sus nu sunt singurele provocări de securitate specifice mediului virtual. Însă este preferabil ca acestea să nu fie descoperite „din mers“, ci să fie luate în calcul și analizate încă din primele faze ale extinderii proiectului de virtualizare și găsită o soluție optimă. Chiar dacă implică o serie de costuri suplimentare.

Bibliografie

Cărți:

Andrew S. Tanenbaum Operating Sistems. Design and Implementation anul

Andrew S. Tanenbaum Modern Operating Systems 2nd Edition

Abraham Silberschatz,Operating System Concepts

M. Waite, F. Lafore- Structuri de date și algoritmi în Java,ed. Teora, 2001

Robert Tolksdorf-Languages for the Java VM, Berlin 2005

Irina Atanasiu, B. Constantinescu, O. A. Drăgoi, Florentina Irina Popovici- Limbajul Java,ed. Agora,1998

The Book Of VMware- The Complete Guide To VMware Workstation (2002) , Brian Ward

si mai noi???

Site-uri de internet:

http://ro.wikipedia.org/wiki/Java (limbaj de programare)

http://en.wikipedia.org/wiki/Java bytecode

http://java.sun.com/docs/books/tutorial/

http://en.wikipedia.org/wiki/Virtuozzo

http://www.parallels.com/en/products/virtuozzo/

VMware Workstation 6.0 User Manual

VMware Converter User Manual

VMware ESX Server Administration Guide

VMware ESX Server Installation Guide

Symantec Study – Virtual Machines vs Cybercriminals

Kaspersky Lab Security for Virtualization

Gartner study over the security of Virtualized Severs

– foarte bun cuprinsul!

– care este contributia ta?

– ce vei prezenta ca aplicatie practica?

– ultima parte este clar ca este preluata fara adaptare, nu te poti adresa intr-o lucrare de licenta cu Am terminat cu instalarea. Vom da un restart și apoi dacă este necesar vom reface conexiunea la internet. Aici nu vă pot ajuta prea mult datorită diferitelor configurații existente….

– La bibliografie suntem in 2013?.

Bibliografie

Cărți:

Andrew S. Tanenbaum Operating Sistems. Design and Implementation anul

Andrew S. Tanenbaum Modern Operating Systems 2nd Edition

Abraham Silberschatz,Operating System Concepts

M. Waite, F. Lafore- Structuri de date și algoritmi în Java,ed. Teora, 2001

Robert Tolksdorf-Languages for the Java VM, Berlin 2005

Irina Atanasiu, B. Constantinescu, O. A. Drăgoi, Florentina Irina Popovici- Limbajul Java,ed. Agora,1998

The Book Of VMware- The Complete Guide To VMware Workstation (2002) , Brian Ward

si mai noi???

Site-uri de internet:

http://ro.wikipedia.org/wiki/Java (limbaj de programare)

http://en.wikipedia.org/wiki/Java bytecode

http://java.sun.com/docs/books/tutorial/

http://en.wikipedia.org/wiki/Virtuozzo

http://www.parallels.com/en/products/virtuozzo/

VMware Workstation 6.0 User Manual

VMware Converter User Manual

VMware ESX Server Administration Guide

VMware ESX Server Installation Guide

Symantec Study – Virtual Machines vs Cybercriminals

Kaspersky Lab Security for Virtualization

Gartner study over the security of Virtualized Severs

– foarte bun cuprinsul!

– care este contributia ta?

– ce vei prezenta ca aplicatie practica?

– ultima parte este clar ca este preluata fara adaptare, nu te poti adresa intr-o lucrare de licenta cu Am terminat cu instalarea. Vom da un restart și apoi dacă este necesar vom reface conexiunea la internet. Aici nu vă pot ajuta prea mult datorită diferitelor configurații existente….

– La bibliografie suntem in 2013?.

Similar Posts