ما هو الـ Syscall؟
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 31 من 45.
لقد كتبت تعليمات التجميع مثل mov وlea. تُنفَّذ هذه التعليمات مباشرةً على وحدة المعالجة المركزية. لكن ماذا لو احتجت إلى فعل شيء لا تستطيع وحدة المعالجة المركزية فعله بمفردها، مثل الطباعة على الشاشة أو القراءة من لوحة المفاتيح أو إنهاء برنامج؟
في هذه المهام، تحتاج إلى نظام التشغيل (Linux، في هذه الدورة).
ما هو استدعاء النظام؟
إن استدعاء النظام (system call) هو طلب يرسله برنامجك إلى نظام التشغيل. وهو الطريقة التي تطلب بها من نظام التشغيل تنفيذ شيء نيابةً عنك.
لماذا تحتاج إلى استدعاءات النظام:
| المهمة | هل تستطيع وحدة المعالجة المركزية تنفيذها بمفردها؟ | هل تحتاج إلى استدعاء نظام؟ |
|---|---|---|
| جمع عددين | نعم | لا |
| نقل البيانات بين السجلات | نعم | لا |
| طباعة نص على الشاشة | لا | نعم |
| قراءة إدخال لوحة المفاتيح | لا | نعم |
| إنهاء برنامج | لا | نعم |
| فتح ملف | لا | نعم |
كيف تعمل استدعاءات النظام:
- تضع رقم استدعاء النظام في
rax(يُخبر نظام التشغيل بما تريده) - تضع المعاملات في سجلات أخرى (
rdi،rsi،rdx، إلخ.) - تنفّذ تعليمة
syscall
- ينتقل المعالج إلى نواة نظام التشغيل
- ينفّذ نظام التشغيل الطلب
- يعيد نظام التشغيل التحكم إلى برنامجك
تشبيه:
تخيّل استدعاء النظام (syscall) كأنه الاتصال بمكتب حكومي:
| الخطوة | التشبيه | في لغة التجميع |
|---|---|---|
| 1 | حدّد الخدمة التي تحتاج إليها | اختر رقم استدعاء النظام (ضعه في rax) |
| 2 | املأ النماذج | ضع الوسائط في السجلات |
| 3 | قدّم الطلب | نفّذ syscall |
| 4 | تتولى الحكومة معالجته | تنفّذ نواة نظام التشغيل العمل |
| 5 | استلم النتيجة | يواصل البرنامج التنفيذ |
استدعاءات النظام التي ستتعلمها في هذه الدورة:
| استدعاء النظام | الرقم | وظيفته | الفصل |
|---|---|---|---|
exit | 60 | ينهي البرنامج | الفصل 4 |
write | 1 | يطبع النص على الشاشة | الفصل 5 |
أهم استدعاء نظام في الوقت الحالي: exit
من دون exit، سيستمر برنامجك في العمل إلى الأبد أو سيتعطل. يجب أن ينتهي كل برنامج تكتبه باستدعاء نظام exit.
mov rax, 60 ; رقم syscall للخروج
mov rdi, 0 ; رمز الخروج (0 = نجاح)
syscall ; اطلب من نظام التشغيل الخروججرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)تدرّب بنفسك: Playground لـ Assembly