Apakah ukuran halaman selalu sama dengan ukuran bingkai?

9

Saya belajar tentang paging. Buku saya mengatakan bahwa alamat logis yang dihasilkan oleh CPU ada dalam formulir |p|d|(nomor halaman, offset halaman) dan alamat fisik dalam bentuk |f|d|(nomor frame, frame offset). Juga disebutkan secara khusus bahwa doffset di-copy secara langsung untuk menghasilkan alamat fisik dari alamat yang logis.

Sekarang, akal sehat mengatakan bahwa jika offset disalin secara langsung, ukuran halaman harus sama dengan ukuran bingkai (jika tidak, offset tidak akan sesuai). Tetapi sayangnya buku saya tidak mengatakan apa-apa tentang itu.

Jadi, apakah ukuran halaman selalu sama dengan ukuran bingkai?

Harap aktifkan gambar;)

Bahan bakar
sumber

Jawaban:

8

Halaman adalah wilayah ruang alamat virtual, dan bingkai halaman adalah wilayah memori fisik. Halaman yang memetakan wilayah memori fisik harus memiliki ukuran yang sama dengan potongan memori fisik itu, jika tidak, tidak ada gunanya.

Mereka juga biasanya harus disejajarkan dengan benar. Jika Anda mencoba memetakan, katakanlah, bingkai halaman 2Mb ke dalam memori virtual, alamat virtual dan alamat fisik keduanya harus selaras 2Mb.

Banyak CPU modern mendukung lebih dari satu ukuran halaman, dan beberapa dapat mendukung ukuran halaman yang berbeda dalam ruang alamat yang sama. Intel x86-64 saat ini, misalnya, mendukung ukuran halaman 4kb, 2Mb, dan 1Gb. Angka-angka ini tidak sewenang-wenang; mereka mewakili ruang alamat yang dicakup oleh "level" yang berbeda di tabel halaman multilevel. Demikian pula, ARM modern mendukung halaman 4kb, 64kb, dan 1Mb, meskipun ARM tidak merujuk ke halaman 1Mb sebagai "halaman" (itu adalah "bagian"). ARMv4 dan ARMv5 mendukung pemisahan halaman lebih jauh menjadi apa yang disebut "subhalaman"; ini tidak lagi tersedia di ARMv7.

Menariknya, ada beberapa hal lain yang seringkali ukurannya sama dengan ukuran halaman. Jelas entri TLB adalah ukuran yang sama dengan halaman atau bingkai, karena secara konseptual merupakan cache untuk entri tabel halaman. Namun, ukuran cache L1 sering ditentukan oleh ukuran halaman juga.

Misalkan cache L1 adalah set-asosiatif (cache yang dipetakan langsung benar-benar hanya set cache asosiatif 1-arah, sehingga Anda dapat menganggap ini sebagai kasus pembatas), maka sering kali lebih mudah untuk membuat satu "set" ukuran halaman fisik. Jadi misalkan ukuran halaman adalah 4kb, dan cache L1 adalah cache set-asosiatif 4-arah, maka ukuran "terbaik" untuk cache L1 adalah 16kb (empat kali 4kb). Lihat apakah Anda dapat berolahraga untuk diri sendiri, ini mungkin masalahnya.

Nama samaran
sumber
1

ya ukuran halaman harus sama dengan ukuran bingkai untuk meminimalkan fragmentasi internal memori utama.

RAJNISH
sumber
3
Perhatikan bahwa beberapa arsitektur mendukung beberapa ukuran halaman secara bersamaan.
TEMLIB
Bisakah Anda menguraikan? Kami lebih suka jawaban terperinci yang memberikan penjelasan, pembenaran, atau analisis. Jika ukuran halaman tidak sama dengan ukuran bingkai, bagaimana ini akan menyebabkan peningkatan fragmentasi internal memori utama? Bisakah Anda mengedit jawaban untuk menambahkan penjelasan tentang ini?
DW
Jawaban di atas dengan 1 upvote benar-benar salah. Paging menggunakan blok memori ukuran konstan, dan dengan demikian meminimalkan fragmentasi eksternal dengan mengorbankan internal, jika memori yang dialokasikan kurang dari satu halaman. Jadi, saya menyimpulkan bahwa OS Anda akan lebih bahagia jika Anda memilih pageSize = frameSize.
Jignesh Kumar
@JigneshKumar, tolong jangan gunakan kotak 'Jawaban Anda' untuk mengomentari jawaban yang ada. Alih-alih, fokuslah pada pertanyaan di mana Anda dapat memberikan jawaban lengkap sendiri, atau mengajukan pertanyaan baru yang bermanfaat. Terima kasih!
DW
0

Bingkai halaman tidak boleh lebih kecil dari halaman, karena dengan demikian offset bisa meluap dari bingkai halaman. Bagaimana dengan kebalikannya - bingkai halaman lebih besar dari halaman? Berbeda dengan skenario sebelumnya, ini akan berhasil, tetapi akan sia-sia karena akan ada bagian bingkai halaman yang tidak pernah digunakan (ini adalah bagian yang berada di luar offset maksimum).

JRG
sumber