هذا هو نظام هواية صغير للعب مع الأشياء التي لم أفعلها من قبل ... ليس المقصود أن تكون وظيفية أو مفيدة أو آمنة أو موثوقة. من المفترض أن تكون ممتعة تقريبًا.
إذا كنت ترغب في رؤية أحدث الأشياء التي أقوم بها ، تحقق من فرع dev على هذا الريبو. بشكل عام ، يجب أن يجمع master ويدير.
ابدأ في librs (ما يعادل LIBC لهذا المشروع).
user/src/main.rs كبرنامج مثال للمستخدمين.cargo xbuild --target target.jsonالترحيل
memory::paging::map_regionرسالة صفر نسخة مرور ل IPC. لإرسال رسالة ،
أنا أتعامل مع فكرة عدم وجود عمليات على الإطلاق ، فقط dags من الاستمرارية التي قد تختار أو لا تختار نقل قدراتها.
حاليًا ما يزيد قليلاً عن 1500 LOC (لا يشمل التعليقات + تبعيات WhiteSpace +). ليس سيئًا!
إن النواة نفسها تعتمد على الاستمرار ، بدلاً من استخدام شيء مثل kthreads. في الممر الأول ، أنا فقط أجعل الأشياء تعمل. في وقت لاحق ، قد أعود وأجعلها فعالة.
لا يوجد أي استرداد قائم على الموقت في مساحة kernelspace أو مساحة المستخدمين (على الرغم من أن المقاطعات الموقت تحدث حتى تتمكن أجهزة ضبط الوقت من العمل). لا أقفال ، لا توجد روابط متعددة في مساحة المستخدمين. كل عملية تراجعت واحدة قائمة على الاستمرار. يمكن لكل Continuation إرجاع مجموعة من الاستمرارية الإضافية ليتم تشغيلها بأي ترتيب أو خطأ أو لا شيء. يمكن أن تنتظر الاستمرارية أيضًا للأحداث ، مثل I/O أو إنهاء عملية أخرى.
مساحة عنوان واحد. كل شيء يعيش في نفس مساحة العنوان. يتم استخدام بتات إدخال جدول الصفحة لتعطيل أجزاء معينة من مساحة العنوان لبعض الاستمرارية.
كومة نواة صغيرة لتخصيص الذاكرة الديناميكية.
تخصيص الأصدقاء لتخصيص الإطار المادي.
تخصيص الأصدقاء لمناطق مساحة العنوان الافتراضي.
نظام القدرة البسيط لإدارة الوصول إلى الموارد في النظام ، مثل مناطق الذاكرة.
التحول إلى usermode والعودة.
مكالمات النظام عبر تعليمات syscall و sysret .
تحميل ثنائي مستقل عن الموضع كمهمة وضع المستخدم ، وتشغيله ، والخروج عبر syscall.
الآن بعد أن أصبح لدي نواة أساسية تعمل في الغالب ، يمكنني البدء في اللعب مع الأشياء!
الصدأ ، ليلا
rustc 1.45.0-nightly (99cb9ccb9 2020-05-11) llvm-tools-preview COMPONENT عبر rustup component add llvm-tools-preview
cargo xbuild و cargo bootimage عبر cargo install cargo-xbuild bootimage
build-essentials والمواد القياسية: gcc ، make ، ld ، objcopy ، dd
qemu لتشغيل
لبناء وجري
$ cd os2/user
$ cargo xbuild --target x86_64-unknown-elf.json --release
$ cd ../kernel
$ bootimage run يمكن تمرير bootimage اختياريًا --release للبناء الأمثل.