Split Cache — instruction va data uchun alohida kesh tuzilmalaridan foydalanadigan arxitektura. Odatda L1 darajada biri instruction cache, ikkinchisi data cache sifatida ishlaydi. Har ikkisi bir xil virtual yoki fizik xotiraning qismlarini saqlashi mumkin, ammo ularning portlari, navbatlari va boshqaruv siyosati mustaqil bo‘ladi.
Parallel murojaat
Pipeline har siklda keyingi instructionlarni fetch qilishi va avvalgi instruction uchun load yoki store bajarishi mumkin. Bitta kesh porti bo‘lsa, bu ikki murojaat structural hazard hosil qiladi. Split tuzilma front-end va load/store unit’ga mustaqil yo‘l berib, bir vaqtda ishlashini ta’minlaydi. Shu sabab L1 uchun past latency va yuqori bandwidthga erishish osonlashadi.
Har kesh o‘z vazifasiga moslashtiriladi. Instruction cache odatda faqat o‘qiladi, ketma-ket fetch va branch targetlarga xizmat qiladi. Data cache esa bayt maskalari, partial store, dirty bit, atomik amal va store forwarding bilan ishlaydi. Alohida dizayn keraksiz funksiyani har ikkala blokka qo‘shmaslik imkonini beradi.
Sig‘imning bo‘linishi
Asosiy kamchilik — belgilangan sig‘imni erkin bo‘lishib bo‘lmasligi. Dastur katta kod working setiga, ammo juda oz data’ga ega bo‘lsa, data cache’dagi bo‘sh joy instructionlarga berilmaydi. Aks holat ham mavjud. Dizayner odatiy workload, chip maydoni va target latency asosida I-cache va D-cache hajmini alohida tanlaydi.
Misslar keyingi unified L2 darajada birlashishi mumkin. L2 request turi va ustuvorligini bilib, instruction fill’ni data write-back’dan oldinga chiqaradi. Ikki L1 bir xil quyi bus yoki fill bandwidth uchun raqobat qilgani sabab to‘liq iyerarxiya baribir arbitraj talab qiladi.
Kod va ma’lumot izchilligi
Bir xil xotira sahifasiga data sifatida yozib, keyin instruction sifatida bajarish split cache’da alohida muammo tug‘diradi. D-cache yangi baytni, I-cache esa eski instructionni saqlab qolishi mumkin. JIT compiler yoki loader yozuvni tugatgach, arxitektura belgilagan clean va invalidate amallarini bajaradi, so‘ng instruction synchronization barrier qo‘llaydi.
Oddiy dasturda code sahifalari yozilmaydigan, data sahifalari bajarilmaydigan qilib xaritalanadi. W^X xavfsizlik siyosati bir sahifa bir vaqtda yoziladigan va bajariladigan bo‘lmasligini talab qiladi. Bu nafaqat hujumni qiyinlashtiradi, balki cache maintenance ketma-ketligini aniq boshqarishga yordam beradi.
Tashkiliy farqlar
I-cache va D-cache bir xil hajm yoki associativity’da bo‘lishi shart emas. Instruction fetch kengligi sabab I-cache bir siklda katta blok qaytarishi mumkin; D-cache esa bir nechta mustaqil load uchun banklanadi. Error correction, prefetch va replacement algoritmlari ham turlicha tanlanadi.
Split atamasi faqat instruction va data yo‘llari ajratilganini anglatadi. Harvard architecture’da xotira manzil makonlari ham butunlay alohida bo‘lishi mumkin; zamonaviy modifikatsiyalangan Harvard tizimida esa L1 ajratilgan, quyi xotira va manzil makoni umumiydir.
Split L1 monitoringida instruction miss va data miss alohida hisoblanadi. Kod layouti I-cache pressure’ni, massiv tartibi esa D-cache pressure’ni o‘zgartiradi. Bitta umumiy “cache miss” ko‘rsatkichi muammoning qaysi yo‘lda ekanini yashiradi; profiler front-end stall va load stallni alohida ko‘rsatishi kerak.
Har ikki L1 uchun alohida parity xatosi ham turli recovery yo‘lini talab qiladi: instruction satri qayta fetch qilinadi, dirty data satri esa eng yangi qiymat yo‘qolmasdan tiklanishi kerak.
Bog‘liq tushunchalar
Harvard architecture, unified cache, instruction cache, data cache, cache maintenance, L1 cache