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