Chrysalisp представляет собой 64-разрядную, MIMD, многопрофильную, многопоточную, многоядерную, многопользовательскую параллельную операционную систему с такими функциями, как графический интерфейс, терминал, ассемблер OO, классовые библиотеки, компилятор C-Script, интерпретатор LISP, отладь, профилировщик, векторный фонд и многое другое. Он поддерживает MacOS, Windows и Linux для X64, RISCV64 и ARM64 и в конечном итоге перейдет на Bare Metal. Это также позволяет моделировать различные сетевые топологии и использование chrysalib hub_nodes для объединения гетерогенных сетей хост. Он имеет виртуальный набор инструкций процессора и мощную систему объекта и класса для ассемблеров и языков высокого уровня. Он имеет динамическую привязку и загрузку на уровне функции, а также командный терминал со знакомым интерфейсом для приложений командной строки в стиле труб. Также предоставляется обычный лисп-интерпретатор.









Присоединяйтесь к нам по адресу #chrysalisp-os: matrix.org для подшучивания. Element.io Room Рекомендуется.
Chrysalisp можно использовать на macOS, Windows и Linux. Поддерживает процессор X64, ARM64 и RISCV64. Он также поддерживает эмулятор программного процессора VP64, используемый для процесса установки, но это можно использовать с помощью опции -e на платформах, где в настоящее время не выходит поддержка ЦП, как система выполнения. Он работает в размещенной среде, когда экспериментирование проводится, но в конечном итоге он будет переведен, чтобы работать на обнаженном металле. В будущем я планирую создать изображение загрузки виртуальной машины для приборов Unikernem и целевого показателя Webassembly для использования в веб -браузерах.
Chrysalisp позволяет моделировать различные сетевые топологии, использующие ссылки с точки зрения. Каждый процессор в сети представлен в виде отдельного процесса хоста, а ссылки на точка-точка используют общую память для моделирования двухнаправленных соединений ЦП-КПУ. Дизайн намеренно не включает в себя глобальные сети на основе автобусов.
Проект Chrysalib, https://github.com/vygr/chrysalib, позволяет использовать кабели Copy ”Pelitific Chip" USB3/USB2 для создания гетерогенных хост -сетей. Это позволяет пользователям подключать свои MacBook, Linux, Windows Machines и PI4, чтобы создать свои собственные сети разработки или WAN, что довольно круто.
Chrysalisp использует виртуальный набор инструкций процессора для устранения использования нативных инструкций x64, ARM64, RISCV64 или VP64. В настоящее время он собирается непосредственно на собственный код, но имеет возможность также перевести в форму байтового кода и использовать перевод времени выполнения.
Чтобы избежать потребности в жонглировании реестра для передачи параметров, все функции определяют их интерфейс регистра, а источники параметров и направления автоматически отображаются с использованием топологического вида. Если обнаружены не-DAG-отображения, пользователь может обратиться к ним с временным. Программное обеспечение также включает в себя операторы, чтобы облегчить привязку параметров с динамическими связанными функциями, относительными адресами, автоподобными пулами строк, ссылками и значениями локальной кадры стека. Выходные параметры, которые не используются, могут быть проигнорированы подчеркиванием.
Chrysalisp имеет мощную систему объекта и класса, которая не ограничена только ассемблер, но так же способна, как язык высокого уровня. Это позволяет определять статические классы или виртуальные классы с встроенными, виртуальными, конечными, статическими и переопределенными методами. GUI и LISP создаются с использованием этой системы классов.
Он имеет динамическую привязку и нагрузку на уровне функциональных уровней. Функции загружаются и связаны по требованию, поскольку задачи создаются и распределены. В настоящее время функции загружаются из файловой системы ЦП, где находится задача, но в будущем они будут поступать из объекта сервера, с которым была создана задача и будет транспортироваться по всей сети по мере необходимости. Функции используются среди всех задач, которые используют один и тот же объект сервера, поэтому загружается только одна копия функции, независимо от того, сколько задач его использует.
Системные функции доступны через набор статических классов, что облегчает использование и устраняет необходимость запоминания местоположения статической функции, а также отделяет источник из изменений на системном уровне. Определения интерфейса для этих функций можно найти в файлах sys/xxx.inc .
Командный терминал со знакомым интерфейсом для приложений командной строки в стиле труб предоставлен с помощью классов ARGS Vector, Stdin, Stdout, Stderr и т. Д. Для удобного строительства мастеров и рабов с произвольным гнездованием труб командной строки. Хотя это не лучший способ создания параллельных приложений, это очень полезно для состава инструментов и скрывает все сообщения, передающие API на основе знакомых потоков.
Общий LISP, подобный переводчику, предоставляется. Это доступно в командной строке через команду lisp . Чтобы построить весь тип системы (make) , вычисляют минимальную рабочую нагрузку компиляции или (make-all) чтобы сделать все независимо, в командной строке LISP. Этот LISP обладает возможностью C-Script 'Snippets', чтобы позволить смешивание скомпилированных выражений C-Script в коде назначения и функции. Элементарный оптимизация существует для этих выражений. Как виртуальный ассемблер, так и компилятор C-Script написаны в LISP, посмотрите в lib/asm/code.inc , lib/asm/xxx.inc , lib/asm/func.inc , lib/trans/x86_64.inc , lib/arm64.inc и lib/asm/vp.inc для того, как это осуществляется. Некоторые из примитивов LISP построены с помощью сценария загрузки, который каждый экземпляр класса LISP работает на конструкции, для получения подробной информации см. Class/Lisp/Root.inc. Среда компиляции и создания, наряду со всеми командами компиляции и создания, создаются с помощью инструмента командной строки LISP в Lib/ASM/ASM.INC , опять же, этот автомобиль запускается для каждого экземпляра команды lisp , запускаемого из терминала. Вы можете расширить это с помощью любого количества дополнительных файлов, просто поместите их после команды LISP, и они будут выполняться после файла Lib/ASM/ASM.INC и перед обработкой Stdin.
Не понимайте, что из -за того, что из -за того, что его кодируют в интерпретированном LISP, ассемблер и компилятор будет медленным. Полностью очищенная система системы из источника, включая создание полного рекурсивного файла изображения загрузки предварительного привязки, принимает порядок 2 секунды на MacBook Pro 2014 года! Цикл разработки (make) и (remake) при 0,5 секунды. Это не медленно!
Таблицы маршрутизации сетевых ссылок создаются при загрузке ссылки, а процесс распределен по своей природе, каждая ссылка начинает заполнение наводнения, которое в конечном итоге достигает всех процессоров, и по пути отмечает все маршруты от одного процессора к другому. Все самые короткие маршруты найдены, сообщения, выходящие от процессора, назначаются по ссылке, поскольку ссылка становится бесплатной, а несколько ссылок могут одновременно и выполнять сообщения маршрутов по параллельным маршрутам. Большие сообщения разбиваются на меньшие фрагменты при отправке и реконструированы в месте назначения, чтобы максимизировать использование доступных маршрутов.
Параметр командной строки -run запускает задачи при загрузке этого процессора, таких как экспериментальный графический интерфейс (работа в процессе, -run gui/gui/gui.lisp ). Вы можете изменить сценарий запуска сети, чтобы запустить более одного сеанса графического интерфейса boot_cpu_gui ! :)
Опция командной строки -l создает ссылку, в настоящее время до 1000 ЦП разрешено, но это легко настроить. Файлы ссылок на общую память создаются в папке TMP /TMP , поэтому, например, /TMP /000-001 будет файлом ссылки для ссылки между ЦП 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 для начала работы на всех поддерживаемых платформах.
Экспериментальный графический интерфейс требует, чтобы библиотека 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. Вы должны создать нативные загрузочные изображения в первый раз. Это немного медленнее, чем последующие ботинки и компоненты системы, но позволяет нам сохранить файл snapshot.zip максимально небольшим.
Если на Linux или Mac через Homebrew:
make install
Или в окнах
install.bat
make
./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]
Текст пользовательский интерфейс на основе полностью подключенной сети. Каждый процессор имеет ссылки на любой другой процессор. Осторожно с этим, поскольку вы можете получить очень большое количество файлов ссылок и общих областей памяти. ЦП 0 запускает терминал в хост -систему.
./run.sh [-n num_cpus] [-e] [-b base_cpu]
Полностью подключенная сеть. Каждый процессор имеет ссылки на любой другой процессор. Осторожно с этим, поскольку вы можете получить очень большое количество файлов ссылок и общих областей памяти. ЦП 0 запускает графический интерфейс.
./run_star.sh [-n num_cpus] [-e] [-b base_cpu]
Звездная подключенная сеть. Каждый процессор имеет ссылку на первый процессор. ЦП 0 запускает графический интерфейс.
./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]
Кольцо подключенная сеть. Каждый процессор имеет ссылки на следующее и предыдущее процессор. ЦП 0 запускает графический интерфейс.
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
Дерево подключенная сеть. Каждый процессор имеет ссылки на его родительский процессор и до двух дебютных процессоров. ЦП 0 запускает графический интерфейс.
./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]
Сетчатая подключенная сеть. Каждый процессор имеет ссылки на 4 соседних процессора. Это похоже на сетки транспупер. ЦП 0 запускает графический интерфейс.
./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]
Cube Connected Network. Каждый процессор имеет ссылки на 6 соседних процессоров. Это похоже на сетки TMS320C40. ЦП 0 запускает графический интерфейс.
Остановитесь с:
./stop.sh
Снимок с:
make snapshot
Это создаст файл snapshot.zip в каталоге OBJ/ Directory, содержащий только структуры каталога хоста, предварительно скомпилированную Windows main_gui.exe и main_tui.exe плюс файлы vp64 boot_image !
Используется для создания более компактного снимка , который поднимается на GitHub. Это должно произойти после создания (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