المرحلة 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)
- التحقق من وجود العملية المستهدفة
- التحقق من عدم وجود رسالة غير مستلمة (لا كتابة فوقية)
- نسخ البيانات من ذاكرة المرسل لصندوق البريد
- إيقاظ المستلم إذا كان Blocked
SYS_RECV(buf_ptr, buf_len) → actual_len
- فحص صندوق البريد
- إذا فيه رسالة: نسخها لذاكرة المستخدم + إرجاع الطول
- إذا ما فيه:
block_current_task()+yield_now()→ حلقة انتظار
تأثير على Scheduler
block_current_task(): تغيير حالة العملية لـ Blockedwake_task(slot): تغيير من Blocked → Ready- Round-Robin يتخطى العمليات Blocked/Exited تلقائياً
ما تبنيه هذه الطبقة
كل مكون في النظام (سائقات، نظام ملفات، شبكة) يعمل كعملية User Space. التواصل بينها عبر IPC — هذا هو جوهر المايكروكيرنل:
[App] ← IPC → [VFS Server] ← IPC → [Disk Driver] ← IPC → [Kernel]