Hacker News Digest

Тег: #opensbi

Постов: 2

Writing an operating system kernel from scratch (popovicu.com) 🔥 Горячее

  • Ядро ОС написано на Zig для RISC-V, одноядерное, с вытесняющей многозадачностью и системными вызовами.
  • Unikernel: приложения линкуются с ядром в один бинарник.
  • OpenSBI обслуживает M-режим; ядро работает в S-режиме, потоки — в U.
  • Потоки статические, бесконечные функции; переключение по таймеру каждые 2 мс.
  • Контекст сохраняется на стеке прерываний; ядро и пользователь разделены.
  • GitHub: popovicu/zig-time-sharing-kernel

by Bogdanp • 14 сентября 2025 г. в 15:44 • 309 points

ОригиналHN

#zig#risc-v#operating-systems#kernels#unikernels#opensbi#qemu#multithreading#system-calls

Комментарии (64)

  • Участники делятся опытом создания минимальных ОС на RISC-V и Zig: кто-то перевёл «ОС в 1000 строк» на Zig, кто-то пишет с нуля.
  • Все сходятся: RISC-V проще x86, нет легаси-багажа, документация и эмуляторы доступны.
  • Железо не обязательно: достаточно QEMU; если нужна «реалка» — Milk-V Duo S за $10 или Pico 2.
  • Миникernel — хороший способ выучить архитектуру и Forth; «не изобретай крипту для продакшена» не отменяет экспериментов.
  • В споре о «кто важнее» вспомнили: Линус начинал как хобби, а Столлман уже с 1984 года готовил инфраструктуру GNU.

Writing an operating system kernel from scratch – RISC-V/OpenSBI/Zig (popovicu.com)

Разработка ядра операционной системы с нуля

Недавно я реализовал минимальное ядро ОС с разделением времени для RISC-V. В этой статье расскажу о деталях работы прототипа. Материал предназначен для всех, кто интересуется низкоуровневым ПО, драйверами, системными вызовами, и особенно полезен студентам, изучающим системное ПО и архитектуру компьютеров.

Это переработанная версия учебного проекта по операционным системам, но с фокусом на современные инструменты и архитектуру RISC-V. RISC-V — перспективная технология, которая проще для понимания по сравнению с другими архитектурами, оставаясь популярным выбором для новых систем.

Вместо традиционного C я использовал Zig, что упрощает воспроизведение эксперимента благодаря простой настройке и отсутствию необходимости установки дополнительных инструментов для кросс-компиляции под RISC-V.

Репозиторий и рекомендации

Исходный код доступен на GitHub. Перед изучением рекомендуется ознакомиться с основами программирования на RISC-V без ОС, процессом загрузки через SBI и обработкой прерываний.

Архитектура

Мы разрабатываем унике́рнел (unikernel), где приложение и ядро объединены в один исполняемый файл. Это исключает необходимость отдельной загрузки пользовательского кода во время выполнения.

В основе стека лежит слой SBI (OpenSBI), который управляет выводом на консоль и таймером. RISC-V использует уровни привилегий: M-режим (машинный), S-режим (супервизора) и U-режим (пользовательский). Наше ядро работает в S-режиме.

Цели ядра

  1. Статическое определение потоков (без динамического создания).
  2. Потоки выполняются в пользовательском режиме и могут делать системные вызовы к ядру.
  3. Время распределяется между потоками с помощью таймера, который прерывает выполнение каждые несколько миллисекунд.
  4. Разработка ведётся для одноядерной системы.

Виртуализация и потоки

Перед реализацией важно понять, что такое поток. В среде с разделением времени потоки позволяют эффективно использовать ресурсы системы.

by popovicu • 14 сентября 2025 г. в 00:36 • 87 points

ОригиналHN

#risc-v#opensbi#zig#operating-systems#unikernel#multithreading#kernel-development#system-calls

Комментарии (3)

  • Автор переписал классическое упражнение по созданию минимального ядра ОС с разделением времени для управления пользовательскими потоками.
  • Целью был эксперимент на специфической платформе RISC-V в сочетании с OpenSBI.
  • Для реализации был использован язык программирования Zig вместо традиционного C.
  • Автор отмечает, что подход можно легко повторить на C или Rust.
  • Участник обсуждения предположил, что эта тема уже публиковалась неделей ранее.
  • Другой участник уточнил, что оригинальный пост был два дня назад на Hacker News.
  • Было отмечено, что текущий пост, хотя и от первоначального автора, изначально не получил отклика и был повторно запущен через «пул второго шанса» с измененными временными метками.