JSIX هو نظام تشغيل مخصص متعدد النواة X64 أقوم ببناءه من نقطة الصفر. إنه بعيد عن الانتهاء ، أو حتى قابلاً للاستخدام (انظر قسم الحالة وخريطة الطريق أدناه) ولكن يتم الآن تنفيذ جميع ميزات kernel الرئيسية المخطط لها حاليًا على الأقل إلى مستوى قابل للمرور.
أهداف تصميم المشروع هي:
Modernity - لست مهتمًا بتصميم الأنظمة القديمة ، أو تشغيل جميع الأجهزة هناك. هدفي هو 64 بت فقط البنية ، وأجهزة السلع الحديثة. هذا يعني حاليًا أنظمة X64 مع Nehalem أو CPUs الأحدث والبرامج الثابتة UEFI. (راجع هذه القائمة لميزات وحدة المعالجة المركزية المطلوبة حاليًا.) في النهاية أود العمل على منفذ AARCH64 ، جزئيًا لإجبار نفسي على إخراج الأجزاء المعتمدة على الهندسة المعمارية في قاعدة الكود.
Modularity - أود سحب أكبر عدد ممكن من النظام إلى عمليات منفصلة قدر الإمكان ، بطريقة Microkernel. يتمثل أحد الأهداف الفرعية لهذا في استكشاف المكان الذي توجد فيه اختناقات مثل هذا microkernel الآن ، وما إذا كان تجنب الأجهزة القديمة سيسمح لي بتصميم نظام أقل تعثرًا بسبب مشاكل microkernel التقليدية.
الاستكشاف - أنا في الغالب أفعل هذا لأستمتع بالتعلم واستكشاف تطوير نظام التشغيل الحديث. قد تتمكن تطبيقات الميزات الأولية من التخلص مؤقتًا من التصميم المعياري للسماح باستكشاف الأجهزة ذات الصلة.
ملاحظة حول الاسم: تم تسمية هذه النواة في الأصل Popcorn ، لكنني اكتشفت منذ ذلك الحين أن مشروع Popcorn Linux يقوم أيضًا بتطوير نواة مع هذا الاسم ، في نفس الوقت الذي بدأ فيه هذا المشروع. لذلك قمت بإعادة تسمية هذا kernel jsix (دائمًا على غرار JSIX أو j6 ، لم يتم رسملة أبدًا) كتكريم لـ L4 و XV6 وزوجتي الرائعة.
مجالات الميزات الرئيسية التالية هي أهداف لتطوير JSIX:
منتهي. يقوم جهاز تشغيل Bootloader بتحميل برامج kernel و pacepace الأولية ، ويقوم بإعداد وسائط kernel اللازمة حول خريطة الذاكرة و EFI GOP FrameBuffer. الأفكار المستقبلية المحتملة:
الذاكرة الافتراضية: كافية. تدير kernel الذاكرة الافتراضية مع عدد من أنواع كائنات vm_area التي تمثل المناطق المعينة ، والتي يمكن أن تنتمي إلى كائن واحد أو أكثر من كائنات vm_space التي تمثل مساحة ذاكرة افتراضية كاملة. (كل عملية تحتوي على vm_space ، وكذلك النواة نفسها.)
تبقى للقيام:
تخصيص الصفحة المادية: كافية. يستخدم تطبيق تخصيص الصفحة الفعلية الحالية مجموعة من الكتل التي تمثل مناطق محدثة من الذاكرة القابلة للاستخدام كما هو محدد من قِبل جهاز تحميل التشغيل. كل كتلة لديها صورة نقطية من ثلاثة مستويات تشير إلى صفحات مجانية/مستعملة.
العمل المستقبلي:
كافٍ. يحتفظ كائن الجدولة العالمي بانفصال عن قوائم جاهزة/محظورة لكل قلب. يحاول النوى بشكل دوري موازنة الحمل من خلال سرقة العمل.
مهام مساحة المستخدم قادرة على إنشاء مؤشرات ترابط وكذلك عمليات أخرى.
syscalls: كافية. مهام مساحة المستخدم قادرة على صنع syscalls إلى kernel عبر تعليمات syscall/sysret السريعة. Syscalls التي تم إجراؤها عبر libj6 تنظر إلى كل من Callee و Caller مثل مكالمات وظيفة Sysv ABI القياسية. يتم لف التطبيقات في وظائف التفاف التي تم إنشاؤها والتي تؤكد صحة الطلب ، والتحقق من إمكانات ، والعثور على كائنات kernel المناسبة أو المقابض قبل استدعاء وظائف التنفيذ.
IPC: العمل ، يحتاج إلى التحسين. بدائل IPC الحالية هي:
يستخدم JSIX أداة بناء Ninja ، وينشئ ملفات الإنشاء لها باستخدام البرنامج النصي configure . يعتمد الإنشاء أيضًا على نظام أدوات مخصص ، يمكن تنزيله أو بناؤه باستخدام البرامج النصية في JSIX-OS/Charchain.
تبعيات بناء أخرى:
يحتوي البرنامج النصي configure على بعض تبعيات Python - يمكن تثبيتها عبر pip ، على الرغم من أن القيام بذلك في بيئة افتراضية Python. سيتم تثبيت عبر pip أيضًا تثبيت ninja .
يمكن تكوين نظام Debian 11 (Bullseye) مع تبعيات البناء اللازمة عن طريق تشغيل الأوامر التالية من جذر مستودع JSIX:
sudo apt install clang lld nasm mtools python3-pip python3-venv
python3 -m venv ./venv
source venv/bin/activate
pip install -r requirements.txt
peru sync قم ببناء أو تنزيل نظام الأدوات على النحو المذكور أعلاه مع JSIX-OS/Charchain ، وقم بتوضيح دليل أدوات الأدوات المبني sysroot في جذر هذا المشروع.
# Example if both the toolchain and this project are cloned under ~/src
ln -s ~ /src/toolchain/toolchains/llvm-13 ~ /src/jsix/sysroot بمجرد إعداد مجموعة الأدوات ، سيقوم تشغيل البرنامج النصي ./configure (انظر ./configure --help للخيارات المتاحة) بإعداد تكوين البناء ، وسيقوم ninja -C build (أو في أي مكان وضعت فيه دليل الإنشاء) بتشغيل البناء بالفعل. إذا قمت بتثبيت qemu-system-x86_64 ، فسيقوم برنامج qemu.sh بتشغيل JSIX في وضع QEMU -nographic .
أنا شخصياً أدير هذا إما من جهاز Debian AMD64 Bullseye الحقيقي أو تثبيت Windows WSL Debian Bullseye. قد تختلف الأميال الخاصة بك مع الإعدادات الأخرى والتوزيع.
لدى JSIX الآن برنامج test_runner UsperSpace الذي يدير اختبارات آلية مختلفة. لا يتم تضمينه في الإنشاء الافتراضي ، ولكن إذا كنت تستخدم اختبار test.yml ، فسيتم بنائه ، ويمكن تشغيله باستخدام البرنامج النصي test.sh أو qemu.sh
./configure --manifest=assets/manifests/test.yml
if ./test.sh ; then echo " All tests passed! " ; else echo " Failed. " ; fi