Chrysalisp هو نظام تشغيل موازي 64 بت ، MIMD ، متعدد CPU ، متعدد الخيوط ، متعدد النواة ، متعددة المستخدمين مع ميزات مثل واجهة المستخدم الرسومية ، المحطة ، مجمع OO ، مكتبات الفصل ، مترجم C-script ، مترجم LISP ، مصحح ، PROFILER ، محرك خط المتجه ، وأكثر. وهو يدعم MacOS و Windows و Linux لـ X64 و Riscv64 و ARM64 وسيتحرك في النهاية إلى المعدن العاري. كما يسمح بنمذجة طبولوجيا الشبكة المختلفة واستخدام Chrysalib Hub_nodes للانضمام إلى شبكات المضيف غير المتجانسة. يحتوي على مجموعة تعليمات لوحدة المعالجة المركزية الافتراضية ونظام كائن ونظام فئة قوي للمجمع واللغات عالية المستوى. يحتوي على ربط وتحميل ديناميكي على مستوى الوظيفة ومحطة أوامر مع واجهة مألوفة لتطبيقات سطر الأوامر على غرار الأنابيب. يتم توفير مترجم مشترك يشبه LISP.









انضم إلينا في #chrysalisp-os: matrix.org للمزاح. element.io غرفة موصى بها.
يمكن استخدام Chrysalisp على MacOS و Windows و Linux. يدعم X64 و ARM64 و RISCV64 وحدات المعالجة المركزية. كما يدعم محاكي وحدة المعالجة المركزية VP64 المستخدمة في عملية التثبيت ، ولكن يمكن استخدام هذا ، مع خيار -e ، على الأنظمة الأساسية التي لا يوجد فيها دعم وحدة المعالجة المركزية الأصلية حاليًا ، كنظام وقت التشغيل. إنه يعمل على بيئة مستضافة أثناء إجراء التجريب ، ولكن في النهاية سيتم نقلها لتشغيلها على المعدن العاري. في المستقبل ، أخطط لإنشاء صورة التمهيد VM لأجهزة Unikernel وهدف Webassembly للاستخدام داخل متصفحات الويب.
يسمح Chrysalisp بمحاكاة طبولوجيا الشبكة المختلفة باستخدام روابط نقطة إلى نقطة. يتم تمثيل كل وحدة المعالجة المركزية في الشبكة كعملية مضيفة منفصلة ، وتستخدم الروابط من نقطة إلى نقطة الذاكرة المشتركة لمحاكاة اتصالات CPU-to-CPU ، واتصالات ثنائية الاتجاه. لا يشمل التصميم عن قصد الشبكات العالمية القائمة على الحافلات.
يتيح مشروع Chrysalib ، https://github.com/vygr/chrysalib ، استخدام كبلات IP و USB3/USB2 Profific Copy "لإنشاء شبكات مضيفة غير متجانسة. يتيح ذلك للمستخدمين توصيل أجهزة MacBooks و Linux و Windows Machines و PI4 بإنشاء شبكات التطوير الخاصة بهم أو شبكات WAN الخاصة بهم ، وهو أمر رائع.
يستخدم Chrysalisp تعليمات وحدة المعالجة المركزية الافتراضية للتخلص من استخدام تعليمات X64 أو ARM64 أو RISCV64 أو VP64. حاليًا ، يجمع مباشرة إلى التعليمات البرمجية الأصلية ، ولكن لديه القدرة على ترجمتها إلى نموذج رمز البايت واستخدام ترجمة وقت التشغيل.
لتجنب الحاجة إلى التسجيل في تمرير المعلمة ، تحدد جميع الوظائف واجهة التسجيل الخاصة بها ، ويتم تعيين مصادر ووجهات المعلمات تلقائيًا باستخدام نوع طوبولوجي. إذا تم اكتشاف تعيينات غير DAG ، يمكن للمستخدم معالجتها مع مؤقت. يتضمن البرنامج أيضًا المشغلين لتسهيل ربط المعلمات بالوظائف المرتبطة الديناميكية والعناوين النسبية ومجمعات السلسلة المحددة تلقائيًا والمراجع وقيم إطار المكدس المحلي. يمكن تجاهل معلمات الإخراج التي لم يتم استخدامها باستخدام السطح السفلي.
لدى Chrysalisp كائن قوي ونظام فئة لا يقتصر على المجمع فقط ولكنه قادر تمامًا مثل لغة عالية المستوى. يسمح بتعريف الفئات الثابتة أو الفئات الافتراضية ذات الأساليب المضمنة والظاهرية والنهائية والثابتة والتجاوز. تم تصميم واجهة المستخدم الرسومية و LISP باستخدام هذا النظام الفئة.
لديها الربط الديناميكي على مستوى الوظيفة. يتم تحميل الوظائف وربطها عند الطلب حيث يتم إنشاء المهام وتوزيعها. حاليًا ، يتم تحميل الوظائف من نظام ملفات وحدة المعالجة المركزية حيث توجد المهمة ، ولكن في المستقبل ، ستأتي من كائن الخادم الذي تم إنشاؤه مع المهمة وسيتم نقلها عبر الشبكة حسب الحاجة. تتم مشاركة الوظائف بين جميع المهام التي تستخدم كائن الخادم نفسه ، لذلك يتم تحميل نسخة واحدة فقط من وظيفة ، بغض النظر عن عدد المهام التي تستخدمها.
يتم الوصول إلى وظائف النظام من خلال مجموعة من الفئات الثابتة ، مما يجعلها سهلة الاستخدام والقضاء على الحاجة إلى تذكر مواقع الوظائف الثابتة ، وكذلك تفكيك المصدر من التغييرات على مستوى النظام. يمكن العثور على تعريفات الواجهة لهذه الوظائف في ملفات SYS/XXX.INC .
يتم تزويد محطة أوامر مع واجهة مألوفة لتطبيقات سطر أوامر نمط الأنابيب مع Vector Args ، stdin ، stdout ، stderr إلخ. على الرغم من أن هذه ليست أفضل طريقة لإنشاء تطبيقات متوازية ، إلا أنها مفيدة للغاية لتكوين الأدوات واختبئ جميع الرسالة التي تمر خلف واجهة برمجة تطبيقات التدفقات المألوفة.
يتم توفير LISP مثل مترجم مشترك. هذا متاح من سطر الأوامر ، عبر الأمر lisp . لإنشاء نوع النظام بأكمله (make) ، يحسب الحد الأدنى لتجميع العمل ، أو (make-all) للقيام بكل شيء بغض النظر ، في موجه الأوامر LISP. يحتوي هذا LISP على إمكانية C-Script 'Snippets' للسماح بخلط تعبيرات C-script المترجمة في رمز الاتصال بالتعيين ورمز الاتصال. يوجد تمريرة أولية تحسين لهذه التعبيرات. تتم كتابة كل من المجمع الافتراضي ومترجم C-script في LISP ، انظر في lib/asm/code.inc ، lib/asm/xxx.inc ، lib/asm/func.inc ، lib/trans/x86_64.inc ، lib/trans/arm64.inc و lib/asm/vp . يتم إنشاء بعض من Primitives Lisp عبر برنامج نصي تم تشغيل كل مثيل من فئة LISP على البناء ، انظر Class/Lisp/Root.inc للحصول على التفاصيل. يتم إنشاء التجميع وجعل البيئة ، إلى جانب جميع الأوامر المترجمة والعمل عبر أداة سطر الأوامر LISP في lib/asm/asm.inc ، مرة أخرى يتم تشغيل هذا التلقائي لكل مثيل من أمر lisp الذي يتم تشغيله من المحطة. يمكنك تمديد هذا بأي عدد من الملفات الإضافية ، فقط ضعها بعد أمر LISP وسيتم تنفيذها بعد ملف LIB/ASM/ASMINC وقبل معالجة stdin.
لا تحصل على فكرة أنه نظرًا لوجود ترميز في LISP المفسر ، سيكون المولد والبرنامج التحويل البرمجي بطيئًا. بناء نظام تم تنظيفه بالكامل من المصدر ، بما في ذلك إنشاء ملف صورة التمهيد الكامل المربوطة ، يأخذ بترتيب ثانيتين على جهاز MacBook Pro 2014! دورة DEV (make) و (remake) أقل من 0.5 ثانية. انها ليست بطيئة!
يتم إنشاء جداول توجيه ارتباطات الشبكة عند تشغيل رابط ، ويتم توزيع العملية في الطبيعة ، ويبدأ كل رابط في تعبئة الفيضان التي تصل في النهاية إلى جميع وحدة المعالجة المركزية ، وعلى طول الطريق ، تميزت جميع الطرق من وحدة المعالجة المركزية إلى أخرى. تم العثور على جميع أقصر الطرق ، يتم تعيين الرسائل التي تنطلق من وحدة المعالجة المركزية على رابط حيث يصبح الرابط مجانيًا ويمكن للروابط المتعددة القيام بالرسائل على الطرق المتوازية في وقت واحد. يتم تقسيم الرسائل الكبيرة إلى شظايا أصغر عند إرسال وإعادة بنائها في الوجهة لزيادة استخدام الطرق المتاحة إلى الحد الأقصى.
يقوم خيار سطر الأوامر -run بتشغيل المهام على التمهيد الذي وحدة المعالجة المركزية ، مثل واجهة المستخدم الرسومية التجريبية (عمل مستمر ، -run gui/gui/gui.lisp ). يمكنك تغيير البرنامج النصي لإطلاق الشبكة لتشغيل أكثر من جلسة واجهة المستخدم الرسومية إذا أردت ، حاول تشغيل واجهة المستخدم الرسومية على أكثر من وحدة المعالجة المركزية 0 ، انظر في funcs.sh في وظيفة boot_cpu_gui ! سائدا
يخلق خيار سطر الأوامر -l رابطًا ، ويُسمح حاليًا حتى 1000 وحدة المعالجة المركزية ، لكن من السهل ضبط ذلك. يتم إنشاء ملفات ارتباط الذاكرة المشتركة في مجلد TMP /TMP ، لذلك على سبيل المثال /TMP /000-001 سيكون ملف الارتباط للرابط بين CPU 000 و 001.
يبدو أن شبكة مثال يتم عرضها مع PS تبدو على هذا الشبكة شبكة 4x4:
./main_gui -l 011-015 -l 003-015 -l 014-015 -l 012-015
./main_gui -l 010-014 -l 002-014 -l 013-014 -l 014-015
./main_gui -l 009-013 -l 001-013 -l 012-013 -l 013-014
./main_gui -l 008-012 -l 000-012 -l 012-015 -l 012-013
./main_gui -l 007-011 -l 011-015 -l 010-011 -l 008-011
./main_gui -l 006-010 -l 010-014 -l 009-010 -l 010-011
./main_gui -l 005-009 -l 009-013 -l 008-009 -l 009-010
./main_gui -l 004-008 -l 008-012 -l 008-011 -l 008-009
./main_gui -l 003-007 -l 007-011 -l 006-007 -l 004-007
./main_gui -l 002-006 -l 006-010 -l 005-006 -l 006-007
./main_gui -l 001-005 -l 005-009 -l 004-005 -l 005-006
./main_gui -l 000-004 -l 004-008 -l 004-007 -l 004-005
./main_gui -l 003-015 -l 003-007 -l 002-003 -l 000-003
./main_gui -l 002-014 -l 002-006 -l 001-002 -l 002-003
./main_gui -l 001-013 -l 001-005 -l 000-001 -l 001-002
./main_gui -l 000-012 -l 000-004 -l 000-003 -l 000-001 -run gui/gui
ألقِ نظرة على docs/intro.md للحصول على تعليمات للبدء في جميع المنصات المدعومة.
يتطلب واجهة المستخدم الرسومية التجريبية تثبيت مكتبة SDL2 .
احصل عليها عبر مدير الحزمة ، على Linux مع:
sudo apt-get install libsdl2-dev
أو على ماك عبر homebrew.
brew install sdl2
ألقِ نظرة على docs/intro/intro.md للحصول على تعليمات محددة منصة. فيما يلي لأنظمة OSX و Linux. يحتوي Windows على Main.exe المقدم مسبقًا ، أو يمكنك تكوين Visual Studio لتجميع الأشياء بنفسك إذا كنت ترغب في ذلك.
في المرة الأولى التي تقوم فيها بتنزيل chrysalisp ، لن يكون لديك سوى صورة التمهيد المحاكي VP64. يجب عليك إنشاء صور التمهيد الأصلية في المرة الأولى. هذا أبطأ قليلاً من الأحذية اللاحقة وتجميع النظام ولكن يسمح لنا بالحفاظ على ملف snapshot.zip صغير قدر الإمكان.
إذا كان على Linux أو Mac عبر Homebrew:
make install
أو على Windows
install.bat
make
./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]
شبكة مستخدم مستندة إلى شبكة مستندة بالكامل من الشبكة. كل وحدة المعالجة المركزية لها روابط لكل وحدة المعالجة المركزية الأخرى. احذر من هذا حيث يمكنك أن ينتهي بك الأمر بعدد كبير جدًا من ملفات الارتباطات ومناطق الذاكرة المشتركة. تقوم وحدة المعالجة المركزية 0 بإطلاق محطة إلى نظام المضيف.
./run.sh [-n num_cpus] [-e] [-b base_cpu]
شبكة متصلة بالكامل. كل وحدة المعالجة المركزية لها روابط لكل وحدة المعالجة المركزية الأخرى. احذر من هذا حيث يمكنك أن ينتهي بك الأمر بعدد كبير جدًا من ملفات الارتباطات ومناطق الذاكرة المشتركة. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
./run_star.sh [-n num_cpus] [-e] [-b base_cpu]
الشبكة المتصلة النجمة. كل وحدة المعالجة المركزية لديها رابط إلى أول وحدة المعالجة المركزية. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]
الشبكة المتصلة بالحلقة. كل وحدة المعالجة المركزية لها روابط إلى وحدة المعالجة المركزية التالية والسابقة. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
شبكة متصلة شجرة. كل وحدة المعالجة المركزية لها روابط إلى وحدة المعالجة المركزية الأصل وما يصل إلى اثنين من وحدة المعالجة المركزية للطفل. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]
شبكة متصلة شبكة. كل وحدة المعالجة المركزية لها روابط إلى 4 وحدة المعالجة المركزية المجاورة. هذا يشبه شبكات transputer. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]
شبكة متصلة مكعب. كل وحدة المعالجة المركزية لها روابط إلى 6 وحدة المعالجة المركزية المجاورة. هذا مشابه لشبكات TMS320C40. وحدة المعالجة المركزية 0 تطلق واجهة المستخدم الرسومية.
توقف مع:
./stop.sh
لقطة مع:
make snapshot
سيؤدي ذلك إلى إنشاء ملف snapshot.zip الخاص بـ OBJ/ الدليل الذي يحتوي فقط على هياكل دليل المضيف ، وملفات Windows main_gui.exe و main_tui.exe مسبقًا بالإضافة إلى ملفات VP64 boot_image !
تستخدم لإنشاء لقطة أكثر إحكاما. zip التي ترتفع على github. يجب أن يأتي هذا بعد إنشاء مجموعة (make-all-platforms) boot_image !
obj/vp64/VP64/sys/boot_image
obj/x86_64/WIN64/Windows/main_gui.exe
obj/x86_64/WIN64/Windows/main_tui.exe
نظيفة مع:
make clean