Syscall — foydalanuvchi dasturining operatsion tizim kernelidan himoyalangan xizmat so‘rash mexanizmi. Uning to‘liq nomi system call hisoblanadi.
Ilova hardware, fayl tizimi, process va tarmoq resurslariga to‘g‘ridan-to‘g‘ri nazoratsiz kira olmaydi. Syscall kernelga tekshirilgan kirish nuqtasini beradi.
Fayl ochish, socket yaratish, process ishga tushirish va xotira ajratish syscall orqali bajariladi.
User mode va kernel mode
CPU kamida ikki privilege darajasida ishlaydi.
User mode
Ilova cheklangan huquqda ishlaydi. Kernel xotirasiga va qurilma registerlariga bevosita kira olmaydi.
Kernel mode
Operatsion tizim to‘liq hardware huquqiga ega.
Syscall user mode’dan kernel mode’ga nazoratli o‘tish yaratadi.
Syscall jarayoni
Umumiy jarayon:
- Ilova library funksiyasini chaqiradi.
- Argumentlar register yoki xotiraga joylanadi.
- Syscall raqami belgilanadi.
- Maxsus CPU instruction bajariladi.
- CPU kernel mode’ga o‘tadi.
- Kernel argument va permissionni tekshiradi.
- Amal bajariladi.
- Natija user mode’ga qaytariladi.
Arxitektura va OSga qarab tafsilotlar farq qiladi.
Keng tarqalgan syscalllar
openat— fayl ochish;read— ma’lumot o‘qish;write— ma’lumot yozish;close— descriptor yopish;mmap— xotira mapping;forkyokiclone— process/thread yaratish;execve— yangi dastur yuklash;socket— socket yaratish;connect— ulanish;accept— client qabul qilish;ioctl— device boshqarish.
Nomlar OSga bog‘liq.
Library wrapper
Dastur ko‘pincha syscallni bevosita emas, standard library orqali chaqiradi.
Masalan, C fopen() ichkarida openat, read va boshqa syscalllardan foydalanishi mumkin.
beradi.
Syscall raqami
Kernel har syscallni raqam bilan aniqlaydi.
Raqam CPU arxitekturasi bo‘yicha farq qilishi mumkin.
x86-64 va ARM64da bir xil nomli syscall boshqa raqamga ega bo‘ladi.
Portable dastur raqamni qo‘lda yozmaydi.
Argument tekshiruvi
Kernel user pointerga ko‘r-ko‘rona ishonmaydi.
U:
- manzil user space’dami;
- buffer uzunligi;
- file descriptor;
- permission;
- flag;
- overflow
ni tekshiradi.
Noto‘g‘ri pointer processga xato qaytarishi yoki signal berishi mumkin.
Return value va errno
Syscall muvaffaqiyatli natija yoki xato qaytaradi.
Unix library xatoni errno orqali ko‘rsatishi mumkin.
Misollar:
EACCES— ruxsat yo‘q;ENOENT— fayl topilmadi;EINTR— signal bilan uzildi;EAGAIN— hozir bajarib bo‘lmaydi;ENOMEM— xotira yetarli emas.
Error kodi logda inson tushunadigan matnga aylantiriladi.
Blocking syscall
read() data kelguncha kutishi mumkin.
Thread sleeping holatiga o‘tadi va CPU boshqa ishga beriladi.
Non-blocking flag bo‘lsa, data tayyor emasligida EAGAIN qaytishi mumkin.
Interrupted syscall
Signal blocking syscallni to‘xtatishi mumkin.
Ba’zi syscall avtomatik restart qilinadi, boshqasi EINTR qaytaradi.
Dastur qisman bajarilgan yozuv va qayta urinishni to‘g‘ri boshqaradi.
Syscall overhead
Syscall user-kernel mode o‘tishini talab qiladi.
Overhead tarkibi:
Har bayt uchun syscall qilish samarasiz. Buffering va batching ishlatiladi.
vDSO
Ayrim operatsiyalar kernel mode’ga o‘tmasdan user space’dagi kernel taqdim etgan kod orqali bajarilishi mumkin.
Masalan, vaqtni o‘qish.
Bu virtual dynamic shared object orqali syscall overheadini kamaytiradi.
io_uring
Linux io_uring ko‘p I/O operatsiyasini shared ring buffer orqali yuborish va yakunlanishini olish imkonini beradi.
Bu syscall sonini kamaytirishi va asynchronous I/Oni samarali tashkil qilishi mumkin.
Security va kernel versiyasiga mos boshqaruv talab qilinadi.
Seccomp
Seccomp process qaysi syscalllarni chaqira olishini filtrlashga yordam beradi.
siyosatini qo‘llashi mumkin.
Bu kernel attack surface’ini kamaytiradi.
Strace
Linuxda strace process syscalllarini ko‘rsatadi.
U orqali:
- qaysi fayl ochilyapti;
- permission xatosi;
- network ulanish;
- timeout;
- missing library;
- child process
aniqlanadi.
Tracing performance’ga ta’sir qilishi va maxfiy argumentlarni ko‘rsatishi mumkin.
ABI
Syscall interfeysi kernel va user space orasidagi ABI qismi.
Argument registerlari, raqamlar va struktur layout barqaror bo‘lishi kerak.
Oldingi binary yangi kernelda ishlashi uchun compatibility saqlanadi.
Xavfsizlik
Kernel syscall orqali untrusted input oladi.
Zaifliklar:
- buffer overflow;
- integer overflow;
- use-after-free;
- race;
- permission bypass;
- device ioctl xatosi.
Kernel patch va minimal syscall siyosati muhim.
Diagnostika
Syscall muammosida:
- syscall nomi;
- argument;
- return value;
- errno;
- blocking holat;
- signal;
- permission;
- file descriptor;
- kernel log;
- trace
tekshiriladi.
Ilova “fayl topilmadi” desa, qaysi aniq yo‘l syscallga berilganini tracing ko‘rsatadi.
Syscall va process accounting
Kernel syscall orqali qaysi process qancha CPU, I/O va resurs ishlatayotganini hisobga oladi. Audit tizimi ayrim syscall hodisalarini user, executable va file path bilan yozishi mumkin.
Juda keng audit qoidasi yuqori syscall tezligida katta log va performance xarajati yaratadi. Faqat xavfsizlik uchun kerakli hodisalar tanlanadi.
Syscall batching
readv, writev, sendmmsg kabi interfeyslar bir chaqiriqda bir nechta buffer yoki xabar bilan ishlaydi. Bu user-kernel transition sonini kamaytirib, yuqori trafikdagi throughputni oshiradi.
Process tracing chegarasi
Tracing vositasi syscall argumentida fayl nomi va network manzilini ko‘rsatadi, lekin application ichki biznes mantiqini to‘liq tushuntirmaydi. Syscall trace log va profiler bilan birga tahlil qilinadi.
Bog‘liq tushunchalar
Kernel, User mode, Kernel mode, ABI, File descriptor, Interrupt, Exception, Seccomp, strace, io_uring