Chrysalisp adalah sistem operasi paralel paralel paralel multi-core, multi-threaded, multi-threaded, multi-threaded, multi-core, multi-pengguna, perakitan OO, perpustakaan kelas, kompiler c-skript, Lisp Interpreter, debugger, profiler, mesin vektor font, dan lainnya. Ini mendukung macOS, windows, dan linux untuk x64, riscv64 dan arm64 dan akhirnya akan pindah ke logam telanjang. Ini juga memungkinkan pemodelan berbagai topologi jaringan dan penggunaan chrysalib hub_nodes untuk bergabung dengan jaringan host yang heterogen. Ini memiliki set instruksi CPU virtual dan objek yang kuat dan sistem kelas untuk perakit dan bahasa tingkat tinggi. Ini memiliki ikatan dan pemuatan dinamis tingkat fungsi dan terminal perintah dengan antarmuka yang akrab untuk aplikasi baris perintah gaya pipa. Interpreter seperti LISP yang umum juga disediakan.









Bergabunglah dengan kami di #Chrysalisp-OS: Matrix.org untuk olok-olok. Ruang element.io direkomendasikan.
Chrysalisp dapat digunakan pada macOS, Windows dan Linux. Mendukung X64, ARM64 dan RISCV64 CPU. Ini juga mendukung emulator CPU perangkat lunak VP64 yang digunakan untuk proses instalasi, tetapi ini dapat digunakan, dengan opsi -e , pada platform di mana tidak ada dukungan CPU asli saat ini keluar, sebagai sistem runtime. Ini berjalan pada lingkungan yang di -host saat eksperimen sedang dilakukan, tetapi pada akhirnya akan dialihkan untuk dijalankan dengan logam telanjang. Di masa depan, saya berencana untuk membuat gambar boot VM untuk peralatan unikernel dan target WebAssembly untuk digunakan dalam browser web.
Chrysalisp memungkinkan simulasi berbagai topologi jaringan yang menggunakan tautan point-to-point. Setiap CPU dalam jaringan direpresentasikan sebagai proses host yang terpisah, dan tautan point-to-point menggunakan memori bersama untuk mensimulasikan koneksi CPU-ke-CPU, dua arah. Desainnya sengaja tidak termasuk jaringan berbasis bus global.
Proyek Chrysalib, https://github.com/vygr/chrysalib, memungkinkan penggunaan kabel IP dan USB3/USB2 Prolific Chip "Salin" untuk membuat jaringan host yang heterogen. Ini memungkinkan pengguna untuk menghubungkan MacBook, Linux, Mesin Windows, dan PI4 mereka untuk membuat jaringan pengembangan LAN atau WAN mereka sendiri, yang cukup keren.
Chrysalisp menggunakan instruksi CPU virtual yang ditetapkan untuk menghilangkan penggunaan instruksi asli x64, ARM64, RISCV64, atau VP64. Saat ini, dikompilasi langsung ke kode asli, tetapi memiliki kemampuan untuk juga diterjemahkan ke formulir kode byte dan menggunakan terjemahan runtime.
Untuk menghindari kebutuhan juggling register untuk lewat parameter, semua fungsi menentukan antarmuka register mereka, dan sumber dan tujuan parameter secara otomatis dipetakan menggunakan jenis topologi. Jika pemetaan non-dag terdeteksi, pengguna dapat mengatasinya dengan sementara. Perangkat lunak ini juga mencakup operator untuk memudahkan untuk mengikat parameter ke fungsi terikat dinamis, alamat relatif, kumpulan string yang ditentukan secara otomatis, referensi, dan nilai bingkai tumpukan lokal. Parameter output yang tidak digunakan dapat diabaikan dengan garis bawah.
Chrysalisp memiliki objek dan sistem kelas yang kuat yang tidak terbatas hanya pada assembler tetapi juga mampu seperti bahasa tingkat tinggi. Ini memungkinkan untuk definisi kelas statis atau kelas virtual dengan metode inline, virtual, final, static, dan override. GUI dan LISP dibangun menggunakan sistem kelas ini.
Ini memiliki ikatan dan pemuatan dinamis tingkat fungsi. Fungsi dimuat dan terikat sesuai permintaan saat tugas dibuat dan didistribusikan. Saat ini, fungsi dimuat dari sistem file CPU di mana tugas berada, tetapi di masa depan, mereka akan berasal dari objek server tempat tugas itu dibuat dan akan diangkut melintasi jaringan sesuai kebutuhan. Fungsi dibagikan di antara semua tugas yang menggunakan objek server yang sama, jadi hanya satu salinan fungsi yang dimuat, terlepas dari berapa banyak tugas yang menggunakannya.
Fungsi sistem diakses melalui serangkaian kelas statis, yang membuatnya mudah digunakan dan menghilangkan kebutuhan untuk mengingat lokasi fungsi statis, dan juga memisahkan sumber dari perubahan pada tingkat sistem. Definisi antarmuka untuk fungsi -fungsi ini dapat ditemukan dalam file sys/xxx.inc .
Terminal perintah dengan antarmuka yang akrab untuk aplikasi jalur perintah gaya pipa dilengkapi dengan vektor args, stdin, stdout, stderr dll. Kelas untuk konstruksi mudah dari master dan budak pipa, dengan bersarang sewenang -wenang dari pipa baris perintah. Meskipun ini bukan cara terbaik untuk membuat aplikasi paralel, sangat berguna untuk komposisi alat dan menyembunyikan semua pesan yang melewati API berbasis aliran yang akrab.
Interpreter Lisp Common disediakan. Ini tersedia dari baris perintah, melalui perintah lisp . Untuk membangun seluruh jenis sistem (make) , menghitung beban kerja kompilasi minimum, atau (make-all) untuk melakukan semuanya terlepas, pada prompt perintah LISP. LISP ini memiliki kemampuan C-Script 'Cuplikan' untuk memungkinkan pencampuran ekspresi C-skript C-skript dalam penugasan dan kode panggilan fungsi. Lalu optimal elementer ada untuk ekspresi ini. Baik assembler virtual dan kompiler c-skript ditulis dalam lisp, lihat di lib/asm/code.inc , lib/asm/xxx.inc , lib/asm/func.inc , lib/trans/x86_64.inc , lib/trans/arm64.inc dan lib/asm/vp.inc yang dilakukan. Beberapa primitif Lisp dibangun melalui skrip boot yang setiap contoh dari kelas LISP berjalan pada konstruksi, lihat kelas/lisp/root.inc untuk detailnya. Kompilasi dan membuat lingkungan, bersama dengan semua kompilasi dan membuat perintah dibuat melalui alat baris perintah LISP di lib/asm/asm.inc , sekali lagi mobil ini berjalan untuk setiap instance dari perintah lisp yang dijalankan dari terminal. Anda dapat memperpanjang ini dengan sejumlah file tambahan, cukup letakkan setelah perintah LISP dan mereka akan mengeksekusi setelah file lib/asm/asm.inc dan sebelum pemrosesan stdin.
Jangan dapatkan gagasan bahwa karena diberi kode dalam Lisp yang diartikan, assembler dan kompiler akan lambat. Sistem yang sepenuhnya dibersihkan dari sumber, termasuk pembuatan file boot boot pra-terikat rekursif penuh, mengambil urutan 2 detik pada MacBook Pro 2014! Siklus dev (make) dan (remake) di bawah 0,5 detik. Itu tidak lambat!
Tabel routing tautan jaringan dibuat saat mem -boot tautan, dan prosesnya didistribusikan di alam, setiap tautan memulai isi banjir yang akhirnya mencapai semua CPU dan di sepanjang jalan telah menandai semua rute dari satu CPU ke CPU lainnya. Semua rute terpendek ditemukan, pesan keluar dari CPU ditugaskan ke tautan karena tautan menjadi gratis dan banyak tautan dapat dan melakukan rute pesan melalui rute paralel secara bersamaan. Pesan besar dipecah menjadi fragmen yang lebih kecil saat pengiriman dan direkonstruksi di tujuan untuk memaksimalkan penggunaan rute yang tersedia.
Opsi baris perintah -run meluncurkan tugas untuk booting CPU itu, seperti GUI eksperimental (sebuah pekerjaan yang sedang berlangsung, -run gui/gui/gui.lisp ). Anda dapat mengubah skrip peluncuran jaringan untuk menjalankan lebih dari satu sesi GUI jika Anda mau, coba luncurkan GUI di lebih dari CPU 0, lihat di func.sh di fungsi boot_cpu_gui ! :)
Opsi -l baris perintah membuat tautan, saat ini hingga 1000 CPU diizinkan tetapi itu mudah disesuaikan. File tautan memori bersama dibuat di folder TMP /TMP , jadi misalnya /TMP /000-001 akan menjadi file tautan untuk tautan antara CPU 000 dan 001.
Contoh jaringan yang dilihat dengan PS terlihat seperti ini untuk jaringan mesh 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
Lihatlah docs/intro.md untuk instruksi untuk memulai semua platform yang didukung.
GUI eksperimental mengharuskan pustaka SDL2 untuk diinstal.
Dapatkan mereka melalui manajer paket Anda, di Linux dengan:
sudo apt-get install libsdl2-dev
Atau di Mac melalui homebrew.
brew install sdl2
Lihatlah docs/intro/intro.md untuk instruksi spesifik platform. Berikut ini adalah untuk sistem OSX dan Linux. Windows memiliki Main.exe yang sudah dibangun disediakan, atau Anda dapat mengonfigurasi Visual Studio untuk mengkompilasi sesuatu sendiri jika Anda mau.
Pertama kali Anda mengunduh Chrysalisp Anda hanya akan memiliki gambar boot emulator VP64. Anda harus membuat gambar boot asli untuk putaran pertama kali. Ini sedikit lebih lambat dari sepatu bot berikutnya dan kompilasi sistem tetapi memungkinkan kami untuk menjaga file snapshot.zip sekecil mungkin.
Jika di Linux atau Mac melalui Homebrew:
make install
Atau di windows
install.bat
make
./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]
Antarmuka Pengguna Teks Berbasis jaringan yang sepenuhnya terhubung. Setiap CPU memiliki tautan ke setiap CPU lainnya. Hati -hati dengan ini karena Anda dapat berakhir dengan sejumlah besar file tautan dan daerah memori bersama. CPU 0 meluncurkan terminal ke sistem host.
./run.sh [-n num_cpus] [-e] [-b base_cpu]
Jaringan yang sepenuhnya terhubung. Setiap CPU memiliki tautan ke setiap CPU lainnya. Hati -hati dengan ini karena Anda dapat berakhir dengan sejumlah besar file tautan dan daerah memori bersama. CPU 0 meluncurkan GUI.
./run_star.sh [-n num_cpus] [-e] [-b base_cpu]
Jaringan Terhubung Bintang. Setiap CPU memiliki tautan ke CPU pertama. CPU 0 meluncurkan GUI.
./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]
Jaringan yang terhubung dengan cincin. Setiap CPU memiliki tautan ke CPU berikutnya dan sebelumnya. CPU 0 meluncurkan GUI.
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
Jaringan Terhubung Pohon. Setiap CPU memiliki tautan ke CPU induknya dan hingga dua CPU anak. CPU 0 meluncurkan GUI.
./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]
Jaringan terhubung mesh. Setiap CPU memiliki tautan ke 4 CPU yang berdekatan. Ini mirip dengan jerat transputer. CPU 0 meluncurkan GUI.
./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]
Jaringan Terhubung Kubus. Setiap CPU memiliki tautan ke 6 CPU yang berdekatan. Ini mirip dengan jerat TMS320C40. CPU 0 meluncurkan GUI.
Berhenti dengan:
./stop.sh
Snapshot dengan:
make snapshot
Ini akan membuat file snapshot.zip dari OBJ/ direktori yang hanya berisi struktur direktori host, Windows yang telah dikompilasi sebelumnya Main_GUI.EXE dan MAIN_TUI.EXE PLUS file VP64 BOOT_IMAGE !
Digunakan untuk membuat snapshot.zip yang lebih ringkas yang naik di GitHub. Ini harus terjadi setelah pembuatan (make-all-platforms) set boot_image !
obj/vp64/VP64/sys/boot_image
obj/x86_64/WIN64/Windows/main_gui.exe
obj/x86_64/WIN64/Windows/main_tui.exe
Bersihkan dengan:
make clean