Kompyuter qanday ishlaydi
7-bob

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.

CPU takt: 0 ichki ma'lumot shinasi Boshqaruv (CU) FETCH DECODE EXECUTE STORE buyruq kutilmoqda IR — buyruq registri — opkod · operandlar Registrlar 64 bit · 8 ta LED = past 8 bit R1— R2— ALU AB PC0 Flaglar Z N Xotira (RAM) dastur + ma'lumot 0MOV R1, [4]buyruq 1ADD R1, [5]buyruq 2MOV [6], R1buyruq 3HALTbuyruq 48ma'lumot 53ma'lumot 6—ma'lumot
FetchDecodeExecuteStorePC + 1Xulosa
Pastga suring: protsessor siklni aylantira boshlaydi.
14-rasm. Buyruq bajarilish sikli

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
Har bosish = bitta bosqich
let a = 5; let b = 7;
let c = a + b;
if (c > 10) c = 10;
CPU · 7.1-misol takt: 0 ichki ma'lumot shinasi Boshqaruv (CU) FETCH DECODE EXECUTE STORE buyruq kutilmoqda IR — buyruq registri — opkod · operandlar Registrlar8 bit LED R1— R2— R3— ALU AB Flaglar Z (nol) N (−) PC0 Hisobchi buyruqlar: 0 taktlar: 0 holat: tayyor Shinalar manzil (qayerga?) ma'lumot (nima?) boshqaruv (CU signali) Dastur xotirasi (ROM) 0 1 2 3 4 5 6 RAM [c_manzil] —
FetchDecodeExecuteStore
PC = 0. "Qadam" tugmasini bosing.
7.1-misol. Protsessorni qadamlab yuriting: a va b qiymatini o'zgartirib, sakrash qachon bajarilishini kuzating.

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.

Yig'uv liniyasi: 4 stansiya, har taktda bir qadam takt: 0 Navbat (xotira) 1. FETCHxotiradan ol 2. DECODEbuyruqni tushun 3. EXECUTEALU bajaradi 4. STOREnatijani yoz konveyer tasmasi: har takt hamma buyruq bir stansiya oldinga Tugadi 0 Konveyer bilan4 buyruq = ? takt 1234567buyruq 1buyruq 2buyruq 3buyruq 4 Konveyersiz4 buyruq = ? takt 12345678910111213141516buyruq 1buyruq 2buyruq 3buyruq 4
Konveyersiz 4 buyruq = 16 takt. Konveyer bilan = 7 takt.
NavbatKonveyer to'ladiHar takt 1 buyruq7 taktKonveyersizXulosa
F = Fetch, D = Decode, E = Execute, S = Store. Pastga suring: konveyer ishga tushadi.
15-rasm. 4 bosqichli konveyer: bir vaqtda to'rtta buyruq ustida ishlash

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.

Klaviatura A bosildi skan-kod 0x1E MCU · USB HID tugmani sezadi, kodnisaqlaydi, IRQ ko'taradi IRQ1 Uzilish kontrolleri APIC IRQ0 taymer → 0x20 IRQ1 klaviatura → 0x21 port 0x60 — skan-kod ma'lumoti CPU INTR CU F D E S dastur bajarilmoqda PC (RIP)0x4010 RAX · Flaglar42ZF=0 SP — stek ko'rsatkichi0x7FF0 stek pastga o'sadi Rejim foydalanuvchi yadro IDT — uzilish vektorlari jadvali 0x20 taymer → 0xA000 0x21 klaviatura → 0xA100 0x2E disk → 0xA300 RAM dastur (foydalanuvchi) 0x4010ADD RAX, 1 0x4014CMP RAX, 100 0x4018JNE 0x4010 0x401CMOV [n], RAX stek 0x7FF0 0x7FE8 0x7FE0 0x7FD8 uzilish ishlovchisi (drayver, yadro) 0xA100IN AL, 0x60 0xA102MOV [buf], AL 0xA106IRET
Uzilish qanday qayta ishlanadi: IRQ → saqlash → ishlovchi → tiklash
DasturIRQBuyruq tugaydiSaqlashIshlovchiTiklashXulosa
"Tugmani bos" ni bosing yoki pastga suring: sahna o'zi boshlanadi.
Uzilish. Protsessor qurilmalarni so'roqlab o'tirmaydi — qurilma o'zi signal beradi.
Tekshirish: yuqoridagi test va 8-savol, 9-savol