مخرجات الحاوية الحية
كيفية تطبيق الأمان (Security Policy)
توضيح لكيفية فحص الحاوية لرسائل نظام الملفات والتأكد من الصلاحيات (Token Verification) بطريقة لامركزية.
// في src/main.rs: التأكد من الصلاحيات الأمنية قبل تنفيذ أمر ListDir
let cmd = msg.mr[0]; // 1 = ListDir
match cmd {
1 => {
// ── 🛡️ التحقق من التذكرة الأمنية ──
let token_word = msg.mr[1];
let target_hash = security_policy::hash_path("/home/user");
let badge_obj = security_policy::PolicyBadge::from_badge_word(token_word);
// منع أي تطبيق غير مرخص من رؤية الملفات
if badge_obj.path_hash != target_hash || badge_obj.permission == 0 {
print_str("[FS Vault] SECURITY ALERT: Invalid or missing token!\n");
reply.tag = MessageTag::Err;
return reply;
}
// ... [جلب محتويات مجلد بأمان تام] ...
}
// ...
}أوامر الخادم (IPC Commands)
أوامر نظام الملفات الـ 9 التي يفهمها خادم IPC والمهام التي تؤديها.
الهندسة المعمارية للنظام
RamFS (Zero-Heap In-Memory FS)
يعتمد النظام بشكل أساسي على ملفات وهمية (Virtual) مخزنة بالكامل في الذاكرة (مصفوفة ثابتة بحجم 64 مدخل) لضمان سرعة I/O فائقة جداً (Microsecond Latency) وبدون تخصيص ذاكرة ديناميكي.
المزامنة مع القرص (Disk Flush)
عند إجراء أي تعديل (إنشاء، حذف، تعديل)، يتواصل الخادم مباشرة مع Disk_Vault عبر IPC والذاكرة المشتركة (0x600000) لتخزين القطاعات.
طبقة سياسات الأمان (Security Policy)
كل طلب IPC يُرفق بكلمة مرور (Token Word). يتحقق الخادم (عبر مكتبة security_policy) من الـ Hash للصلاحيات قبل تنفيذ أي أمر مثل ListDir.
بناء الشجرة الافتراضية
عند فشل القراءة من القرص (قرص جديد)، تبني الحاوية فوراً شجرة مسارات افتراضية (/sys, /home/user, /etc, /tmp) وتزرع برامج وهمية واختصارات .vlk لتجربة سطح المكتب.
توثيق الملفات البرمجية المصدريّة
بنية مجلد `src` في مسار `Hasn-Sel4/containers/fs/src` مع تحليل الكود المصدري وعدد الأسطر.
القلب النابض للنظام. يبني شجرة المجلدات، يهيئ البرامج الافتراضية (Calculator و Files)، ويحتوي على حلقة IPC تعالج 9 أوامر، مع تطبيق صارم لسياسات الأمان (PolicyBadge).
PolicyBadge::from_badge_word(token)fs.write_file("/home/user/apps/Calculator", ...)محرك نظام الملفات المكتوب بالكامل بأسلوب no_std & no_alloc. يعتمد على مصفوفة ثابتة تدعم 64 ملفاً/مجلداً كحد أقصى، حجم الملف الأقصى 512 بايت.
entries: [FsEntry; MAX_FILES]Custom byte iterators without SIMDيقوم بمزامنة شجرة RamFS مع القرص الفعلي باستخدام LBA 0 لفهرس المجلد الجذري، وباقي القطاعات للملفات. يتصل بـ Disk_Vault كعميل عبر IPC.
0x600000 (4096 bytes)72 bytes per entry (64 path + 4 sector + 4 size)مشغل (Driver) بدائي لمتحكم Virtio-Block عبر الـ MMIO (يقرأ عناوين 0x10000000). صُمم ليكون طبقة سفلية احتياطية أو لتوسعة وظائف قراءة القطاعات المباشرة.
Magic 0x74726976 ("virt")المكتبات والاعتمادات (Cargo.toml)
الاعتمادات المذكورة في ملف `Cargo.toml` والمسؤولة عن تقديم الوظائف الأساسية.
security-policy
توفر أدوات للتحقق من صلاحيات التطبيقات وتجزئة (Hashing) مسارات الملفات لضمان عدم اختراق العزل.
ipc-sync
مكتبة تمرير الرسائل.
sel4-sys
للتعامل مع نداءات نظام seL4.
talc
مُخصص ذاكرة ديناميكية.
spin
مكتبة لأقفال Spinlocks.
arrayvec
لتوفير سلاسل نصية ومصفوفات ثابتة الحجم بدون Heap Allocation.
