Skip to content

Releases: AMDRIP/VLSMC

Pre-alpha build v.0.1.1.

28 Feb 18:29
3a1526d

Choose a tag to compare

Pre-release

🚀 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 hltsti; 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

27 Feb 18:39
8d9fe20

Choose a tag to compare

Pre-release

🚀 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

  • @AMDRIP made their first contribution in #1

Full Changelog: https://github.com/AMDRIP/VLSMC/commits/v.0.1.0-pre-alpha