ΧρυσαΛησπ

2021-01-15 21:33:55

汇编器/ C-Script / Lisp 64位,MIMD,多CPU,多线程,多核,多用户并行OS。借助GUI,终端,OO汇编程序,类库,C脚本编译器,Lisp解释器,调试器等,...

它可以在MacOS,Windows或Linux(用于x64),MacOS或Linux(用于Aarch64)上运行。最终会转为裸机,但是现在在实验时运行托管非常有用。如果时间允许,我将为UniKerneltype设备创建一个VM引导映像,并为WebAssembly目标创建一个在浏览器中播放的目标。

您可以使用点对点链接对各种网络拓扑进行建模。网络中的每个CPU都被建模为一个单独的主机进程,点对点链接使用共享内存来模拟CPU与CPU,点对点,双向连接。没有故意的基于全球总线的联网。

有一个虚拟CPU指令集可避免使用x64 / ARM本机指令。目前,它可以编译为本机代码,但是没有理由也不能通过字节码形式和运行时转换。

通过使所有函数定义其寄存器接口,并使用拓扑排序自动映射参数源和目标,可以消除用于参数传递的寄存器争用。检测到非DAG映射,因此用户可以根据需要临时断开它们。提供了运算符以简化参数与动态绑定函数,相对地址,自动定义的字符串池,引用和本地堆栈帧值的绑定。可以使用_忽略未使用的输出参数。

有一个强大的对象和类系统,不仅适用于汇编程序,而且还具有高级语言的功能。可以定义具有内联,虚拟,最终,静态和覆盖方法的静态类或虚拟类。 GUI和Lisp是使用此类系统构造的。

它具有功能级别的动态绑定和加载。在创建和分发任务时,将按需加载和绑定各个功能。当前功能是从任务所在的CPU文件系统中加载的,但最终将来自创建任务的服务器对象,并且功能将根据需要通过网络进行传输。功能在共享相同任务的所有任务之间共享服务器对象,无论有多少任务使用该函数,都将立即加载该函数的单个副本。

系统函数的接口以一组静态类的形式提供,从而简化了使用并消除了记住静态函数位置的需要,并且使源与系统级别的更改脱钩。查看sys / xxx.inc文件以查看接口定义。

具有熟悉的管道风格命令行应用程序界面的命令终端提供了args vector,stdin,stdout,stderr等。类用于轻松构造管道主控和从属,并带有任意嵌套的命令行管道。虽然这不是创建并行应用程序的最佳方法,但它对于工具的组合非常有用,并且将所有主题隐藏在熟悉的基于流的API之后。

提供了一个类似于Lisp的通用解释器。这可以从命令行通过lisp命令获得。要构建整个系统类型(make),计算最小的编译工作量,或者在Lisp命令提示符下(make-all)执行所有操作。此Lisp具有C-Script代码段功能,允许在赋值和函数调用代码中混合使用C-Script编译的表达式。这些表达式存在基本的优化过程。虚拟汇编器和C脚本编译器均以Lisp编写,请查看sys / code.inc,sys / func.inc,sys / x64.inc,sys / arm64.inc和sys / vp.inc。 。一些Lisp基元是通过启动脚本构造的,每个Lisp类实例都在构造时运行,有关详细信息,请参见class / lisp / boot.inc。编译和生成环境以及所有编译和生成命令都是通过lib / asm / asm.inc中的Lisp命令行工具创建的,对于从终端运行的lisp命令的每个实例,该运行都会自动运行。您可以使用任意数量的其他文件来扩展它,只需将它们放在lisp命令之后,它们将在lib / asm / asm.inc文件之后和处理stdin之前执行。

不要以为由于在解释的Lisp中进行编码,所以assemblerand编译器的运行速度会很慢。在2014年MacBook Pro上,从源代码完全清理的系统版本(包括创建完整的递归预绑定启动映像文件)的耗时约为2秒!开发周期(make)和(remake)在0.5秒以内。不会慢的!

如果遇到缓冲区溢出错误,可以启用保护页面内存分配器。查看sys / heap / heap.vp文件的alloc函数并启用保护页面版本并使用(remake)进行重建。还可以在main.c文件中启用printf,以便能够从崩溃转储IP计算指令偏移量。然后,您可以将obj / cpu / abi / sys / boot_image加载到任何十六进制转储中,并准确查找出哪条指令出错。有时,这是找到它们的唯一方法!

网络链接路由表是在引导链接时创建的,并且该过程实际上是分布式的,每个链接都会启动泛洪填充,最终填充到所有CPU,并标记了从一个CPU到另一个CPU的所有路由。找到所有最短的路由,当链接变为空闲并且多个链接可以并且同时在并行路由上路由消息时,将从CPU断开的消息分配给该链接。大消息在发送时被分解成较小的碎片,并在目的地进行重构,以最大程度地利用可用路由。

-run命令行选项在启动该CPU时启动任务,例如测试服或实验GUI(正在进行的工作,-run gui / gui / gui.lisp)。您可以更改网络启动脚本以运行多个GUI如果需要会话,请尝试在CPU 0以上启动GUI,在funcs.sh中的boot_cpu_gui函数中查找! :)

-l命令行选项创建一个链接,当前最多允许1000个CPU,但这很容易调整。共享内存链接文件在tmp文件夹/ tmp中创建,因此,例如/ tmp / 000-001将是CPU 000与001之间链接的链接文件。

./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以获得在所有受支持平台上入门的说明。

查看docs / INTRO.md以获取特定于平台的说明。以下是针对OSX和Linux系统的。 Windows已预先提供了main.exe提供,也可以将Visual Studio配置为自己编译。

第一次下载ChrysaLisp时,您只会拥有vp64 emulatorboot映像。您必须在第一轮创建本机启动映像。这比后续的引导和系统编译要慢一些,但允许我们将快照.zip文件保持得尽可能小。

基于文本用户界面的全连接网络。每个CPU都有到其他所有CPU的链接。小心点,因为您可能会得到大量链接文件和共享内存区域。 CPU 0启动主机系统的终端。

完全连接的网络。每个CPU都有到其他所有CPU的链接。小心点,因为您可能会得到大量链接文件和共享内存区域。 CPU 0启动GUI。

星型连接网络。 每个CPU都有到第一个CPU的链接。 CPU 0启动aGUI。 环网连接。 每个CPU都有到下一个和上一个CPU的链接。 CPU0启动GUI。 树状连接的网络。 每个CPU都有到其父CPU和最多两个子CPU的链接。 CPU 0启动GUI。 网状连接网络。 每个CPU都有到4个相邻CPU的链接。 这类似于Transputer网格。 CPU 0启动GUI。 多维数据集连接的网络。 每个CPU都有指向6个相邻CPU的链接。 这类似于TMS320C40网格。 CPU 0启动GUI。 这将创建obj /目录的snapshot.zip文件,其中仅包含目录结构和boot_image文件! 用于创建Github上的更紧凑的snapshot.zip。 这必须在创建(make-all-platforms)boot_image set之后进行!