ما هو الـ Syscall؟
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 31 من 45.
لقد كتبت تعليمات تجميع (assembly) مثل mov و lea. تعمل هذه التعليمات مباشرة على وحدة المعالجة المركزية (CPU). ولكن ماذا لو كنت بحاجة إلى القيام بشيء لا تستطيع وحدة المعالجة المركزية القيام به بمفردها — مثل الطباعة على الشاشة، أو القراءة من لوحة المفاتيح، أو إنهاء برنامج ما؟
لهذه المهام، تحتاج إلى نظام التشغيل (لينكس، في هذه الدورة).
ما هو الـ syscall؟
الـ syscall (استدعاء النظام) هو طلب من برنامجك إلى نظام التشغيل. إنه الطريقة التي تطلب بها من نظام التشغيل القيام بشيء ما نيابة عنك.
لماذا تحتاج إلى استدعاءات النظام (syscalls):
| المهمة | هل يمكن للمعالج القيام بذلك بمفرده؟ | هل يحتاج إلى استدعاء نظام؟ |
|---|---|---|
| جمع رقمين | نعم | لا |
| نقل البيانات بين السجلات (registers) | نعم | لا |
| طباعة نص على الشاشة | لا | نعم |
| قراءة إدخال لوحة المفاتيح | لا | نعم |
| الخروج من برنامج | لا | نعم |
| فتح ملف | لا | نعم |
كيفية عمل استدعاء النظام (syscall):
- تضع رقم استدعاء النظام (syscall number) في
rax(يخبر نظام التشغيل بما تريده) - تضع المعاملات (arguments) في سجلات أخرى (
rdi،rsi،rdx، إلخ.) - تقوم بتنفيذ تعليمة
syscall
- تنتقل وحدة المعالجة المركزية (CPU) إلى نواة نظام التشغيل
- يقوم نظام التشغيل بتنفيذ الطلب
- يعيد نظام التشغيل التحكم إلى برنامجك
التشبيه:
فكر في استدعاء النظام (syscall) كأنه اتصال بمكتب حكومي:
| الخطوة | التشبيه | في لغة التجميع (assembly) |
|---|---|---|
| 1 | حدد الخدمة التي تحتاجها | اختر رقم استدعاء النظام (ضعه في rax) |
| 2 | املأ النماذج | ضع المعاملات (arguments) في السجلات (registers) |
| 3 | قدم الطلب | نفذ syscall |
| 4 | الحكومة تعالج الطلب | نواة نظام التشغيل (OS kernel) تقوم بالعمل |
| 5 | احصل على النتيجة | يستمر البرنامج |
استدعاءات النظام التي ستتعلمها في هذه الدورة:
| استدعاء النظام | الرقم | ماذا يفعل | الفصل |
|---|---|---|---|
exit | 60 | ينهي البرنامج | الفصل 4 |
write | 1 | يطبع النص على الشاشة | الفصل 5 |
أهم استدعاء نظام (syscall) في الوقت الحالي: <strong>exit</strong>
بدون exit، سيستمر برنامجك في العمل للأبد أو سيتوقف عن العمل بشكل مفاجئ. يجب أن ينتهي كل برنامج تكتبه باستدعاء نظام exit.
mov rax, 60 ; رقم استدعاء النظام للخروج
mov rdi, 0 ; رمز الخروج (0 = نجاح)
syscall ; طلب الخروج من نظام التشغيلجرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)