Translation Cache — virtual manzilni fizik manzilga o‘girish yoki bir instruction tizimidagi kodni boshqa ichki ko‘rinishga tarjima qilish natijalarini qayta foydalanish uchun saqlaydigan keshga beriladigan umumiy nom. Kontekstga qarab u TLB’ga yaqin manzil tarjimasi keshini yoki dinamik binary translation tizimidagi tarjima qilingan kod bloklari omborini anglatadi.
Manzil tarjimasi ma’nosi
Virtual memory’da har load, store va instruction fetch fizik manzilga bog‘lanishi kerak. Sahifa jadvallarini har safar xotiradan yurish juda sekin. Translation Lookaside Buffer yaqinda ishlatilgan virtual sahifa raqami, fizik frame va ruxsat bitlarini saqlaydi. Shu ma’noda u maxsus translation cache hisoblanadi.
TLB hit bo‘lsa physical page tez olinadi. Missda hardware page-table walker yoki operatsion tizim jadvalni tekshiradi. Entry sahifa hajmi, address-space identifier, privilege, executable va writable kabi atributlarni o‘z ichiga oladi. Sahifa xaritasi o‘zgarsa eski tarjima invalidate qilinishi shart.
Dinamik kod tarjimasi
Emulator, virtualizator va JIT asosidagi runtime guest instruction blokini host mikrooperatsiya yoki machine code’ga aylantiradi. Tarjima qimmat bo‘lgani sabab tayyor host blok code cacheda saqlanadi. Guest program counter keyingi safar shu blokka kelganda tarjimon tayyor kodni bajaradi.
Kalit faqat guest manzildan iborat bo‘lmasligi mumkin. Processor mode, privilege, endianness, feature bitlari yoki memory mapping bir xil baytlarning ma’nosini o‘zgartiradi. Tarjima yozuvi aynan mos kontekst bilan bog‘lanadi. Self-modifying guest code aniqlansa tegishli bloklar bekor qilinadi yoki qayta tarjima qilinadi.
Invalidation va izchillik
Translation cache’ning asosiy murakkabligi invalidationdir. Operatsion tizim page-table entry’ni almashtirganda boshqa yadrolarga TLB shootdown yuboradi. Ular eski mappingdan foydalanishni to‘xtatmaguncha fizik sahifani boshqa maqsadga berish xavfli. Barrier invalidate buyrug‘ining kerakli tartibda ko‘rinishini ta’minlaydi.
Binary translator’da guest sahifaga store yozilganda o‘sha sahifadan tuzilgan host blok topilishi kerak. Har store’da tekshirish qimmat; write protection orqali birinchi o‘zgarishda trap olish yoki sahifa generation counteridan foydalanish mumkin. Invalidation haddan tashqari keng bo‘lsa performance pasayadi, juda tor bo‘lsa eski kod bajariladi.
Sig‘im va almashtirish
Tarjima yozuvlari oddiy data cache satridan yirikroq va turli hajmda bo‘lishi mumkin. Code cache bump allocator, bloklar ro‘yxati va direct branch linking ishlatadi. To‘lganda sovuq bloklar chiqariladi yoki butun generation almashtiriladi. Hot block optimallashtirilgan darajada qayta tarjima qilinishi mumkin.
Atamani ishlatishda tizim hujjatidagi ma’no aniqlanishi zarur. Hardware TLB address translation metadata’sini saqlaydi; dynamic translation cache esa bajariladigan host kodini saqlaydi. Ikkalasida locality, hit, miss va invalidation tushunchalari o‘xshash, ammo xavfsizlik va boshqaruv mexanizmlari boshqa.
Tarjima cache’i profiling ma’lumotini ham to‘plashi mumkin. Blok bajarilish soni threshold’dan oshsa runtime uni ko‘proq optimallashtiradi, sovuq blok esa tez va sodda tarjima bilan qoladi. Deoptimization metadata host registrlari va stack holatidan guest arxitektura holatini qayta qurib, exception yoki interpreterga aniq qaytishni ta’minlaydi.
Ko‘p threadli translator code cache’ga parallel blok joylashtirganda bir guest manzilni ikki marta tarjima qilishi mumkin. Publication atomik bo‘ladi: bittasi canonical entry sifatida qoladi, ortiqcha blok xavfsiz ozod qilinadi.
Bog‘liq tushunchalar
TLB, page table, binary translation, code cache, JIT compiler, TLB shootdown