A. Pengertian Virtual Memory (Memori Virtual)
Sebelumnya, virtual memory (memori virtual) adalah suatu teknik untuk memisahkan memori. Yakni memisahkan memori logis dan memori fisik. Hal ini perlu dilakukan, karena kesuluruhan program tidak dijalankan secara sekaligus, misalnya program kalkulator. Dalam kalkulator, kita bisa melakukan operasi aritmatika, seperti penjumlahan dan pengurangan. Ketika kita melakukan operasi aritmatika berupa penjumlahan, artinya program kalkulator hanya memerlukan kode program yang dibutuhkan untuk
penjumlahan, tidak keseluruhan program, keseluruhan program kalkulatorpun tidak perlu dimuat ke dalam memori (hanya sebagian saja). Dengan demikian, program yang sedang dijalankan dan penggunaan memori bisa menjadi lebih efisien. Karena keseluruhan program tidak perlu dimuat ke dalam memori (hanya sebagian saja), kita bisa menggunakan lebih banyak program lagi. Memoripun bisa digunakan secara maksimal.
Dalam multiprogramming, virutal memory (memori virtual) juga sangat berguna. Misalkan ada 5 program yang memiliki ukuran sebesar 10 Mb, tetapi memori yang perangkat kita miliki hanya sebesar 20 Mb. Dengan virtual memory (memori virtual), proses-proses yang tidak diperlukan, bisa dialokasikan ke dalam virtual memory (memori virtual). Ketika proses tersebut diperlukan, proses tersebut bisa dialokasikan kembali ke memori utama. Sehingga, semua program bisa berjalan dengan baik dan efisien.
B. Tujuan Penggunaan Virtual Memory (Memori Virtual)
Penggunaan virtual memory (memori virtual) memiliki tujuan, berupa membuat file yang disebut sebagai swapfile. Nah, swapfile sendiri adalah memori selain atau diluar memori utama. Dengan adanya swapfile, kapasitas memori total bisa menjadi lebih besar. Hal ini membuat kita sebagai pengguna bisa menjalankan program lebih banyak.
Virtual memory (memori virtual) hanya akan digunakan ketika perangkat kita tidak memiliki cukup memori untuk menampung program lagi. Ketika virtual memory (memori virtual) digunakan, data atau program yang paling akhir diakses akan ditempatkan di swapfile. Setelah dilakukan pemindahan, memori utama tentu saja akan menyisakan ruang-ruang kosong. Nah, ruang-ruang kosong inilah yang bisa kita gunakan untuk program yang akan kita jalankan selanjutnnya. Setelah itu, data atau program yang ada di swapfile ini baru akan dipindah lagi ke dalam memori utama ketika diperlukan. Hal ini akan terjadi terus-menerus.
C. Fungsi Penggunan Virtual Memory (Memori Virtual)
Fungsi virtual memory (memori virtual) adalah sebagai berikut:
1. Membantu mengurus beban yang terlalu banyak pada memori
Ketika kita menjalankan banyak program, perangkat kita akan membutuhkan banyak sekali ruang untuk menjalankan program tersebut. Disinilah virtual memory (memori virtual) membantu. Disaat ruang pada memori sudah terlalu penuh, virtual memory (memori virtual) bisa mengalokasikan sebagian data atau program yang ada pada memori ke dalam virtual memory (memori virtual) itu sendiri. Sehingga, program bisa berjalan secara efisien dan kita bisa menggunakan program yang lebih banyak lagi.
2. Bisa sebagai memori
Memori virtual (memori virtual) bisa juga sebagai memori, tetapi tidak sampai menggantikan peran memori. Dikarenakan, peran virtual memory (memori virtual) hanya sebagai tempat cadangan saja. Itupun digunakan ketika memori utama sudah kehabisan ruang karena terlalu banyak program yang dijalankan. Sehingga digunakanlah virtual memory (memori virtual) sebagai tempat untuk mengalokasikan sebagian data atau program yang terdapat pada memori utama agar program bisa berjalan secara efisien, memori utama bisa bekerja dengan maksimal, serta bisa menjalankan program lebih banyak lagi.
D. Cara Penggunaan Virtual Memory (Memori Virtual)
Virtual memory (memori virtual), bisa dilaksanakan dengan dua cara, yakni sebagai berikut:
1. Demand Paging
Demand paging adalah salah satu teknik virtual memory yang umum digunakan. Ketika diperlukan, page akan dipanggil. Jadi, penggunaan memori bisa lebih sedikit dan lebih efisien, serta meningkatkan kinerja memori.
Namun, ketika page yang diminta tidak ada, page fault akan terjadi. Berikut cara-cara untuk mengatasi page fault:
- Dilakukan pemeriksaan tabel internal yang ada pada PCB. Hal ini diperlukan untuk mendapatkan apakah bit referensi valid atau tidak valid (invalid).
- Jika ternyata bit referensi yang didapat invalid, proses yang berjalan akan diberhentikan.
- Jika ternyata bit referensi yang didapat valid dan page yang ada ternyata tidak dikenali, maka page yang ada tersebut akan dikenalkan.
- Pencarian frame kosong dilakukan
- Untuk mendapatkan dan membaca page yang diinginkan ke lokasi frame yang baru, perlu dilakukan proses penjadwalan operasi disk.
- Ketika sudah selesai dibaca, internal table yang ada diubah nilainya, yakni dengan mengganti nilai validation bit menjadi 1. Perubahan nilai validation bit menjadi 1 memiliki arti bahwa page yang diinginkan telah ada pada memori
- Proses ini dilakukan secara berulang-ulang
Dengan demikian, demand paging memiliki berbagai kelebihan, diantaranya adalah sebagai berikut:
- Input dan ouput yang dibutuhkan sedikit
- Tidak memerlukan banyak memori
- Respose time yang cepat
- Pengguna yang dilayani bisa banyak
Kelebihan-kelebihan tersebut dapat dibuktikan dengan cara menghitung Effective Access Times (EAT), rumusnya adalah sebagia berikut:
EAT = (1 – p) x ma + p x waktu ketika page fault terjadi
Keterangan:
- p: Besar kecilnya kemungkinan terjadinya page fault, berkisar diantara 0 dan 1.
- Ketika p = 0, maka page fault tidak terjadi
- Ketika p = 1, page fault terjadi secara menyeluruh
- ma (memory access time) atau waktu untuk mengakses memori
Misalkan waktu untuk mengakses memori sebesar 150 ns (nanodetik), waktu ketika page fault terjadi sebesar 7.000.000 ns (nanodetik), dan terjadi 1 page fault setiap 2000 (1 / 2.000) kali akses, maka EATnya sebesar:
EAT = (1 – (1 / 2.000) ) x 150 + (1 / 2.000) x 7.000.000
EAT = (1 – 0.0005) x 150 + 0.0005 x 7.000.000
EAT = 149.925 + 3.500
EAT = 3649.925 ns (nanodetik)
EAT = 3.64 ms (mikrodetik)
2. Demand Segmentation
Demand segmentation adalah teknik virtual memory (memori virtual) yang dimana, proses yang ada dibagi menjadi beberapa bagian atau segmen. Hal ini dilakukan ketika demand paging tidak bisa dilakukan karena keterbatasan memori. Dalam demand segmentation, ukuran tiap bagiannya atau segmennya tidak harus sama, dalam pelaksanaannya, demand segmentation bisa melakukan alokasi secara dinamis.
E. Algoritma
1. First-In-First-out (FIFO)
Merupakan algoritma dimana antrian pertama masuk pertama dan keluar pertama.
2. Optimal
Merupakan algoritma dimana hanya menggunakan page yang diperlukan, page yang tidak digunakan dalam waktu yang lama, akan digantikan.
3. Least Recently Used (LRU)
Merupakan algoritma dimana sistem akan menggantikan page yang tidak digunakan di banyak waktu (sebagian besar proses).
4. Enhanced Second-Chance
Algoritma ini menggunakan referensi bit dan memodifikasinya.
5. Counting
Algoritma ini akan menghitung referensi yang telah dibuat oleh page, page dengan hitungan yang paling sedikit akan digantikan.
6. Page Buffering
Algoritma dimana akan selalu menyediakan frame kosong, jadi ketika dibutuhkan, frame tersebut bisa untuk digunakan.