Chrysalispは、GUI、ターミナル、OOアセンブラ、CScriptコンパイラ、LISPインタープリター、デバイガー、プロフィラー、ベクターフォントエンジンなど、GUI、端末、クラスライブラリ、C-Scriptコンパイラなどの機能を備えた64ビット、MIMD、マルチCPU、マルチスレッド、マルチコア、マルチユーザー並列オペレーティングシステムです。 X64、RISCV64、ARM64のMacOS、Windows、およびLinuxをサポートし、最終的にはBare Metalに移動します。また、さまざまなネットワークトポロジのモデリングと、不均一なホストネットワークに参加するためのChrysalib hub_nodesの使用も可能になります。仮想CPU命令セットと、アセンブラーおよび高レベルの言語用の強力なオブジェクトおよびクラスシステムがあります。関数レベルの動的バインディングとロードと、パイプスタイルのコマンドラインアプリケーション用の馴染みのあるインターフェイスを備えたコマンド端末があります。一般的なLISPのような通訳も提供されています。









#chrysalisp-os:matrix.org for banterにご参加ください。 element.ioルームが推奨されます。
Chrysalispは、MacOS、Windows、Linuxで使用できます。 X64、ARM64、RISCV64 CPUをサポートします。また、インストールプロセスに使用されるVP64ソフトウェアCPUエミュレーターもサポートしていますが、これは-eオプションで使用されます。これは、ランタイムシステムとしてネイティブCPUサポートが現在終了しないプラットフォームで使用できます。実験が行われている間、ホストされた環境で実行されますが、最終的には裸の金属で動作するように移行されます。将来的には、Unikernelアプライアンス用のVMブートイメージと、Webブラウザー内で使用するためのWebAssemblyターゲットを作成する予定です。
Chrysalispは、ポイントツーポイントリンクを使用してさまざまなネットワークトポロジのシミュレーションを可能にします。ネットワーク内の各CPUは別のホストプロセスとして表され、ポイントツーポイントリンクは共有メモリを使用してCPUからCPU、双方向接続をシミュレートします。この設計には、意図的にグローバルなバスベースのネットワーキングは含まれていません。
Chrysalibプロジェクトhttps://github.com/vygr/chrysalibは、IPおよびUSB3/USB2 Prolific Chipを使用して、「コピー」ケーブルを「コピー」して、異種ホストネットワークを作成します。これにより、ユーザーはMacBook、Linux、Windowsマシン、PI4を接続して、独自の開発LANまたはWANネットワークを作成できます。これは非常にクールです。
Chrysalispは、仮想CPU命令セットを使用して、X64、ARM64、RISCV64、またはVP64ネイティブ命令の使用を排除します。現在、ネイティブコードに直接コンパイルしていますが、バイトコードフォームに翻訳され、ランタイム翻訳を使用する機能もあります。
パラメーターの合格のためにレジスタジャグリングの必要性を回避するために、すべての関数がレジスタインターフェイスを定義し、パラメーターソースと宛先はトポロジー種を使用して自動的にマッピングされます。 Dag以外のマッピングが検出された場合、ユーザーは一時的にそれらにアドレスを与えることができます。また、ソフトウェアには、パラメーターを動的に結合した関数、相対アドレス、自動定義の文字列プール、参照、ローカルスタックフレーム値に簡単にバインドできるようにするオペレーターも含まれています。使用されていない出力パラメーターは、アンダースコアで無視できます。
Chrysalispには、アセンブラーだけに限定されないが、高レベルの言語と同じくらい能力がある強力なオブジェクトとクラスシステムがあります。インライン、仮想、最終、静的、およびオーバーライドメソッドを備えた静的クラスまたは仮想クラスの定義を可能にします。 GUIとLISPは、このクラスシステムを使用して構築されています。
関数レベルの動的バインディングと負荷があります。タスクが作成されて分布すると、関数がロードされ、オンデマンドでバインドされます。現在、関数はタスクが配置されているCPUファイルシステムからロードされていますが、将来的には、タスクが作成されたサーバーオブジェクトから来て、必要に応じてネットワーク全体に輸送されます。関数は、同じサーバーオブジェクトを使用するすべてのタスク間で共有されるため、使用するタスクの数に関係なく、関数のコピーが1つだけロードされます。
システム関数は一連の静的クラスを介してアクセスされるため、静的関数の位置を覚える必要性を容易にし、排除し、システムレベルの変更からソースを切り離します。これらの関数のインターフェイス定義は、sys/xxx.incファイルに記載されています。
パイプスタイルのコマンドラインアプリケーション用の馴染みのあるインターフェイスを備えたコマンド端末には、ARGSベクター、Stdin、Stdout、Stderrなどが提供されています。パイプマスターと奴隷の簡単な構築のためのクラス、コマンドラインパイプの任意のネストを備えています。これは並列アプリケーションを作成する最良の方法ではありませんが、ツールの構成に非常に役立ち、馴染みのあるストリームベースのAPIの後ろに通過するすべてのメッセージを隠します。
インタープリターのような一般的なLISPが提供されます。これは、コマンドlispを介してコマンドラインから入手できます。システムタイプ全体(make)を構築するには、最小コンパイルワークロード、または(make-all)を計算して、LISPコマンドプロンプトですべてを実行します。このLISPには、割り当ておよび関数呼び出しコード内でc-scriptコンパイルされた式の混合を可能にするCScriptの「スニペット」機能があります。これらの表現には、初等の最適化パスが存在します。仮想アセンブラとc-scriptコンパイラの両方がLISPで記述されており、 lib/asm/code.inc 、 lib/asm/xxx.inc 、lib/ asm/func.inc 、 lib/ trans/x86_64.inc 、 lib/trans/arm64 。 LISPプリミティブの一部は、LISPクラスの各インスタンスが建設中に実行されるブートスクリプトを介して構築されています。詳細については、クラス/lisp/root.incを参照してください。コンパイルとメイク環境は、すべてのコンパイルと作成コマンドとともに、 LIB/ASM/ASM.INCのLISPコマンドラインツールを介して作成されます。これも、端末から実行されるlispコマンドの各インスタンスに対して実行されます。これを任意の数の追加ファイルで拡張できます。LISPコマンドの後に配置するだけで、 lib/asm/asm/asm.incファイルの後にstdinの処理前に実行されます。
解釈されたLISPでコード化されているため、アセンブラーとコンパイラが遅くなるという考えを理解しないでください。完全に再帰的なプリバウンドブートイメージファイルの作成を含む、ソースからの完全にクリーニングされたシステムビルドは、2014 MacBook Proで2秒程度になります。 0.5秒未満のDEVサイクル(make)および(remake) 。遅くはありません!
ネットワークリンクルーティングテーブルはリンクの起動時に作成され、プロセスは本質的に分散されます。各リンクは最終的にすべてのCPUに到達する洪水充填を開始し、途中ですべてのルートをあるCPUから別のルートにマークしました。すべての最短ルートが見つかり、リンクが無料になり、複数のリンクが並列ルートを越えて同時にルートメッセージを実行できるため、CPUがリンクに割り当てられます。利用可能なルートの使用を最大化するために、宛先で送信および再構築された大きな断片に大きなメッセージが分かれています。
-runコマンドラインオプションは、実験GUI(進行中の作業、 -run gui/gui/gui.lisp )などのCPUの起動に関するタスクを起動します。ネットワーク起動スクリプトを変更して、必要に応じて複数のGUIセッションを実行できます。CPU0以上でGUI boot_cpu_gui起動してみてください。BOOT_CPU_GUI関数でFUNCS.SHをご覧ください! :)
-lコマンドラインオプションはリンクを作成します。現在、最大1000のCPUは許可されていますが、簡単に調整できます。共有メモリリンクファイルは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をご覧ください。
実験的なGUIでは、 SDL2ライブラリをインストールする必要があります。
LinuxでPackage Managerを介してそれらを取得します。
sudo apt-get install libsdl2-dev
またはHomebrew経由でMacで。
brew install sdl2
プラットフォーム固有の指示については、 docs/intro/intro.mdをご覧ください。以下は、OSXおよびLinuxシステム用です。 Windowsには事前に構築されたMain.exeが提供されています。または、必要に応じて自分でコンパイルするようにVisual Studioを構成することができます。
Chrysalispを初めてダウンロードすると、VP64エミュレータブートイメージのみがあります。初めてネイティブブート画像を作成する必要があります。これは、後続のブーツやシステムコンパイルよりも少し遅いですが、SnapShot.zipファイルをできるだけ小さいように保持することができます。
homebrew経由でLinuxまたはMacで
make install
またはWindowsで
install.bat
make
./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]
テキストユーザーインターフェイスベースの完全に接続されたネットワーク。各CPUには、他のすべてのCPUへのリンクがあります。非常に多数のリンクファイルと共有メモリ領域になってしまう可能性があるため、これに注意してください。 CPU 0は、ホストシステムの端子を起動します。
./run.sh [-n num_cpus] [-e] [-b base_cpu]
完全に接続されたネットワーク。各CPUには、他のすべてのCPUへのリンクがあります。非常に多数のリンクファイルと共有メモリ領域になってしまう可能性があるため、これに注意してください。 CPU 0がGUIを起動します。
./run_star.sh [-n num_cpus] [-e] [-b base_cpu]
スター接続ネットワーク。各CPUには、最初のCPUへのリンクがあります。 CPU 0がGUIを起動します。
./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]
リング接続ネットワーク。各CPUには、次のCPUおよび以前のCPUへのリンクがあります。 CPU 0がGUIを起動します。
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
ツリー接続ネットワーク。各CPUには、親CPUへのリンクと最大2人の子供CPUがあります。 CPU 0がGUIを起動します。
./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]
メッシュ接続ネットワーク。各CPUには、4つの隣接するCPUへのリンクがあります。これはトランス圧力メッシュに似ています。 CPU 0がGUIを起動します。
./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]
キューブ接続ネットワーク。各CPUには、6つの隣接するCPUへのリンクがあります。これは、TMS320C40メッシュに似ています。 CPU 0がGUIを起動します。
停止:
./stop.sh
スナップショット:
make snapshot
これにより、ホストディレクトリ構造のみを含むOBJ/ディレクトリのsnapshot.zipファイルが作成されます。
GitHubで上がるよりコンパクトなSnapShot.zipを作成するために使用されます。これは(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