Jika ruang alamat virtual bisa lebih besar dari ruang alamat fisik, bagaimana pemetaan alamat disimpan dalam memori?

14

Katakanlah kita bekerja dengan sistem yang memiliki 40 bit alamat fisik. Total ruang alamat fisik (dengan asumsi byte-addressable memory) adalah byte, atau 1 TiB. Dan jika alamat virtual panjangnya 48 bit, itu berarti ada lebih banyak alamat yang tersedia untuk memori virtual daripada ada lokasi dalam memori fisik.240

Ini masuk akal bagi saya, karena alamat "kelebihan" bisa merujuk ke lokasi hard disk juga. Namun, apa yang saya tidak mengerti adalah bagaimana terjemahan antara alamat virtual dan fisik terjadi. Saya berasumsi ada pemetaan disimpan di suatu tempat yang menghubungkan lokasi VAS ke lokasi fisik. Jika ada lebih banyak lokasi alamat virtual daripada lokasi fisik, bagaimana mungkin semua pemetaan ini disimpan dalam memori? Minimal Anda akan membutuhkan 48 bit untuk menyimpan setiap alamat virtual, dan 40 lagi untuk menyimpan lokasi fisik yang dipetakan. Jadi jelas Anda tidak bisa hanya menyimpan pemetaan 1: 1 dari setiap alamat virtual ke mitra fisiknya, karena memetakan setiap lokasi akan mengambil lebih banyak memori daripada memori fisik itu sendiri.

Apa sebenarnya yang saya lewatkan di sini?

Brad Power
sumber
Anda tidak dapat melakukannya bahkan dengan sedikit memori dan ruang alamat. Jika Anda memiliki alamat fisik 16-bit dan alamat virtual 16-bit, Anda masih tidak dapat menyimpan semua pemetaan 1: 1!
user253751
2
Masalahnya lebih kompleks bahkan dari yang Anda pikirkan. Komputer jarang memiliki memori TB, jadi memori fisik WAY kurang dari ruang alamat virtual. Lebih buruk lagi: Setiap proses memiliki ruang alamat virtual yang sepenuhnya terpisah!
Mooing Duck
Selain lokasi hard disk Anda hanya memiliki bit / ruang kosong. Misalnya, Anda dapat memiliki wilayah besar di bawah tumpukan yang tidak dipetakan untuk mencegah luapan yang tidak terdeteksi. Anda dapat mengacak apa yang Anda muat di mana mencegah kelas serangan lain . Ingin dilambangkan dengan satu bit jika alamat milik kernel atau pengguna - teruskan meskipun Anda menghabiskan setengah ruang. Sementara sebagian besar buku teks berkonsentrasi pada paging out aspek memori virtual ada banyak lagi.
Maciej Piechotka
(Perhatikan juga bahwa alamat mungkin alias, yang kadang-kadang berguna, jadi VA A dan alamat B merujuk ke PA P yang sama meskipun A! = B.)
Maciej Piechotka

Jawaban:

26

Trik untuk membuat pekerjaan ini adalah "paging." Saat membawa data dari hard disk ke memori fisik, Anda tidak hanya membawa beberapa byte. Anda membawa seluruh halaman. 4k byte adalah ukuran halaman yang sangat umum.

Jika Anda hanya perlu melacak halaman, bukan setiap byte, pemetaan menjadi jauh lebih murah. Jika Anda memiliki ruang alamat 48 bit dan 4096 byte halaman, Anda hanya perlu melacak mana dari 2 ^ 36 halaman (sekitar 69 miliar halaman). Itu jauh lebih mudah! Catatan di mana semua halaman ditemukan dikenal sebagai "tabel halaman."

Jika Anda benar-benar membutuhkan memori 1-256 TiB, maka memberikan beberapa gigabyte untuk menyimpan tabel halaman ini bukan masalah besar. Namun dalam praktiknya, kami akan melakukan hal-hal seperti menggunakan tabel halaman multi-level , yang memungkinkan kami menjadi sedikit lebih efisien, menjaga halaman hanya untuk wilayah ruang alamat yang sebenarnya kami gunakan.

Cort Ammon - Pulihkan Monica
sumber
6
File halaman adalah istilah Windows untuk file fisik pada disk yang berisi konten bingkai halaman fisik yang direklamasi karena kekurangan memori, yang kontennya perlu disimpan. Jika saya tidak salah, struktur data yang memetakan alamat halaman virtual ke alamat halaman fisik harus disebut tabel halaman .
Reinstate Monica - ζ--
@hexafraction, saya pikir Anda benar. Saya telah membuat perubahan.
Cort Ammon - Reinstate Monica
2
Ketika memori yang sebenarnya besar, cara lain untuk mengurangi memori yang diperlukan untuk tabel halaman adalah untuk memungkinkan halaman yang lebih besar. x86 memiliki opsi untuk mencampur 4 halaman KiB dengan 2/4 halaman MiB.
Nate Eldredge