{"id":30437428,"url":"https://github.com/alexeev-prog/kintsugios","last_synced_at":"2026-02-09T02:05:55.249Z","repository":{"id":310687869,"uuid":"1040801056","full_name":"alexeev-prog/KintsugiOS","owner":"alexeev-prog","description":"Minimalistic and rich x86_64 operation system in (N)ASM and C","archived":false,"fork":false,"pushed_at":"2026-02-04T14:28:00.000Z","size":87851,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-05T00:48:37.854Z","etag":null,"topics":["asm","c","fasm","i386","i386-elf-gcc","nasm","operating-system","os","osdev","x86","x86-assembly"],"latest_commit_sha":null,"homepage":"https://alexeev-prog.github.io/KintsugiOS/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexeev-prog.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-19T14:23:34.000Z","updated_at":"2026-02-04T14:31:07.000Z","dependencies_parsed_at":"2026-01-11T20:00:37.815Z","dependency_job_id":null,"html_url":"https://github.com/alexeev-prog/KintsugiOS","commit_stats":null,"previous_names":["alexeev-prog/kintsugios"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/alexeev-prog/KintsugiOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FKintsugiOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FKintsugiOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FKintsugiOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FKintsugiOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexeev-prog","download_url":"https://codeload.github.com/alexeev-prog/KintsugiOS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexeev-prog%2FKintsugiOS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29254306,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T01:52:29.835Z","status":"online","status_checked_at":"2026-02-09T02:00:09.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asm","c","fasm","i386","i386-elf-gcc","nasm","operating-system","os","osdev","x86","x86-assembly"],"created_at":"2025-08-23T03:49:29.345Z","updated_at":"2026-02-09T02:05:55.237Z","avatar_url":"https://github.com/alexeev-prog.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# KintsugiOS\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003eМинималистичная операционная 32 разрядная система с монолитным ядром и собственным загрузчиком на (N)ASM и GCC 15\u003c/h3\u003e\n  \u003cbr\u003e\n\n  \u003ca href=\"https://alexeev-prog.github.io/KintsugiOS/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Документация-онлайн?style=for-the-badge\u0026logo=gitbook\" alt=\"docs\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/alexeev-prog/KintsugiOS?style=for-the-badge\" alt=\"Top Language\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/count/alexeev-prog/KintsugiOS?style=for-the-badge\" alt=\"Language Count\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/alexeev-prog/KintsugiOS?style=for-the-badge\" alt=\"License\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/issues/alexeev-prog/KintsugiOS?style=for-the-badge\u0026color=critical\" alt=\"Issues\"\u003e\n  \u003ca href=\"https://github.com/alexeev-prog/KintsugiOS/stargazers\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/stars/alexeev-prog/KintsugiOS?style=for-the-badge\u0026logo=github\" alt=\"Stars\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/alexeev-prog/KintsugiOS?style=for-the-badge\" alt=\"Last Commit\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/contributors/alexeev-prog/KintsugiOS?style=for-the-badge\" alt=\"Contributors\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/alexeev-prog/KintsugiOS/refs/heads/main/docs/pallet-0.png\" width=\"600\" alt=\"\"\u003e\n\u003c/div\u003e\n\nKintsugiOS — это минималистичная x86 операционная система, написанная на (N)ASM и C, созданная в образовательных целях для глубокого понимания принципов работы операционных систем. Название проекта отсылает к японскому искусству Kintsugi, где разбитая керамика восстанавливается золотым лаком, подчеркивая красоту несовершенства и непрерывного развития.\n\nПоследняя стабильная версия: [v0.4.0a](https://github.com/alexeev-prog/KintsugiOS/releases/tag/v0.4.0a)\n\n\u003e [!CAUTION]\n\u003e KintsugiOS еще в активной стадии разработки и многие решения не финальные или нестабильные.\n\n\u003e Также я занимаюсь [переводом OSDEV-Notes](https://github.com/alexeev-prog/Osdev-Notes-RU)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/alexeev-prog/KintsugiOS/refs/heads/main/gallery/image.png\" width=\"600\" alt=\"\"\u003e\n\u003c/div\u003e\n\n## Особенности\n\n### Реализовано\n- **Собственный загрузчик** с переходом из реального режима в защищённый\n  - Двухэтапная загрузка: BIOS → загрузочный сектор → защищённый режим → ядро\n  - Чтение ядра с диска через BIOS INT 0x13 (CHS/LBA)\n  - Инициализация GDT, IDT и перепрограммирование PIC\n  - Переход из реального режима (16-bit) в защищённый (32-bit)\n  - Настройка сегментных регистров и стека\n\n- **GDT (Глобальная таблица дескрипторов)** с полноценной сегментацией памяти\n  - Три дескриптора: нулевой, сегмент кода, сегмент данных\n  - Настройка прав доступа: Present, DPL, Type биты\n  - Гранулярность 4KB для доступа ко всей 4GB памяти\n  - База 0x00000000, лимит 0xFFFFFFFF\n\n- **Продвинутое управление памятью** с двумя уровнями аллокации:\n  - Аллокатор на основе связанных блоков памяти с разделением и слиянием\n    - Структура блока: size, next pointer, is_free flag\n    - Алгоритм best-fit для минимизации фрагментации\n    - Автоматическое объединение соседних свободных блоков\n    - Выравнивание на границу 16 байт\n    - Динамическое расширение кучи от 1MB до 16MB\n  - Функции диагностики:\n    - kmemdump() — детальный дамп состояния кучи\n    - get_meminfo() — статистика использования памяти\n    - kmemcheck() — проверка целостности блоков\n\n- **Драйверы оборудования**:\n  - VGA-экран с поддержкой цветного текста и прокрутки\n    - Прямой доступ к видеопамяти 0xB8000\n    - 16 цветов текста и фона\n    - Автоматическая прокрутка при заполнении экрана\n    - Позиционирование курсора через порты 0x3D4/0x3D5\n    - Функции: kprint(), kprint_at(), kprint_colored()\n  - **Терминальный слой (terminal.h/terminal.c)** — логическая абстракция над экраном\n    - Виртуальный буфер 80x200 символов с атрибутами\n    - Поддержка автоскролла и ручной прокрутки\n    - Отложенный рендеринг (dirty flag)\n    - Функции для работы с вводом: backspace, enter, стрелки\n    - Управление цветом и позицией курсора\n  - Клавиатура (PS/2) с обработкой модификаторов (Shift, Ctrl, Alt, Caps Lock)\n    - Обработка скан-кодов через порт 0x60\n    - Таблицы символов для верхнего/нижнего регистра\n    - Поддержка backspace, enter, специальных комбинаций (Ctrl+C)\n    - Состояния модификаторов: shift_pressed, ctrl_pressed, alt_pressed, caps_lock\n    - Интеграция с терминальным слоем для обработки стрелок и модификаторов\n  - Таймер с программными прерываниями\n    - Настройка PIT на частоту 50 Гц\n    - Глобальный счётчик тиков\n    - Функция wait() для задержек в миллисекундах\n  - ATA PIO с поддержкой LBA-адресации\n    - Поддержка LBA28 (до 128GB дисков)\n    - Идентификация устройств через команду IDENTIFY\n    - Чтение/запись секторов (512 байт)\n    - Ожидание готовности устройства с таймаутами\n    - Поддержка master/slave устройств\n\n- **Система прерываний** (IDT, ISR, IRQ) с кастомными обработчиками\n  - 48 записей в IDT (32 исключения + 16 аппаратных прерываний)\n  - Ассемблерные заглушки для сохранения контекста\n  - Ремаппинг PIC на вектора 32-47\n  - Обработка исключений: деление на ноль, GPF, page fault и др.\n  - API для регистрации обработчиков: register_interrupt_handler()\n  - Автоматическая отправка EOI в контроллеры прерываний\n\n- **Командная оболочка \"Keramika Shell\"** с поддержкой команд:\n  - `help` — список команд с описанием\n  - `clear` — очистка экрана\n  - `end` — остановка CPU (HLT инструкция)\n  - `malloc` — выделение памяти с указанием размера\n  - `free` — освобождение памяти по адресу\n  - `info` — информация о системе: память, CPU, версия\n  - `memdump` — дамп состояния кучи\n  - `echo` — вывод текста с поддержкой аргументов\n  - `sleep` — задержка в миллисекундах\n  - `reboot` — перезагрузка системы\n  - `rand` — генерация случайного числа по алгоритму xorshift32\n  - `randrange` — случайное число в диапазоне\n  - `binpow` — бинарное возведение в степень\n  - `ls` — список файлов в корневой директории FAT12\n  - `cat` — вывод содержимого файла\n  - `load` — загрузка файла в память по адресу\n  - `fat12info` — информация о файловой системе FAT12\n  - `qemushutdown` — выключение QEMU через порт 0x604\n\n- **Файловая система FAT12 (Read Only)** в kernel/fs/fat12.c\n  - Чтение и парсинг загрузочного сектора FAT12\n  - Извлечение параметров: bytes_per_sector, sectors_per_cluster, root_entries\n  - Вычисление смещений: fat_start_sector, root_dir_start_sector, data_start_sector\n  - Обход 12-битных записей FAT с учётом чётности/нечётности кластеров\n  - Форматирование имён файлов из формата 8.3 (удаление пробелов)\n  - Поиск файлов в корневом каталоге по имени\n  - Чтение файлов через обход цепочек кластеров\n  - Буферизация таблицы FAT для уменьшения обращений к диску\n  - Поддержка специальных значений FAT: 0xFF7 (bad cluster), 0xFF8-0xFFF (end of chain)\n  - Функции: fat12_init(), fat12_find_file(), fat12_read_file(), fat12_list_root()\n\n- **Библиотека KKLibC (Kintsugi Kernel LibC)** включая:\n  - Работу со строками, генерация числа и прочие стандартные вещи (stdlib.h)\n    - strlen(), strcpy(), strcmp(), strtok(), strstr(), strchr()\n    - itoa(), utoa(), atoi(), hex_strtoint()\n    - strspn(), strcspn(), strpbrk()\n  - Форматированный вывод (stdio.h)\n    - printf(), printf_colored(), printf_at()\n    - Поддержка форматирования: %d, %x, %s, %c, %u\n    - Флаги: выравнивание, дополнение нулями, префиксы\n    - sprintf(), snprintf(), vsnprintf()\n  - Функции памяти (mem.h)\n    - kmalloc(), kfree(), krealloc()\n    - memcpy(), memset(), memmove(), memcmp(), memchr()\n    - memory_set(), u32memory_set()\n  - Библиотека для математики (math.h)\n    - binary_pow() — бинарное возведение в степень\n  - Типы данных (ctypes.h)\n    - Стандартные типы: u8, u16, u32, s8, s16, s32\n    - Функции классификации символов: isalpha(), isdigit(), etc.\n    - Макросы: KB, MB, GB, ASSERT()\n  - Общий заголовочный файл kklibc.h\n    - Включение всех модулей библиотеки\n    - Определение версии системы: VERSION\n  - Библиотека стандартных методов (stdlib.h)\n    - Генерация случайных чисел: rand(), rand_range() на основе xorshift32\n    - Системные функции: reboot(), wait()\n    - Функции поиска: fuzzy_search()\n\n### В разработке\n - [ ] Файловая система Fat12 (Write+Read)\n   - Реализация записи файлов\n   - Создание новых записей в каталоге\n   - Обновление таблицы FAT при выделении кластеров\n   - Запись данных в секторы диска\n - [ ] Файловая система ext2\n   - Исследование структуры ext2\n   - Чтение суперблока и групповых дескрипторов\n   - Работа с inode и блоками данных\n   - Поддержка каталогов и длинных имён\n - [ ] Планировщик задач\n   - Структуры данных для описания процессов\n   - Механизм переключения контекста\n   - Алгоритмы планирования (round-robin, приоритеты)\n   - Очереди готовых и заблокированных процессов\n - [ ] Пользовательское пространство\n   - Разделение привилегий (ring 0 vs ring 3)\n   - Системные вызовы через прерывания\n   - Защита памяти через сегментацию/страничность\n   - Базовые библиотеки для пользовательских программ\n - [ ] Inter-Process Communication\n   - Очереди сообщений\n   - Разделяемая память\n   - Семафоры и мьютексы\n   - Каналы (pipes)\n - [ ] Загрузка ELF\n   - Парсинг заголовков ELF\n   - Загрузка сегментов в память\n   - Настройка таблиц страниц\n   - Передача управления точке входа\n - [ ] Графический интерфейс\n   - Переход в графический режим VESA\n   - Примитивы рисования: линии, прямоугольники, текст\n   - Оконная система\n   - Обработка событий мыши\n - [ ] Многозадачность\n   - Создание и уничтожение процессов\n   - Управление ресурсами процессов\n   - Синхронизация и взаимное исключение\n   - Сигналы и обработчики\n - [ ] Пользовательский режим\n   - Механизм переключения между кольцами защиты\n   - Проверка прав доступа\n   - Обработка нарушений привилегий\n   - API системных вызовов\n - [ ] Сетевой стек\n   - Драйвер сетевой карты (например, RTL8139)\n   - Протоколы: Ethernet, IP, ARP\n   - Транспортные протоколы: TCP, UDP\n   - Сокеты и API для сетевых операций\n - [ ] Псевдографический интерфейс\n   - Текстовый режим с расширенными символами\n   - Оконный менеджер в текстовом режиме\n   - Диалоговые окна и элементы управления\n   - Обработка фокуса ввода\n - [ ] Полностью реализованный LibC\n   - Расширение KKLibC полным набором функций\n   - Поддержка плавающей точки\n   - Функции работы со временем и датой\n   - Локализация и кодировки\n\n### Готово\n - [x] Файловая система Fat12 (Read Only)\n   - Чтение загрузочного сектора и параметров\n   - Обход корневого каталога\n   - Чтение цепочек кластеров\n   - Форматирование имён файлов 8.3\n - [x] Динамические аллокаторы памяти\n   - Аллокатор кучи с best-fit алгоритмом\n   - Разделение и слияние блоков\n   - Диагностика и отладка памяти\n - [x] Терминальный слой абстракции\n   - Виртуальный буфер 80x200 символов\n   - Отложенный рендеринг\n   - Управление прокруткой и вводом\n   - Интеграция с драйверами клавиатуры и экрана\n - [x] Драйвер ATA PIO\n   - LBA-адресация 28-бит\n   - Идентификация устройств\n   - Чтение/запись секторов\n - [x] Система прерываний с обработкой исключений\n   - Полная IDT с 48 записями\n   - Обработчики всех стандартных исключений\n   - API для регистрации обработчиков\n - [x] Полноценная shell-оболочка\n   - 16 встроенных команд\n   - Разбор аргументов и история ввода\n   - Интеграция с файловой системой\n   - Управление памятью и системой\n\n## Архитектурные изменения\n\n### Терминальный слой\nВ системе появился новый уровень абстракции — терминальный слой (`terminal.h/terminal.c`). Это логический слой между низкоуровневым доступом к видеопамяти и высокоуровневыми функциями ввода-вывода ядра. Ключевые преимущества:\n\n- **Виртуальный буфер**: Теперь экран — это лишь окно в логический буфер размером 80x200 символов, что позволяет реализовать прокрутку истории.\n- **Отложенный рендеринг**: Обновление экрана происходит только когда это необходимо (флаг `dirty`), что оптимизирует производительность.\n- **Унифицированный API**: Все функции вывода (`kprint`, `kprintln`, `kprint_colored`) теперь используют единый интерфейс, который может работать либо напрямую с экраном, либо через терминальный слой.\n- **Управление вводом**: Добавлены функции для обработки специальных клавиш (backspace, enter, стрелки) в контексте терминала.\n\n### Система вывода\nРеализован механизм переключения между режимами вывода (`screen_output_switch.h`):\n- `OUTPUT_MODE_SCREEN` — прямой вывод в видеопамять (совместимость со старым кодом)\n- `OUTPUT_MODE_TERMINAL` — вывод через терминальный слой\n\nЭто позволяет постепенно мигрировать код на использование новой системы без полного переписывания.\n\n## Требования\n\nДля сборки и запуска KintsugiOS необходим следующий инструментарий:\n\n - [Кросс-компилятор i386 ELF GCC](http://newos.org/toolchains/i386-elf-15.1.0-Linux-x86_64.tar.xz)\n - FASM\n - NASM\n - GDB для отладки\n - MTools и Xorriso\n - QEMU или Bochs\n - Make\n - Python\n\nПроверить готовность окружения можно скриптом:\n```bash\n./check-env.sh\n```\n\n## Сборка и запуск\n\n### Базовая сборка\n```bash\nmake quick\n```\n\n### Создание образа диска (hdd) и запуск в QEMU\n```bash\nmake run\n```\n\n### Создание образа диска fda и запуск в QEMU\n```bash\nmake run_fda\n```\n\n### Создание образа диска флоппи с fat12\n```bash\nmake run_fat12\n```\n\n### Очистка проекта\n```bash\nmake clean      # Удаление бинарных файлов\nmake clean_all  # Полная очистка\n```\n\n## Отладка\n\nДля отладки KintsugiOS запустите систему в режиме отладки:\n\n```bash\nmake debug        # образ диска hdd\nmake debug_fda    # образ диска fda\n```\n\nИ подключитесь через ваш дебаггер (например gdb).\n\n## Как работает загрузка\n\nЗагрузчик KintsugiOS — это критически важный компонент, написанный на ассемблере, который выполняет следующие задачи:\n\n + Инициализация и переход в защищенный режим: Загрузчик начинает работу в реальном режиме (16-бит), инициализирует стек, загружает GDT (Глобальную таблицу дескрипторов) и переключает процессор в 32-битный защищенный режим.\n + Загрузка ядра: С помощью функций BIOS загрузчик считывает ядро с диска в память по адресу 0x007e00.\n + Подготовка к выполнению ядра: После перехода в защищенный режим управление передается ядру.\n\nКомпоненты загрузчика:\n\n + bootsector.asm — основной загрузочный сектор, который загружается BIOS по адресу 0x7c00. Устанавливает стек, загружает ядро и переключается в защищенный режим.\n + diskload.asm — содержит функцию disk_load для чтения секторов с диска с помощью прерываний BIOS.\n + gdt.asm — определяет GDT (Глобальную таблицу дескрипторов) для защищенного режима, включая дескрипторы для сегментов кода и данных.\n + switch_to32.asm — код переключения в защищенном режиме, включая отключение прерываний, загрузку GDT и установку бита в регистре cr0.\n + puts_chars.asm и puts_chars32.asm — функции для вывода строк в реальном и защищенном режимах соответственно. В защищенном режиме вывод осуществляется напрямую в видеопамять VGA.\n + puts_hex.asm — функция для вывода чисел в шестнадцатеричном формате (используется для отладки).\n + kernel_entry.asm — точка входа для ядра, которая вызывает функцию kmain из ядра.\n\nПроцесс загрузки:\n\n1. BIOS загружает первый сектор диска (512 байт) по адресу 0x7c00 и передает управление на его начало.\n2. Загрузчик инициализирует стек и выводит сообщение о запуске в реальном режиме.\n3. Загрузчик загружает ядро с диска в память по адресу 0x007e00, используя функции BIOS.\n4. Загрузчик загружает GDT и переключает процессор в защищенный режим.\n5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x007e00.\n\n## Команды оболочки\n\nKintsugiOS включает оболочку \"Keramika Shell\" со следующими командами:\n\n- `end` - остановка процессора\n- `clear` - очистка экрана\n- `malloc \u003csize\u003e` - выделение памяти (куча)\n- `free \u003caddress\u003e` - освобождение памяти\n- `info` - информация о системе\n- `memdump` - дамп памяти\n- `echo \u003ctext\u003e` - вывод текста\n- `help` - справка по командам\n- `sleep \u003cms\u003e` - ожидать N миллисекунд\n- `reboot` - перезагрузка\n- `rand \u003cseed\u003e` - генерация случайного числа по алгоритму xorshift32\n- `randrange \u003cseed\u003e \u003cmin\u003e \u003cmax\u003e` - генерация случайного числа в диапазоне при помощи xorshift32\n- `binpow \u003cbase\u003e \u003cexponent\u003e` - бинарное возведение в степень\n- `ls` - список файлов в корневой директории FAT12\n- `cat \u003cfilename\u003e` - вывод содержимого файла\n- `load \u003cfilename\u003e [address]` - загрузка файла в память по адресу (по умолчанию 0x007e0000)\n- `fat12info` - информация о файловой системе FAT12\n- `qemushutdown` - выключение QEMU через порт 0x604\n\n## Kintsugi Kernel LibC\nKKLibc — это собственная реализация стандартной библиотеки языка C, разработанная специально для нужд ядра Kintsugi OS. В отличие от пользовательских libc (вроде glibc), она тесно интегрирована с архитектурой ядра, лишена избыточности и содержит только самые необходимые функции для работы в пространстве ядра.\n\n**Структура и основные модули:**\n\nБиблиотека организована в набор модулей, каждый из которых отвечает за свою предметную область:\n\n + **`stdlib.h` / `stdlib.c`**: Ядро библиотеки. Содержит:\n     + **Преобразования данных:** `itoa`, `utoa`, `atoi`, `hex_strtoint` для конвертации между числами и строками в различных системах счисления.\n     + **Работа со строками:** Полный набор функций для манипуляций со строками: `strlen`, `strcpy`/`strncpy`, `strcmp`/`strncmp`, `strcat`/`strncat`, `strchr`, `strstr`, `strtok`, `strspn`, `strcspn`.\n     + **Работа с памятью:** Аналоги стандартных `memcpy`, `memset`, `memmove`, `memcmp`, `memchr`, а также низкоуровневые `memory_set`, `u32memory_set`.\n     + **Генерация псевдослучайных чисел:** Реализация на основе быстрого алгоритма `xorshift32` (`rand`) и функция для получения числа в диапазоне (`rand_range`).\n     + **Управление системой:** Функции `reboot()` и `wait(int ms)` для взаимодействия с железом.\n     + **Форматированный вывод в буфер:** Реализации `sprintf`, `snprintf` и `vsnprintf` для безопасного и небезопасного формирования строк.\n     + *Утилиты:* Алгоритм нечеткого поиска `fuzzy_search` для будущего использования в интерфейсах.\n\n + **`stdio.h` / `stdio.c`**: Модуль форматированного вывода. Реализует функции `printf`, `printf_colored` и `printf_at`, которые напрямую взаимодействуют с драйвером экрана (`screen.h`), обеспечивая вывод текста в заданном месте и цвете.\n\n + **`mem.h` / `mem.c`**: **Менеджер памяти (кучи) ядра.** Реализует динамическое выделение памяти внутри ядра.\n     + **Аллокатор:** Использует алгоритм с разделением и слиянием свободных блоков памяти для минимизации фрагментации.\n\n     + **API:** Предоставляет знакомые API: `kmalloc`, `kfree`, `krealloc`.\n     + **Отладка:** Содержит функции для отладки и мониторинга состояния кучи: `kmemdump`, `get_meminfo`.\n\n + **`math.h` / `math.c`**: Набор математических функций и алгоритмов, включая вычисление чисел Фибоначчи, бинарное возведение в степень, факториал и дискриминант.\n\n + **`ctypes.h` / `ctypes.c`**: Полная реализация стандартных функций классификации и преобразования символов (`isalpha`, `isdigit`, `toupper`, etc.).\n\n + **`kklibc.h`**: Главный заголовочный файл, который включает все модули библиотеки для удобства.\n\n**Философия дизайна:**\n\n + **Самостоятельность:** Библиотека минимально зависима от внешнего кода, что является обязательным требованием для кода ядра.\n + **Производительность над избыточностью:** Функции реализованы с оглядкой на скорость и минимальный расход памяти, а не на абсолютную совместимость со стандартом.\n\nKKLibc является живым, развивающимся проектом и продолжает обрастать новыми функциями и оптимизациями по мере развития самой Kintsugi OS. Развитие KKLibc напрямую связано с развитием Kintsugi OS. Каждый новый системный вызов, драйвер или компонент ядра будет опираться на ее надежное и эффективное API.\n\n## Планы на будущее\n\n### Для KKLibc\n + **Решение проблем с кучей:** Текущая архитектура с двумя аллокаторами (`kmalloc` и `pkmalloc`) мощная, но требует доработки для полной стабильности. Основная задача — **устранить все возможные scenarious повреждения кучи**, особенно в моменты, когда `kmalloc` вызывает `expand_heap`, который, в свою очередь, через `pkmalloc` и `alloc_frame` запрашивает новые физические страницы. Необходимо тщательно протестировать это взаимодействие на предмет race condition и корректности обновления внутренних структур данных аллокатора.\n + **Внедрение кананингов (Canaries):** Для отладки повреждения кучи планируется добавить механизм \"канареек\" — специальных значений, размещаемых вокруг выделенных блоков памяти. При освобождении памяти или в отладочной сборке будет проверяться целостность этих канареек, что позволит сразу обнаружить операции записи за пределами выделенного блока (buffer overflow).\n + **Отладочный аллокатор:** Реализация специальной версии `kmalloc`, которая ведет логи всех операций выделения/освобождения памяти (с указанием размера, адреса и callstack'а). Это незаменимый инструмент для поиска утечек памяти (memory leaks) в ядре.\n + **Планировщик и синхронизация:** Когда будет реализован планировщик задач и многозадачность, **критически важным станет сделать аллокатор потокобезопасным**. Это потребует добавления механизмов синхронизации (спинлоков или мьютексов) внутрь функций `kmalloc` и `kfree`.\n + **Поддержка пользовательского пространства:** В будущем, когда появится разграничение на режим ядра и пользовательский режим, KKLibc будет разделена. Большая часть останется в ядре, а для пользовательского пространства будет создана отдельная, возможно, урезанная и более безопасная версия библиотеки.\n + **Оптимизация производительности:** Постоянный процесс: переписывание ключевых функций (например, `memcpy`, `memset`) на ассемблере для максимальной скорости, внедрение более эффективных алгоритмов поиска свободных блоков памяти.\n + **Новые модули:** По мере необходимости будут добавляться новые структуры данных (связные списки, хэш-таблицы), функции для работы со строками в кодировке UTF-8 и другие утилиты, требуемые развивающейся операционной системой.\n\n### Для ядра\n- **Улучшение терминального слоя:**\n  - Реализация истории команд\n  - Поддержка вкладок и нескольких виртуальных терминалов\n  - Цветовая палитра и темы\n  - Поддержка мыши в текстовом режиме\n- **Файловые системы:** Реализация FAT12 и ext2\n- **Многозадачность:** Планировщик задач и механизмы IPC\n- **Пользовательский режим:** Разграничение привилегий\n- **Сетевой стек:** Базовая поддержка сетевых протоколов\n- **Графический интерфейс:** Псевдографическая оболочка\n\n## Литература и источники\n\n### Ассемблер\n- Зубков С. В. «Assembler для DOS, Windows и Unix»\n- [Введение в машинный код](http://wasm.ru/article.php?article=1022001)\n- [Программирование на ассемблере под DOS](http://wasm.ru/article.php?article=1022003)\n\n### Язык C\n- Керниган Б., Ритчи Д. «Язык программирования C»\n- Шилдт Г. «Полный справочник по C»\n- [C standard library for embedded systems](https://github.com/peterzuger/libc)\n\n### Операционные системы\n - Таненбаум Э. «Современные операционные системы»\n - Таненбаум Э. «Операционные системы: Разработка и реализация»\n - [OSDEV Wiki](http://osdev.org)\n - [FlingOS™ Documentation](http://flingos.co.uk/docs/)\n\n### Архитектура ЭВМ\n- Таненбаум Э. «Архитектура компьютера»\n- Гук М. «Аппаратные средства IBM PC. Энциклопедия»\n\n---\n\nТакже вы можете подробно просмотреть в документе [DOCLINKS](./DOCLINKS.md) весь материал со ссылками.\n\n## Лицензия\n\nKintsugiOS распространяется под лицензией MIT. Подробнее см. в файле LICENSE.\n\n## Вклад в проект\n\nПриветствуются issues и pull requests. Перед внесением изменений пожалуйста:\n1. Обсудите планируемые изменения в issue\n2. Следуйте существующему кодстайлу\n3. Добавляйте комментарии на русском языке\n4. Тестируйте изменения в QEMU и Bochs\n\n## Благодарности\n\nОсобая благодарность сообществу OSDev и авторам учебных материалов, указанных в разделе \"Литература и источники\".\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\u003csub\u003eНазвание \"Kintsugi\" отсылает к японскому искусству восстановления керамики золотым лаком — метафора красоты в несовершенстве и постоянного развития.\u003c/sub\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexeev-prog%2Fkintsugios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexeev-prog%2Fkintsugios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexeev-prog%2Fkintsugios/lists"}