Instruction Queue — protsessorning front-end qismi olib kelgan yoki qisman dekodlagan buyruqlarni keyingi bosqich qabul qilguncha saqlaydigan apparat navbati. U Instruction Fetch va decode tezligidagi qisqa farqlarni yutib, quvurning keyingi qismiga bir tekis oqim beradi. Termin mikroarxitekturaga qarab fetch baytlari, to‘liq buyruqlar yoki mikrooperatsiyalar navbatini anglatishi mumkin.
Front-enddagi vazifa
Instruction cache bir blok baytni olib keladi, dekoder esa har siklda cheklangan miqdordagi buyruqni ajratadi. Navbat fetch bir sikl ko‘p ma’lumot berganda ortiqchasini saqlaydi; keshning qisqa kechikishida esa oldindan yig‘ilgan yozuvlar dekoderni ishlatib turadi. Shu bilan front-end va back-end qat’iy bir taktlik bog‘lanishdan ajraladi.
O‘zgaruvchan uzunlikdagi ISAda navbat baytlar bilan birga buyruq chegarasi va branch bashorati metadata’sini saqlashi mumkin. Bir blok ikki kesh satri yoki sahifadan yig‘ilsa, faqat to‘liq va ruxsat tekshiruvidan o‘tgan buyruq keyingi bosqichga beriladi.
Branch va tozalash
Navbatdagi yozuvlar spekulyativ yo‘lga tegishli bo‘lishi mumkin. Branch noto‘g‘ri bashorat qilinganda undan yosh yozuvlar bekor qilinadi, fetch to‘g‘ri nishondan boshlanadi. Har yozuvga branch mask, avlod raqami yoki fetch identifikatori bog‘lanib, qaysi qismini saqlash kerakligi aniqlanadi.
Tozalash oddiy “hammasini o‘chirish”dan murakkab bo‘lishi mumkin: navbatda noto‘g‘ri branchdan oldingi to‘g‘ri buyruqlar ham qolgan bo‘lsa, ular yo‘qotilmaydi. Exception yoki instruction cache invalidatsiyasi esa boshqa turdagi flush talab qiladi.
Sig‘im va backpressure
Navbat to‘lsa fetch yangi blok ololmaydi. Backpressure program counter oqimini vaqtincha ushlab, kesh bandwidth’ini behuda ishlatmaslikka yordam beradi. Juda kichik queue kesh jitterini yuta olmaydi; juda katta queue ko‘proq maydon, energiya va xato branchdan keyin bekor qilinadigan ishni oshiradi.
Queue occupancy front-end holatini tushuntiradi. Doim bo‘sh navbat fetch yoki branch prediction yetkazib bermayotganini, doim to‘la navbat esa decode yoki downstream bosqich sekinligini ko‘rsatishi mumkin. Biroq occupancy bitta o‘zi sababni isbotlamaydi; cache miss, decoder bandligi va dispatch stall hisoblagichlari bilan birga qaraladi.
Boshqa navbatlardan farqi
Instruction Queue odatda buyruq oqimining tartibini saqlaydi va operand tayyorligini tanlamaydi. Issue Queue esa register renaming’dan keyingi mikrooperatsiyalarni ushlab, tayyorlarini tartibsiz execution unitga yuboradi. Reorder Buffer natijalarni me’moriy tartibda commit qilish uchun xizmat qiladi.
Ba’zi hujjatlar “instruction queue” nomini umumiy scheduler navbatiga ham ishlatadi. Shuning uchun elementning qaysi formatda ekani, pipeline’dagi o‘rni va dequeue sharti bilan terminning aniq ma’nosi belgilanadi.
Energiya va tekshiruv
Queue har takt keng bayt va metadata yozsa front-end energiyasining sezilarli qismini sarflaydi. Clock gating bo‘sh yoki o‘zgarmagan banklarni o‘chiradi; bypass yo‘li navbat bo‘sh paytda yangi fetch natijasini to‘g‘ridan-to‘g‘ri decoderga berishi mumkin. Bu yo‘l enqueue va dequeue bir vaqtda bo‘lganda tartibni buzmasligi kerak.
Verifikatsiyada to‘la-bo‘sh chegarasi, branch flush bilan bir sikldagi enqueue, cache fault va wrap-around alohida sinovdan o‘tadi. Har qabul qilingan to‘g‘ri buyruq bir marta chiqishi, bekor qilingan yozuv esa hech qachon decode qilinmasligi invariant sifatida tekshiriladi.
Navbat bandligi uchun apparat hisoblagichi front-end yetkazib berishi va decoder iste’moli o‘rtasidagi nomutanosiblikni profil qilishda ham ishlatiladi.
Bog‘liq tushunchalar
instruction fetch, decode queue, issue queue, pipeline buffer, branch prediction, backpressure