1. Pendahuluan
Mesin virtual sebenarnya bukan merupakan hal yang baru dalam dunia komputer. Mesin virtual
biasa digunakan dalam dunia komputer untuk memecahkan beberapa masalah serius, namun
sesungguhnya mesin virtual adalah nyata penggunaanya untuk pengguna komputer karena mesin
virtual secara khas telah digunakan dalam program aplikasi yang biasa digunakan sehari-hari.
Beberapa masalah tersebut misalnya pembagian hardware yang sama yang diakses banyak program
atau untuk memungkinkan perangkat lunak agar lebih portabel di antara berbagai jenis sistem
operasi. Dalam bab ini kita akan membahas tentang mesin virtual beserta penerapannya dalam
sistem operasi, khususnya mesin virtual Java, yang dewasa ini sangat populer dalam ilmu komputer.
Gambar Struktur Mesin Virtual Java
2. Konsep Mesin Virtual
Dasar logika dari konsep mesin virtual atau virtual machine adalah dengan menggunakan
pendekatan lapisan-lapisan (layers) dari sistem komputer. Sistem komputer dibangun atas
lapisan-lapisan. Urutan lapisannya mulai dari lapisan terendah sampai lapisan teratas adalah sebagai
berikut:
• Perangkat keras
• Kernel
• Sistem program
Kernel, yang berada pada lapisan kedua, menggunakan instruksi perangkat keras untuk menciptakan seperangkat system call yang dapat digunakan oleh komponen-komponen pada level sistem
program. Sistem program kemudian dapat menggunakan system call dan perangkat keras
seolah-olah pada level yang sama. Meski sistem program berada di level tertinggi, namun program
aplikasi bisa melihat segala sesuatu di bawahnya (pada tingkatan) seakan-akan mereka adalah
bagian dari mesin. Pendekatan dengan lapisan-lapisan inilah yang kemudian menjadi kesimpulan
logis pada konsep mesin virtual atau virtual machine (VM).
Kelemahan Mesin Virual Java
Kesulitan utama dari konsep VM adalah dalam hal sistem penyimpanan dan pengimplementasian.
Sebagai contoh, kesulitan dalam sistem penyimpanan adalah sebagai berikut. Andaikan kita
mempunyai suatu mesin yang memiliki 3 disk drive namun ingin mendukung 7 VM. Keadaan ini
jelas tidak memungkinkan bagi kita untuk dapat mengalokasikan setiap disk drive untuk tiap VM,
karena perangkat lunak untuk mesin virtual sendiri akan membutuhkan ruang disk secara substansi
untuk menyediakan memori virtual dan spooling.
Solusinya adalah dengan menyediakan disk virtual, atau yang dikenal pula dengan minidisk, di
mana ukuran daya penyimpanannya identik dengan ukuran sebenarnya. Sistem disk virtual
mengimplementasikan tiap minidisk dengan mengalokasikan sebanyak mungkin track dari disk fisik
sebanyak kebutuhan minidisk itu. Secara nyata, total kapasitas dari semua minidisk harus lebih kecil
dari kapasitas disk fisik yang tersedia. Dengan demikian, pendekatan VM juga menyediakan sebuah
antarmuka yang identik dengan underlying bare hardware. VM dibuat dengan pembagian sumber
daya oleh physical computer. Pembagian minidisk sendiri diimplementasikan dalam perangkat
lunak.
Kesulitan yang lainnya adalah pengimplementasian. Meski konsep VM cukup baik, namun VM sulit
diimplementasikan. Ada banyak hal yang dibutuhkan untuk menyediakan duplikat yang tepat dari
underlying machine. VM dapat dieksekusi hanya pada user mode, sehingga kita harus mempunyai
user mode virtual sekaligus monitor mode virtual yang keduanya berjalan di physical user mode.
Ketika instruksi yang hanya membutuhkan virtual user mode dijalankan, ia akan mengubah isi
register yang berefek pada virtual monitor mode, sehingga dapat merestart VM tersebut. Sebuah
instruksi M/K yang membutuhkan waktu 100 ms, dengan menggunakan VM bisa dieksekusi lebih
cepat karena spooling atau dapat pula lebih lambat karena interpreter. Terlebih lagi, CPU menjadi
multiprogrammed di antara banyak VM. Jika setiap user diberi satu VM, dia akan bebas
menjalankan sistem operasi (kernel) yang diinginkan pada VM tersebut.
Keunggulan Mesin Virtual Java
Terlepas dari segala kelemahan-kelemahannya, VM memiliki beberapa keunggulan, antara lain:
Pertama, dalam hal hal keamanan, VM memiliki perlindungan yang lengkap pada berbagai sistem
sumber daya, yaitu dengan meniadakan pembagian resources secara langsung, sehingga tidak ada
masalah proteksi dalam VM. Sistem VM adalah kendaraan yang sempurna untuk penelitian dan
pengembangan sistem operasi. Dengan VM, jika terdapat suatu perubahan pada satu bagian dari
mesin, maka dijamin tidak akan mengubah komponen lainnya.
Kedua, dimungkinkan untuk mendefinisikan suatu jaringan dari mesin virtual, di mana tiap-tiap
bagian mengirim informasi melalui jaringan komunikasi virtual. Sekali lagi, jaringan dimodelkan
setelah komunikasi fisik jaringan diimplementasikan pada perangkat lunak.
Contoh Mesin Virtual
Contoh penerapan VM saat ini terdapat pada sistem operasi Linux. Mesin virtual saat ini
memungkinkan aplikasi Windows untuk berjalan pada komputer yang berbasis Linux. VM juga
berjalan pada aplikasi Windows dan sistem operasi Windows.
3. Konsep Bahasa Java
Sun Microsystems mendesain bahasa Java, yang pada mulanya dikenal dengan nama Oak. James
Gosling, sang pencipta Oak, menciptakannya sebagai bagian dari bahasa C++. Bahasa ini harus cukup kecil agar dapat bertukar informasi dengan cepat di antara jaringan kabel perusahaan dan
pertelevisian dan cukup beragam agar dapat digunakan lebih dari satu jaringan kabel. Sun Microsystems lalu merubah nama Oak menjadi Java, kemudian membuatnya tersedia di dalam Internet. Perkenalan dengan Java di Internet ini dimulai pada tahun 1995.
Java didesain dengan tujuan utama portabilitas, sesuai dengan konsep write once run anywhere.
Jadi, hasil kompilasi bahasa Java bukanlah native code, melainkan bytecode. Bytecode dieksekusi
oleh interpreter Java yang juga merupakan Java Virtual Machine. Penjelasan mengenai Java Virtual Machine (JVM) akan dijelaskan pada Bagian 4, “Mesin Virtual Java”.
Ada beberapa hal yang membedakan Java dengan bahasa pemrograman lain yang populer pada saat
ini, yakni:
• Bersifat portable, artinya program Java dapat dijalankan pada platform yang berbeda tanpa perlu
adanya kompilasi ulang.
• Memiliki garbage collection yang berfungsi untuk mendelokasi memori secara otomatis.
• Menghilangkan pewarisan ganda, yang merupakan perbaikan dari bahasa C++.
• Tidak ada penggunaan pointer, artinya bahasa Java tidak membolehkan pengaksesan memori
secara langsung.
Teknologi Java terdiri dari komponen, yakni:
• Application Programming Interface (API)
• Spesifikasi mesin virtual
4. Mesin Virtual Java
Mesin Virtual Java atau Java Virtual Machine (JVM) terdiri dari sebuah class loader dan Java
interpreter yang mengeksekusi architecture-neutral bytecode. Java interpreter merupakan suatu
fasilitas penerjemah dalam JVM. Fungsi utamanya adalah untuk membaca isi berkas bytecode
(.class) yang dibuat kompilator Java saat berkas berada dalam memori, kemudian
menerjemahkannya menjadi bahasa mesin lokal. Java interpreter dapat berupa perangkat lunak yang
menginterpretasikan bytecode setiap waktu, atau hanya Just-In-Time (JIT), yang mengubah
architecture-neutral bytecode menjadi bahasa mesin lokal. Interpreter bisa juga diimplementasikan
pada sebuah chip perangkat keras. Instance dari JVM dibentuk ketika aplikasi Java atau applet
dijalankan. JVM mulai berjalan saat method main() dipanggil.
gambar java virtual machine
Meski sistem program berada di level tertinggi, program aplikasi bisa melihat segala sesuatu di bawahnya (pada tingkatan) seakan mereka adalah bagian dari mesin. Pendekatan dengan lapisan-lapisan inilah yang diambil sebagai kesimpulan logis pada konsep mesin virtual atau virtual machine (VM). Pendekatan VM menyediakan sebuah antarmuka yang identik dengan underlying bare hardware. VM dibuat dengan pembagian sumber daya oleh physical computer. VM perangkat lunak membutuhkan ruang pada disk untuk menyediakan memori virtual dan spooling sehingga perlu ada disk virtual.
Pada applet, JVM menciptakan method main() sebelum membuat applet itu sendiri. Java
Development Environment terdiri dari sebuah Compile-Time Environment dan Runtime
Environment. Compile berfungsi mengubah sourcecode Java menjadi bytecode, sedangkan Runtime merupakan Java Platform untuk sistem Host.
Meski sangat berguna, VM sulit untuk diimplementasikan. Banyak hal yang dibutuhkan untuk menyediakan duplikat yang tepat dari underlying machine. VM dapat dieksekusi pada only user mode sehingga kita harus mempunyai virtual user mode sekaligus virtual memory mode yang keduanya berjalan di physical user mode. Ketika instruksi yang hanya membutuhkan virtual user mode dijalankan, ia akan mengubah isi register yang berefek pada virtual monitor mode sehingga dapat memulai ulang VM tersebut. Sebuah instruksi M/K yang membutuh waktu 100 ms, dengan menggunakan VM bisa dieksekusi lebih cepat karena spooling atau lebih lambat karena interpreter.
Terlebih lagi, CPU menjadi multiprogrammed di antara banyak VM. Jika setiap user diberi 1 VM, dia akan bebas menjalankan sistem operasi (kernel) yang diinginkan pada VM tersebut.
Selain kekurangan yang telah disebutkan diatas, jelas VM memiliki kelebihan-kelebihan, yaitu:
Keamanan yang terjamin karena VM mempunyai perlindungan lengkap pada berbagai sistem
sumber daya, tidak ada pembagian resources secara langsung. Pembagian disk mini dan jaringan diimplementasikan dalam perangkat lunak. Sistem VM adalah kendaraan yang sempurna untuk penelitian dan pengembangan Sistem Operasi. Dengan VM, perubahan satu bagian dari mesin dijamin tidak akan mengubah komponen lainnya.
Mesin Virtual Java atau Java Virtual Machine (JVM) terdiri dari sebuah kelas loader dan java interpreter yang mengeksekusi the architecture-neutral bytecodes. Java interpreter bisa berupa perangkat lunak yang menginterpretasikan kode byte setiap waktu atau hanya Just-In-Time (JIT) yang mengubah architecture-neutral bytecodes menjadi bahasa mesin lokal. Interpreter bisa juga diimplementasikan pada sebuah chip perangkat keras. Instance dari JVM dibentuk ketika aplikasi java atau applet dijalankan. JVM mulai berjalan saat method main dipanggil. Pada applet, JVM menciptakan method main sebelum membuat applet itu sendiri.
Java Development Environment terdiri dari sebuah Compile Time Environment dan RunTime
Environment. Compile berfungsi mengubah java sourcecode menjadi kode byte. Sedangkan
RunTime merupakan Java Platform untuk sistem Host.
Sistem Operasi Java
JavaOS adalah satu-satunya sistem yang mencoba untuk mengimplementasi fungsi sistem operasi
dalam bahasa Java secara lengkap. JavaOS mengimplementasi platform Java agar dapat
menjalankan aplikasi atau applet yang mengakses fasilitas dari beberapa objek. Selain itu, JavaOS
juga mengimplementasikan JVM dan lapisan fungsionalitas untuk windowing, jaringan, dan sistem
berkas tanpa membutuhkan dukungan dari sistem operasi lokal. JavaOS mendefinisikan platform
seperti halnya CPU, memori, bus, dan perangkat keras lainnya. Platform independen dari sistem
operasinya disebut JavaOS runtime, sedangkan bagian platform yang non-independen dari sistem
operasinya disebut JavaOS kernel.
JavaOS menyediakan lingkungan Java yang standalone. Dengan kata lain, aplikasi yang
dikembangkan untuk platform Java yang menggunakan JavaOS dapat berjalan pada perangkat keras
tanpa dukungan sistem operasi lokal. Selain itu, aplikasi yang ditulis untuk berjalan pada satu mesin
tanpa adanya sistem operasi lokal dapat pula berjalan pada mesin yang memiliki sistem operasi
lokal.
JavaOS terbagi menjadi dua, yaitu kode platform independen dan platform non-independen. Kode
platform non-independen merujuk kepada kernel dan terdiri atas mikrokernel dan JVM. Mikrokernel
menyediakan layanan menajemen memori, interupsi dan penganan trap, multithread, DMA, dan
fungsi level rendah lainnya. JVM menerjemahkan dan mengeksekusi bytecode Java. Tujuan dari
kernel adalah untuk meringkaskan spesifikasi perangkat keras dan menyediakan platform antarmuka
yang netral dari sistem operasi.