System Call
সিস্টেম কল
User program-এর kernel-এর সেবা চাওয়ার একমাত্র নিয়ন্ত্রিত দরজা। x86-64-এ `syscall` instruction, ARM64-এ `svc`। খরচ কয়েকশো ন্যানোসেকেন্ড।
also: syscall
x86-64-এ convention:
| Register | কী |
|---|---|
rax | syscall number (ফেরার সময় return value) |
rdi, rsi, rdx, r10, r8, r9 | argument ১–৬ |
লক্ষ্য করুন চতুর্থ argument r10, rcx নয় — যদিও C-র
calling convention rcx ব্যবহার করে। কারণ syscall
instruction নিজেই rcx-এ return address আর r11-এ RFLAGS
রাখে, তাই সেগুলো নষ্ট হয়ে যায়।
Error convention: kernel ঋণাত্মক মান ফেরত দেয়
(-EPERM = -1, -ENOENT = -2…)। libc সেটা দেখে -1
রিটার্ন করে আর errno সেট করে। Raw syscall করলে এই অনুবাদটা
আপনাকেই করতে হয়।
খরচ: সাধারণত ৪০০–৫০০ ns (KPTI চালু থাকলে বেশি) — mode
switch, stack switch, register save/restore। এজন্যই
vDSO আছে: clock_gettime-এর মতো কিছু call kernel-এর
লেখা read-only page থেকে সরাসরি পড়ে, syscall ছাড়াই ~২৩ ns-এ।
strace -c ./program # কোন syscall কতবার