Darslik fizikadan Telegram botgacha 9 ta qatlam bo'ylab ko'tariladi. Bu sahifa har qatlamni qo'l bilan "ushlab ko'rish" uchun animatsiyalar, 4 haftalik reja va o'z-o'zini tekshirish kartalarini beradi.
Darslik 44 sahifa, uni bir kechada o'qib chiqish mumkin. Lekin "o'qidim" bilan "tushundim" orasidagi farq mana shu beshta odatda.
Birinchi o'qishda kitob kabi pastdan yuqoriga boring: tranzistor → ventil → CPU → OS → bot. Ikkinchi o'qishda 14-bobdagi "A harfi bosildi" misolini yuqoridan pastga kuzating va har bosqichda qaysi bobga qaytish kerakligini yozing.
Kitobda 32 ta rasm bor. Har bobdan keyin asosiy rasmni (masalan, 11-rasm fon Neyman, 14-rasm FDE sikli) xotiradan qog'ozga chizing. Chiza olmagan joyingiz aynan tushunmagan joyingiz.
Har bo'limdan keyin ovoz chiqarib, atamalarsiz tushuntiring: "Kesh bu... stol ustidagi kitoblar, RAM esa javondagi". To'xtab qolsangiz, o'sha joyni qayta o'qing. Kitobning o'zi shu usulda yozilgan (rele, orkestr, professor va o'quvchilar).
Yangi bobni 1, 3, 7, 14 va 30-kunlarda 5 daqiqaga qaytib, pastdagi flesh-kartalar bilan tekshiring. Bu bitta odat esda qolishni bir necha barobar oshiradi.
Siz dasturchisiz, demak eng kuchli xotira bu qo'l. Har bob uchun quyida 10 daqiqalik JavaScript yoki terminal topshirig'i bor. Kod ishlaganda tushuncha "qo'lga o'tadi".
Har hafta 3–4 bob, kuniga 30–40 daqiqa. Har bobda: asosiy g'oya, esda qoladigan "ilgak", animatsiya va amaliy topshiriq.
Kompyuter aqlli emas: u to'rt harakatni (kiritish, saqlash, hisoblash, chiqarish) sekundiga milliardlab marta bajaradi. Aqli dasturda.
Topshiriq · 2300 * 2 ** ((2023-1971)/2) ni hisoblang. Mur qonuni bashorati 92 milliardga qanchalik yaqin chiqdi?
Matn, rasm, tovush, kod: hammasi son, son esa bitlar. Kompyuter turini bilmaydi, talqinni dastur hal qiladi.
Topshiriq · Node'da: (181).toString(2), parseInt('10110101', 2), 'A'.charCodeAt(0), Buffer.from('Salom'). Chiqqan har bir sonni qo'lda tekshiring.
Butun kompyuter bitta g'oyaga qurilgan: signal bilan boshqariladigan kalit. Rele buni mexanik, MOSFET esa elektr maydoni bilan qiladi, sekundiga milliardlab marta.
Topshiriq · Bir varaqqa rele va MOSFET'ni yonma-yon chizing, har biriga "kirish signali", "kalit", "chiqish zanjiri" deb yozing. Umumiy g'oya bitta ekanini ko'rasiz.
Bir nechta kalit = ventil. XOR yig'indini, AND ko'chirishni beradi, demak ventillar qo'sha oladi. Chiqishni kirishga qaytarsangiz, sxema eslab qoladi.
Topshiriq · JS'da yarim yig'uvchini yozing: const ha = (a,b) => ({s: a ^ b, c: a & b}). Keyin to'liq yig'uvchi va 4 bitli yig'uvchini zanjir qilib, add4([1,0,1,1],[0,1,1,0]) ni sinang.
Dastur va ma'lumot bitta xotirada. Bu universal mashinani beradi, lekin "tor bo'g'iz" ham: CPU tez, xotira sekin, yo'l bitta.
Topshiriq · 12-rasmdagi 9 qatlamni (yuqoridagi animatsiya) xotiradan yozing va har biriga o'z loyihangizdan misol qo'ying (masalan, "OS = serverdagi Ubuntu").
Yadro = ALU + CU + registrlar + L1/L2. 4 GHz = bitta takt 0.25 ns, shu vaqtda yorug'lik 7.5 sm yuradi. 2005-dan beri chastota o'smadi, yadrolar ko'paydi.
Topshiriq · Terminalda nproc (Linux) yoki os.cpus().length (Node) bilan yadro sonini ko'ring. lscpu chiqishida L1/L2/L3 kesh hajmlarini toping va 6.1-bo'limdagi raqamlar bilan solishtiring.
Protsessor yoqilgandan o'chirilguncha faqat bitta siklni aylantiradi. if bu CMP + shartli sakrash. Konveyer bir vaqtda 4 buyruqni turli bosqichda ushlaydi.
let a = 5; let b = 7; let c = a + b; if (c > 10) c = 10;
Topshiriq · 10 million tasodifiy sondan iborat massivni saralab va saralamay if (x > 128) sum += x sikli bilan yig'ing, vaqtini console.time bilan o'lchang. Farq bashoratchining ishi.
Tez xotira kichik va qimmat, katta xotira sekin. Shuning uchun pog'ona: registr → kesh → RAM → SSD → HDD. Lokallik prinsipi ishlashini ta'minlaydi.
Topshiriq · 4096×4096 massivni avval qator bo'yicha, keyin ustun bo'yicha yig'ing va vaqtni solishtiring. Fazoviy lokallik va 64 baytlik kesh satri farqni tushuntiradi.
Uch shina: manzil (qayerga?), ma'lumot (nima?), boshqaruv (o'qi/yoz). PCIe yo'laklari, PSU 220 V ni 12/5/3.3 V ga aylantiradi, issiqlik chiqadi.
Topshiriq · 2 ** 32 / 1024 ** 3 va 2 ** 48 / 1024 ** 4 ni hisoblang. Zamonaviy x86-64 nega 48 bit manzil ishlatishini o'ylang.
CPU: bir nechta professor. GPU: minglab boshlang'ich sinf o'quvchisi. AI o'qitish milliardlab oddiy ko'paytirish, shuning uchun GPU.
Topshiriq · Brauzerda addEventListener('keydown', e => console.log(e.code, e.key)) yozing. e.code skan-kodga, e.key OS o'girgan belgiga mos keladi (14-bob, 5-qadam).
OS uch ish qiladi: resurslarni taqsimlaydi, apparatni abstraksiya qiladi, dasturlarni himoya qiladi. Kernel mode va user mode, syscall, rejalashtiruvchi, virtual xotira, fayl tizimi.
fs.readFile() oxir-oqibat Linux'ning open() va read() syscall'lariga aylanadi. await fetch() vaqtida jarayon "kutish" holatiga o'tadi, shu uchun bitta oqimli Node minglab foydalanuvchiga xizmat qiladi. Segmentation fault = MMU ruxsatsiz manzilni to'xtatdi.Topshiriq · Serverda htop yoki top oching: jarayonlar, holatlari (R, S, D), RAM va swap. Keyin strace -c node bot.js bilan botingiz qaysi syscall'larni chaqirishini sanang.
Kompilyator oldindan tarjima qiladi (C, Rust, Go). Interpretator satrma-satr (Python). V8 JIT "issiq" funksiyalarni ish vaqtida mashina kodiga aylantiradi. Stek va heap.
Topshiriq · node --print-bytecode -e "function sq(x){return x*x}; sq(3)" ishlating va V8 baytkodini ko'ring. Keyin function f(){ f() } f() bilan stack overflow xatosini o'zingiz chaqiring.
Paket bu konvert ichidagi konvert: har qatlam o'z sarlavhasini qo'shadi. DNS nomni IP ga o'giradi. TCP kafolatlaydi, UDP tez. HTTPS = HTTP + TLS.
Topshiriq · dig api.telegram.org (DNS), ping api.telegram.org (kechikish), curl -v https://api.telegram.org (TLS qo'l berish va HTTP sarlavhalar). Har buyruq chiqishini bobdagi qatlamga bog'lang.
Bitta tugma bosilishi 8 bosqich va deyarli barcha qatlamlardan o'tadi, 10–30 ms ichida. Bu bobni kitobning "imtihoni" deb hisoblang.
Topshiriq · Xuddi shu uslubda o'z botingiz uchun zanjir yozing: "Foydalanuvchi /start bosdi" dan "javob ekranda" gacha, har qadamga bob raqamini qo'yib. Bu sizning yakuniy konspektingiz.
Kartani bosib javobni ko'ring. Avval o'zingiz ovoz chiqarib javob bering, keyin tekshiring. 1–3–7–14–30 kun jadvali bilan qaytib turing.
Bobni "o'tdim" deb belgilang faqat uchta shart bajarilganda: rasmni xotiradan chizdingiz, ovoz chiqarib tushuntirdingiz, topshiriq kodi ishladi.