Store Instruction — protsessor registridagi qiymatni xotiraga yozadigan mashina buyrug‘i. U samarali manzilni bazaviy registr, siljish yoki boshqa adreslash qoidasi orqali hisoblaydi va belgilangan kenglikdagi ma’lumotni xotira iyerarxiyasiga uzatadi. Store registr qiymatini odatda o‘zgartirmaydi, ammo xotira holatiga kuzatiladigan yon ta’sir beradi.
Manzil va kenglik
Mavhum yozuv quyidagi ma’noni anglatishi mumkin:
STORE [r2 + 16], r1
Bu yerda r2 + 16 manzil, r1 esa yoziladigan qiymatdir. Bayt, yarim so‘z, so‘z va vektor variantlari qancha bit yozilishini belgilaydi. Kichik store katta xotira so‘zining faqat tegishli baytlarini o‘zgartiradi. Baytlar tartibi ko‘p baytli qiymatning past va yuqori qismlari qaysi manzillarga tushishini belgilaydi.
Tekislanmagan manzil ayrim ISAlarda istisno beradi, boshqasida apparat bir necha murojaatga ajratadi. Kesh satri yoki sahifa chegarasidan o‘tgan yozuv qisman bajarilish va istisno semantikasini murakkablashtiradi; arxitektura dastur ko‘radigan natijani aniq belgilashi kerak.
Store buffer
Out-of-order protsessor store manzili va qiymatini maxsus navbatda saqlaydi. Buyruq commit qilingach yozuv me’moriy jihatdan ruxsat etiladi, ammo keshga keyinroq yetishi mumkin. Store buffer quvurni xotira kechikishidan ajratadi. Keyingi load bir xil manzilni o‘qisa, yangi qiymat keshni kutmasdan buffer’dan uzatiladi.
Manzili hali noma’lum eski store keyingi load bilan to‘qnashishi mumkin. Protsessor loadni kutadi yoki mustaqil deb taxmin qiladi; taxmin xato chiqsa load va undan qaram ishlar qayta bajariladi. Bu mexanizm tezlikni oshiradi, lekin dastur belgilagan xotira tartibini buzmasligi shart.
Tartib va atomiklik
Oddiy store boshqa yadroga darhol yoki barcha boshqa yozuvlardan oldin ko‘rinishini kafolatlamaydi. Xotira modeli qaysi qayta tartiblashlarga ruxsat berishini belgilaydi. Release store undan oldingi operatsiyalar yangi qiymatni ko‘rgan kuzatuvchiga tegishli tartibda ko‘rinishi uchun ishlatiladi. Fence yanada keng tartib cheklovini o‘rnatishi mumkin.
Atomik store belgilangan kenglikdagi qiymatni yirtilmasdan yozadi va aniq memory-order variantiga ega. U murakkab read-modify-write amali bilan bir xil emas: oddiy atomik store eski qiymatni qaytarib hisoblamaydi.
Qurilma va barqaror xotira
Memory-mapped I/O manziliga store qurilmaga buyruq berishi mumkin. Bunday hudud keshlanmasligi, yozuvlar birlashtirilmasligi yoki maxsus to‘siq talab qilishi mumkin. Oddiy RAM uchun foydali optimallashtirish qurilma registrida noto‘g‘ri yon ta’sir yaratadi.
Doimiy xotirada store protsessor keshiga kelgani ma’lumot elektr uzilishidan saqlanganini anglatmaydi. Kesh satrini chiqarish va persistence barrier talab qilinishi mumkin. Fayl tizimi yoki ma’lumotlar bazasi bundan yuqori darajada jurnal va tranzaksiya qoidalarini qo‘llaydi.
Kompilyator optimallashtirishi
Kompilyator ketma-ket store’larni birlashtirishi, umuman o‘qilmaydigan eski yozuvni olib tashlashi yoki kichik yozuvlarni vektor store’ga aylantirishi mumkin. Bunday o‘zgarish faqat til xotira modeli, volatile, atomiklik va obyekt umri qoidalari ruxsat berganda amalga oshiriladi. O‘zgaruvchi qurilma registriga moslangan bo‘lsa, “keraksiz” ko‘ringan har yozuv real yon ta’sirga ega bo‘lishi mumkin.
Store cache satrini boshqa yadrolardan eksklyuziv holatga olishni talab qiladi. Ko‘p yadro bir satrdagi turli o‘zgaruvchini tez-tez yozsa ham, false sharing sabab satr ular orasida ko‘chadi. Ma’lumotlarni alohida satrlarga joylash yoki lokal yig‘ib, kamroq yozish coherence trafikini kamaytiradi.
Bog‘liq tushunchalar
load instruction, store buffer, memory ordering, atomic store, cache coherence, memory-mapped I/O