Protsessor buyruqni qanday bajaradi
Yoqilgandan o'chirilguncha protsessor bitta siklni aylantiradi: ol, tushun, bajar, yoz — sekundiga milliardlab marta.
Protsessor ishi, ajablanarli darajada, bitta oddiy siklni cheksiz takrorlashdan iborat. Bu sikl Fetch - Decode - Execute (olish - dekodlash - bajarish) deb ataladi. Kompyuter yoqilgan paytdan to o'chirilguncha protsessor boshqa hech narsa qilmaydi — faqat shu siklni sekundiga milliardlab marta aylantiradi.
1. Fetch (olish). Boshqaruv qurilmasi PC registridagi manzilni manzil shinasi orqali xotiraga yuboradi. Xotira shu manzildagi buyruqni ma'lumot shinasi orqali qaytaradi va u IR registriga yoziladi. PC keyingi buyruqni ko'rsatishi uchun oshiriladi.
2. Decode (dekodlash). Buyruq bitlar ketma-ketligi. Uning bir qismi opkod — qanday amal bajarilishi kerakligini bildiradi (masalan, 0001 = qo'shish), qolgan qismlari esa operandlar — qaysi registrlar yoki sonlar ishtirok etishini ko'rsatadi. Dekoder bu bitlarni tahlil qilib, kerakli sxemalarni yoqadigan boshqaruv signallariga aylantiradi.
3. Execute (bajarish). ALU amalni bajaradi: sonlarni qo'shadi, solishtiradi yoki xotira manzilini hisoblaydi. Agar buyruq sakrash bo'lsa, PC yangi qiymat bilan almashtiriladi — shu tarzda if, for, while kabi konstruksiyalar amalga oshiriladi.
4. Store (yozish). Natija registrga yoki xotiraga yoziladi, flag registrlari yangilanadi. Sikl yana boshidan boshlanadi.
7.1. Amaliy misol
Quyidagi oddiy JavaScript kodini ko'rib chiqamiz va u protsessor darajasida qanday ko'rinishini tasavvur qilamiz:
let a = 5;
let b = 7;
let c = a + b;
if (c > 10) c = 10;
Kompilyatsiyadan keyin u taxminan quyidagi buyruqlarga aylanadi (soddalashtirilgan assembler):
MOV R1, 5 ; a = 5
MOV R2, 7 ; b = 7
ADD R3, R1, R2 ; c = a + b → R3 = 12
CMP R3, 10 ; c ni 10 bilan solishtir
JLE tugadi ; c <= 10 bo'lsa, sakrab o't
MOV R3, 10 ; aks holda c = 10
tugadi:
MOV [c_manzil], R3 ; natijani xotiraga yoz
let a = 5; let b = 7; let c = a + b; if (c > 10) c = 10;
Har bir satr — bitta Fetch-Decode-Execute sikli. Bitta oddiy if ifodasi CMP (solishtirish) va shartli sakrash buyrug'iga aylanadi. CMP buyrug'i aslida ayirish amali: protsessor R3 - 10 ni hisoblaydi, natijani saqlamaydi, lekin flag registrlarida uning manfiy yoki nol ekanini belgilaydi. JLE buyrug'i esa shu flaglarga qarab PC'ni o'zgartiradi yoki o'zgartirmaydi.
7.2. Konveyer (pipeline)
Agar protsessor har bir buyruqni to'liq tugatib, keyingisini boshlasa, uning ko'p qismlari bo'sh turib qolardi: dekoder ishlayotganda ALU dam oladi. Buning oldini olish uchun konveyer ishlatiladi — xuddi zavoddagi yig'uv liniyasi kabi. Birinchi buyruq dekodlanayotganda, ikkinchisi allaqachon olinadi; birinchisi bajarilayotganda, ikkinchisi dekodlanadi, uchinchisi olinadi va hokazo. Natijada har bir takt oxirida bitta buyruq tugallanadi.
Zamonaviy protsessorlarda konveyer 15-20 bosqichdan iborat bo'lib, ular bir taktda 4-8 ta buyruqni parallel bajara oladi (superskalyar arxitektura). Bundan tashqari ular buyruqlarni navbatdan tashqari tartibda bajaradi (out-of-order execution): agar keyingi buyruq oldingisining natijasiga bog'liq bo'lmasa, u kutmasdan bajariladi.
7.3. Shartli sakrashlarni bashorat qilish
Konveyerga muammo tug'diradigan narsa — shartli sakrashlar. Protsessor if sharti natijasini bilmasdan turib, qaysi buyruqni navbatga olishni bilmaydi. Shuning uchun u bashorat qiladi (branch prediction). Maxsus blok o'tgan tarixga qarab, masalan, sikl oxirida sakrash 99% hollarda "orqaga qaytish" bo'lishini o'rganadi. Zamonaviy bashoratchilar 95-99% aniqlikka ega. Xato bashoratda konveyer tozalanadi va 15-20 takt yo'qotiladi. Shuning uchun saralangan massivni qayta ishlash saralanmaganiga qaraganda sezilarli tezroq bo'lishi mumkin.
7.4. Uzilishlar (interrupts)
Protsessor dasturni bajarayotganda tashqi hodisalar sodir bo'ladi: klaviatura tugmasi bosiladi, tarmoqdan paket keladi, disk ma'lumotni o'qib bo'ladi. Protsessor bu qurilmalarni doimiy tekshirib turishi samarasiz bo'lardi. Buning o'rniga qurilma protsessorga uzilish signali (IRQ) yuboradi. Protsessor joriy buyruqni tugatadi, holatini saqlaydi, maxsus uzilishni qayta ishlovchi funksiyaga o'tadi, so'ng to'xtagan joyiga qaytadi. Bu jarayon mikrosoniyalar ichida sodir bo'lgani uchun foydalanuvchi uni sezmaydi.