Bosh sahifa Wiki Page table

Page table

Page table — virtual sahifalarni fizik xotira frame’lariga bog‘laydigan va ularga kirish ruxsatlarini saqlaydigan ma’lumot tuzilmasidir. Uni operatsion tizim yaratadi, memory management unit esa har xotira murojaatida tarjima uchun ishlatadi. Har jarayon odatda o‘z user-space xaritasiga ega, kernel qismi esa nazoratli tarzda umumiy bo‘lishi mumkin.

Page table entry

PTE fizik frame raqami bilan birga present, read/write, user/supervisor, execute-disable, accessed va dirty kabi bitlarni tutadi. Aniq bitlar arxitekturaga bog‘liq. Present bo‘lmagan entry swap joyi, demand-zero yoki umuman xaritalanmagan holatni operatsion tizim metadata orqali ifodalashi mumkin.

Permission buzilishi yoki present bo‘lmagan entry page fault keltiradi. Yadro fault sababini tekshirib sahifani olib keladi, copy-on-write qiladi yoki jarayonga xato signalini beradi. Page table oddiy dastur tomonidan bevosita o‘zgartirilmaydi.

Ko‘p darajali tuzilma

64-bit manzil makoni uchun bitta tekis jadval juda katta bo‘lardi. Multi-level page table virtual manzil bitlarini bir nechta indeksga bo‘lib, faqat ishlatiladigan qismlar uchun pastki jadval ajratadi. Yuqori darajadagi entry butun katta oralig‘ni xaritalanmagan deb ko‘rsatishi mumkin.

Page walk bir nechta xotira o‘qishini talab qiladi. TLB yaqinda ishlatilgan tarjimalarni cache qiladi. TLB miss apparat yoki yadro page walkini boshlaydi. Huge page yuqori darajadagi entrydan katta frame’ga bevosita bog‘lanib walk va TLB entry sarfini kamaytiradi.

Context switch va TLB

Jarayon almashganda page table root registri o‘zgaradi. TLBdagi eski tarjimalar process-context identifier bilan ajratilmasa flush qilinadi. PCID yoki ASID turli manzil makoni entrylarini bir TLBda saqlab, context switch xarajatini kamaytiradi.

Bir CPU page table’ni o‘zgartirganda boshqa yadrolardagi mos TLB entrylarni invalidation qilish kerak. TLB shootdown inter-processor interrupt va kutish talab qilib, juda tez-tez memory mapping o‘zgarishida bottleneck bo‘lishi mumkin.

Xavfsizlik

User bit kernel sahifasiga kirishni, NX bit data sahifada kod bajarishni cheklaydi. KASLR kernel xaritasini tasodifiylashtiradi. Page table isolation ayrim speculative execution hujumlarida user rejimida kernel xaritasini ajratib, ma’lumot sizishini kamaytiradi, ammo system call xarajatini oshiradi.

Page table’ning o‘zi kernel himoyalangan xotirasida saqlanadi. DMA qurilma fizik xotirani page table’dan tashqari o‘zgartirmasligi uchun IOMMU alohida qurilma sahifa jadvallarini qo‘llaydi. Virtual mashinada guest va host tarjimasini birlashtiruvchi nested page table ishlatiladi; TLB miss narxi yuqoriroq bo‘lishi mumkin.

Page table xarajati

Sparse virtual manzil ko‘p darajali tuzilma bilan tejalsa ham, juda ko‘p kichik mapping va process page table xotirasini oshiradi. Fork page table’larni ko‘chirish va COW belgilash uchun katta xarajat qilishi mumkin, hatto data sahifalari darhol nusxalanmasa ham. Kernel page table page’larini alohida hisoblaydi; ular application RSSga to‘liq ko‘rinmasligi mumkin. Memory hotplug, migration va swap entrylari PTEni yangilaydi. Diagnostik vosita virtual region, resident sahifa, shared/private va page table memoryni ajratadi. Page table corruption odatda jiddiy kernel yoki apparat xatosi bo‘lib, oddiy user process uni tuzatolmaydi.

Sahifa jadvali yozuvlari faqat manzilni emas, ruxsat bitlarini ham saqlaydi. Operatsion tizim shu bitlar orqali sahifani o‘qish, yozish yoki bajarishga ruxsat beradi va izolyatsiya qoidalarini apparat darajasida tatbiq etadi.

Bog‘liq tushunchalar

PTE, TLB, MMU, Virtual address, IOMMU, Page fault