Mesin virtual

**Mesin virtual** atau **mesin maya** (Inggris: ***virtual machine***, disingkat **vm**) dalam ilmu komputer adalah implementasi perangkat lunak dari sebuah mesin komputer yang dapat menjalankan program sama seperti layaknya sebuah komputer asli.

## Definisi
Mesin virtual pada mulanya didefinisikan oleh Gerard J. Popek dan Robert P. Goldberg pada tahun 1974 sebagai *sebuah duplikat yang efisien dan terisolasi dari suatu mesin asli*. Pada masa sekarang ini, mesin-mesin virtual dapat menyimulasikan perangkat keras walaupun tidak ada perangkat keras aslinya sama sekali.

Contohnya adalah program yang ditulis dalam bahasa Java akan dilayani oleh Java Virtual Machine (JVM) dengan cara memberikan perintah-perintah yang dimengerti JVM yang selanjutnya akan memberikan hasil yang diharapkan. Dengan memberikan layanan seperti ini kepada program tersebut, perangkat lunak JVM ini berlaku sebagai sebuah "mesin virtual", sehingga program tidak lagi perlu untuk mengakses langsung melalui sistem operasi ataupun perangkat keras yang sangat bervariasi dan memerlukan pemrograman masing-masing secara spesifik.

Mesin virtual terdiri dari dua kategori besar, dipisahkan menurut cara penggunaan dan tingkat keterhubungannya dengan mesin-mesin aslinya. Sebuah **mesin virtual sistem** adalah perangkat yang berupa platform sistem yang lengkap dan dapat menjalankan sebuah sistem operasi yang lengkap. Sebaliknya, **mesin virtual proses** didesain untuk menjalankan sebuah program komputer tertentu (tunggal), yang berarti mesin virtual ini mendukung proses tertentu juga. Karakteristik mendasar dari sebuah mesin virtual adalah batasan-batasan bagi perangkat lunak yang berjalan di dalam mesin tersebut, sumber daya yang dibatasi, dan tidak dapat mengakses ke luar tembok batasan dunia maya itu.

### Virtual Machine Monitor
Virtual machine monitor (VMM) atau hypervisor merupakan bagian dari perangkat lunak yang membuat/menyimulasikan virtual machine. Hypervisor merupakan istilah industri untuk menjelaskan tentang VMM. Abstraksi mesin yang dibuat oleh VMM disebut virtual machine (VM).

VMM membuat platform virtual sehingga sistem operasi dapat berjalan di atasnya. VMM juga berperan sebagai manajer untuk menjalankan sistem operasi yang berjalan di atasnya. VMM merupakan teknik yang berguna dalam menambah fungsionalitas dibawah layer OS dan layer aplikasi. Sebagai manajer VM, VMM turut mengatur eksekusi yang berjalan di sistem operasi yang disimulasikannya. Abstraksi VMM disebut dengan virtual machine (VM). Perangkat keras yang di simulasikan dapat di atur sehingga mempunyai spesifikasi yang identik dengan perangkat keras dimana VMM diimplementasikan.VMM juga dapat meng-enkapsulasi suatu aplikasi yang berjalan di atasnya sehingga memudahkan manajemen dan kontrol terhadap sistem komputer.

Dengan adanya VMM maka Virtual machine yang diimplementasikan pada sistem komputer dapat membuat abstraksi dari layer yang ada di bawahnya sehingga dapat membuat/menyimulasikan layer aplikasi dari suatu sistem komputer yang di inginkan.

### Jenis-jenis virtual machine

Terdapat beberapa pendekatan dalam mengklarifikasi virtual machine, dan salah satunya adalah mendefinisikannya menjadi 2 type (Type I dan type II). Klarifikasi ini didasarkan oleh fakta bahwa kedua type virtual machine ini bekerja dengan lower level platform yang mirip. Type I VMM tidak menggunakan host operating system, sedangkan type II VMM menggunakan host operating system. Type II disebut juga dengan paravirtual machine. Karena type II VMM menggunakan host operating sytem maka kinerjanya lebih buruk dibandingkan type I VMM.

## Teknik
### Virtualisasi di tingkat sistem operasi

Type II melakukan virtualisasi di tingkat sistem operasi. Type II membutuhkan host operating system untuk melakukan virtualisasi. Ketika dilakukan inisiasi VM, pertama-tama VMM membuat komponen hardware virtual yang memetakan abstraksi di host OS. Kemudian terjadi degradasi performansi akibat bottlenect ketika menjalankan VM. Bottlenect yang terjadi merupakan proses untuk menginisiasi VM. Setelah itu maka VM akan berjalan di sistem komputer.

