Awalnya, Anda tidak bisa membiarkan OS tamu menggunakan perangkat keras nyata karena Anda tidak punya cara untuk mengendalikannya. Jika Anda mencoba menjalankannya pada CPU nyata, Anda tidak memiliki jaminan bahwa itu akan mengembalikan kontrol ke OS host.
Virtualisasi saat Anda menggambarkannya diimplementasikan dalam perangkat keras dengan memungkinkan aturan dan batasan tertentu diterapkan pada tingkat perangkat keras, yang dapat dikelola oleh OS host. Ini memungkinkan host OS untuk mengatur aturan tentang apa yang tamu dapat dan tidak bisa lakukan, dan kemudian benar-benar menjalankan tamu pada perangkat keras nyata. Jika tamu mencoba melakukan sesuatu dengan perangkat keras nyata yang melanggar aturan (seperti mencoba mengakses perangkat disk), perangkat keras tersebut akan menangguhkan tamu dan mengirimkan interupsi kepada tuan rumah, yang memungkinkan tuan rumah memberikan respons (seperti mengembalikan data dari perangkat disk yang ditiru), dan kemudian melanjutkan tamu.
Berikut ini contoh proses yang disederhanakan:
Host OS: Hai CPU, saya ingin Anda menjalankan kode ini tervirtualisasi. Hubungi saya jika ingin melakukan sesuatu yang bukan hanya menjalankan instruksi.
Host CPU: Anda mengerti!
Host CPU menyimpan semua register host dan menyatakan, dan kemudian mulai menjalankan kode OS Guest
OS Tamu: Saya hidup! Hai CPU, dapatkah Anda mengambilkan file ini untuk saya?
Host CPU: Uh ... tentu. Sebentar.
Host CPU menyimpan semua register tamu dan menyatakan, dan kemudian mengembalikan semua register host dan menyatakan
Host CPU: Hei Host OS, Tamu menginginkan file ini!
Host OS: Oh, berikan mereka ini: File dari hard drive virtual
Host CPU: Anda mengerti!
Host CPU menyimpan semua register host dan menyatakan, mengembalikan register tamu dan menyatakan, dan kemudian mulai mengeksekusi kode OS Guest
Host CPU: Ini file itu!
OS Tamu: Manis, terima kasih!
Perbedaan utama di sini adalah di emulator, OS tamu tidak pernah benar-benar berjalan pada perangkat keras. Dengan virtualisasi, OS host mengonfigurasi batasan ke dalam CPU, dan kemudian benar-benar menjalankan kode tamu pada CPU fisik. Contoh di atas sangat disederhanakan, tetapi memori, disk i / o, dan bahkan jaringan dapat dikontrol pada prosesor terbaru saat ini, memungkinkan mereka untuk dihubungkan dengan aman tanpa harus mengganggu OS host setiap kali. Selama tamu tidak mencoba untuk pergi keluar dari batas tervirtualisasi, maka OS Host mungkin tidak memiliki kode yang berjalan jika tidak ada hubungannya pada titik waktu tertentu.
Untuk menambahkan sedikit perspektif, ini hanya satu langkah lagi dalam sejarah panjang virtualisasi dan kontrol. (Tidak ada jaminan bahwa ini dalam urutan yang benar atau lengkap, tetapi harus memberikan gambaran awal yang baik)
Awalnya, tidak ada virtualisasi. Semua proses berbagi ruang memori yang sama, semua memiliki akses penuh ke perangkat keras, dan kemampuan untuk multi-tugas sepenuhnya bergantung pada satu proses menghentikan sendiri dan memberikan kontrol untuk proses selanjutnya. Jika OS ingin memiliki semacam kontrol atas suatu proses, ia harus menjalankan proses dalam sebuah emulator (tidak ada yang melakukannya, karena itu terlalu lambat).
Pertama adalah Privileged Memory : tindakan tertentu yang hanya dapat dilakukan oleh wilayah memori khusus. Wilayah ini ditempati oleh OS, yang memungkinkannya untuk bertindak sebagai pintu gerbang ke tindakan istimewa ini. Contohnya adalah kemampuan untuk membaca / menulis data ke perangkat keras. Ini mencegah proses membaca / menulis langsung ke harddisk, dan sebaliknya memaksa mereka untuk meminta OS untuk membaca / menulis untuk mereka. Ini berarti OS dapat memeriksa apakah proses tersebut memiliki izin sebelum melakukan tindakan.
Selanjutnya datang "waktu" yang tervirtualisasi. OS dapat mengkonfigurasi CPU untuk menghentikan proses aktif pada interval yang ditentukan, memungkinkannya untuk mengendalikan penjadwalan dan beralih di antara proses. OS sekarang dapat menjalankan proses secara langsung pada perangkat keras dan masih mencegah mereka menyalahgunakan waktu CPU. Ini disediakan oleh pengatur waktu perangkat keras .
Berikutnya datang memori tervirtualisasi : Masalah dengan memori bersama adalah bahwa setiap proses dapat membaca memori dari proses lain. Apa yang terjadi ketika program Mary membaca kata sandi Bob dari browser web-nya? Memori virtual memungkinkan OS untuk memetakan memori yang dilihat oleh suatu proses ke berbagai bagian memori fisik, atau bahkan memindahkannya sepenuhnya dari memori fisik (ke file halaman). Setiap kali suatu proses mencoba membaca atau menulis ke memori, VMMU (unit manajemen memori virtual) dari CPU mencari di mana ia dipetakan ke dalam memori fisik, dan melakukan tindakan di sana. Jika dipetakan kehabisan memori, maka CPU memanggil OS untuk mengambil halaman ke dalam memori dari file halaman.
Baiklah, jadi pada titik ini kita telah mencapai awal dari prosesor X86, di mana kita dapat menjalankan proses dengan aman dan secara aktif dapat mencegah mereka mengambil alih sistem kecuali OS secara khusus mengizinkan mereka untuk melakukannya. Pada titik ini, proses secara efektif "tervirtualisasi". Dukungan ini telah ada sejak lama, jadi Anda tidak benar-benar mendengar orang berbicara tentang proses tervirtualisasi, karena hanya diasumsikan bahwa semua proses tervirtualisasi sekarang.
Mengapa OS tervirtualisasi spesial? Mengapa kita tidak memulai saja sebagai proses dan membiarkannya sendiri? Nah, masalahnya adalah bahwa sebagai OS, sistem tamu mengharapkan untuk dapat mengakses dan menggunakan kontrol yang sama yang digunakan tuan rumah untuk mengontrol proses - pada dasarnya, OS mengharapkan untuk menjadi penguasa tertinggi komputer, dan mereka tidak t bekerja jika bukan itu masalahnya. Ekstensi "Hardware Virtualization" (AMD-V untuk AMD, dan VT-x untuk Intel) memungkinkan Host OS untuk menyediakan satu set kontrol proses virtual (virtual privilege virtual, timer hardware virtual, virtual virtual memory).