Chrysalisp是一個64位,MIMD,多CPU,多線程,多核,多用戶並行操作系統,具有諸如GUI,terminal,oo opyspler,類庫,C-Scrips Compiler,c-Script Compiler,c-Script Compiler,lisp解釋器,LISP口譯員,Debugger,Profiler,Vectector Font Font Engine等功能。它為X64,RISCV64和ARM64的MACOS,Windows和Linux支持,最終將移至裸金屬。它還允許建模各種網絡拓撲以及Chrysalib Hub_nodes的使用連接異質主機網絡。它具有虛擬CPU指令集以及一個功能強大的對象和類系統,用於彙編器和高級語言。它具有功能級的動態綁定和加載以及帶有管道命令行應用程序熟悉接口的命令終端。還提供了一個類似LISP的解釋器。









加入我們的#chrysalisp-os:matrix.org進行玩笑。 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/USB2多產芯片“複製”電纜創建異構的主機網絡。這允許用戶連接其MacBook,Linux,Windows Machines和Pi4,以創建自己的開發LAN或WAN網絡,這很酷。
Chrysalisp使用虛擬CPU指令集來消除X64,ARM64,RISCV64或VP64本機指令的使用。當前,它直接將其編譯到本機代碼,但它具有將其轉換為字節代碼表單並使用運行時轉換的能力。
為了避免需要進行參數傳遞的寄存器雜耍,所有功能都定義其寄存器接口,並且使用拓撲排序自動映射參數源和目的地。如果檢測到非DAG映射,則用戶可以使用臨時性來解決它們。該軟件還包括運算符,以使參數易於將參數綁定到動態界限,相對地址,自動定義的字符串池,參考和本地堆棧幀值。未使用的輸出參數可以用下劃線忽略。
Chrysalisp具有功能強大的對象和類系統,不僅限於彙編程序,但與高級語言一樣有能力。它允許使用內聯,虛擬,最終,靜態和覆蓋方法定義靜態類或虛擬類。 GUI和LISP是使用此類系統構建的。
它具有功能級的動態綁定和加載。在創建和分發任務時,加載功能並按需綁定。當前,功能是從任務所在的CPU文件系統中加載的,但是將來,它們將來自使用該任務創建並根據需要在網絡上運輸的服務器對象。函數在使用同一服務器對象的所有任務之間共享,因此,無論使用多少任務,都只加載了一個函數副本。
通過一組靜態類訪問系統功能,這使其易於使用,並消除了記住靜態功能位置的需求,並將源源與系統級別的更改解除。這些功能的接口定義可以在sys/xxx.inc文件中找到。
一個帶有熟悉接口的命令終端,用於管道命令行應用程序,由Args Vector,Stdin,Stdout,STDERR等。類,可輕鬆構造管道大師和奴隸,並隨著命令線管道的任意嵌套。儘管這不是創建並行應用程序的最佳方法,但對於工具組成非常有用,並將所有消息掩蓋在基於流的API的後面。
提供了一個通用的LISP解釋器。通過命令lisp從命令行獲得。要構建整個系統類型(make) ,請在LISP命令提示符下計算最小編譯工作負載,或(make-all)來完成所有操作。該LISP具有C-Scrips“摘要”功能,可在分配和函數調用代碼中混合C型complied Expressions。這些表達式存在基本優化通行證。虛擬彙編程序和C-Scrips編譯器均用LISP編寫,以LIB/ASM/code.inc , lib/asm/xxx.inc ,lib /asm/func.inc,lib/ trans/x86_64.inc,lib/trans/trans/trans/trans/arm64.inc和lib/ asm/asm/vp.inc.inc和lib/asm/asm/vp.inc.inc.inc和lib/asm/xxx.inc中。某些LISP原語是通過引導腳本構建的,該腳本的每個實例在構造上運行,有關詳細信息,請參見類/lisp/root.inc 。編譯和製造環境以及所有編譯和製作命令都是通過LIB/ASM/ASM.INC中的LISP命令行工具創建的,此自動又針對從終端運行的lisp命令的每個實例運行。您可以使用任意數量的其他文件擴展此信息,只需將其放在LISP命令之後,它們將在lib/asm/asmm.inc file和stdin處理之前執行。
不要知道由於在解釋的LISP中編碼,彙編程序和編譯器將很慢。來自源的完全清潔的系統構建,包括創建完整的遞歸預裝啟動圖像文件,在2014 MacBook Pro上進行了2秒鐘的訂單!開發週期(make)和(remake)在0.5秒鐘以下。這並不慢!
網絡鏈接路由表是在啟動鏈接時創建的,並且該過程在自然界中分佈,每個鏈接都會啟動洪水填充,最終到達所有CPU,並在途中標記了從一個CPU到另一個CPU的所有路線。找到所有最短的路由,隨著鏈接變得免費,並且多個鏈接可以同時通過並行路由進行路由消息,從而將CPU的消息分配給了一個鏈接。在發送和重建目的地時,大郵件分為較小的片段,以最大程度地利用可用路線。
-run命令行選項啟動了啟動CPU的任務,例如實驗性GUI(正在進行的工作, -run gui/gui/gui.lisp )。您可以將網絡啟動腳本更改以運行多個GUI會話,如果需要,嘗試在CPU 0上啟動GUI,請在funcs.s.sh中查看boot_cpu_gui函數! :)
-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上獲取它們:
sudo apt-get install libsdl2-dev
或在Mac上通過Homebrew。
brew install sdl2
查看有關平台特定說明的docs/intro/intro.md 。以下是OSX和Linux系統。 Windows提供了一個預先構建的Main.exe,或者您可以配置Visual Studio以根據需要進行編譯。
您第一次下載Chrysalisp時,您只會具有VP64仿真器啟動圖像。您必須在第一次創建本機啟動圖像。這比隨後的靴子和系統編譯要慢一些,但允許我們保持快照。 zip文件盡可能小。
如果在Linux或Mac上通過Homebrew:
make install
或在窗戶上
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 0推出了GUI。
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
樹連接的網絡。每個CPU都有指向其父級CPU的鏈接,最多可提供兩個孩子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
這將創建一個僅包含主機目錄結構,預編譯的Windows main_gui.exe和main_tui.exe的OBJ/ Directory的快照文件。
用於創建GitHub上上升的更緊湊的快照。這必須在創建(make-all-platforms) boot_image Set之後!
obj/vp64/VP64/sys/boot_image
obj/x86_64/WIN64/Windows/main_gui.exe
obj/x86_64/WIN64/Windows/main_tui.exe
清潔:
make clean