معمارية توجيه الرسائل (IPC Routing Flow)
Bus_Vault تأخذ عبء تحويل أمر "Move" إلى (Copy ثم Delete)، وتحتفظ بالـ Clipboard لتخفيف الضغط على نظام الملفات. كما أنها نقطة التفتيش المثالية لإضافة Auth_Vault مستقبلاً، بحيث لا يمر طلب للقرص دون ختم أمني. مخرجات الحاوية الحية
كيف تعمل العمليات المركبة (Macros)
نظرة على كيفية تجميع أمر "نقل الملف" وتحويله لطلبين متتابعين (نسخ ثم حذف) لتبسيط مهام نظام الملفات الأساسي.
// ─────────────────────────────────────────────────────────────────────
// Forward a request to FS_Vault and return its response
// ─────────────────────────────────────────────────────────────────────
fn forward_to_fs(req: &IpcMessage, ipc_buf: *mut usize) -> IpcMessage {
let sender = unsafe { Sender::new(FS_EP_CAP, ipc_buf) };
sender.send_recv(req).unwrap_or(IpcMessage::new(MessageTag::Err))
}
// مثال: كيف تتعامل Bus_Vault مع أمر "نقل الملف" (MoveFile)
MessageTag::MoveFile => {
print("[Bus_Vault] → MoveFile → FS_Vault (Copy + Delete)\n");
// 1- CopyFile
let mut copy_req = IpcMessage::new(MessageTag::CopyFile);
copy_req.payload = req.payload;
copy_req.payload_len = req.payload_len;
copy_req.mr[1] = req.mr[1]; // Source
copy_req.mr[2] = req.mr[2]; // Dest
let copy_resp = forward_to_fs(©_req, ipc_buf);
// 2- DeleteFile (If Copy Succeeds)
if copy_resp.tag == MessageTag::Ok {
let mut del_req = IpcMessage::new(MessageTag::DeleteFile);
del_req.mr[1] = req.mr[1];
forward_to_fs(&del_req, ipc_buf);
}
resp = copy_resp;
}أوامر التوجيه (Routing Tags)
الوظائف والمهام الأساسية
مُوجّه المهام (IPC Router/Broker)
تعمل كـ System Bus مركزي في مساحة المستخدم. بدلاً من منح كل تطبيق صلاحية اتصال (Capability) بـ FS_Vault، تتصل التطبيقات بـ Bus_Vault وهي من يُمرر الطلبات.
إدارة الحافظة المدمجة (In-Process Clipboard)
تحتوي على مصفوفة ثابتة (256 بايت) في الـ User Space لإدارة النسخ واللصق بين تطبيقات النظام، دون الحاجة للوصول إلى نظام الملفات.
العمليات المركبة (Macro IPC Ops)
نواة FS_Vault لا تفهم ما هو "نسخ" أو "نقل". تقوم Bus_Vault بتركيب هذه العمليات عن طريق دمج (Read + Write) للنسخ، و (Copy + Delete) للنقل.
التجريد عالي المستوى (High-Level Abstraction)
تُبسّط العمليات المعقدة للتطبيقات مثل "RegisterApp" الذي يُترجم تلقائياً إلى أمر كتابة ملف تنفيذي في مسار التطبيقات المُعتمد (/home/user/apps/).
مركز التفويض المستقبلي
تمتلك Capability Slot خاص بـ Auth_Vault (Slot 2) لتتحول مستقبلاً إلى بوابة تفتيش (Checkpoint) أمني قبل تمرير أي طلب إلى FS_Vault.
كفاءة الـ No Alloc
لا تستخدم أي ديناميكية لتخصيص الذاكرة (No Heap). تعمل كحلقة وصل خفيفة جداً، حيث تستخدم IPC Buffer كمسار لتمرير الرسائل بدون نسخ الـ Payload.
توثيق الملفات البرمجية
الملف الرئيسي الذي يحتوي على حلقة الخدمة (Event Loop) لجميع خدمات النظام الأساسية. يوزع المهام على الحاويات الأخرى ويحتفظ بحالة الحافظة (Clipboard).
Slot 1 = FS_Vault | Slot 2 = Auth_Vaultstatic mut CLIPBOARD: [u8; 256]دالة forward_to_fs() لتمرير IpcMessage.ملف الاعتماديات. بسيط جداً ولا يعتمد سوى على sel4-sys ومكتبة التواصل الداخلية (ipc-sync).
sel4-sys, ipc-syncغياب كامل لمكتبة Rust القياسية أو أي Allocator.المكتبات والاعتمادات (Dependencies)
حاوية bus هي الأخف وزناً من حيث الاعتماديات — مكتبتان فقط وكلاهما من تطويرنا.
sel4-sys
التخاطب المباشر مع النواة لطباعة الرسائل (print_str) وأي Syscall أساسي.
ipc-sync
توفير الكيانات (Sender و Receiver) لتسهيل استقبال الرسائل من التطبيقات، ثم إعادة إرسالها إلى FS_Vault عبر forward_to_fs().
