Skip to content

المرحلة 6: IPC — تمرير رسائل بين العمليات ​

النتيجة ​

[PID 1] Waiting IPC...       ← المستقبل ينتظر (Blocked)
[PID 2] Message sent!        ← المرسل أرسل رسالة
[exit:0]
[IPC] Hello from PID 2!      ← المستقبل استلم الرسالة!
[exit:0]

التصميم: Mailbox IPC ​

صندوق بريد لكل عملية ​

كل عملية تملك Mailbox واحد يحتوي:

  • data[256]: بيانات الرسالة
  • len: طول الرسالة الفعلي
  • sender_pid: مُعرّف المرسل
  • has_message: هل فيه رسالة بالانتظار

SYS_SEND(dest_pid, msg_ptr, msg_len) ​

  1. التحقق من وجود العملية المستهدفة
  2. التحقق من عدم وجود رسالة غير مستلمة (لا كتابة فوقية)
  3. نسخ البيانات من ذاكرة المرسل لصندوق البريد
  4. إيقاظ المستلم إذا كان Blocked

SYS_RECV(buf_ptr, buf_len) → actual_len ​

  1. فحص صندوق البريد
  2. إذا فيه رسالة: نسخها لذاكرة المستخدم + إرجاع الطول
  3. إذا ما فيه: block_current_task() + yield_now() → حلقة انتظار

تأثير على Scheduler ​

  • block_current_task(): تغيير حالة العملية لـ Blocked
  • wake_task(slot): تغيير من Blocked → Ready
  • Round-Robin يتخطى العمليات Blocked/Exited تلقائياً

ما تبنيه هذه الطبقة ​

كل مكون في النظام (سائقات، نظام ملفات، شبكة) يعمل كعملية User Space. التواصل بينها عبر IPC — هذا هو جوهر المايكروكيرنل:

[App] ← IPC → [VFS Server] ← IPC → [Disk Driver] ← IPC → [Kernel]

تم تطويره بحب بواسطة مجتمع Qtoom.