Bosh sahifa Wiki Address Generation Unit

Address Generation Unit

Address Generation Unit — load, store va ayrim adres hisoblash buyruqlari uchun samarali xotira manzilini hosil qiladigan protsessor bajarish bloki. AGU baza registri, indeks, scale va immediate siljishni birlashtirib, natijani Load-Store Unit hamda TLBga uzatadi. Maxsus AGU integer ALUlarni manzil hisobidan bo‘shatadi.

Adreslash formulasi

Murakkab adreslash quyidagiga o‘xshashi mumkin:

address = base + index * scale + displacement

Scale odatda element hajmiga mos 1, 2, 4 yoki 8 bo‘ladi. Massivning a[i] elementiga kirishda base massiv boshi, index i, scale element baytlari sonidir. Soddaroq ISA faqat base plus immediate’ni bitta buyruqda qo‘llab, qolgan hisobni alohida integer amallarga ajratadi.

AGU arifmetik natijani ISA manzil kengligida hosil qiladi. Canonical manzil, segment, alignment yoki tag tekshiruvi keyingi yo‘lda bajarilishi mumkin. Overflow oddiy integer overflow bayrog‘ini shart emas o‘rnatadi; xotira tarjimasi hosil bo‘lgan bit naqshini manzil sifatida tekshiradi.

Port va throughput

Yadroda bir nechta AGU bo‘lsa, bir siklda ko‘p load/store manzili hisoblanadi. Biroq hamma AGU murakkab formula yoki store’ni qo‘llamasligi mumkin. Kodning addressing mode tanlovi ma’lum portga ortiqcha bosim berib, kesh bandwidth mavjud bo‘lsa ham xotira throughputini cheklaydi.

Kompilyator pointer increment orqali keyingi manzilni oddiy qo‘shish bilan yuritishi yoki har iteratsiyada base-index formulani ishlatishi mumkin. Strength reduction murakkab ko‘paytirishni sikl bo‘ylab ketma-ket qo‘shishga aylantiradi, ammo qo‘shimcha dependency zanjiri yaratishi mumkin.

Quvurdagi o‘rni

Manba registrlari tayyor bo‘lgach memory mikrooperatsiya AGUga issue qilinadi. Natija TLB lookup va data cache indekslashga boradi. Ayrim dizayn tarjimaning bir qismini manzil hisoblash bilan parallel boshlaydi; sahifa chegarasi uchun yuqori bitlar keyin tasdiqlanadi.

Store’da manzil va ma’lumot turli vaqtda tayyor bo‘lishi mumkin. Store queue ularni bir yozuvda birlashtiradi. Eski store manzili noma’lum qolsa, yosh load bilan alias tekshiruvi kechikadi va memory-level parallelism kamayadi.

Xavfsizlik va maxsus holatlar

Bounds checking yoki capability arxitekturasida AGU hosil qilgan manzil obyekt chegarasi va ruxsat bilan tekshiriladi. Oddiy pointer arifmetikasi o‘zi xotiraga kirish huquqini bermaydi; sahifa va imtiyoz tekshiruvi LSU yo‘lida saqlanadi.

Prefetch buyruqlari ham AGUdan foydalanishi mumkin, lekin noto‘g‘ri manzil uchun istisno semantikasi oddiy load’dan farq qiladi. Gather operatsiyada ko‘p element manzili yaratiladi va lane’lar bo‘yicha maxsus vektor address unit ishlatilishi mumkin.

Segment va taglar

Segmentli arxitekturada effective offset segment bazasiga qo‘shiladi va limit bilan tekshiriladi. Zamonaviy tekis modelda segment bazalari ko‘pincha nol, ammo thread-local storage uchun maxsus baza saqlanishi mumkin. AGU yoki unga yaqin yo‘l bu qo‘shimchani hisoblaydi.

Memory tagging’da pointer va xotira blokiga teg biriktiriladi. Manzilning ayrim yuqori bitlari oddiy fizik manzil emas, tag sifatida talqin qilinadi. AGU hosil qilgan adres tarjimaga yuborilishidan oldin yoki parallel ravishda teg tekshiruvidan o‘tadi. Pointer ustidagi tasodifiy arithmetic tagni buzmasligi uchun compiler va runtime belgilangan intrinsics’dan foydalanadi.

AGU hisobining o‘zi xotira mavjudligini tekshirmaydi. Hosil bo‘lgan manzil TLB va permission yo‘lida xato bersa, address arithmetic to‘g‘ri bo‘lsa ham load yoki store commit qilinmaydi. Debugger fault address va instruction address’ni alohida ko‘rsatadi.

Bog‘liq tushunchalar

effective address, addressing mode, load-store unit, TLB, memory operand, execution port