Документация
Справочник по nos, который собирается из каталога docs/ репозитория при каждом развёртывании: как устроена каждая подсистема, как собрать, запустить, протестировать и отладить ядро.
С чего начать
ВозможностиВсё, что ядро умеет сегодня, по подсистемам.СборкаСборка нативно и в Docker, arm64, сборки с проверками неопределённого поведения, образ диска, системный образ, BIOS и UEFI.ЗапускQEMU на x86-64 (KVM, TCG, OVMF) и arm64 (HVF), Google Cloud.Установкаnos на сервере: системный образ релиза на разделе через nos-install, однократная загрузка через GRUB сервера, обновление и откат.Реальное железоНоутбук Dell Latitude 5480 и серверы Hetzner EX44 (Intel) и AX41 (AMD).ОтладкаGDB и как достать лог с машины без последовательного порта.Тесты и гейтыСамотесты каждой загрузки, smoke-загрузки и гейт каждой подсистемы — для того, чего smoke-загрузка не заметит.Параметры ядраsmp=, maxcpus=, console=, dhcp=, udpshell=, netconsole=, loglevel= и остальные.
Как это устроено
ЗагрузкаОт GRUB/Multiboot2 и протокола Linux Image до boot: complete на обеих архитектурах и как поднимаются остальные процессоры.Страничная памятьНачальное линейное отображение, настоящая таблица страниц, список свободных страниц, аллокаторы, MMIO и W^X, TLB shootdown.ПланировщикОчереди задач на каждом CPU, переключение контекста, вытеснение, блокировки и балансировка нагрузки.ПрерыванияIDT и IOAPIC, MSI-X, GICv3 и ITS, IPI, NMI, балансировка IRQ, отложенная работа.ПрофилировщикСэмплирование по счётчику производительности или по тику и как читать отчёт profile.HTTPSКак работает wget https://: шов транспорта, rustls в no_std, сертификаты и во что это обходится.Случайные числаПул ChaCha20, источники энтропии, которые находятся на каждой машине, и чего стоит джиттер таймингов.Rust в ядреКак устроены крейты, как сервис ядра попадает в Rust, типы вместо unsafe, карта kcore и как написать драйвер.Файловые системыКорневая ФС и root=, файловый API, что и как пишет драйвер ext2, создание и проверка корневого образа.Загружаемые модулиСервисы ядра на Rust в виде .ko, загружаемые в работающее ядро через insmod: как написать, собрать и загрузить.netblkNVMe-диск, который модуль раздаёт по UDP без копирования в обе стороны, и сравнение с Linux.sshdSSH-сервер в модуле: вход по ключу Ed25519, запуск при загрузке из /etc/rc, какие алгоритмы он поддерживает.ГипервизорГипервизор первого типа из крейтов Rust и выгружаемого модуля: AMD-V и Intel VT-x, гостевые Linux.