Merupakan implementasi yang paling umum dari memori virtual.
Prinsip permintaan pemberian halaman (demand paging) hampir sama dengan sistem penomoran (paging) dengan menggunakan swapping. Perbedaannya adalah page pada permintaan pemberian halaman tidak akan pernah di-swap ke memori sampai ia benar-benar diperlukan. Untuk itu diperlukan adanya pengecekan dengan bantuan perangkat keras mengenai lokasi dari page saat ia dibutuhkan.
Ada tiga kemungkinan kasus yang dapat terjadi pada saat dilakukan pengecekan pada page yang dibutuhkan, yaitu:
Page ada dan sudah berada di memori.
Page ada tetapi belum ditaruh di memori (harus menunggu sampai dimasukkan).
Page tidak ada, baik di memori mau pun di disk (invalid reference --> abort).
Saat terjadi kasus kedua dan ketiga, maka proses dinyatakan mengalami page fault.
Dengan meminjam konsep yang sudah pernah dijelaskan dalam Bab 9, maka dapat ditentukan page mana yang ada di dalam memori dan mana yang tidak ada di dalam memori.
Konsep itu adalah skema bit valid - tidak valid, di mana di sini pengertian "valid" berarti bahwa page legal dan berada dalam memori (kasus 1), sedangkan "tidak valid" berarti page tidak ada (kasus 3) atau page ada tapi tidak ditemui di memori (kasus 2).
Pengesetan bit:
Bit 1 --> page berada di memori Bit 0 --> page tidak berada di memori. (Dengan inisialisasi: semua bit di-set 0). |
Apabila ternyata hasil dari translasi, bit page = 0, berarti page fault terjadi.
Prosedur penanganan page fault sebagaimana tertulis di buku Operating System Concept 5th Ed. halaman 294 adalah sebagai berikut:
Cek tabel internal yang dilengkapi dengan PCB untuk menentukan valid atau tidaknya bit.
Apabila tidak valid, program akan di-terminate (interupsi oleh illegal address trap).
Memilih frame kosong (free-frame), misal dari free-frame list. Jika tidak ditemui ada frame yang kosong, maka dilakukan swap-out dari memori. Frame mana yang harus di-swap-out akan ditentukan oleh algoritma (lihat sub bab Page Replacement).
Menjadualkan operasi disk untuk membaca page yang diinginkan ke frame yang baru dialokasikan.
Ketika pembacaan komplit, tabel internal akan dimodifikasi dan page diidentifikasi ada di memori.
Mengulang instruksi yang tadi telah sempat diinterupsi. Jika tadi page fault terjadi saat instruksi di-fetch, maka akan dilakukan fecthing lagi. Jika terjadi saat operan sedang di-fetch, maka harus dilakukan fetch ulang, decode, dan fetch operan lagi.
Sebagaimana dilihat di atas, bahwa ternyata penanganan page fault menimbulkan masalah-masalah baru pada proses restart instruction yang berhubungan dengan arsitektur komputer.
Masalah yang terjadi, antara lain mencakup:
Bagaimana mengulang instruksi yang memiliki beberapa lokasi yang berbeda?
Bagaimana pengalamatan dengan menggunakan special-addresing mode, termasuk autoincrement dan autodecrement mode?
Bagaimana jika instruksi yang dieksekusi panjang (contoh: block move)?
Masalah pertama dapat diatasi dengan dua cara yang berbeda.
komputasi microcode dan berusaha untuk mengakses kedua ujung dari blok, agar tidak ada modifikasi page yang sempat terjadi.
memanfaatkan register sementara (temporary register ) untuk menyimpan nilai yang sempat tertimpa/ termodifikasi oleh nilai lain.
Masalah kedua diatasi dengan menciptakan suatu special-status register baru yang berfungsi menyimpan nomor register dan banyak perubahan yang terjadi sepanjang eksekusi instruksi.
Sedangkan masalah ketiga diatasi dengan mengeset bit FPD (first phase done) sehingga restart instruction tidak akan dimulai dari awal program, melainkan dari tempat program terakhir dieksekusi.
Pemberian nomor halaman melibatkan dukungan perangkat keras, sehingga ada persyaratan perangkat keras yang harus dipenuhi. Perangkat-perangkat keras tersebut sama dengan yang digunakan untuk paging dan swapping, yaitu:
Page-table, menandai bit valid-tidak valid.
Secondary memory, tempat menyimpan page yang tidak ada di memori utama.
Lebih lanjut, sebagai konsekuensi dari persyaratan ini, akan diperlukan pula perangkat lunak yang dapat mendukung terciptanya pemberian nomor halaman.