Documente Academic
Documente Profesional
Documente Cultură
Masini Virtuale
Anul universitar
2013-2014
Cuprins:
1. Introducere........................................................................................................pag. 3(Iordache F.)
1.1 Aspecte generale.... ....... ....... ....... ....... ...... .............................................pag. 3(Iordache F.)
1.2 Rulare simulatana a doua sisteme de operare...........................................pag. 4(Iordache F.)
1.3 Avantajele implementarii unei masini virtuale..........................................pag. 4(Iordache F.)
2. Procesul de instalare..........................................................................................pag. 5(Buculei Th.)
3. Masina Virtuala la nivel de proces......... ............... ............... ...........................pag. 8(Iordache F.)
4. Arhitectura Masinilor Virtuale bazate pe limbaje de nivel inalt.......................pag. 10(Buculei Th.)
4.1 Masina virtuala Pascal P-Code........ .......... .......... .......... ..........................pag. 11(Buculei Th.)
4.1.1 Arhitectura memoriei in P-code....................................................pag. 11(Buculei Th.)
4.2 Masini virtuale bazate pe limbaje orientate pe obiecte............................pag. 12(Buculei Th.)
4.2.1 Arhitectura masinii virtuale Java...................................................pag. 13(Buculei Th.)
4.2.1.1 Setul de instructiuni................................................................pag. 13(Buculei Th.)
4.2.1.2 Formatul instructiunilor..........................................................pag. 13(Buculei Th.)
4.2.1.3 Interfata nativa Java...............................................................pag. 14(Buculei Th.)
5. Implementarea Mașinii Virtuale......................................................................pag. 15(Iordache F.)
6. Virtualizarea resurselor ..................................................................................pag. 18(Iordache F.)
6.1 Procesorul.................................................................................................pag. 18(Iordache F.)
6.2 Memoria...................................................................................................pag. 19(Iordache F.)
6.3 Placa de retea – Ethernet Card.................................................................pag. 20(Buculei Th.)
7. Concluzii .............................................................................................................................pag. 22
8. Bibliografie...........................................................................................................................pag. 23
1. Introducere
1.1 Aspecte generale
Masinile virtuale (Vmware si Virtualbox) fac posibilă rularea unui alt sistem de operare
intr-o "fereastră" a sistemului de operare principal, fără a repartitiona hard-disk-ul. Spre exemplu
pot rula un sistem de operare Linux intr-o fereastră a Windows-ului si invers.Este ca şi cum am
avea un alt calculator (virtual) pe care îl putem porni sau opri ca pe un program obişnuit.
Suportul pentru masina virtuală se instaleaza ca un program obisnuit iar dupa instalare, se
stabileste cat din sistemul real poate imprumuta masina virtuala (ex.memorie). Masina virtuala
contine un bios virtual, unde se alege de unde sa booteze.
Dupa pornirea masinii virtuale se poate boota de pe CD/DVD si se poate instala
sistemul de operare dorit. Se pot crea mai multe masini virtuale ce pot rula in acelasi timp.
Acestea se pot apoi sterge de pe hard-disk ca un director obisnuit cu fisiere.
Masinile virtuale functioneaza mai incet dacat un sistem de operare instalat direct pe
hard-disk ,dar nu se simte o diferenta notabila la utilizari obisnuite (Internet, Office, Muzica).
Maşina virtuală este un calculator imaginar, echipat cu un set de instrucţiuni ce reprezintă
limbajul virtual.
Modul de lucru in limbajul virtual se desfasoara in urmator mod: textul sursa este tradus
de catre compilator in limbaj virtual; programul rezultat reprezinta intrare pentru o procedura
numita executiv, care este de fapt un interpretor al codului virtual. Atributia executivului este
acela de a parcurge codul virtual obtinut de la compilator si de a rula fiecare instructiune, in
termenii limbajului masina al calculatorului tinta .
Beneficiul acestui mod de lucru este acela ca daca un limbaj sursa trebuie translatat in
mai multe limbaje obiect, compilatorul propriu-zis se scrie o singura data , iar pentru fiecare
limbaj obiect se face cate un executiv. Este mult mai usor sa se scrie un executiv decat sa se scrie
un compilator.Programul are o portabilitate crescuta deoarece codul generat in limbaj virtual
poate fi pus pe orice masina dotata cu interpretorul codului respectiv.
In principiu arhitectul compilatorului fixeaza codul virtual si arhitectura masinii virtuale,
dupa urmatoarele criterii:
Portabilitate
2. Procesul de instalare
Aplicatiile de tip “Masina virtuala” au adus un suflu nou in lumea IT si au rezolvat o serie de
probleme introducand unele facilitati extrem de utile. Prima astfel de aplicatie a fost VMWare
Workstation si a aparut in 1999. De atunci, oferta de software-uri pentru virtualizare a crescut o
data cu performantele oferite de acestea. Majoritatea au si versiuni gratuite, mai mult sau mai
putin limitate comparate cu versiunile comerciale. Pe langa solutiile VMware, pe piata mai
putem mentiona Microsoft VirtualPC, Sun VirtualBox si Parallels Workstation.
Unul dintre marile avantaje oferite este faptul ca masinile virtuale pot interactiona la nivel de
retea: pe un singur sistem fizic, cu mai multe masini virtual, se pot crea mini-retele. In aceste
mini-retele se pot testa softuri, face analize pe marginea fiabilitatii si a breseloc de securitate
lasate de aplicatile testate, precum si orice alt gen de simulari.
In cele ce urmeaza, se va prezenta principalii pasi din procesul de instalare al unei masini
virtuale. O instalare corecta a masinii virtuale de la inceput inseamna timp si resurse castigate.
Pentru prezentare, se va folosi, in cele ce urmeaza, programul VirtualBox. VirtualBox este
gratuit pentru utilizare personala si evaluare (necesita achizitionare doar in cazul folosirii in
scopuri comerciale). Mai mult chiar, cei de la Oracle au lansat si o versiune Open Source, sub
licenta GPL, careia, insa, ii lipsesc cateva facilitati (suport USB, Remote Desktop, controller-ul
Serial ATA etc). VirtualBox, creat si dezvoltat initial de compania InnoTek a fost achizitionat de
Sun Microsystems in februarie 2008 si a devenit parte a platformei Sun de virtualizare,SunxVM.
Imediat dupa instalare, fara sa fie nevoie de reboot, utilizatorul este intampinat de
fereastra principala:
Din aceasta fereastra se poate incepe crearea noii masini virtuale. Se apasa “New”,
accesand astfel wizard-ul de configurare. Se da un nume masinii virtuale si alegem sistemul de
operare care va rula in aceasta masina (se activeaza astfel automat anumite setari in functie de
sistemul de operare guest, pentru o functionare optima a acestuia).
Urmeaza selectarea dimensiunii memoriei RAM alocata masinii virtuale. Pe sistemul de
test avem instalati 2GB RAM si vom oferi 512 MB din acestia masinii virtuale Ubuntu Linux.
Urmeaza crearea harddisk-ului virtual folosit de Linuxul guest. Acest harddisk virtual
este doar un simplu fisier in sistemul de operare host (Windows in cazul nostru). Virtualbox este
o o simpla interfata intre sistemul guest (Linux) care vede practic un harddisk si il trateaza ca
atare si sistemul de operare host (Windows) care vede un simplu fisier cu marime clar
determinata(cel putin initial). Implicit nu este creat nici un harddisk virtual, deci vom apasa
“New..” pentru crearea unuia (fiind posibila si utilizarea unui harddisk virtual creat anterior
pentru alta masina). In noul wizard aparut, trebuie aleasa o variant dintre cele doua tipuri de
harddisk virtual: cu crestere dinamica sau de marime fixa.
Harddisk-urile virtuale dinamice ocupa spatiu doar cat este necesar sistemului din masina
virtuala, acesta fiind alocat dinamic in functie de necesitati. Setarea cu dimensiune fixa permite
inca din momentul crearii harddiskului virtual alocarea intregului spatiu cerut. Este bine
cunoscut faptul ca, ulterior, se pot adauga unei masini virtual oricand si oricate harddiskuri este
nevoie.
Configuratia de baza a masinii virtuale create de wizard poate fi vazuta in orice moment.
De asemenea, aplicatia VirtualBox ofera si un buton Snapshots cu care se pot accesa diverse stari
ale masinii virtuale salvate anterior.
O masina virtuala construita pe baza caracteristicilor limbajelor inalte (HLL VMs) este
similara unei masini virtuale bazata pe procese, dar in general, setul de instructiuni este definit
pentru programele ce ruleaza in modul utilizator. Prin urmare, pot fi executate numai pe un
procesor virtual. In consecinta, denumirea lor este seturi de instructiuni virtuale (V-ISA).
Interfata sistemului consta dintr-un set de librarii standard care pot, spre exemplu, sa acceseze
fisiere, sa comunice in retea si sa execute operatii grafice. Teoretic, masinile virtuale sunt
concepute sa suporte toate sistemele de operare, dar practic, trebuie sa le suporte macar pe cele
mai uzuale.
Un exemplu bine cunoscut de masina virtuala bazata pe limbajul de nivel inalt a fost
proiectata sa suporte limbajul Java. Programele Java sunt compilate in prima faza in clase Java
binare, care contin multe instructiuni codificate sub forma de secvente „bytecode” si „metadate”.
Masina virtuala Java (JVM) incarca apoi clasele binare si le executa. O alta masina virtuala, mai
recenta, CLI (common language infrastructure), face parte din cadrul Microsoft .NET.
Zona de memorie „heap” este deasupra zonei constante si stocheaza structurile alocate
dinamic. Un nou pointer (NP) delimiteaza dimensiunea maxima a zonei „heap”. La apelul unei
proceduri, se aloca un nou cadru in stiva. Stiva este impartita in mai multe sectiuni vizibile in
figura de mai jos. Valoare returnata de functie, legatura statica si cea dinamica, si adresa de
intoarcere reprezinta o regiune de dimensiune fixa la inceputul cadrului din stiva, denumita
„mark stack”.
O proprietate de baza a setului de instructiuni Java este ca fiecare tip de primitiva are o
instructiune „bytecode” specifica. Spre exemplu, „opcode”-ul „iadd” (adunare de intregi) poate fi
folosit doar pentru operanzi intregi.
O vedere de ansamblu asupra JNI dar si asupra operatiilor sale se poate observa in figura
de mai jos. In partea stanga a imaginii, se observa arhitectura Java. Codul si datele compilate pe
o platforma nativa se afla in partea dreapta a imaginii. O observatie importanta este ca Java poate
fi compilat din orice limbaj unde exista un compilator care poate produce clase binare standard,
spre exemplu C#. Partea nativa poate fi compilata din C sau din orice alt limbaj pentru care
exista suport JNI, inclusiv limbaj de asamblare. Fiecare parte din figura de mai jos se compileaza
intr-un format binar propriu. Astfel, pentru java exista clasele binare standard, iar pentru partea
nativa, programe binare in codul nativ al platformei respective. Datele, in partea Java, exista sub
forma de obiecte si tablouri pe „heap” si variabile in stiva. In zona nativa, datele sunt organizate
de catre compilator intr-un mod oarecare, cu alte cuvinte sunt dependente de compilator.
JNI ofera o interfata pentru metodele Java prin intermediul careia sa poata apela metode
native. Pentru aceasta, metoda nativa trebuie declarata „native” de clasa Java apelanta. Dupa
compilarea clasei Java in care este declarata metoda nativa ce va fi apelata, este utilizat
programul „javah” pentru a genera un fisier header pentru metoda nativa.
Controlul aplicatiei poate fi transferat intre codul Java si metodele native prin intermediul
interfetei native Java. Astfel pot fi transferate argumente si se pot returna valori. In ceea ce
priveste exceptiile prinse si aruncate de codul nativ, pot fi tratate de catre aplicatia Java. Pentru a
putea fi accesate datele din zona Java de catre codul din partea nativa, JNI ofera cateva metode
native. Spre exemplu, „GetArrayLength” va intoarce dimensiunea unui tablou Java, iar
GetIntArrayElements returneaza un pointer catre elementele unui tablou Java.
6. Virtualizarea resurselor
6.1 Procesorul
Aspectul cheie al virtualizarii procesorului consta in executia instructiunilor cloentului,
incluzand aici si instructiunile de la nivelul de sistem si cele de la nivelul user. Exista doua
moduri in care aceasta se poate realiza. Prima metoda este prin emulare. Emularea se poate
realiza fie prin interpretare, fie prin translatare binara. Emularea implica examinarea fiecarei
instructiuni in parte, fie in mod repetat pentru metoda interpretarii fie o singura data pentru
metoda translatarii binare. De asemenea, implica emularea pe resursele virtuale exact actiunile
care ar fi fost realizate pe resurse reale. Emularea este singurul mecanism disponibil de
virtualizare a procesorului atunci cand ISA clientului este diferit de ISA gazdei.
6.2 Memoria
Intr-un sistem de VM fiecare din clientii VM are propriul set de tabele de tabele de
memorie. Translatarea adresei din fiecare din VM clienti transforma adresel in adrese virtuale
catre locatii in memoria reala(memoria reala corespunde memoriei fizice pe o platforma nativa,
insa pe o platforma VM acest lucru nu se intampla). Intr-un sistem de VM, adresele din memoria
reala a clientului sunt mapate pentru a determina adrese din memoria fizica al hardwareului
gazda.
Memoria fizica este memoria hardware. Memoria reala este iluzia a memoriei fizice
perceputa de un client VM (aceasta iluzie este sustinuta de VMM care mapeaza memoria reala a
clientului la memoria fizica). Este aceasta mapare fizic-real cea care implementeaza virtualizarea
memoriei in tr-un sistem VM.
Adaugarea unui alt nivel in ierarhia moemoriei duce la necesitatea unor mecanisme
aditionale pentru managementul memoriei. De notat este faptul ca marimea totala adunata a
tuturor clientilor este in general mai mare decat marimea memoriei fizice a sistemului. Astfel,
VMM mentine un spatiu de swap, distinct de spatiile de swap a fiecarui client. VMM
gestioneaza memoria fizica schimband paginile reale ale clientilor in si din propiul spatiu de
swap.
Asadar, 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.
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.
In ceea ce priveste place de retea, sunt cateva aspecte de discutat( aspect bine tratate sip use
in practica prin driverul VirtualBox).
Unui sistem virtual ii putem adauga pana la 4 placi de retea virtuale (facilitate foarte utila
atunci cand dorim sa cream o retea virtuala cu mai multe sisteme virtuale conectate pe care sa
testam diverse lucruri). Fiecare placa poate fi intr-unul din urmatoarele moduri:
1. Not attached – placa de retea din sistemul guest nu va fi atasata sistemului fizic (deci nu
va putea accesa nimic practic din lumea reala, este doar prezenta si atat).
2. NAT – setare implicita – sistemul guest (Linux in cazul nostru) va putea accesa prin
placa de retea orice alt calculator fizic conectat la reteaua reala, sau Internetul, dar i se va
face Network Address Translation de catre VirtualBox (va avea astfel o adresa privata si
VirtualBox va actiona ca un router cu NAT pentru a translata aceasta adresa privata in
adresa IP de pe placa de retea fizica a sistemului nostru).
3. Host interface – acesta se mai numeste modul Bridged (in VMWare de exemplu). Astfel,
placa de retea virtuala este legata direct in placa de retea fizica, ca si cum ar intra ambele
intr-un switch. Astfel, are acces direct la reteaua noastra fizica ca si cum ar fi un alt
calculator conectat direct. Orice pachet trimis de sistemul guest, virtual, pe aceasta placa
va pleca direct pe placa de retea fizica si apoi in retea, orice pachet care intra in placa de
retea fizica si este destinat masinii virtuale ii va fi livrat acesteia in mod transparent.
Aceasta este cea mai simpla modalitate de a avea acces la retea din mediul virtual, dar
exista cazuri cand nu se poate aplica (daca PC-ul are alocat de la providerul de internet un
singur IP si nu exista un router intermediar, va fi nevoie de inca un IP de la provider,
simuland astfel existenta unui alt PC instalat la aceeasi conexiune Internet). Este bine de
stiut faptul ca daca PC-ul este intr-o retea cu IP-uri publice conectata la Internet in mod
direct, o masina virtuala cu Windows nou instalat va fi foarte vulnerabila datorita acestui
acces direct. Firewall-ul de pe sistemul fizic nu o va putea proteja.
4. Internal Network – pot fi create in VirtualBox mini-retele virtuale interne sistemului
fizic (le putem zice mini switch-uri) la care putem conecta dupa preferinta mai multe
masini virtuale pentru a putea interactiona intr-un mediu izolat.
Si placa de retea emulata poate fi aleasa.Varianta elmulata, PCnet-FAST III, este destul de
buna, insa exista si variant Intel Gigabit. De altfel, pot fi selectate oricare din placile fizicee
existente pe PC-ul gazda.
In functie de nevoi se mai pot selecta crearea unor porturi seriale (util de exemplu daca dorim
sa accesam un port serial fizic din sistemul guest), accesul la device-uri USB, crearea unor asa-
numite “Shared Folders”, niste directoare pe sistemul fizic la care sistemul virtual va avea acces
direct precum si activarea facilitatii de Remote Desktop (prin care putem accesa oricare din
masinile virtuale existente prin remote desktop, de pe alt PC).
7. Concluzii
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.
8. Bibliografie: