Menu
CoddyTech
flag Ar iconالعربيةdown icon

ما هو الـ Syscall؟

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 31 من 45.

لقد كتبت تعليمات التجميع مثل mov وlea. تُنفَّذ هذه التعليمات مباشرةً على وحدة المعالجة المركزية. لكن ماذا لو احتجت إلى فعل شيء لا تستطيع وحدة المعالجة المركزية فعله بمفردها، مثل الطباعة على الشاشة أو القراءة من لوحة المفاتيح أو إنهاء برنامج؟

في هذه المهام، تحتاج إلى نظام التشغيل (Linux، في هذه الدورة).

ما هو استدعاء النظام؟

إن استدعاء النظام (system call) هو طلب يرسله برنامجك إلى نظام التشغيل. وهو الطريقة التي تطلب بها من نظام التشغيل تنفيذ شيء نيابةً عنك.

لماذا تحتاج إلى استدعاءات النظام:

المهمةهل تستطيع وحدة المعالجة المركزية تنفيذها بمفردها؟هل تحتاج إلى استدعاء نظام؟
جمع عدديننعملا
نقل البيانات بين السجلاتنعملا
طباعة نص على الشاشةلانعم
قراءة إدخال لوحة المفاتيحلانعم
إنهاء برنامجلانعم
فتح ملفلانعم

كيف تعمل استدعاءات النظام:

  1. تضع رقم استدعاء النظام في rax (يُخبر نظام التشغيل بما تريده)
  2. تضع المعاملات في سجلات أخرى (rdi، rsi، rdx، إلخ.)
  3. تنفّذ تعليمة syscall
  1. ينتقل المعالج إلى نواة نظام التشغيل
  2. ينفّذ نظام التشغيل الطلب
  3. يعيد نظام التشغيل التحكم إلى برنامجك

تشبيه:

تخيّل استدعاء النظام (syscall) كأنه الاتصال بمكتب حكومي:

الخطوةالتشبيهفي لغة التجميع
1حدّد الخدمة التي تحتاج إليهااختر رقم استدعاء النظام (ضعه في rax)
2املأ النماذجضع الوسائط في السجلات
3قدّم الطلبنفّذ syscall
4تتولى الحكومة معالجتهتنفّذ نواة نظام التشغيل العمل
5استلم النتيجةيواصل البرنامج التنفيذ

استدعاءات النظام التي ستتعلمها في هذه الدورة:

استدعاء النظامالرقموظيفتهالفصل
exit60ينهي البرنامجالفصل 4
write1يطبع النص على الشاشةالفصل 5

أهم استدعاء نظام في الوقت الحالي: exit

من دون exit، سيستمر برنامجك في العمل إلى الأبد أو سيتعطل. يجب أن ينتهي كل برنامج تكتبه باستدعاء نظام exit.

mov rax, 60    ; رقم syscall للخروج
mov rdi, 0     ; رمز الخروج (0 = نجاح)
syscall        ; اطلب من نظام التشغيل الخروج

جرّب بنفسك

لا يتضمّن هذا الدرس تحدّيًا برمجيًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly