Memory yang terdapat pada komputer dibagi menjadi 2, yaitu Hardisk yang digunakan untuk
menyimpan data secara permanen . Kedua , RAM digunakan untuk menyimpan data sementara.
Ketika menjalankan sebuah program, terkadang user diberi peringatan "Memory is Low" oleh
aplikasi. Hal ini terjadi karena komputer kekurangan memori atau memori kepenuhan untuk
menjalankan suatu program. Hal ini terjadi ketika komputer ingin menjalankan program yang
memerlukan memory penyimpanan yang besar.
Oleh karena itu , untuk mengatasi hal ini dibuatlah 'Virtual Memory' .
Lalu , apakah virtual memory?
Jadi Virtual Memory adalah suatu fitur yang dimiliki oleh sistem operasi , dimana memory
sekunder (harddisk) seolah - olah sebagai memory utama (RAM) didalam sebuah sistem
komputer . Sistem ini beroperasi dengan cara memindahkan beberapa kode yang tidak dibutuhkan
ke sebuah berkas di dalam hard drive. RAM yang awalnya berukuran 2GB , karena adanya virtual
memory akan terlihat menjadi 2GB.
Latar Belakang
Kode harus ada di memori untuk dieksekusi, tetapi seluruh program jarang digunakan
Error code, rutinitas yang tidak biasa, struktur data yang besar
Seluruh kode program tidak diperlukan secara bersamaan
Pertimbangkan kemampuan untuk menjalankan sebagian program
Program tidak lagi dibatasi oleh batasan memori fisik
Setiap program membutuhkan lebih sedikit memori saat dijalankan -> lebih banyak program
berjalan pada saat yang sama
Peningkatan pemanfaatan CPU secara keseluruhan tanpa peningkatan waktu respons atau
waktu penyelesaian
Lebih sedikit I/O yang diperlukan untuk memuat atau menukar program ke dalam memori ->
masing-masing program pengguna berjalan lebih cepat
Virtual Memory
Pemisahan memori logis pengguna dari fisik Penyimpanan
Hanya sebagian dari program yang perlu ada di memori untuk dieksekusi
Oleh karena itu, ruang alamat logis bisa jauh lebih besar daripada fisik ruang alamat
Memungkinkan ruang alamat untuk digunakan bersama oleh beberapa proses
Memungkinkan pembuatan proses yang lebih efisien
Lebih banyak program berjalan secara bersamaan
Lebih sedikit I/O yang dibutuhkan untuk memuat atau menukar proses
Virtual-address Space – pandangan logis tentang bagaimana proses disimpan dalam
Penyimpanan
Biasanya dimulai dari alamat 0, alamat yang berdekatan sampai akhir penyimpanan
Sementara itu, memori fisik diatur dalam frames
MMU harus memetakan logical ke physical
Memori virtual dapat diimplementasikan melalui:
Halaman permintaan
Segmentasi permintaan
Virtual-Address Space
Biasanya mendesain ruang alamat logis untuk stack untuk memulai pada alamat logis Max
dan tumbuh "turun" sementara tumpukan tumbuh "naik"
Memaksimalkan penggunaan ruang alamat
Ruang alamat yang tidak digunakan antara keduanya adalah lubang
Tidak diperlukan memori fisik hingga heap atau Stack tumbuh ke halaman baru tertentu
Memungkinkan ruang alamat yang jarang dengan lubang yang tersisa untuk pertumbuhan,
library yang terhubung secara dinamis, dll.
System libraries dibagikan melalui pemetaan ke Virtual-address space
Shared memory dengan memetakan halaman yang dibaca-tulis ke dalam Virtual-address
space
Halaman dapat dibagikan selama fork() mempercepat proses pembuatan
Demand Paging
Bisa menjalankan semua proses ke dalam memori disaat ngeload
Atau bisa mengambil halaman ke dalam memori ketika dibutuhkan
Sedikit I/O yang dibutuhkan, tidak ada I/O yang tidak dibutuhkan
Sedikit memori yang dibutuhkan
Respon lebih cepat
Lebih banyak pengguna
Mirip dengan sistem paging dengan bertukar (diagram dibawah)
Tabel page diimplementasikan sebagai kumpulan dari “dedicated” register. Register berupa
rangkaian logika berkecepatan sangat tinggi untuk efisiensi translasi alamat paging. Contoh :
DEC PDP-11. Alamat terdiri dari 16 bit dan ukuran page 8K. Sehingga tabel page berisi 8
entri yang disimpan pada register. Penggunaan register memenuhi jika tabel page kecil (tidak
lebih dari 256 entry).
Tabel page disimpan pada main memori dan menggunakan page table base registe” (PTBR)
untuk menunjuk ke tabel page yang disimpan di main memori. Penggunakan memori untuk
mengimplementasikan tabel page akan memungkinkan tabel page sangat besar (sekitar 1 juta
entry). Perubahan tabel page hanya mengubah PTBR dan menurunkan waktu context-switch.
Akan tetapi penggunaan metode ini memperlambat akses memori dengan faktor 2. Hal ini
dikarenakan untuk mengakses memori perlu dua langkah : pertama untuk lokasi tabel page
dan kedua untuk lokasi alamat fisik yang diperlukan.
Menggunakan perangkat keras cache yang khusus, kecil dan cepat yang disebut associative
register atau translation look-aside buffers (TLBs). Merupakan solusi standar untuk
permasalahan penggunaan memori untuk implementasi tabel page. Sekumpulan associative
register berupa memori kecepatan tinggi. Setiap register terdiri dari 2 bagian yaitu key dan
value. Jika associative register memberikan item, akan dibandingkan dengan semua key
secara simultan. Jika item ditemukan nilai yang berhubungan diberikan. Model ini
menawarkan pencarian cepat tetapi perangkat keras masih mahal. Jumlah entry pada TLB
bervariasi antara 8 s/d 204
Konsep Dasar
Dengan swapping, pager menebak halaman yang akan digunakan sebelum swapping lagi
Sebaliknya, pager hanya membawa halaman-halaman itu ke dalam memori
Bagaimana cara menentukan kumpulan halaman itu?
Membutuhkan fungsionalitas MMU untuk mengimplementasikan Demand-paging
Jika halaman-halaman yang dibutuhkan sudah ada di dalam memori
Tidak ada perbedaan dari halaman non-permintaan
Jika halaman membutuhkan dan tidak ada di memori
Dibutuhkan deteksi dan jalankan halaman kedalam memori dari penyimpanan
Tanpa mengubah perilaku program
Tanpa programmer mengubah kodenya
Valid-Invalid Bit
Dengan setiap entri tabel halaman, bit valid-tidak valid dikaitkan (1 dalam memori, 0 tidak
dalam memori).
Awalnya valid-bit tidak valid diatur ke 0 pada semua entri
Contoh snapshot tabel halaman dibawah:
Selama terjemahan alamat MMU, jika bit valid–invalid dalam entri tabel halaman adalah 0
=> kesalahan halaman
Segmentasi
Segmentasi memungkinkan pemrograman memandang memori sebagai berisi banyak ruang
alamat atau segmen. Ruang-ruang alamat itu sepenuhnya independen.
Tiap segmen berisi barisan linear alamat 0 samapai maksimum. Panjang tiap segmen dapat
berbeda sampai panjang segmen maksimum.
Dengan segmentasi pemrograman tidak berurusan dengan batasan-batasan memori yang
disebabkan kapasitas memori utama.
Panjang segmen dapat berubah selama eksekusi.
Segmen stack bertambah ketika terjadi operasi push dan turun saat operasi pop. Karena tiap
segmen merupakan ruang alamat terpisah, segmen-segmen dapat tumbuh dan mengkerut
secara bebas tanpa mempengaruhi lainnya. Jika stack pada segmen tertentu memerlukan
ruang alamat lebih besar untuk tumbuh, stack dapat memperolehnya karena tak ada yang
ditabraknya diruang alamat itu.