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