2026-02-15 17:17:30 +04:00
2026-02-15 17:02:10 +04:00
2026-02-04 19:43:33 +04:00
2026-02-15 17:17:30 +04:00
2026-02-15 17:17:30 +04:00

🖥️ Операционная система в 1000 строках кода на С

Минимальная операционная система для архитектуры RISC-V 32-bit, реализованная по книге Operating System in 1,000 Lines


📋 Стек

  • Архитектура: RISC-V 32-bit
  • Компилятор: Clang с поддержкой RISC-V
  • Язык: C11 (freestanding)
  • Виртуализация: QEMU (для эмуляции)

🚀 О проекте

  • Минимальная операционная система с полным набором базовых функций
  • Управление памятью с поддержкой виртуальной адресации и страничной организации памяти (SV32)
    • Выделение страниц памяти
    • Маппинг виртуальных адресов на физические
    • Изоляция адресных пространств процессов
  • Многозадачность с поддержкой до 8 процессов одновременно
    • Переключение контекста между процессами
    • Планировщик задач с round-robin алгоритмом
    • Изоляция процессов через отдельные page tables
  • Системные вызовы для взаимодействия пользовательских программ с ядром
    • SYS_PUTCHAR — вывод символа в консоль
    • SYS_GETCHAR — чтение символа из консоли (с блокировкой)
    • SYS_EXIT — завершение процесса
    • SYS_READFILE — чтение файла
    • SYS_WRITEFILE — запись в файл
  • Файловая система на основе формата tar (ustar)
    • Поддержка чтения и записи файлов
    • Автоматическая загрузка файлов из образа диска при старте
    • Сохранение изменений на диск через VirtIO
  • Работа с диском через интерфейс VirtIO Block Device
    • Чтение и запись секторов диска
    • Поддержка виртуальных очередей VirtIO
  • Обработка исключений и прерываний через trap handler
    • Обработка системных вызовов через инструкцию ecall
    • Переключение между режимами supervisor и user
  • Интерактивная оболочка (shell) в пользовательском пространстве
    • Команда hello — приветствие
    • Команда exit — выход из shell
    • Команда readfile — чтение файла
    • Команда writefile — запись в файл
  • Разделение на kernel и user space
    • Ядро работает в режиме supervisor
    • Пользовательские программы работают в режиме user с ограниченными правами
    • Защита памяти через page tables

📝 Структура проекта

OSIn1000Lines/
├── src/
│   ├── kernel.c      # Основной код ядра (управление процессами, системные вызовы)
│   ├── kernel.h      # Заголовочные файлы ядра
│   ├── kernel.ld     # Скрипт линковки ядра
│   ├── user.c        # Пользовательское пространство (системные вызовы)
│   ├── user.h        # Заголовочные файлы пользовательского пространства
│   ├── user.ld       # Скрипт линковки пользовательских программ
│   ├── shell.c       # Код интерактивной оболочки
│   ├── common.c      # Общие функции (printf, memset, memcpy, strcmp)
│   ├── common.h      # Общие определения
│   ├── Makefile      # Сборка проекта
│   ├── disk/         # Файлы для файловой системы
│   │   ├── hello.txt
│   │   └── meow.txt
│   └── run.sh        # Скрипт запуска в QEMU для Linux
│   └── run.bat        # Скрипт запуска в QEMU для Windows
└── README.md         # Этот файл

🎯 Сборка и запуск

Требования

  • Clang с поддержкой RISC-V target
  • LLVM objcopy (llvm-objcopy)
  • QEMU с поддержкой RISC-V 32-bit

Запуск

cd src
./run.sh
Description
No description provided
Readme 122 KiB
Languages
C 96.5%
Makefile 1.8%
Batchfile 0.9%
Shell 0.8%