
VSTOS — это легковесная 32-битная операционная система с монолитным ядром, написанная на C++ и ассемблере x86. Проект создан как образовательная площадка для изучения низкоуровневой разработки и как готовый шаблон (boilerplate) для тех, кто хочет начать свой путь в создании OS.
Основные возможности
- Собственное Ядро: Написано на C++ с использованием -ffreestanding.
- VGA Драйвер: Полноценный вывод текста на экран, поддержка цветов, скроллинг и управление аппаратным курсором.
- Драйвер клавиатуры: Обработка скан-кодов через порты ввода-вывода (0x60, 0x64).
- Интерактивный Shell: Поддержка команд (help, about, clear, ascii).
- Управление питанием: Команды перезагрузки (reboot) и программного выключения для QEMU.
- Hardware Interaction: Прямое управление светодиодами клавиатуры (Caps/Num/Scroll Lock).
Технологический стек
- Языки: C++ (Kernel), Assembly x86 (Bootloader).
- Загрузчик: Multiboot-compliant (GRUB).
- Инструменты: GCC (g++), NASM, LD (Linker).
- Среда тестирования: QEMU / Bochs.
Как скомпилировать и запустить
Для сборки вам понадобится gcc-multilib, nasm и grub-common.
1. Сборка компонентов
# Компиляция ассемблерного загрузчика
nasm -f elf32 boot.asm -o boot.o
# Компиляция ядра C++
g++ -m32 -c kernel.cpp -o kernel.o -ffreestanding -O2 -fno-stack-protector -fno-rtti -fno-exceptions
# Линковка в исполняемый бинарный файл
ld -m elf_i386 -T linker.ld -o VST_OS.bin boot.o kernel.o
2. Создание ISO образа
mkdir -p iso/boot/grub
cp VST_OS.bin iso/boot/
# Создание конфигурации GRUB и генерация образа
grub-mkrescue -o VST_OS.iso iso
3. Запуск в QEMU
qemu-system-i386 -cdrom VST_OS.iso
Чему я научился (Lessons Learned)
Проблема с обработкой прерываний и вводом: Одной из главных сложностей была реализация корректного ввода с клавиатуры. В начале разработки при нажатии одной клавиши символ выводился бесконечно или система зависала. Решение: Я изучил работу контроллера клавиатуры 8042 и реализовал проверку статусного регистра порта 0x64 (проверка бита 0 перед чтением данных из 0x60). Также пришлось вручную реализовать таблицу маппинга скан-кодов в символы ASCII, что дало понимание того, как аппаратура общается с драйвером.
Планы на будущее
- [ ] Реализация GDT (Global Descriptor Table) и IDT (Interrupt Descriptor Table).
- [ ] Поддержка динамической памяти (Memory Allocator).
- [ ] Файловая система (например, простая FAT или RAMDisk).
- [ ] Больше примеров работы с ассемблерными вставками (Inline ASM) для прямого доступа к регистрам CPU.
Разработчик: Valentin Stars vstbio.t.me
Цель проекта: Демонстрация работы Hardware C++ и основ системного программирования.