Особенности
Реализовано
-
Собственный загрузчик с переходом из реального режима в защищённый
- Двухэтапная загрузка: BIOS → загрузочный сектор → защищённый режим → ядро
- Чтение ядра с диска через BIOS INT 0x13 (CHS/LBA)
- Инициализация GDT, IDT и перепрограммирование PIC
- Переход из реального режима (16-bit) в защищённый (32-bit)
- Настройка сегментных регистров и стека
-
GDT (Глобальная таблица дескрипторов) с полноценной сегментацией памяти
- Три дескриптора: нулевой, сегмент кода, сегмент данных
- Настройка прав доступа: Present, DPL, Type биты
- Гранулярность 4KB для доступа ко всей 4GB памяти
- База 0x00000000, лимит 0xFFFFFFFF
-
Продвинутое управление памятью с двумя уровнями аллокации:
- Аллокатор на основе связанных блоков памяти с разделением и слиянием
- Структура блока: size, next pointer, is_free flag
- Алгоритм best-fit для минимизации фрагментации
- Автоматическое объединение соседних свободных блоков
- Выравнивание на границу 16 байт
- Динамическое расширение кучи от 1MB до 16MB
- Функции диагностики:
- kmemdump() — детальный дамп состояния кучи
- get_meminfo() — статистика использования памяти
- kmemcheck() — проверка целостности блоков
- Аллокатор на основе связанных блоков памяти с разделением и слиянием
-
Драйверы оборудования:
- VGA-экран с поддержкой цветного текста и прокрутки
- Прямой доступ к видеопамяти 0xB8000
- 16 цветов текста и фона
- Автоматическая прокрутка при заполнении экрана
- Позиционирование курсора через порты 0x3D4/0x3D5
- Функции: kprint(), kprint_at(), kprint_colored()
- Терминальный слой (terminal.h/terminal.c) — логическая абстракция над экраном
- Виртуальный буфер 80x200 символов с атрибутами
- Поддержка автоскролла и ручной прокрутки
- Отложенный рендеринг (dirty flag)
- Функции для работы с вводом: backspace, enter, стрелки
- Управление цветом и позицией курсора
- Клавиатура (PS/2) с обработкой модификаторов (Shift, Ctrl, Alt, Caps Lock)
- Обработка скан-кодов через порт 0x60
- Таблицы символов для верхнего/нижнего регистра
- Поддержка backspace, enter, специальных комбинаций (Ctrl+C)
- Состояния модификаторов: shift_pressed, ctrl_pressed, alt_pressed, caps_lock
- Интеграция с терминальным слоем для обработки стрелок и модификаторов
- Таймер с программными прерываниями
- Настройка PIT на частоту 50 Гц
- Глобальный счётчик тиков
- Функция wait() для задержек в миллисекундах
- ATA PIO с поддержкой LBA-адресации
- Поддержка LBA28 (до 128GB дисков)
- Идентификация устройств через команду IDENTIFY
- Чтение/запись секторов (512 байт)
- Ожидание готовности устройства с таймаутами
- Поддержка master/slave устройств
- VGA-экран с поддержкой цветного текста и прокрутки
-
Система прерываний (IDT, ISR, IRQ) с кастомными обработчиками
- 48 записей в IDT (32 исключения + 16 аппаратных прерываний)
- Ассемблерные заглушки для сохранения контекста
- Ремаппинг PIC на вектора 32-47
- Обработка исключений: деление на ноль, GPF, page fault и др.
- API для регистрации обработчиков: register_interrupt_handler()
- Автоматическая отправка EOI в контроллеры прерываний
-
Командная оболочка "Keramika Shell" с поддержкой команд:
help— список команд с описаниемclear— очистка экранаend— остановка CPU (HLT инструкция)malloc— выделение памяти с указанием размераfree— освобождение памяти по адресуinfo— информация о системе: память, CPU, версияmemdump— дамп состояния кучиecho— вывод текста с поддержкой аргументовsleep— задержка в миллисекундахreboot— перезагрузка системыrand— генерация случайного числа по алгоритму xorshift32randrange— случайное число в диапазонеbinpow— бинарное возведение в степеньls— список файлов в корневой директории FAT12cat— вывод содержимого файлаload— загрузка файла в память по адресуfat12info— информация о файловой системе FAT12qemushutdown— выключение QEMU через порт 0x604
-
Файловая система FAT12 (Read Only) в kernel/fs/fat12.c
- Чтение и парсинг загрузочного сектора FAT12
- Извлечение параметров: bytes_per_sector, sectors_per_cluster, root_entries
- Вычисление смещений: fat_start_sector, root_dir_start_sector, data_start_sector
- Обход 12-битных записей FAT с учётом чётности/нечётности кластеров
- Форматирование имён файлов из формата 8.3 (удаление пробелов)
- Поиск файлов в корневом каталоге по имени
- Чтение файлов через обход цепочек кластеров
- Буферизация таблицы FAT для уменьшения обращений к диску
- Поддержка специальных значений FAT: 0xFF7 (bad cluster), 0xFF8-0xFFF (end of chain)
- Функции: fat12_init(), fat12_find_file(), fat12_read_file(), fat12_list_root()
-
Библиотека KKLibC (Kintsugi Kernel LibC) включая:
- Работу со строками, генерация числа и прочие стандартные вещи (stdlib.h)
- strlen(), strcpy(), strcmp(), strtok(), strstr(), strchr()
- itoa(), utoa(), atoi(), hex_strtoint()
- strspn(), strcspn(), strpbrk()
- Форматированный вывод (stdio.h)
- printf(), printf_colored(), printf_at()
- Поддержка форматирования: %d, %x, %s, %c, %u
- Флаги: выравнивание, дополнение нулями, префиксы
- sprintf(), snprintf(), vsnprintf()
- Функции памяти (mem.h)
- kmalloc(), kfree(), krealloc()
- memcpy(), memset(), memmove(), memcmp(), memchr()
- memory_set(), u32memory_set()
- Библиотека для математики (math.h)
- binary_pow() — бинарное возведение в степень
- Типы данных (ctypes.h)
- Стандартные типы: u8, u16, u32, s8, s16, s32
- Функции классификации символов: isalpha(), isdigit(), etc.
- Макросы: KB, MB, GB, ASSERT()
- Общий заголовочный файл kklibc.h
- Включение всех модулей библиотеки
- Определение версии системы: VERSION
- Библиотека стандартных методов (stdlib.h)
- Генерация случайных чисел: rand(), rand_range() на основе xorshift32
- Системные функции: reboot(), wait()
- Функции поиска: fuzzy_search()
- Работу со строками, генерация числа и прочие стандартные вещи (stdlib.h)
В разработке
- Файловая система Fat12 (Write+Read)
- Реализация записи файлов
- Создание новых записей в каталоге
- Обновление таблицы FAT при выделении кластеров
- Запись данных в секторы диска
- Файловая система ext2
- Исследование структуры ext2
- Чтение суперблока и групповых дескрипторов
- Работа с inode и блоками данных
- Поддержка каталогов и длинных имён
- Планировщик задач
- Структуры данных для описания процессов
- Механизм переключения контекста
- Алгоритмы планирования (round-robin, приоритеты)
- Очереди готовых и заблокированных процессов
- Пользовательское пространство
- Разделение привилегий (ring 0 vs ring 3)
- Системные вызовы через прерывания
- Защита памяти через сегментацию/страничность
- Базовые библиотеки для пользовательских программ
- Inter-Process Communication
- Очереди сообщений
- Разделяемая память
- Семафоры и мьютексы
- Каналы (pipes)
- Загрузка ELF
- Парсинг заголовков ELF
- Загрузка сегментов в память
- Настройка таблиц страниц
- Передача управления точке входа
- Графический интерфейс
- Переход в графический режим VESA
- Примитивы рисования: линии, прямоугольники, текст
- Оконная система
- Обработка событий мыши
- Многозадачность
- Создание и уничтожение процессов
- Управление ресурсами процессов
- Синхронизация и взаимное исключение
- Сигналы и обработчики
- Пользовательский режим
- Механизм переключения между кольцами защиты
- Проверка прав доступа
- Обработка нарушений привилегий
- API системных вызовов
- Сетевой стек
- Драйвер сетевой карты (например, RTL8139)
- Протоколы: Ethernet, IP, ARP
- Транспортные протоколы: TCP, UDP
- Сокеты и API для сетевых операций
- Псевдографический интерфейс
- Текстовый режим с расширенными символами
- Оконный менеджер в текстовом режиме
- Диалоговые окна и элементы управления
- Обработка фокуса ввода
- Полностью реализованный LibC
- Расширение KKLibC полным набором функций
- Поддержка плавающей точки
- Функции работы со временем и датой
- Локализация и кодировки
Готово
- Файловая система Fat12 (Read Only)
- Чтение загрузочного сектора и параметров
- Обход корневого каталога
- Чтение цепочек кластеров
- Форматирование имён файлов 8.3
- Динамические аллокаторы памяти
- Аллокатор кучи с best-fit алгоритмом
- Разделение и слияние блоков
- Диагностика и отладка памяти
- Терминальный слой абстракции
- Виртуальный буфер 80x200 символов
- Отложенный рендеринг
- Управление прокруткой и вводом
- Интеграция с драйверами клавиатуры и экрана
- Драйвер ATA PIO
- LBA-адресация 28-бит
- Идентификация устройств
- Чтение/запись секторов
- Система прерываний с обработкой исключений
- Полная IDT с 48 записями
- Обработчики всех стандартных исключений
- API для регистрации обработчиков
- Полноценная shell-оболочка
- 16 встроенных команд
- Разбор аргументов и история ввода
- Интеграция с файловой системой
- Управление памятью и системой
Full Changelog: v0.3.0a...v0.4.0a