Seperti apa isi tabel halaman setelah halaman dipindahkan ke disk?


1

Dari apa yang saya mengerti, tabel halaman memetakan alamat virtual ke alamat fisik. Tetapi bagaimana jika halaman telah ditukar ke disk? Bukankah lokasi data membutuhkan lebih banyak bit untuk ditulis daripada alamat fisik? Bukankah lokasi data berubah ketika file swap dimodifikasi? Apakah masalah ini diselesaikan dengan cara yang berbeda dalam sistem operasi yang berbeda?

Jawaban:


1

Mari kita ambil pertanyaan yang lebih mudah:

Bukankah lokasi data berubah ketika file swap dimodifikasi?

Tidak ada modifikasi pagefile yang menyebabkan lokasi data yang ada di dalamnya berubah. Jika pagefile diperpanjang, lebih banyak cluster (dikelompokkan dalam "luasan" atau "berjalan") ditambahkan pada akhirnya, sehingga lokasi data yang ada tidak berubah. Lokasi pagefile selalu relatif terhadap awal pagefile, jadi meskipun luasan yang sudah ada entah bagaimana dipindahkan, lokasi pagefile tidak akan berubah.

Sekarang, tentang bit:

Bukankah lokasi data membutuhkan lebih banyak bit untuk ditulis daripada alamat fisik?

Ya, jika file halaman bisa lebih besar dari ukuran memori fisik yang mungkin, Anda akan membutuhkan lebih banyak bit untuk menentukan halaman dalam file halaman daripada bit untuk menentukan nomor halaman fisik.

Di x86 tanpa PAE diaktifkan ada 20 bit di entri tabel halaman (PTE) untuk nomor halaman fisik (PFN, kependekan dari "nomor bingkai halaman"). (PTEs adalah 32 bit. 12 lainnya adalah bit bendera, bit 0 menjadi bit "valid" atau "page present" yang mengatakan Anda tidak akan mendapatkan kesalahan halaman ketika Anda mereferensikan halaman. Tiga bit bendera dikhususkan untuk digunakan oleh OS. Yang lain memiliki arti seperti "read-only", "hanya dapat diakses dalam mode kernel", "cache disable", dll.) (Segala sesuatu dalam paragraf ini ditentukan oleh arsitektur CPU - itu tidak tergantung pada OS.)

Di Windows bit yang sama di PTE yang memegang PFN untuk halaman yang valid adalah, untuk halaman yang ada di pagefile, memang digunakan untuk menyimpan lokasi-dalam-pagefile. Ini dinyatakan sebagai offset, dalam satuan ukuran halaman, dari awal pagefile. Ini membatasi file halaman hingga 4 GB, sama seperti PFN 20-bit untuk halaman fisik membatasi RAM hingga 4 GB pada sistem ini.

Namun, Anda dapat memiliki banyak file halaman. Ada empat bit lagi di PTE yang, untuk halaman dalam pagefile, menunjukkan nomor pagefile. Dengan demikian dapat ada 16 file halaman, untuk total 64 GB kemungkinan ruang file.

Saat Anda mengaktifkan PAE pada prosesor x86-only yang lebih lama, PTEs menjadi lebar 64 bit, dan CPU mengimplementasikan 24 bit (naik dari 20) PFN di PTE. Ini memungkinkan 64 GB RAM, dan di Windows, 64 GB file halaman. Ada banyak bit yang tidak digunakan dalam format PTE itu, sehingga OS sebenarnya dapat mendukung pagefiles yang lebih besar; Saya tidak yakin apakah Windows 32-bit melakukannya.

Pada prosesor 64-bit yang lebih baru dalam mode 64-bit ada 40 bit PFN dan, sekali lagi, bit yang sama digunakan untuk menahan offset file halaman untuk halaman yang tidak valid (yaitu tidak ada). Jadi, RAM atau pagefile, kita dapat mendeskripsikan 2 ^ 40 halaman - itu satu "triliun biner" dari halaman, 1024 ke 4. Dan setiap halaman adalah 4 KiB. Oleh karena itu pagefile 4 PiB adalah maks, dan juga RAM maksimum yang didukung oleh perangkat keras. Dan lagi, Windows mengatakan Anda dapat memiliki banyak file halaman. Saya tidak berpikir kita akan berlari ke batas ruang pagefile dalam waktu dekat. :)

Semua hal di atas yang tidak dipaksakan oleh CPU adalah OS-spesifik. Sebenarnya tidak ada alasan bahwa lokasi-dalam-pagefile harus disimpan di PTE sama sekali; struktur lain dapat digunakan. Pada prosesor seperti PowerPC yang menggunakan tabel halaman hash, OS tidak dapat menyimpannya di PTE, karena PTE yang tidak valid tidak disimpan sama sekali dalam struktur HPT.

Tetapi pada x86 / x64 sebenarnya tidak ada alasan untuk tidak menggunakan PTE yang tidak valid. Omong-omong, ini bekerja, karena ketika bit "valid" jelas, MMU tidak peduli sedikit pun (pun intended) tentang sisa PTE. Jadi untuk PTEs yang tidak valid, semua kecuali satu bit tersedia untuk OS untuk digunakan sesukanya. Pada Windows sebenarnya ada beberapa bentuk lain dari "PTE tidak valid", tergantung pada keadaan halaman. Untuk halaman di daftar siaga atau dimodifikasi, misalnya, bidang PFN masih berisi lokasi fisik halaman dalam RAM. PTE untuk halaman yang tidak valid mungkin merujuk pada "deskriptor alamat virtual", atau jika itu adalah halaman bersama, ke "prototipe PTE". MMU perangkat keras tidak pernah melihat salah satu dari struktur itu, hanya PTEs.

Rincian lengkapnya ada di bab "Manajemen Memori" Windows Internal oleh Solomon, Russinovich, dan Ionescu.


Terima kasih atas umpan baliknya! Jika Anda memiliki tindak lanjut Qs, jangan ragu untuk mempostingnya sebagai komentar, atau memodifikasi Q asli Anda.
Jamie Hanrahan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.