System call — user space’dagi dastur kernel xizmatini so‘rash uchun foydalanadigan nazoratli interfeysdir. Fayl ochish, process yaratish, virtual xotira xaritalash, socket orqali aloqa va vaqt olish kabi operatsiyalar kernel vakolatini talab qiladi. Oddiy function chaqiruvidan farqli ravishda system call privilege boundary’dan o‘tib, kernel mode’da tekshirilgan kodni bajaradi.
Chaqiruv yo‘li
Dastur odatda system call’ni bevosita assembly bilan emas, standard library wrapper orqali chaqiradi. Masalan, read wrapper argumentlarni ABI belgilagan registerlarga joylaydi, system call raqamini beradi va maxsus instruction bilan kernelga o‘tadi. Kernel argumentlarni tekshiradi, kerakli subsistemani ishga tushiradi va natija yoki errorni qaytaradi.
Pointer argument user space manziliga ishora qiladi. Kernel uni ishonchli deb qabul qilmaydi: manzil mavjudligi, permission va uzunlik tekshiriladi, ma’lumot xavfsiz nusxalanadi. Aks holda process kernel xotirasini o‘qishi yoki yozishi mumkin bo‘lardi. System call table va calling convention architecture hamda operatsion tizimga bog‘liq.
Library API bilan munosabat
Har library funksiyasi system call qilmaydi. String uzunligini hisoblash to‘liq user space’da bajariladi. Buffered I/O esa ko‘p kichik yozuvni bitta write system call’ga birlashtirishi mumkin. Aksincha, bitta yuqori darajali operation bir nechta call yaratadi. Shu sababli profiler’da function soni bilan kernel transition soni bir xil emas.
Ba’zi tez-tez o‘qiladigan ma’lumotlar vDSO kabi mexanizm orqali kernelga to‘liq o‘tmasdan olinadi. Memory-mapped I/O’da boshlang‘ich mmap call’dan keyin sahifaga murojaat page fault orqali boshqariladi. Asinxron I/O interface’lari ko‘p operatsiyani batch qilib transition xarajatini kamaytiradi.
Xato va interruption
Unix wrapper muvaffaqiyatsizlikda odatda -1 qaytarib, errnoni o‘rnatadi. Error permission, mavjud bo‘lmagan fayl, noto‘g‘ri descriptor yoki resurs yetishmasligini ajratadi. Signal blocking system call’ni uzishi mumkin; ayrim call avtomatik qayta boshlanadi, boshqalari EINTR beradi. Qisman o‘qish yoki yozish xato emas, consumer qolgan byte’larni qayta ishlashi kerak.
Xavfsizlik va kuzatuv
Kernel har chaqiruvda process credential va resource permissionni tekshiradi. Capability va sandbox system call to‘plami yoki argumentlarini cheklashi mumkin. Linux seccomp allowlistdan tashqari call’ni rad etadi; container esa shu kernelni bo‘lishgani uchun system call surface uning asosiy xavfsizlik chegaralaridan biridir.
Tracing vositalari call nomi, davomiyligi va errorini ko‘rsatib, fayl yoki tarmoq muammosini topadi. Production’da barcha argumentni loglash maxfiy path va payloadni ochishi mumkin. Performance tahlili call chastotasi, context transition va blocking vaqtini o‘lchaydi, so‘ng buffering yoki batching kabi optimallashtirishni dalil asosida qo‘llaydi.
Portativ dasturlash
Application odatda raw system call raqamiga bog‘lanmaydi, chunki raqam va mavjudlik architecture bo‘yicha o‘zgaradi. libc yoki platform API compatibility qatlamini beradi va yangi kernel imkoniyati bo‘lmasa fallback ishlatishi mumkin. Feature detection faqat kernel version stringiga emas, call natijasiga tayanadi. Container ichidagi library host kernel bilan gaplashadi; image’dagi user space yangi, kernel esa eski bo‘lishi mumkin. Sandboxed muhit call mavjud bo‘lsa ham policy sabab ruxsat bermaydi. Error handling ENOSYS, permission va vaqtinchalik resource xatosini ajratadi. Cross-platform library yuqori darajali semantikani birlashtiradi, ammo fayl permission yoki process modeli farqlarini butunlay yashira olmaydi.
Bog‘liq tushunchalar
Kernel, User space, ABI, Interrupt, File descriptor, seccomp, Context switch