Releases: AMDRIP/VLSMC
Pre-alpha build v.0.1.1.
🚀 VLSMC v0.1.1 — Stability & Filesystem Patch
RAND Elecorner 36 — 28.02.2026
Патч-релиз, устраняющий критические дефекты стабильности ядра и улучшающий файловую подсистему.
🔧 Критические исправления
Deadlock в ожидании клавиатуры
Обнаружена и устранена race condition в EventSystem::wait: между снятием InterruptGuard и вызовом block_current() клавиатурное прерывание могло очистить список ожидающих потоков, после чего поток блокировался навсегда без возможности пробуждения.
Решение: KeyboardDriver::get_char() переведён на атомарный паттерн x86 sti; hlt; cli, гарантирующий отсутствие окна гонки благодаря аппаратному свойству процессора (задержка доставки прерываний на одну инструкцию после sti).
Deadlock в idle-потоке
Цикл ожидания в kernel_main выполнял hlt без sti, что при наследовании IF=0 от планировщика приводило к вечной остановке CPU — ни один поток не мог быть разбужен.
Решение: hlt заменён на sti; hlt.
💾 Файловая система
Атрибуты файлов
- Новые FAT16-атрибуты:
-gd(защита от удаления) и-gc(защита от изменения) - Команда
chattrдля управления атрибутами:chattr +gd FILE.TXT,chattr -gc FILE.TXT - Команда
lsотображает атрибуты в колонкеAttr - Команды
rmиwriteуважают флаги защиты
Исправления FAT16
rmбольше не удаляет всё содержимое диска — исправлена логика поиска записей, удаляется только указанный файлfat16_rename— устранена потенциальная порча данных при переименовании файлов в пределах одного сектора (используется безопасная копия через стек)vfs_rename— корректное освобождение parent-vnode после операции (предотвращение утечек памяти)
🖥️ Улучшения шелла
Команда ls
- Директории отображаются как
<DIR>вместо фиктивного размера в байтах - Директории всегда показываются в начале списка, перед файлами
- Атрибуты
[D],[R],[H],[-gc],[-gd]выводятся для каждой записи
Форматированный вывод
printf— поддержка модификаторов ширины (%8d,%-13s) в ядре и libc
📊 Сводка изменений
| Файл | Изменение |
|---|---|
kernel_main.cpp |
hlt → sti; hlt в idle-цикле |
keyboard.cpp |
EventSystem::wait → атомарный sti; hlt; cli |
fat16.cpp |
Атрибуты -gd/-gc, безопасный fat16_rename, фикс rm |
vfs.cpp |
Корректный vnode_release в vfs_rename |
shell.cpp |
ls — директории сверху + <DIR>, chattr, форматирование |
libc.cpp |
Модификаторы ширины в printf |
🚀 Быстрый запуск
./build.sh
qemu-system-i386 -fda disk.img -hda data.img -boot aПлатформа: x86 (IA-32) | Инструменты: NASM, GCC (cross-compiler), QEMU
Official Pre-Release Build v.0.1.0
🚀 VLSMC v0.1.0 — First Official Release
RAND Elecorner 36 — концептуальная 32-битная bare-metal операционная система архитектуры x86.
Это первый официальный релиз операционной системы, написанной с нуля на C++17 и x86 ассемблере. Система загружается с дискеты, переходит в Protected Mode и предоставляет полное пользовательское окружение Ring 3 с ELF-загрузчиком.
🏗️ Ядро
- Двухстадийный загрузчик (Stage 1 + Stage 2) с поддержкой FAT12/FAT16 и передачей
boot_info - 32-битное ядро в Protected Mode (C++17, freestanding)
- PMM (Physical Memory Manager) — битовая карта для управления физическими фреймами
- VMM (Virtual Memory Manager) — полноценный Page Directory / Page Table с поддержкой user/kernel пространств
- Многозадачность — Round-Robin планировщик с поддержкой Ring 0 → Ring 3 переключения контекста
- IDT / PIC — обработка аппаратных прерываний (таймер, клавиатура)
- Блокирующий IPC — межпроцессное взаимодействие через очереди сообщений с блокировкой потоков
- 34 системных вызова (int 0x80) — от
SYS_EXITдоSYS_FSIZE - ELF Loader — загрузка и исполнение пользовательских ELF-бинарников в Ring 3
- Kernel Panic — экран с полной диагностической информацией (регистры, стек, контекст)
💾 Файловая система
- FAT16 драйвер с полной поддержкой чтения, записи, удаления файлов и обхода FAT-цепочек
- Файловый ввод-вывод через системные вызовы
SYS_FOPEN,SYS_FREAD,SYS_FWRITE,SYS_FCLOSE - Таблица файловых дескрипторов ядра (до 16 одновременно открытых файлов)
🖥️ Драйверы
- VGA — текстовый режим 80×25 с пользовательским курсором
- Клавиатура PS/2 — полный скан-код → символ с блокирующим getchar()
- ATA/IDE — чтение секторов с жесткого диска
- PCI — сканирование шины и идентификация устройств (команда
pci) - Таймер PIT — системный таймер с функцией sleep()
📚 Стандартная библиотека C (User-Space Libc)
Полностью собственная реализация Libc для пользовательского пространства:
| Заголовок | Функции |
|---|---|
| string.h | strlen, strcpy, strcmp, strchr, strrchr, strcat, strncat, strlcpy, strlcat, strncmp, memcpy, memset, memmove, memcmp, memcmp_s |
| stdio.h | printf (%d, %s, %x, %p, %c, %f), putchar, puts, getchar, gets_s, fopen, fread, fwrite, fclose, feof, ferror |
| stdlib.h | atoi, itoa, abs, labs, div, ldiv, rand, srand, exit, abort |
| math.h | sqrt, pow, fabs, sin, cos + float-варианты (sqrtf, powf, fabsf, sinf, cosf) |
| malloc.h | malloc, free, calloc, realloc |
| errno.h | Базовая поддержка кодов ошибок |
⚡ Оптимизации
- SWAR (SIMD Within A Register): strlen, strcpy, strcmp, memcpy, memset обрабатывают данные по 4 байта за такт (32-битные машинные слова)
- Fast Bins: Аллокации до 64 байт обслуживаются из специальных односвязных списков за O(1)
- Boundary Tags: Слияние свободных блоков памяти за O(1) без линейного обхода
- x87 FPU: Математические функции используют аппаратные инструкции сопроцессора (
fsqrt,fsin,fcos,fyl2x+f2xm1)
📖 Документация
В папке docs/ содержится обширная техническая документация:
- ARCHITECTURE.md — Архитектура ядра
- USER_APP_GUIDE.md — Руководство по созданию приложений
- LIBC_REQUIREMENTS.md — Спецификация стандартной библиотеки
- FUTURE_VISION.md — Дорожная карта (GUI, сеть, микроядро)
🚀 Быстрый запуск
./build.sh
qemu-system-i386 -fda disk.img -hda data.img -boot aПосле загрузки доступны команды шелла: help, pci, bootinfo, ls, и запуск ELF-программ (HELLO.ELF, FILETST.ELF, MATHTEST.ELF и др.).
Платформа: x86 (IA-32) | Инструменты: NASM, GCC (cross-compiler), QEMU
What's Changed
New Contributors
Full Changelog: https://github.com/AMDRIP/VLSMC/commits/v.0.1.0-pre-alpha