1-bo‘lim
Arxitektura nima va u qayerdan kelgan?
Fon Neyman arxitekturasi, saqlanuvchi dastur g'oyasi, uni kim o'ylab topgani va nima uchun bugungi kompyuterlar hali ham shunday qurilgan.
Ushbu bo‘lim mundarijasi
Yozgan kodingiz - if, for, funksiyalar - oxir-oqibat
sonlarga aylanadi. O'sha sonlar xotirada yotadi va
protsessor ularni birin-ketin o'qib bajaradi.
Bu darslik o'sha qatlamni ochib beradi.
Arxitektura nima? #
Arxitektura - bu dasturchi ko'radigan mashina: qanday komandalar bor, nechta registr bor, xotira qanday manzillanadi.
Uni amalga oshirish (mikroarxitektura) esa boshqa narsa - o'sha va'dani temirda qanday bajarish.
| Arxitektura | Amalga oshirish | |
|---|---|---|
| Nima belgilaydi | Nima qilinadi | Qanday qilinadi |
| Kim ko'radi | Dasturchi | Muhandis |
| O'zgaradimi | Kamdan-kam | Har avlodda |
| Misol | x86-64 komandalar to'plami | Intel va AMD chiplari |
Shuning uchun 2010-yilda yozilgan dastur bugungi protsessorda ham ishlaydi: arxitektura o'zgarmadi, faqat uning ichki tuzilishi o'zgardi.
Yunoncha arkhitekton - "bosh quruvchi" (arkhi - bosh, tekton - duradgor).
Kompyuterga bu so'zni 1964-yilda IBM muhandislari olib kirishgan: ular System/360 oilasini e'lon qilganda, turli quvvatdagi mashinalar bir xil komandalar to'plamini bajarishi kerakligini ta'kidlash uchun aynan shu so'zni tanlashdi.
O'shanda birinchi marta "arxitektura" va "amalga oshirish" ataylab ajratildi. Bugungi butun sanoat shu ajratishga tayanadi.
Saqlanuvchi dastur g'oyasi #
Bugun bu oddiy tuyuladi, lekin 1940-yillarda inqilobiy edi: dastur ham, ma'lumot ham bitta xotirada saqlanadi.
Undan oldingi mashinalarda dasturni o'zgartirish uchun simlarni qayta ulash kerak edi. ENIAC ni yangi masalaga moslash bir necha kun davom etardi.
Saqlanuvchi dastur qanday ko'rinishini bir misolda ko'ramiz.
Kichkina bir mashinani tasavvur qilamiz. Uning xotirasida ham dastur, ham ma'lumot yonma-yon turadi:
Mashinani ishga tushirsak, u shunday qadam tashlaydi:
| Qadam | Ko'rsatkich | Komanda | Akkumulyator |
|---|---|---|---|
| 1 | 0 | KIRIT 10 | 0 |
| 2 | 1 | QOSH 11 | 7 |
| 3 | 2 | SAQLA 12 | 12 |
| 4 | 3 | TOXTA | 12 |
Natija: 12-katakda 12 paydo bo'ldi, ya'ni 7 + 5.
Mashina to'rtta komandani bajardi va to'xtadi.
Mana shu - kompyuterning butun mohiyati. Qolgan hamma narsa shuning tezroq va qulayroq shakli.
Ko'rsatkich - bu keyingi bajariladigan komandaning manzili. Uni komanda ko'rsatkichi deb atashadi. Har qadamda u bittaga oshadi - haqiqiy protsessor ham aynan shunday ishlaydi.
Darslik davomida murakkab tushunchalar ko'p bo'ladi: kesh, konveyer, SIMD, uzilishlar.
Ularning hammasi shu asosiy uch qadamning tezligini oshirish uchun o'ylab topilgan:
- Ko'rsatkich ko'rsatayotgan katakdan komandani o'qi.
- Ko'rsatkichni bittaga oshir.
- Komandani bajar.
Va boshidan.
Adashib qolsangiz, shu uch qadamni eslang va "bu qanday qilib o'sha halqani tezlashtiradi?" deb so'rang. Javob deyarli har doim topiladi.
Kutilmagan oqibat: dastur o'zini o'zgartira oladi #
Dastur ham xotirada yotgani uchun, unga ma'lumot kabi munosabatda bo'lish mumkin - ya'ni uni o'zgartirish mumkin.
Dastur ishlayotganda 1-katakdagi komandani o'zgartirib ko'ramiz:
| 1-katakda nima turibdi | Natija | |
|---|---|---|
| Boshida | QOSH 11 | 12 (ya'ni 7 + 5) |
| O'zgartirilgandan keyin | KOPAYTIR 11 | 35 (ya'ni 7 × 5) |
Dastur o'z kodini ma'lumot kabi o'zgartirdi va boshqacha ishlay boshladi.
Kodni ma'lumot kabi o'zgartira olish kuchli imkoniyat. Kompilyatorlar, virtual mashinalar va JIT tarjimonlar aynan shunga tayanadi: kodni ish vaqtida yaratib, keyin uni bajaradi.
Lekin hujumchi uchun ham xuddi shu eshik ochiq: agar u xotiraga o'z baytlarini yozib, protsessorni ularni komanda deb o'qishga majburlasa, mashina uniki bo'ladi.
Shuning uchun zamonaviy tizimlarda himoya qo'yilgan:
| Chora | Nima qiladi |
|---|---|
| NX / DEP | Ma'lumot sohasidagi baytlarni bajarishni taqiqlaydi |
| W^X | Xotira bo'lagi yo yoziladigan, yo bajariladigan - ikkalasi emas |
| ASLR | Manzillarni har ishga tushirishda aralashtiradi |
Fon Neyman arxitekturasining eng kuchli tomoni, ayni paytda, eng zaif joyi ham bo'lib chiqdi.
Kim o'ylab topgan? #
Yanosh fon Neyman (1903-1957)
Saqlanuvchi dastur arxitekturasining hujjatlashtiruvchisi. 1945-yilda "EDVAC haqidagi hisobot loyihasi" nomli qo'lyozmani yozdi. Unda dastur va ma'lumot bitta xotirada turishi tasvirlangan edi.
Vengriyada tug'ilgan, matematik. Kvant mexanikasi, o'yinlar nazariyasi va meteorologiyaga ham katta hissa qo'shgan.
Qo'lyozma tugallanmagan va faqat uning ismi bilan tarqalgan edi - shuning uchun g'oya bugun uning nomini oladi.
Jon Mokli (1907-1980) va Presper Ekert (1919-1995)
ENIAC ning yaratuvchilari. 1945-yilda dunyodagi birinchi umumiy maqsadli elektron kompyuterni ishga tushirishdi - 17 000 dan ortiq lampa, 27 tonna og'irlik.
Saqlanuvchi dastur g'oyasi ustida ham aynan ular ishlagan. Fon Neyman ularning jamoasiga qo'shilib, muhokamalarni hujjatga aylantirgan edi.
Nom faqat fon Neymanniki bo'lib qolgani bugun ham adolatsiz deb hisoblanadi - g'oya jamoaviy ish edi.
1945-yilgi qo'lyozmada faqat bitta ism bor edi - fon Neymanniki. Aslida esa unda Mokli, Ekert va butun ENIAC jamoasining muhokamalari bayon qilingan.
Qo'lyozma tugallanmagan holda tarqalib ketdi va nom shunday mustahkamlanib qoldi.
Ba'zi manbalarda shuning uchun "Prinston arxitekturasi" atamasi ishlatiladi - u ishlab chiqilgan joy nomi bilan.
Tarix ko'pincha shunday: g'oya jamoaniki bo'ladi, nom esa hujjatni yozganiga qoladi.
Qisqacha tarix #
Fon Neyman sxemasida dastur va ma'lumot bitta xotirada turadi. Garvard arxitekturasida esa ular alohida xotiralarda.
| Fon Neyman | Garvard | |
|---|---|---|
| Xotira | Bitta | Ikkita alohida |
| Bir vaqtda o'qish | Yo'q - navbat bilan | Ha - ikkalasidan |
| Dastur o'zini o'zgartiradimi | Mumkin | Odatda yo'q |
| Qayerda ishlatiladi | Kompyuter, telefon | Mikrokontroller, DSP |
Qiziq tomoni: bugungi protsessorlar ikkalasini birga ishlatadi. Tashqi tomondan ular fon Neyman mashinasi, lekin ichkarida kesh dastur va ma'lumot uchun alohida bo'ladi (14-bo'limda ko'ramiz).
Arduino kabi mikrokontrollerlar esa toza Garvard mashinalari.
- Xotira rasmini qog'ozga ko'chirib chizing.
- 10-katakda 9, 11-katakda 4 bo'lsa, 12-katakda nima paydo bo'ladi?
- Har qadam uchun ko'rsatkich qiymatini yozib chiqing.
AYIRkomandasi qo'shilsa, jadval qanday o'zgaradi?- Uchta sonni qo'shish uchun dasturni qanday yozgan bo'lardingiz?
SAQLA 12o'rnigaSAQLA 11yozilsa nima bo'ladi?- Nima uchun dastur o'z kodini o'zgartira olishini tushuntiring.
- Arxitektura va amalga oshirish farqini o'z so'zlaringiz bilan yozing.
- Fon Neyman va Garvard sxemalarini jadval qilib solishtiring.
- Telefoningiz protsessori qaysi arxitekturada ishlashini toping.
Xulosa #
- Arxitektura - dasturchi ko'radigan mashina; amalga oshirish - uni temirda bajarish.
- Bu ajratish 1964-yilda IBM System/360 bilan birga paydo bo'lgan.
- Shuning uchun eski dastur yangi protsessorda ham ishlayveradi.
- Saqlanuvchi dastur: dastur ham, ma'lumot ham bitta xotirada.
- Undan oldin dasturni almashtirish uchun simlarni qayta ulash kerak edi.
- Butun kompyuter mohiyati uch qatorga sig'adi: komandani ol, ko'rsatkichni oshir, bajar.
- Keyingi bo'limlardagi kesh, konveyer va SIMD - hammasi shu halqani tezlashtirish uchun.
- Dastur ma'lumot kabi o'zgartirilishi mumkin - bu JIT ning ham, hujumlarning ham asosi.
- Shu sababli NX, W^X va ASLR himoyalari joriy qilingan.
- G'oya jamoaviy edi: Mokli, Ekert va ENIAC jamoasi; nom esa hisobotni yozganiga qoldi.
Keyingi bo'limda eng pastki qatlamdan boshlaymiz: kompyuter sonlarni qanday yozadi.
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.