9-bo‘lim
Protsessor ichida
Registrlar nima uchun kerak, ALU va bayroqlar, tashish va toshish farqi hamda boshqaruv qurilmasining vazifasi.
Ushbu bo‘lim mundarijasi
8-bo'limda sumator qurdik. Endi uni protsessor ichiga joylashtiramiz.
Protsessorda uchta asosiy qism bor:
| Qism | Vazifasi |
|---|---|
| Registrlar | Ish qiymatlarini ushlab turadi |
| ALU | Amal bajaradi va bayroq qo'yadi |
| Boshqaruv qurilmasi | Komandani o'qib, nima qilishni aytadi |
Nima uchun registr kerak? #
Avval protsessorning umumiy tuzilishiga qaraymiz:
Endi eng muhim savolga javob beramiz: nima uchun registr kerak?
a = b + c amalini ikki xil bajarish mumkin:
| Qadam | Hammasi xotirada | Qiymatlar registrda |
|---|---|---|
b ni o'qish | 100 takt | 1 takt |
c ni o'qish | 100 takt | 1 takt |
| Qo'shish | 1 takt | 1 takt |
| Natijani yozish | 100 takt | 1 takt |
| Jami | 301 takt | 4 takt |
Farq - 75 barobar.
Yuqoridagi 100 va 1 - o'qish uchun tanlangan sonlar.
Haqiqiy nisbat 14-bo'limda aniq ko'rsatiladi, lekin tartib shunga yaqin: registrga murojaat bir taktda, asosiy xotiraga esa yuzlab taktda bajariladi.
Aynan shu farq butun xotira ierarxiyasining (kesh, sahifalash, oldindan o'qish) sababi.
Registrlarning ikkita xossasi bor va ular bir-biriga qarama- qarshi:
| Xossa | Oqibati |
|---|---|
| Juda tez | Bir taktda o'qiladi |
| Juda kam | Odatda atigi 16-32 ta |
Shuning uchun kompilyatorning eng muhim vazifalaridan biri - qaysi qiymat registrda turishini hal qilish.
Yuqoridagi 100 va 1 - o'qish uchun tanlangan sonlar.
Haqiqiy nisbat 14-bo'limda aniq o'lchanadi, lekin tartib shunga yaqin: registrga murojaat bir taktda, asosiy xotiraga esa yuzlab taktda bajariladi.
Aynan shu farq butun xotira ierarxiyasining (kesh, sahifalash, oldindan o'qish) sababi.
Registrlar nomlari arxitekturaga qarab turlicha:
| Arxitektura | Registrlar |
|---|---|
| x86-64 | rax, rbx, rcx, rdx, rsi, rdi, r8-r15 |
| ARM64 | x0-x30 |
| RISC-V | x0-x31 |
Maxsus vazifali registrlar ham bor: komanda ko'rsatkichi
(1-bo'limdagi korsatkich), stek ko'rsatkichi va
bayroqlar registri.
ALU va bayroqlar #
ALU amal bajaribgina qolmaydi - u natija haqida qo'shimcha ma'lumot ham beradi:
| Amal | a | b | Natija | Nol | Tashish | Ishora | Oshish |
|---|---|---|---|---|---|---|---|
| Qo'shish | 12 | 5 | 17 | 0 | 0 | 0 | 0 |
| Qo'shish | 200 | 100 | 44 | 0 | 1 | 0 | 0 |
| Ayirish | 7 | 7 | 0 | 1 | 1 | 0 | 0 |
| Ayirish | 5 | 12 | 249 | 0 | 0 | 1 | 0 |
| Qo'shish | 100 | 100 | 200 | 0 | 0 | 1 | 1 |
| VA | 240 | 15 | 0 | 1 | 0 | 0 | 0 |
| XOR | 170 | 255 | 85 | 0 | 0 | 0 | 0 |
To'rtta bayroqning ma'nosi:
| Bayroq | Qachon 1 bo'ladi |
|---|---|
| Nol | natija aynan nol |
| Tashish | ishorasiz talqinda razryaddan oshdi |
| Ishora | natijaning eng chap biti 1 |
| Oshish | ishorali talqinda razryaddan oshdi |
Uchinchi qatorga e'tibor bering: 7 − 7 = 0 da nol
bayrog'i yondi. Aynan shu tufayli protsessor ikkita sonni
taqqoslay oladi - u ularni ayiradi va nol bayrog'iga qaraydi.
Ikkita qatorni solishtiring:
| Amal | Tashish | Oshish | Nima bo'ldi |
|---|---|---|---|
200 + 100 | 1 | 0 | Ishorasiz talqinda sig'madi |
100 + 100 | 0 | 1 | Ishorali talqinda sig'madi |
Sabab 3-bo'limdan ma'lum: bir xil bitlar ikki xil o'qiladi.
- Tashish - ishorasiz son sifatida toshib ketdi.
- Oshish - ishorali son sifatida toshib ketdi.
100 + 100 = 200 ishorasiz uchun mutlaqo normal. Lekin
ishorali 8 bitda eng katta son 127, shuning uchun natija
-56 bo'lib chiqadi - bu xato.
Protsessor ikkala bayroqni ham qo'yadi va qaysi biri muhimligini dastur hal qiladi. Aynan shuning uchun protsessorda ikki xil shartli o'tish komandalari bor: biri ishorasiz, ikkinchisi ishorali taqqoslash uchun.
Bu C dagi klassik xatolar manbai: int va unsigned ni
taqqoslaganda kompilyator ishorasiz variantni tanlaydi va
manfiy son juda katta bo'lib qoladi.
Bayroqlar nimaga kerak? #
Bayroqlar shartli o'tish uchun ishlatiladi. if a == b
degan kod ikki komandaga aylanadi:
| Qadam | Komanda | Nima bo'ladi |
|---|---|---|
| 1 | AYIR a, b | Natija tashlanadi, faqat bayroq qoladi |
| 2 | AGAR_NOL o'tish | Nol bayrog'i 1 bo'lsa - sakraydi |
Shuning uchun assemblerda taqqoslash uchun maxsus CMP
komandasi bor: u ayirishni bajaradi, lekin natijani
saqlamaydi - faqat bayroqlarni qo'yadi.
Zamonaviy protsessorda o'n minglab tranzistor bor. Nega 1000 ta registr qilinmaydi?
Uchta sabab:
| Sabab | Izoh |
|---|---|
| Komanda hajmi | Har registr nomi komandada bit talab qiladi |
| Tezlik | Katta registr fayli sekinroq ishlaydi |
| Kontekst almashinuvi | Har registr saqlanishi kerak |
Birinchisi eng qattiq: 32 ta registr uchun 5 bit kerak. Uch operandli komandada bu 15 bit - komanda 32 bitli bo'lsa, yarmidan ko'pi faqat registr nomlariga ketadi.
Amalda 16-32 ta registr eng yaxshi muvozanat bo'lib chiqqan.
- ALU misolini ishga tushiring.
KOPAYTIRamalini qo'shing va bayroqlarni to'g'ri qo'ying.127 + 1ni sinang - qaysi bayroq yoqildi?255 + 1ni sinang va farqni tushuntiring.- Tashish va oshish farqini uch qatorda yozing.
CMPamalini qo'shing: natijani qaytarmasin, faqat bayroq qo'ysin.- Registr misolini ishga tushiring va nisbatni o'zgartiring.
x86-64da nechta umumiy registr borligini toping.- Nima uchun
r0ko'pincha doimiy nol bo'lishini o'rganing. - Bayroqlar
ifni qanday amalga oshirishini tushuntiring.
Xulosa #
- Protsessorda uch asosiy qism: registrlar, ALU, boshqaruv qurilmasi.
- Registr - eng tez xotira, lekin juda kam: odatda 16-32 ta.
- Registrga murojaat bir taktda, asosiy xotiraga esa yuzlab taktda.
- Registrlar kam, chunki ularning nomi komanda ichida bit talab qiladi.
- ALU amal bajaradi va natija haqida bayroq qo'yadi.
- Asosiy bayroqlar: nol, tashish, ishora, oshish.
- Tashish ishorasiz, oshish esa ishorali toshishni bildiradi - bu ikki xil narsa.
- Protsessor ikkala bayroqni qo'yadi, qaysi biri kerakligini dastur hal qiladi.
CMP- ayirishni bajaradi, lekin natijani saqlamaydi, faqat bayroq qo'yadi.- Shartli o'tish aynan shu bayroqlarga qaraydi -
ifshunday ishlaydi.
Keyingi bo'limda protsessor komandani qanday olib, tushunib, bajarishini ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.