10-bo‘lim
Komanda sikli
Komanda qanday sonlarga kodlanadi, olish-dekodlash-bajarish halqasi, shartli o'tish va takt chastotasining ma'nosi.
Ushbu bo‘lim mundarijasi
1-bo'limda protsessorning butun mohiyati uch qatorga sig'gan edi:
- Ko'rsatkich ko'rsatgan manzildan komandani o'qi (fetch).
- Ko'rsatkichni keyingi komandaga surib qo'y.
- Komandani ochib tushun (decode) - bu qaysi amal?
- Amalni bajar (execute).
Va boshidan. Protsessor yoqilgandan o'chgunicha shu to'rt qadamni takrorlaydi - sekundiga milliardlab marta.
Endi shu halqani haqiqiy komandalar bilan quramiz.
Komanda ham shunchaki son #
Protsessor uchun komanda - bu bitlar to'plami. Ularning ma'nosi formatda kelishilgan.
Bizning o'quv mashinamizda har komanda 16 bitga sig'adi va to'rt maydonga bo'linadi:
To'rtta komandani shu formatda yozib chiqamiz:
| Assembler | O'n oltilikda | Ikkilikda |
|---|---|---|
YUKLA r0, 12 | 0x100C | 0001 00 00 00001100 |
YUKLA r1, 5 | 0x1405 | 0001 01 00 00000101 |
QOSH r0, r1 | 0x2100 | 0010 00 01 00000000 |
TOXTA | 0xF000 | 1111 00 00 00000000 |
Amal maydoniga qarang: 0001 - yuklash, 0010 - qo'shish,
1111 - to'xtash. Protsessor uchun komanda nomi yo'q, faqat
raqam bor.
Bu 4-bo'limdagi "maydonlarni ajratib olish" naqshining aynan o'zi. Faqat bu yerda maydonlar - rang emas, komanda qismlari.
Ikki yondashuv bor va ular butun arxitektura xarakterini belgilaydi:
| Qat'iy uzunlik | O'zgaruvchan uzunlik | |
|---|---|---|
| Misol | ARM, RISC-V (4 bayt) | x86 (1-15 bayt) |
| Dekodlash | Oddiy va tez | Murakkab |
| Kod hajmi | Kattaroq | Ixchamroq |
| Konveyer (16-bo'lim) | Oson | Qiyin |
x86 da komanda uzunligini bilish uchun uni qisman dekodlash kerak - bu keyingi komanda qayerdan boshlanishini oldindan aytishni qiyinlashtiradi.
Shuning uchun zamonaviy x86 protsessorlar ichkarida komandalarni soddaroq ichki shaklga (mikro-amal) aylantiradi va aslida RISC mashinasi kabi ishlaydi.
Bu 1-bo'limdagi "arxitektura va amalga oshirish" ajratishning eng yorqin misoli.
Uch qadamli halqa #
Endi to'liq mashina. Dastur 5 dan 0 gacha sanaydi:
Endi kichik bir dasturni to'liq kuzatamiz. U r0 ni 5 dan
0 gacha kamaytiradi:
| Qadam | Ko'rsatkich | Komanda | r0 | r1 | Nol bayrog'i |
|---|---|---|---|---|---|
| 1 | 0 | YUKLA r0, 5 | 0 | 0 | 0 |
| 2 | 1 | YUKLA r1, 1 | 5 | 0 | 0 |
| 3 | 2 | AYIR r0, r1 | 5 | 1 | 0 |
| 4 | 3 | AGAR_NOL 5 | 4 | 1 | 0 |
| 5 | 4 | AGAR_NOL 2 | 4 | 1 | 0 |
| 6 | 2 | AYIR r0, r1 | 4 | 1 | 0 |
| 7 | 3 | AGAR_NOL 5 | 3 | 1 | 0 |
| ... | ... | halqa davom etadi | ... | ... | ... |
| 15 | 2 | AYIR r0, r1 | 1 | 1 | 0 |
| 16 | 3 | AGAR_NOL 5 | 0 | 1 | 1 |
| 17 | 5 | TOXTA | 0 | 1 | 1 |
Eng muhim ikki qator - 5 va 17.
5-qadamda ko'rsatkich 4 dan 2 ga qaytdi. Bu - halqa. Hech qanday sehr yo'q: shunchaki ko'rsatkichga boshqa qiymat yozildi.
16-qadamda r0 nolga yetdi va nol bayrog'i yondi.
Shundan keyin shartli o'tish ishlamadi va dastur TOXTA ga
o'tdi.
Butun dastur 17 ta komandada bajarildi.
Yuqoridagi jadvalda dasturlashdagi halqa qanday ishlashini ko'rdingiz: ko'rsatkichni orqaga qaytarish.
Boshqa tuzilmalar ham xuddi shunday:
| Yuqori darajada | Protsessor darajasida |
|---|---|
| Halqa | Ko'rsatkichni orqaga qaytarish |
| Shart | Bayroqqa qarab o'tish yoki o'tmaslik |
| Funksiya chaqirish | Qaytish manzilini saqlab, oldinga o'tish |
| Funksiyadan qaytish | Saqlangan manzilni tiklash |
Protsessor bu tushunchalarning hech birini bilmaydi. U faqat ko'rsatkichni o'zgartiradi.
Diqqat bilan qarang: KK ustuni ketma-ket emas. U
2, 3, 4, 2, 3, 4... bo'lib aylanadi - bu halqa.
Yuqori darajali tilda while deb yoziladigan narsa
protsessor uchun aynan shu: komanda ko'rsatkichini orqaga
qaytarish.
if, for, while, funksiya chaqiruvi va qaytish -
hammasi bitta narsaga keladi: KK ga yangi qiymat
yozish.
| Yuqori daraja | Protsessor darajasida |
|---|---|
if | Bayroqqa qarab KK ni o'zgartirish |
while | KK ni orqaga qaytarish |
| Funksiya chaqiruvi | Joriy KK ni stekka saqlab, sakrash |
return | Stekdan KK ni tiklash |
Shuning uchun 1-bo'limdagi uch qatorlik halqa haqiqatan hamma narsani qamrab oladi.
Takt chastotasi nimani anglatadi? #
"3 GGs protsessor" degani - ichki soat sekundiga 3 milliard marta uradi.
Lekin bu sekundiga 3 milliard komanda degani emas:
| Omil | Ta'siri |
|---|---|
| Ba'zi komandalar bir necha takt oladi | Kamroq |
| Konveyer (16-bo'lim) | Ko'proq |
| Bir vaqtda bir necha komanda | Ko'proq |
| Xotira kutish (14-bo'lim) | Ancha kamroq |
Shuning uchun protsessorlarni faqat chastota bilan solishtirish noto'g'ri. 2 GGs li yangi protsessor 3 GGs li eskisidan tez bo'lishi mumkin.
2000-yillar boshida chastota har yili o'sardi va 10 GGs kutilardi.
Lekin quvvat sarfi chastotaning kvadratidan tez o'sadi va issiqlik chiqarish chidab bo'lmas darajaga yetdi. Bu quvvat devori deb ataladi.
Natijada 2005-yildan boshlab yo'nalish o'zgardi:
| Oldin | Keyin |
|---|---|
| Bitta yadro, yuqori chastota | Ko'p yadro, o'rtacha chastota |
| Dastur avtomatik tezlashardi | Dasturchi parallellikni o'ylashi kerak |
Bugungi protsessorlar 3-5 GGs atrofida qotib qolgan. Tezlik o'sishi endi yadrolar soni va samaradorlikdan keladi - 17-bo'limda ko'ramiz.
- Komanda siklining to'rt qadamini yoddan yozing.
0x2100komandasini qo'lda maydonlarga ajrating.- Amal maydoni
0010bo'lsa, bu qaysi komanda? TOXTAning o'n oltilik kodini yozing.- Qiymat maydoni 8 emas, 6 bit bo'lsa, eng katta son qancha bo'ladi?
- Jadvalda halqa qaysi qadamda boshlanganini toping.
- Ko'rsatkich nima uchun 4 dan 2 ga qaytganini tushuntiring.
- Nol bayrog'i qaysi qadamda yondi? Nega?
- Dastur 10 dan sanasa, necha qadam bajarilardi?
- Shart va halqa protsessor darajasida qanday ko'rinishini yozing.
Xulosa #
- Komanda - bu son; uning bitlari format bo'yicha maydonlarga bo'linadi.
- Dekodlash - 4-bo'limdagi "surish va niqob" naqshining o'zi.
- Komanda uzunligi qat'iy (ARM, RISC-V) yoki o'zgaruvchan (x86) bo'ladi.
- Zamonaviy x86 ichkarida komandalarni soddaroq mikro-amallarga aylantiradi.
- Protsessor halqasi uch qadam: olish, dekodlash, bajarish.
- Komanda ko'rsatkichi odatda avtomatik oshadi.
- Sakrash komandasi unga yangi qiymat yozadi - halqa shunday hosil bo'ladi.
if,while, funksiya chaqiruvi - hammasiKKni o'zgartirishga keladi.- Takt chastotasi sekundiga bajariladigan komandalar soniga teng emas.
- 2005-yildan chastota o'sishi to'xtadi - sabab quvvat devori.
Keyingi bo'limda komandalar to'plamini butun sifatida ko'ramiz: RISC va CISC.
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.