Chrysalisp는 GUI, 터미널, OO 어셈블러, 클래스 라이브러리, C- 스크립트 컴파일러, LISP 통역사, 디버거, 프로파일 러, 벡터 폴트 엔진 등과 같은 기능을 갖춘 64 비트, MIMD, 멀티 CPU, 멀티 스레드, 멀티 코어, 다중 사용자 병렬 운영 체제입니다. X64, RISCV64 및 ARM64 용 MacOS, Windows 및 Linux를 지원하며 결국 베어 메탈로 이동합니다. 또한 다양한 네트워크 토폴로지의 모델링과 chrysalib hub_nodes를 사용하여 이종 호스트 네트워크에 가입 할 수 있습니다. 가상 CPU 명령 세트와 어셈블러 및 고급 언어를위한 강력한 객체 및 클래스 시스템이 있습니다. 기능 수준의 동적 바인딩 및 로딩과 파이프 스타일 명령 줄 애플리케이션에 익숙한 인터페이스가있는 명령 터미널이 있습니다. 일반적인 LISP와 같은 통역사도 제공됩니다.









Banter의 #chrysalisp-os : matrix.org에서 우리와 함께하십시오. element.io room 추천.
Chrysalisp는 MacOS, Windows 및 Linux에서 사용할 수 있습니다. X64, ARM64 및 RISCV64 CPU를 지원합니다. 또한 설치 프로세스에 사용되는 VP64 소프트웨어 CPU 에뮬레이터를 지원하지만, 이는 현재 CPU 지원이 현재 종료되지 않는 플랫폼에서 -e 옵션과 함께 런타임 시스템으로 사용할 수 있습니다. 실험이 완료되는 동안 호스팅 된 환경에서 실행되지만 결국 베어 메탈에서 작동하도록 전환됩니다. 앞으로는 Unikernel Appliances 용 VM 부팅 이미지와 웹 브라우저 내에서 사용하기위한 WebAssembly 대상을 만들 계획입니다.
Chrysalisp는 포인트 투 포인트 링크를 사용하여 다양한 네트워크 토폴로지의 시뮬레이션을 허용합니다. 네트워크의 각 CPU는 별도의 호스트 프로세스로 표시되며 지점 간 링크는 공유 메모리를 사용하여 CPU-to-CPU, 양방향 연결을 시뮬레이션합니다. 의도적으로 디자인에는 글로벌 버스 기반 네트워킹이 포함되지 않습니다.
Chrysalib 프로젝트 인 https://github.com/vygr/chrysalib을 사용하면 IP 및 USB3/USB2 Prolific Chip "Copy"케이블을 사용하여 이종 호스트 네트워크를 생성 할 수 있습니다. 이를 통해 사용자는 MacBook, Linux, Windows Machines 및 PI4를 연결하여 자체 개발 LAN 또는 WAN 네트워크를 만들 수 있습니다.
Chrysalisp는 X64, ARM64, RISCV64 또는 VP64 기본 명령의 사용을 제거하기 위해 가상 CPU 명령어를 사용합니다. 현재는 기본 코드로 직접 컴파일하지만 바이트 코드 양식으로 변환하고 런타임 변환을 사용할 수 있습니다.
매개 변수 전달에 대한 레지스터 저글링이 필요하지 않도록 모든 기능은 레지스터 인터페이스를 정의하고 매개 변수 소스와 대상은 토폴로지 정렬을 사용하여 자동으로 매핑됩니다. 비게그 매핑이 감지되면 사용자는 임시로 주소를 처리 할 수 있습니다. 또한 소프트웨어에는 파라미터를 동적 결합 함수, 상대 주소, 자동 정의 된 문자열 풀, 참조 및 로컬 스택 프레임 값에 쉽게 바인딩 할 수있는 연산자가 포함되어 있습니다. 사용되지 않은 출력 매개 변수는 밑줄로 무시할 수 있습니다.
Chrysalisp는 어셈블러에만 국한되지는 않지만 높은 수준의 언어만큼이나 능력이있는 강력한 객체 및 클래스 시스템을 가지고 있습니다. 인라인, 가상, 최종, 정적 및 재정의 메소드가있는 정적 클래스 또는 가상 클래스의 정의를 허용합니다. GUI 및 LISP는이 클래스 시스템을 사용하여 구축되었습니다.
함수 수준 동적 바인딩 및 하중이 있습니다. 작업이 생성되고 배포 될 때 기능이로드되고 요청됩니다. 현재 기능은 작업이 위치한 CPU 파일 시스템에서로드되지만 향후에는 작업이 생성 된 서버 객체에서 나와 필요에 따라 네트워크를 통해 전송 될 것입니다. 함수는 동일한 서버 객체를 사용하는 모든 작업 중에서 공유되므로 사용하는 작업 수에 관계없이 함수의 사본 하나만로드됩니다.
시스템 기능은 정적 클래스 세트를 통해 액세스하여 사용하기 쉽고 정적 기능 위치를 기억할 필요가 없으며 시스템 수준의 변경 사항에서 소스를 분리합니다. 이러한 기능의 인터페이스 정의는 SYS/XXX.INC 파일에서 찾을 수 있습니다.
파이프 스타일 라인 애플리케이션에 익숙한 인터페이스가있는 명령 터미널에는 Args Vector, Stdin, Stdout, Stderr 등이 제공됩니다. 이것이 병렬 응용 프로그램을 만드는 가장 좋은 방법은 아니지만 도구 구성에 매우 유용하며 친숙한 스트림 기반 API 뒤에 전달되는 모든 메시지를 숨 깁니다.
통역사와 같은 일반적인 LISP가 제공됩니다. 명령 줄에서 명령 lisp 통해 사용할 수 있습니다. 전체 시스템 유형 (make) 을 빌드하려면 LISP 명령 프롬프트에서 최소 컴파일 워크로드를 계산하거나 모든 것을 수행하도록 (make-all) . 이 LISP에는 할당 및 기능 호출 코드 내에서 C- 스크립트 컴파일 표현식을 혼합 할 수있는 C 스크립트 '스 니펫'기능이 있습니다. 이러한 표현식에는 기본 최적화 패스가 있습니다. 가상 어셈블러 및 C 스크립트 컴파일러는 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.inc 이 방법을 수행합니다. LISP 프리미티브 중 일부는 LISP 클래스의 각 인스턴스가 구성시 실행되는 부팅 스크립트를 통해 구성됩니다. 자세한 내용은 클래스/LISP/root.inc를 참조하십시오. 컴파일 및 메이크 환경과 함께 모든 컴파일 및 Make 명령은 LIB/ASM/ASM.INC 의 LISP 명령 줄 도구를 통해 작성되며,이 자동은 다시 터미널에서 실행되는 lisp 명령의 각 인스턴스에 대해 실행됩니다. 추가 파일을 여러 파일로 확장하고 LISP 명령 후에 배치하면 LIB/ASM/ASM.INC 파일 이후와 STDIN을 처리하기 전에 실행됩니다.
해석 된 LISP에 코딩되어 어셈블러와 컴파일러가 느려질 것이라는 생각을 얻지 마십시오. 완전 재귀 사전 바운드 부팅 이미지 파일 생성을 포함하여 소스에서 완전히 정리 된 시스템 빌드는 2014 MacBook Pro에서 2 초의 순서를 차지합니다! 0.5 초 미만의 Dev Cycle (make) 및 (remake) . 느리지 않아!
네트워크 링크 라우팅 테이블은 링크를 부팅 할 때 생성되며 프로세스는 본질적으로 분포되어 있으며 각 링크는 홍수 채우기를 시작하여 결국 모든 CPU에 도달하고 그 길을 따라 모든 경로를 한 CPU에서 다른 경로로 표시했습니다. 모든 최단 경로가 발견되고, 링크가 링크가 자유롭고 여러 링크가 동시에 병렬 경로를 통해 메시지를 경로로 수행 할 수 있으므로 CPU가 링크에 할당됩니다. 대규모 메시지는 사용 가능한 경로의 사용을 극대화하기 위해 대상에서 보내고 재구성 할 때 작은 조각으로 나뉩니다.
-run Command Line 옵션은 실험 GUI (진행중인 작업, -run gui/gui/gui.lisp )와 같은 CPU 부팅 작업을 시작합니다. 원하는 경우 네트워크 시작 스크립트를 하나 이상의 GUI 세션을 실행하도록 네트워크 시작 스크립트를 변경할 수 있습니다. CPU 0 이상에서 GUI를 시작하십시오. funcs.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에서.
brew install sdl2
플랫폼 특정 지침은 docs/intro/intro.md 를 살펴보십시오. 다음은 OSX 및 Linux 시스템에 대한 것입니다. Windows에는 사전 구축 된 Main.exe가 제공되거나 원하는 경우 직접 컴파일하도록 Visual Studio를 구성 할 수 있습니다.
Chrysalisp를 처음 다운로드하면 VP64 에뮬레이터 부팅 이미지 만 있습니다. 처음으로 기본 부팅 이미지를 만들어야합니다. 후속 부츠와 시스템 컴파일보다 약간 느리지 만 Snapshot.zip 파일을 최대한 작게 유지할 수 있습니다.
Homebrew를 통해 Linux 또는 Mac에있는 경우 :
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에 대한 링크가 있습니다. 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
이렇게하면 호스트 디렉토리 구조, 사전 컴파일 된 Windows main_gui.exe 및 main_tui.exe 와 vp64 boot_image 파일이 포함 된 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