Bosh sahifa Wiki Instruction Commit

Instruction Commit

Instruction Commit — bajarilgan buyruq natijasini protsessorning me’moriy holatiga dastur tartibida yakuniy kiritish bosqichi. U retirement deb ham ataladi. Out-of-order yadro amallarni tayyorligiga qarab turli vaqtda bajarsa ham, commit orqali dastur kuzatadigan registrlar, istisnolar va xotira ta’sirlari izchil ko‘rinadi.

Reorder buffer

Dekodlangan har mikrooperatsiya reorder bufferda dastur tartibidagi yozuv oladi. Yozuv natija tayyormi, istisno bormi, qaysi fizik registr ajratilgan va tarmoq bashorati to‘g‘rimi kabi ma’lumotni saqlaydi. Commit faqat navbat boshidagi eng eski buyruq tayyor bo‘lganda oldinga yuradi. Keyingi buyruqlar allaqachon bajarilgan bo‘lsa ham, eski buyruqni chetlab rasmiylasha olmaydi.

Natija registrga tegishli bo‘lsa, yangi fizik registr me’moriy xaritaning tasdiqlangan qismiga aylanadi va avvalgi fizik registr bo‘shatilishi mumkin. Store amali odatda xotiraga tashqi ko‘rinadigan yozuvni commit bilan muvofiqlashtiradi. Aniq tafsilot mikroarxitekturaga bog‘liq, lekin xato yo‘ldagi store boshqa oqim ko‘radigan natija qoldirmasligi shart.

Aniq istisno

Buyruq bajarilishida sahifa xatosi yoki nolga bo‘lish aniqlansa, xato reorder bufferda saqlanadi. U boshga kelganda undan oldingi barcha buyruq commit qilingan, undan keyingilari esa hali rasmiylashmagan bo‘ladi. Protsessor yoshroq ishlarni bekor qiladi, istisno manzilini saqlaydi va ishlovchiga o‘tadi. Dastur nuqtayi nazaridan xuddi buyruqlar tartibda bajarilgandek aniq holat hosil bo‘ladi.

Tarmoq noto‘g‘ri bashorat qilinganda tozalash ko‘pincha tarmoq bajarilgan zahoti boshlanadi, ammo tasdiqlangan xarita va resurslarni qaytarish qoidalari commit bilan uyg‘un ishlaydi. Spekulyativ natija fizik tuzilmalarda mavjud bo‘lishi mumkin, lekin me’moriy majburiyatga aylanmaydi.

Kenglik va to‘siqlar

Commit width bir siklda nafaqaga chiqariladigan maksimal mikrooperatsiyalar sonidir. Navbat boshidagi uzoq kechikuvchi load butun commitni to‘sib, uning ortidagi tayyor ishlarni ushlab qolishi mumkin; bu head-of-line blocking hisoblanadi. Kengroq commit foydali, ammo dasturdagi uzoq bog‘liqlik va kesh xatosini yo‘q qilmaydi.

Seriallashtiruvchi, imtiyozli yoki xotira to‘sig‘i buyruqlari maxsus shart talab qiladi. Masalan, oldingi barcha xotira ta’siri belgilangan darajada tugamaguncha keyingi kuzatiladigan amal rasmiylashmasligi mumkin. Bu ko‘p yadroli xotira modeli va qurilma registrlari bilan ishlashda muhim.

Kuzatuv va nosozlik

Protsessor unumdorligi ko‘pincha sikl boshiga commit qilingan buyruqlar bilan o‘lchanadi. Issued yoki executed soni spekulyativ va qayta bajarilgan ishni ham qamrab olishi mumkin, shuning uchun dastur foydasini to‘liq ko‘rsatmaydi. Commit tezligi past bo‘lsa sabab front-end ochligi, operand kutishi, noto‘g‘ri bashorat yoki navbat bosimi bo‘lishi mumkin.

Commit ISAning alohida buyrug‘i emas, ichki mikroarxitektura bosqichidir. In-order kichik yadroda u aniq ajratilmasligi mumkin, ammo istisnolar va ko‘rinadigan holat baribir arxitektura tartibiga muvofiq yuritiladi.

Interrupt qabul qilish ham ko‘pincha commit chegarasi bilan muvofiqlashtiriladi. Protsessor ma’lum eski buyruqqacha holatni tugatib, keyingi buyruq manzilini saqlaydi va ishlovchiga o‘tadi. Qaytganda dastur yo‘qolgan yoki ikki marta rasmiylashgan amal ko‘rmasligi kerak. Debuggerning bir qadamli bajarishi va aniq apparat kuzatuvi ham nafaqaga chiqarilgan buyruqlar chegarasiga tayanadi; spekulyativ ichki amallar foydalanuvchiga bajarilgan buyruq sifatida ko‘rsatilmaydi.

O‘zini o‘zgartiruvchi kod va kuzatuv vositalari uchun commit chegarasi kodning haqiqatan bajarilgan qismini aniqlaydi. Fetch qilingan yoki execute bosqichiga yetgan baytlar keyin bekor qilinsa, ular dasturiy hisoblagich profilida tugallangan ko‘rsatma sifatida sanalmasligi kerak.

Bog‘liq tushunchalar

retirement, reorder buffer, precise exception, speculative execution, architectural state, store buffer