Assembly va Web Serverlar Uchrashuvi: Toza Tizim Dasturlash Sarguzashtlari

Assembly va Web Serverlar Uchrashuvi: Toza Tizim Dasturlash Sarguzashtlari

May 08, 2026 assembly language systems programming web servers arm64 low-level programming http kernel syscalls developer education

Assembly va Veb-serverlar: Tizimlarning Ichki Dunyosiga Sayohat

Biz ko'pincha "nima qilib yasalayotganini bilish" degan gapni eshitamiz. Lekin agar siz o'zingiz sigirni tosh pichoq bilan so'rasangiz nima bo'ladi? Bu ymawky loyihasining ruhini aniq ifodalaydi — macOS uchun ARM64 assembly tilida yozilgan to'liq ishlaydigan statik HTTP server. Hech qanday libc yoki boshqa yordamchi kutubxonalarsiz, sof kuch bilan.

Nega Bunday Qilish Kerak?

Rostini aytsak, nginxni assembly bilan almashtirmaymiz. Lekin 1950-yillardan beri yaratilgan barcha qulayliklarni olib tashlab, veb-server qurish o'ziga xos saboq beradi.

Muallifning maqsadi oddiy: past darajali tizimlar bilan ishlagan odam sifatida, u veb-serverlarning mohiyatini tushunmaganini sezdi. Haqiqiy xavflar nimalar? Qaysi muammolarni hal qilish kerak? Python yoki C dagi abstraktsiyalar ortida nima yashiringan?

Kontaynerli nginx ishlatadigan dunyoda, temir darajasidagi jarayonlarni bilish katta foyda.

Assembly: Go'zal Qattiqqo'llik

Assembly mashina kodlari va inson tushunchasi orasidagi nozik chiziqda turadi. mov x16, #5 yozsangiz, bu sehrli buyruq emas — CPU registriga 5 raqamini joylashtirasiz. Bu syscall Darwin'dagi open() funksiyasiga mos keladi.

Assemblyning og'ir va foydali tomonlari:

Qiyinchiliklari:

  • Xotirani o'zingiz boshqarasiz, avtomatik tozalash yo'q
  • Stringlar — faqat ketma-ket baytlar, tur xavfsizligi yo'q
  • Strukturalar uchun offsetlarni qo'lda hisoblaysiz, bir xato — axlat o'qiysiz
  • Har xatoni CPU flaglari orqali tekshirasiz
  • Bitta xato butun tizimni quldiradi, kompilyator ogohlantirmaydi

Afzalliklari:

  • Har bir CPU ko'rsatmasini ko'rasiz
  • Yashirin xarajatlar yo'q
  • Apparatning harakatini aniq bilasiz
  • Tezlik xususiyatlari shaffof

Assemblyda HTTP so'rovini tahlil qilish kutubxonasiz, bayt-bayt qurasiz. Bu noto'g'ri ma'lumotlar, kodlash muammolari va xavfsizliklarni o'ylashga majbur qiladi.

Sof Syscalllar: Hech Qanday Himoya Yo'q

C dasturlari libc orqali kernel bilan gaplashadi. ymawky buni o'tkazib yuboradi:

mov x16, #5           ; SYS_open raqami
adrp x0, filename@PAGE
add x0, x0, filename@PAGEOFF
mov x1, #0x0         ; O_RDONLY
svc #0x80            ; Kernel chaqiruvi
b.cs open_failed     ; Carry flag bo'lsa xatoga o't

Registrlarga argumentlar qo'yasiz, svc bilan kernelni chaqirasiz, carry flagni tekshirasiz. Xato boshqaruvi yo'q — faqat flag va shartli o'tish.

Bu nozikroq, lekin haqiqiy. Kernel holatni qaytaradi, uni o'zingiz hal qilasiz.

Server Tuzilishi

ymawky klassik fork-on-request modelini ishlatadi:

  1. Socket ochib, portga bog'laydi
  2. Yangi ulanishlarni kutadi
  3. Har ulanishda fork() qilib yangi jarayon yaratadi
  4. U jarayonda HTTP so'rovni qayta ishlaydi

Nega fork?

  • So'rovlar orasida xotira izolyatsiyasi
  • Oddiy kod va fikrlash
  • Xatolikdan oson tiklanish

Kamchiliklari:

  • Katta xotira sarfi (har fork butun jarayonni nusxalaydi)
  • Nginx kabi event-driven modellariga qaraganda zaif parallelizm
  • Yuk ostida kontekst almashinuvi sekinlashtiradi
  • Minglab ulanishlarga chiqmaydi

Tez emas, lekin assemblyda tushunarli. Maqsad shu.

So'rov Jarayonida Nima Bo'ladi

So'rovni qayta ishlashda frameworklarda ko'rmaydigan muammolar chiqadi:

  • Turi aniqlash: GET, POST, PUT kabi so'rovni baytlardan ajratish
  • Yo'l chiqarish: Fayl yo'lini HTTP qatoridan olish
  • URL dekodlash: %20 ni bo'shliikka aylantirish, chekka holatlar
  • Yo'l hujumini oldini olish: ../../../etc/passwd kabi hiylalarga yo'l qo'ymaslik
  • Headerlarni tahlil: Mijoz yuborgan har bir header
  • Range so'rovlari: Katta fayllarni qism-bo'lim bilan yuborish
  • Papka ro'yxati: HTML bilan katalog ko'rsatish
  • Xato sahifalari: 404 uchun mazmunli javob

Python yoki JSda oddiy. Assemblyda har biri kichik loyiha — registrlarni saqlash, stringlarni qo'lda ishlov berish, xatolarni tekshirish.

Nega Zamonaviy Dasturchilar Uchun Muhim

Assembly yozmaysiz, ishlab chiqarish serverini shunda qurmaysiz. Lekin ymawky kodi shuni o'rgatadi: har abstraksiya murakkablikni yashiradi.

Framework HTTPni avtomatik qilsa, kimdir bu muammolarni chuqur bilgan. O'zingiz bilib olsangiz — yaxshi muhandis bo'lasiz.

Bu o'zingiz non pishirish kabi. Doimiy emas, lekin jarayonni bilish ingredientlarni yaxshi ishlatishga yordam beradi.

NameOcean Bilan Bog'liqligi

NameOcean'da DNS, domain boshqaruvi, cloud infratuzilmasi bilan ishlaymiz. Kernel darajasidagi tizimlar, protokollar va syscall chekkalarini bilish yaxshi qarorlar beradi.

Bizning cloud hostingda joylashtirsangiz, domain DNS sozlasangiz yoki SSLni bayt darajasida tushunsangiz, bu fikrlash kerak. Biz narsalarni qanday ishlatishni emas, qanday ishlashini o'rganamiz.

Xulosa

ymawky nginxni yengmaydi. Lekin eng foydasiz loyihalar eng katta saboq beradi. Bu kamtarlik — kundalik vositalarga qancha mehnat ketganini ko'rish — va shaffoflik — apparatning haqiqiy harakatini bilish.

Veb-server so'rovni qanday qayta ishlayotganini bilmoqchi bo'lsangiz, ymawky qattiq, lekin yorqin javob.

Read in other languages:

RU BG EL CS TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN