Virtuelna mašina

**Virtuelna mašina** (**VM**) predstavlja simulaciju mašine, koja se obično razlikuje od ciljne mašine (na kojoj se simulacija obavlja). Virtuelne mašine mogu biti zasnovane na specifikacijama hipotetičkog računara ili mogu da emuliraju arhitekturu računara i funkcije „stvarnog“ kompjutera.

## Definicije
Virtuelna mašina (VM) je softverska implementacija mašine (npr. računara) koja izvršava program kao „prava“ mašina. Na osnovu njihove upotrebe i stepena sličnosti sa stvarnom mašinom, virtuelne mašine se dele na dva glavna tipa:
# Virtuelna mašina za simuliranje sistema, koja obezbeđuje kompletnu sistemsku platformu koja podržava izvršavanje celog operativnog sistema (OS). One obično emuliraju postojeće arhitekture, a najčešće se prave radi obezbeđivanja platforme za izvršavanje programa kada „pravi“ hardver nije dostupan (npr. izvršavanje softvera na prevaziđenim platformama), ili kada je, u cilju efikasnijeg iskorišćenja računarskih resursa (najviše po pitanju potrošnje energije i/ili kontrole troškova) potrebno imati više instanci virtuelnih mašina.
# Virtuelna mašina za simuliranje procesa (i jezika) je osmišljena tako da izvršava jedan program, što znači da podržava samo jedan proces. Takve virtuelne mašine se obično prave za jedan ili više određenih programskih jezika, sa ciljem da, između ostalog, obezbede prenosivost i fleksibilnost. Glavna odlika ovog tipa je da je softver koji se na virtuelnoj mašini izvršava ograničen resursima i apstrakcijama koje virtuelna mašina obezbeđuje, tj. ne može da pređe okvire svog virtuelnog okruženja.

Virtuelnu mašinu su prvobitno definisali Popek i Goldberg kao „efikasan izolovani duplikat stvarne mašine“. Sadašnja upotreba uključuje i mašine koje ne odgovaraju nekom postojećem hardveru.

### Virtuelne mašine za simuliranje sistema
Glavne prednosti ovog tipa su: 
* više operativnih sistema može istovremeno postojati na istom računaru, a da pritom budu prilično izolovani jedni od drugih
* virtuelna mašina može da obezbedi skup instrukcija arhitekture koji se nešto razlikuje od onog na stvarnoj mašini
* snabdevanje aplikacijama, održavanje, visoka dostupnost i oporavak od katastrofe

Glavne mane ovog tipa su: 

* virtuelna mašina je manje efikasna od stvarne mašine kada indirektno pristupa hardveru
* kada se više virtuelnih mašina konkurentno izvršava na istom fizičkom „domaćinu“, svaka virtuelna mašina može imati promenljive i nestabilne performanse (u smislu brzine izvršavanja, ne rezultata), što prilično zavisi od opterećenja koji svaki VM nameće sistemu, osim ako se koriste određene tehnike za privremenu međusobnu izolaciju virtuelnih mašina.

Operativne sisteme koji se izvršavaju na virtuelnoj mašini nazivamo gostujućim operativnim sistemima. Gostujući operativni sistemi ne moraju biti kompatibilni sa hardverom, što omogućava pokretanje različitih operativnih sistema na istom računaru (npr. Majkrosoft vindousa i Linuksa, ili starijih verzija operativnih sistema radi podržavanja softvera koji još nije prilagođen novijim verzijama).

Ovaj tip virtuelnih mašina se može koristiti i za operativne sisteme koji su još u fazi razvoja.

### Virtuelne mašine za simuliranje procesa

Na ovom tipu virtuelnih mašina se puštaju „obične“ aplikacije unutar „domaćinskog“ operativnog sistema, i oni podržavaju samo jedan proces. On nastaje pri pokretanju procesa, a uništava se pri izlasku iz njega. Svrha virtuelnih mašina za simuliranje procesa je obezbeđivanje programskog okruženja koje ne zavisi od platforme.

Ovaj tip virtuelnih mašina obezbeđuje visok nivo apstrakcije - na nivou programskih jezika visokog nivoa. Oni se implementiraju korišćenjem interpretatora; performanse uporedive sa kompajliranim programskim jezicima se postižu upotrebom jit (eng. just in time) kompilacije.

Virtuelne mašine za simuliranje procesa se veoma koriste za programski jezik Java, koji je implementiran korišćenjem Java virtuelne mašine. Drugi primer je . NET Frejmvork, koji radi na virtuelnoj mašini koja se zove CLR (eng. Common Language Runtime)

## Reference

## Literatura

* James E. Smith, Ravi Nair, *Virtual Machines: Versatile Platforms For Systems And Processes*, Morgan Kaufmann, May 2005, , 656 pages (covers both process and system virtual machines)
* Craig, Iain D. *Virtual Machines*. Springer Science Business Media, 2006, , 269 pages (covers only process virtual machines)

## Vanjske veze
* The Reincarnation of Virtual Machines, Article on ACM Queue by Mendel Rosenblum, Co-Founder, VMware 
* Sandia National Laboratories Runs 1 Million Linux Kernels as Virtual Machines