Skip to content

🚀 init

النوع: Core  |  التسمية: init  |  تاريخ الإنشاء: 23 يونيو 2026 (17:14 GMT+0300)  |  التقنيات: Root, Bootstrap, Memory, Loader

نظرة عامة

حاوية init هي الـ Root Task — أول كود يعمل في مساحة المستخدم (User-space) بعد إقلاع نواة seL4. النواة تُعطيها كل الصلاحيات الابتدائية (Capabilities) والذاكرة الخام (Untyped Memory) عبر هيكل seL4_BootInfo، ثم تتقاعد عن التدخل المباشر.

مسؤوليات init تنقسم لمرحلتين:

  • مرحلة الإقلاع (Bootstrap): تُنشئ وتُشغّل الحاويات التسع بالترتيب الصحيح، وتُوزّع عليها المفاتيح (Endpoints) التي تحتاجها للتواصل. ترتيب الإقلاع: Crypto_Vault → Tor → Disk_Vault → FS_Vault → Auth_Vault → Bus_Vault → Desktop → Input_Vault → Programs.
  • مرحلة التشغيل (Runtime): تتحوّل إلى Program Manager — تستمع على launch_ep لطلبات تشغيل التطبيقات من حاوية Desktop، وتُنشئ مساحة عزل جديدة لكل تطبيق.

كل حاوية تُحمَّل كـ ELF ثنائي مدمج مباشرة في init عبر include_bytes! — صفر تبعيات على نظام ملفات وقت الإقلاع.

الملفات البرمجية

src/main.rs

النقطة الرئيسية للبرنامج. يُعرّف كل حاوية كـ static ثابت من نوع AlignedElf ويُدمج ملفها التنفيذي مباشرة في الذاكرة عبر include_bytes! (محاذاة 4096 بايت). ترتيب الإقلاع في rust_main:

src/program_manager.rs

يُدير عملية تحميل وتشغيل التطبيقات الديناميكية (SVP Packages) من ملف manifest.bin المدمج في PROGRAM_REGISTRY. الدوال الرئيسية:

src/system.rs

يُهيئ الأنظمة الثلاثة الأساسية ويختبرها مباشرة بعد الإقلاع:

src/slot_alloc.rs

مُخصِّص فتحات CNode (CNode Slot Allocator) — الأبسط والأهم في النظام.

src/untyped_alloc/mod.rs

مُخصِّص الذاكرة الخام (Untyped Memory Allocator) — الطبقة الوسيطة بين BootInfo ونواة seL4.

src/loader/mod.rs

المُنسِّق الرئيسي لتحميل ملفات ELF وتشغيل الحاويات. الهيكل ContainerLoader يحمل:

src/loader/paging.rs

بناء هياكل الـ Paging لـ x86_64 (4 مستويات: PML4→PDPT→PD→PT).

src/loader/elf_load.rs

تنفيذ تحميل مقاطع ELF عبر تقنية Scratch Mapping:

src/loader/tcb_setup.rs

المرحلة الأخيرة من تهيئة الحاوية: ربط الذاكرة المشتركة وتشغيل الـ Thread.

src/vault_setup.rs

setup_crypto_vault() — نموذج قياسي لكيفية تشغيل أي حاوية من init. الخطوات الست:

src/auth_setup.rs

setup_auth_vault() — يبني حاوية Auth بنفس الخطوات القياسية، مع خطوتين إضافيتين تُميّزانها:

src/bus_setup.rs

setup_bus_vault() — الأكثر تعقيداً في توزيع الـ Capabilities. يتلقى مؤشرَي fs_ep و auth_ep من init ويُوزّعها داخل CNode الـ Bus:

src/fs_setup.rs

setup_fs_vault() — يُعيد ثلاث قيم: (fs_ep, vspace_cptr, success). إعادة vspace_cptr ضرورية لأن main.rs يحتاجها لاحقاً لربط صفحة الذاكرة المشتركة في VSpace الـ FS.

src/disk_setup.rs

setup_disk_vault() — يُعيد (disk_ep, vspace_cptr, success). يحتوي على الخطوة الأكثر تعقيداً في الإعداد: تفويض صلاحية IOPort.

src/network_setup.rs

setup_tor_router() — يُشغّل حاوية Tor بنفس النمط القياسي مع Scratch address: 0xA00000. ملاحظة: لا توجد Capabilities إضافية تُمرَّر لـ Tor حالياً (الحاوية تُهيئ شبكتها بنفسها عبر smoltcp). نقطة التطوير المستقبلية: تمرير VirtIO-Net endpoint لتفعيل الشبكة الحقيقية.

src/desktop_setup/mod.rs

setup_desktop() — أكثر setup_*() تعقيداً. يُعيد ثلاثة قيم: (init_desktop_ep, launch_ep_cap, success).

جميع الحقوق محفوظة © 2026 RVLB