سيرينا هو نظام تشغيل تجريبي يعتمد على مبادئ التصميم الحديثة مع دعم التزامن وقائي واسع النطاق والعديد من المستخدمين. إن النواة موجهة نحو الكائنات ومصممة لتكون منصة ودليل مستقبلي. يعمل على أنظمة AMIGA مع تثبيت 68030 أو أفضل وحدة المعالجة المركزية.
أحد الجوانب التي يضعها إلى جانب OSS التقليدية القائمة على الخيوط هو أنه مبني بحت حول قوائم الإرسال على حد سواء إلى حد ما على مشابه إلى حد ما لإرسال Grand Central من Apple. لا يوجد أي دعم لإنشاء مؤشرات ترابط في مساحة المستخدم ولا في مساحة kernel. بدلاً من ذلك ، يقوم kernel بتنفيذ مفهوم المعالج الظاهري حيث يدير ديناميكيًا مجموعة من المعالجات الافتراضية. يتم ضبط حجم التجمع تلقائيًا بناءً على احتياجات قوائم انتظار الإرسال ويتم تعيين المعالجات الافتراضية للعمليات حسب الحاجة. يتم تحقيق التزامن جميع kernel ومساحة المستخدم عن طريق إنشاء قوائم قوائم إرسال وإنشاء عناصر العمل لإرسال قوائم الانتظار. عناصر العمل هي ببساطة إغلاق (وظيفة مع الحالة المرتبطة) من وجهة نظر المستخدم.
جانب آخر مثير للاهتمام هو معالجة المقاطعة. الكود الذي يريد الرد على المقاطعة يمكن أن يسجل قرعة العد مع وحدة التحكم في المقاطعة للمقاطعة التي تريد التعامل معها. ستشير وحدة التحكم في المقاطعة إلى الإشارة في كل مرة تحدث فيها المقاطعة. يضمن استخدام قرار العد أن الرمز الذي يهتم بالمقاطعة لا يفوت حدوث مقاطعة. تتمثل ميزة ترجمة المقاطعات إلى إشارات في الإشارة إلى أن رمز معالجة المقاطعة يتم تنفيذه في سياق محدد جيدًا وهو نفس النوع من السياق الذي يعمل فيه أي نوع آخر من التعليمات البرمجية. كما أنه يمنح رمز معالجة المقاطعة مزيدًا من المرونة لأنه لا يتعين عليه الرد فورًا على المقاطعة. لم تضيع المعلومات التي حدثت المقاطعة أبدًا ، سواء كان رمز معالج المقاطعة مشغولاً بأشياء أخرى في وقت المقاطعة أم لا.
kernel عمومًا إعادة إدخال. هذا يعني أن المعالجات الافتراضية تستمر في جدولة السياق وتبديلها بشكل استباقي حتى أثناء تنفيذ وحدة المعالجة المركزية داخل النواة. بالإضافة إلى ذلك ، تتوفر مجاملة كاملة لحساب الإشارات ، ومتغيرات الحالة وواجهة برمجة التطبيقات القفل داخل النواة. تشبه واجهة برمجة تطبيقات تلك الكائنات عن كثب ما ستجده في تطبيق مساحة المستخدم لنظام التشغيل التقليدي.
سيرينا تنفذ بنية عملية هرمية مماثلة لـ POSIX. قد تفرخ العملية عددًا من عمليات الأطفال وقد تمرر متغيرات سطر الأوامر والبيئة لأطفالها. تصل العملية إلى موارد الإدخال/الإخراج عبر قنوات الإدخال/الإخراج والتي تشبه واصفات الملفات في POSIX.
هناك نوعان من الاختلافات الملحوظة بين نموذج عملية نمط POSIX ونموذج سيرينا على الرغم من: أولاً بدلاً من استخدام Fork () تليها Exec () لتفرخ عملية جديدة ، يمكنك استخدام وظيفة واحدة في Serena تسمى Process_Spawn (). هذا يجعل عملية التفريخ عملية أسرع بكثير وأقل عرضة للخطأ.
ثانياً ، لا ترث عملية الطفل واصفات ملفات الوالدين بشكل افتراضي. الاستثناء الوحيد هو واصفات الملفات 0 و 1 و 2 التي تمثل تدفقات الإدخال والإخراج الطرفية. هذا النموذج أقل عرضة للخطأ مقارنة بنموذج POSIX حيث يجب أن تكون العملية حريصة على إغلاق واصفات الملفات التي لا ترغب في نقلها إلى عملية الطفل قبل أن تولد الطفل. كان القيام بذلك سهلاً في الأيام الأولى من UNIX عندما كانت التطبيقات محتوية على نفسها إلى حد كبير وعندما لم يكن هناك دعم للمكتبات الديناميكية. إنه عكس ذلك اليوم لأن التطبيقات أكثر تعقيدًا بكثير وتعتمد على العديد من مكتبات الطرف الثالث.
تنسيق الملف القابل للتنفيذ في هذا الوقت هو تنسيق ملف Atari St Gemdos والذي يعد قريبًا بالنسبة للتنسيق القابل للتنفيذ. سيتم استبدال تنسيق الملف هذا في النهاية بتنسيق ملف يمكنه دعم المكتبات الديناميكية. ومع ذلك الآن ، من الجيد بما يكفي لإنجاز المهمة.
ينفذ kernel Serenafs وهو نظام ملفات هرمي مع أذونات ومعلومات المستخدم والمجموعة. قد يتم تثبيت نظام الملفات فوق دليل موجود في نظام ملفات آخر لتوسيع مساحة اسم الملف. كل هذا يعمل مشابهًا لكيفية عمله في أنظمة Posix. يمكن أن تحدد العملية التي تريد أن تفرخ عملية الطفل أن عملية الطفل يجب أن تقتصر على شجرة فرعية من مساحة اسم نظام الملفات العالمية.
نظام ملفات التمهيد يعتمد حاليًا على ذاكرة الوصول العشوائي. يحتوي ROM على صورة القرص التي يتم إنشاؤها باستخدام أداة Diskimage والتي تعمل كقالب لقرص RAM. يتم نسخ صورة قرص ROM هذه إلى ذاكرة الوصول العشوائي في وقت التمهيد.
مساحة المستخدم لديها دعم لـ LIBC و LIBSYSTEM و LIBCLAP وبدايات LIBM للغاية. Libsystem هي مكتبة تنفذ جانب مساحة المستخدم من واجهة kernel. LibClap هي مكتبة تنفذ تحليل الوسيطة لبرامج واجهة سطر الأوامر.
سيرينا OS تأتي مع قذيفة تنفذ لغة قذيفة محددة رسميا. يمكنك العثور على مستند Shell هنا.
يتم تنفيذ خدمات kernel التالية في هذا الوقت:
تتوفر خدمات مساحة المستخدم التالية في هذا الوقت:
تتوفر برامج مساحة المستخدم التالية في هذا الوقت:
يختلف مستوى الاكتمال وصحة الوحدات المختلفة قليلاً في هذا الوقت. من المقرر أن تتحسن الأمور بشكل عام مع مرور الوقت :)
يتم دعم الأجهزة التالية في هذا الوقت:
يعد إعداد المشروع للتطوير وتشغيل نظام التشغيل متورطًا بعض الشيء. الإرشادات أدناه مخصصة لـ Windows ولكن يجب أن تعمل إلى حد كبير على Linux و MacOS.
أول شيء ستحتاج إليه هو محاكي كمبيوتر Amiga. أنا أستخدم Winuae الذي يمكنك تنزيله من https://www.winuae.net/download
قم بتنزيل مثبت Winuae وقم بتشغيله. سيضع هذا المحاكي داخل دليل "ملفات البرامج" على محرك التشغيل الخاص بك.
قم بتنزيل وتثبيت برنامج التحويل البرمجي ومجمع VBCC اللازم لإنشاء نظام التشغيل. يمكنك العثور على الصفحة الرئيسية للمشروع في http://www.compilers.de/vbcc.html وصفحة التنزيل للأدوات على http://sun.hasenbraten.de/vbcc.
الإصدار الذي أستخدمه في تطوري وأعلم أنه يعمل بشكل صحيح على نظام التشغيل Windows 11 هو 0.9H. تأكد من إضافة متغير بيئة مع اسم VBCC الذي يشير إلى مجلد VBCC على القرص الخاص بك وإضافة مجلد vbccbin إلى متغير بيئة PATH .
لاحظ أنك تحتاج إلى تثبيت أدوات Microsoft Visual Studio و Line Line نظرًا لأن Microsoft Cسل مطلوب لإنشاء أدوات الإنشاء على Windows.
أخيرًا ، قم بتثبيت GNU Make for Windows وتأكد من أنه في متغير بيئة PATH . طريقة مباشرة إلى الأمام للقيام بذلك هي تنفيذ أمر Winget التالي في نافذة Shell: winget install GnuWin32.Make .
ما عليك سوى تنفيذ هذه الخطوة مرة واحدة وقبل أن تحاول إنشاء نظام التشغيل. الغرض من هذه الخطوة هو بناء بعض الأدوات اللازمة لبناء مكتبات مساحة المستخدم ومساحة المستخدم. يمكنك العثور على وثائق لهذه الأدوات هنا.
افتح أولاً موجه أوامر المطور في محطة Windows ثم CD في مجلد Serena/Tools . اكتب make واضغط على العودة. سيؤدي ذلك إلى إنشاء جميع الأدوات المطلوبة ووضعها داخل مجلد Serena/build/tools . سيتم الاحتفاظ بالأدوات في هذا الموقع حتى لو قمت بتنظيف كامل لمشروع نظام التشغيل.
افتح مجلد Project Serena في Visual Studio Code وحدد Build All من Run Build Task... القائمة. سيؤدي ذلك إلى إنشاء kernel و libsystem و libc و libm و shell وإنشاء ملف Serena.rom واحد داخل Serena/product/Kernel/ folder. يحتوي ملف ROM هذا على kernel ومكتبات مساحة المستخدم والقذيفة.
أولاً ، ستحتاج إلى إنشاء تكوين Amiga مع وحدة المعالجة المركزية 68030 على الأقل (أي Amiga 3000 أو 4000) في Winuae إذا لم تكن قد قمت بالفعل. أسهل طريقة للقيام بذلك هي الانتقال إلى Quickstart واختيار A4000 كنموذج. ثم انتقل إلى صفحة الأجهزة/ROM وقم بتحديث حقل نص "ملف ROM الرئيسي" بحيث يشير إلى ملف Serena.rom داخل Serena/build/product/ Folder على القرص الخاص بك. أخيرًا ، امنح Amiga الظاهري على الأقل 1 ميجابايت من ذاكرة الوصول العشوائي السريعة عن طريق الانتقال إلى صفحة الأجهزة/ذاكرة الوصول العشوائي وإعداد الإدخال "البطيء" إلى 1 ميغابايت. احفظ هذا التكوين حتى لا تضطر إلى إعادة إنشائه في المرة القادمة التي تريد تشغيل نظام التشغيل.
قم بتحميل التكوين ثم اضغط على زر البدء أو ببساطة انقر فوق النقر المزدوج على التكوين في صفحة التكوينات لتشغيل نظام التشغيل. يجب على المحاكي فتح شاشة تعرض رسالة تمهيد ثم موجه شل. راجع صفحة Shell للحصول على قائمة بالأوامر التي تدعمها Shell.
موزعة تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر LICENSE.txt لمزيد من المعلومات.
Dietmar Planitzer - @LinkedIn
رابط المشروع: https://github.com/dplanitzer/serena