JSIX -это пользовательская многоядерная операционная система X64, которую я строю с нуля. Он далеко не закончен или даже можно использовать (см. Раздел «Статус и дорожную карту» ниже), но все в настоящее время спланированные в настоящее время функции основных ядра теперь внедряются как минимум до сносящего уровня.
Цели проекта проекта:
Современность - Я не заинтересован в разработке для устаревших систем или работа на всем оборудовании. Моя цель - всего 64 -битная архитектура и современное товарное оборудование. В настоящее время это означает, что системы X64 с Nehalem или более новыми процессорами и прошивкой UEFI. (См. Этот список для требуемых в настоящее время функций процессора.) В конце концов я хотел бы поработать над портом AARCH64, отчасти, чтобы заставить себя учитывать зависимые от архитектуры части базы кода.
Модульность - я хотел бы вытащить как можно больше системы в отдельные процессы, в манере Microkernel. Подключение этого состоит в том, чтобы исследовать, где сейчас находятся узкие места такого микрокернела, и позволит ли отказ от устаревшего оборудования отказаться от того, будет ли я менее увяз к традиционным проблемам Microkernel.
Исследование - я действительно в основном делаю это, чтобы весело изучать и исследовать современное развитие ОС. Первоначальные реализации функций могут временно выбрасывать модульную конструкцию, чтобы позволить исследовать соответствующее оборудование.
Примечание об этом названии: это ядро было первоначально названо попкорн, но с тех пор я обнаружил, что проект Popcorn Linux также разрабатывает ядро с этим именем, начался примерно в то же время, что и этот проект. Итак, я переименовал этот ядро jsix (всегда стилизованный JSIX или j6 , никогда не использовался) как дань уважения L4, XV6 и моей замечательной жене.
Следующие основные области функций являются целевыми показателями для разработки JSIX:
Сделанный. Bootloader загружает программы ядра и начальные программы пользователя и устанавливает необходимые аргументы ядра о карте памяти и кадре GOP EFI. Возможные будущие идеи:
Виртуальная память: достаточно. Ядро управляет виртуальной памятью с помощью ряда видов объектов vm_area , представляющих отображенные области, которые могут принадлежать одному или нескольким объектам vm_space , которые представляют целое пространство виртуальной памяти. (Каждый процесс имеет vm_space , как и само ядро.)
Осталось сделать:
Физическое распределение страницы: достаточное. В текущей реализации Allocator Page Allocator используется группа блоков, представляющих в 1GIB областях полезной памяти, как определено загрузчиком. Каждый блок имеет трехуровневую растровую карту, обозначающую бесплатные/используемые/используемые страницы.
Будущая работа:
Достаточный. Глобальный объект планировщика сохраняет отдельные готовые/заблокированные списки на ядро. Ядра периодически пытается сбалансировать нагрузку с помощью кражи работы.
Задачи пользовательского пространства могут создавать потоки, а также другие процессы.
Syscalls: Достаточно. Задачи пользовательского пространства способны делать SYSCALLS в ядро с помощью инструкций Fast Syscall/Sysret. Syscalls, сделанные через libj6 обращаются как к Callee, так и на вызывающий абонент, как стандартные функциональные вызовы Sysv ABI. Реализации обернуты в сгенерированные функции обертки, которые подтверждают запрос, проверяют возможности и находят соответствующие объекты или ручки ядра перед вызовом функций реализации.
МПК: Работает, нуждается в оптимизации. Текущие примитивы IPC:
JSIX использует инструмент Ninja Build и генерирует файлы сборки для него с помощью скрипта configure . Сборка также опирается на пользовательский инструмент Sysroot, который можно загрузить или построить с помощью сценариев в JSIX-OS/Toolchain.
Другие зависимости от сборки:
Сценарий configure имеет некоторые зависимости от питона - их можно установить через pip , хотя рекомендуется это в виртуальной среде Python. Установка через pip также установит ninja .
Система Debian 11 (Bullseye) может быть настроена с необходимыми зависимостями по сборке, выполнив следующие команды из корнета репозитория JSIX:
sudo apt install clang lld nasm mtools python3-pip python3-venv
python3 -m venv ./venv
source venv/bin/activate
pip install -r requirements.txt
peru sync Создайте или загрузите инструмент Sysroot, как упомянуто выше, с JSix-OS/Toolchain, и символизируйте встроенный каталог инструментов как sysroot в корне этого проекта.
# Example if both the toolchain and this project are cloned under ~/src
ln -s ~ /src/toolchain/toolchains/llvm-13 ~ /src/jsix/sysroot После того ninja -C build как настройка инструментов будет настроен, запуск сценария ./configure (см ./configure --help Если у вас установлен qemu-system-x86_64 , сценарий qemu.sh будет запустить JSIX в QEMU -nographic .
Я лично запускаю это либо из настоящей Debian Amd64 Bullseye Machine, либо с установкой Windows WSL Debian Bullseye. Ваш пробег может варьироваться в зависимости от других настроек и дистрибуций.
Теперь у JSIX есть программа test_runner USERPACE, которая запускает различные автоматизированные тесты. Он не включен в сборку по умолчанию, но если вы используете манифест test.yml , он будет построен и может быть запущен с помощью сценария test.sh или сценария qemu.sh
./configure --manifest=assets/manifests/test.yml
if ./test.sh ; then echo " All tests passed! " ; else echo " Failed. " ; fi