Terdapat tiga bottleneck penyebab virtualization overhead. Pertama, struktur yang memisahkan dua host procesess yang menyebabkan inordinate number dari context switches di host. Kedua, perubahan antara guest kernel dan guest user yang menghasilkan banyaknya operasi untuk melindungi memory (memory protection operation). Ketiga, perubahan antara dua guest application process (atau lebih dari dua) yang menghasilkan banyaknya operasi memory mapping.

Proses inisiasi VM yang telah dijalankan oleh VMM mempunyai functional process untuk melakukan hal-hal tersebut. VMMM functional process berada di host kernel. Methode untuk melakukan intercept key events (system call and signals) dieksekusi di host kernel. Hal ini menyebabkan VMM kernel module mempunyai control yang baik terhadap guest machine process. Sebagai contoh kelebihannya, modul kernel VMM dapat mengubah address guest machine process secara langsung.

Guest machine process berubah secara periodik antara guest user mode dengan guest kernel mode. Guest kernel harus dilibatkan untuk melakukan system call dan exception yang dilakukan oleh guest application process dan mengolah data yang dikirim oleh virtual I/O device. Setiap kali guest machine memproses perpindahan dari guest kernel mode ke guest user mode maka address space guest kernel [0x7000000, 0xc0000000] harus dilindungi dari akses yang tidak diinginkan. Sebaliknya, setiap kali perpindahan antara guest machine memproses perpindahan antara user mode ke guest kernel maka address space harus disediakan. Guest machine process dapat melakukan address space manipulation karena membuat host system calls mmap, munmap dan mprotect.

Perpindahan address space antara guest application process dilakukan di dalam proses virtualisasi. Perpindahan address space milik guest harus mengubah mapping antara guest virtual pages dan page di memory file physical tempat mesin melakukan virtualisasi. Perubahan mapping dilakukan dengan memanggil munmap untuk mengirim address space milik guest application process. Kemudian mmap dipanggil setiap residen di virtual page untuk menerima guess application process.

 

## Daftar perangkat keras dengan dukungan mesin maya
* AMD-V (sebelumnya dengan kode nama Pacifica)
* ARM TrustZone
* Boston Circuits gCore (grid-on-chip) dengan 16 inti ARC 750D dan modul virtualisasi perangkat keras mesin-waktu.
* Freescale PowerPC MPC8572 dan MPC8641D
* Kerangka induk (*mainframe*) IBM System/370, System/390, dan zSeries
* Intel VT (sebelumnya dengan kode nama Vanderpool)
* Sun Microsystems sun4v (UltraSPARC T1 dan T2) -- digunakan oleh Logical Domains

* HP vPAR dan nPAR berbasis sel

* Sistem Honeywell Multics
* Sistem Liberator Honeywell 200/2000 menggantikan sistem IBM 14xx, Level 62/64/66 GCOS
* IBM System/360 Model 145, perangkat keras emulator untuk sstem Honeywell 200/2000
* RCA Spectra/70 Series mengemulasikan IBM System/360
* CPU NAS mengemulasikan mesin-mesin IBM and Amdahl
* Komputer mini Honeywell Level 6 mengemulasikan pendahulunya, minikomputer 316/516/716
* CPU Xerox Sigma 6 yang dimodifikasi untuk mengemulasikan sistem GE/Honeywell 600/6000

## Buku-buku
* Jim, Jr. Smith, Ravi Nair, James E. Smith, Heath Potter, Virtual Machines: Versatile Platforms For Systems And Processes, Publisher Morgan Kaufmann Publishers, May 2005, ISBN 1-55860-910-5, 656 pages
* Dostál, J. Virtual Machines in education (Vyuzití virtuálního pocítace ve vzdelávání). Olomouc, EU: Votobia, 2008. 66 s. ISBN 978-80-7220-309-3.
* Craig, Iain D. Virtual Machines. Springer, 2006, ISBN 1-85233-969-1

## Referensi

## Lihat pula
* Virtualisasi
* Perbandingan mesin maya

## Pranala luar
*  ''The Reincarnation of Virtual Machines, Article on ACM Queue by Mendel Rosenblum, Co-Founder, VMware'' 
*  ''Performances comparison between Xen, UML, Vserver and VMware''