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.
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 mensimulasikan 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 (VMM) atau hypervisor merupakan bagian dari perangkat lunak yang membuat/mensimulasikan 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/mensimulasikan layer aplikasi dari suatu sistem komputer yang di inginkan.
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.
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) di eksekusi 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. Perpidahan 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.