{"id":35694003,"url":"https://github.com/alexeev-prog/KintsugiOS","last_synced_at":"2026-01-11T20:00:32.986Z","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":"2025-09-12T11:15:53.000Z","size":87756,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-12T13:23:37.112Z","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":"2025-09-12T11:15:57.000Z","dependencies_parsed_at":"2025-08-19T17:42:59.478Z","dependency_job_id":"1022cdea-6996-4474-aea6-ffb4d6b95c4a","html_url":"https://github.com/alexeev-prog/KintsugiOS","commit_stats":null,"previous_names":["alexeev-prog/kintsugios"],"tags_count":3,"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":28321261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-01-06T00:00:56.926Z","updated_at":"2026-01-11T20:00:32.954Z","avatar_url":"https://github.com/alexeev-prog.png","language":"C","funding_links":[],"categories":["Project 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.2.1a\nПоследняя стабильная версия: [v0.2.0a](https://github.com/alexeev-prog/KintsugiOS/releases/tag/v0.2.0a)\n\n\u003e [!CAUTION]\n\u003e KintsugiOS еще в активной стадии разработки и многие решения не финальные или нестабильные.\n\n \u003e Также я занимаюсь [переводом OSDEV-Notes](https://github.com/alexeev-prog/Osdev-Notes-RU)\n\n![](https://raw.githubusercontent.com/alexeev-prog/KintsugiOS/refs/heads/main/gallery/image.png)\n\n## Особенности\n\n### Реализовано\n- **Собственный загрузчик** с переходом из реального режима в защищённый\n- **GDT (Глобальная таблица дескрипторов)** с полноценной сегментацией памяти\n- **Продвинутое управление памятью** с двумя уровнями аллокации:\n  - Аллокатор на основе связанных блоков памяти с разделением и слиянием\n  - Страничная организация памяти (Paging) с интеграцией в аллокацию\n- **Драйверы оборудования**:\n  - VGA-экран с поддержкой цветного текста и прокрутки\n  - Клавиатура (PS/2) с обработкой модификаторов (Shift, Ctrl, Alt, Caps Lock)\n  - Таймер с программными прерываниями\n  - ATA PIO с поддержкой LBA-адресации\n- **Система прерываний** (IDT, ISR, IRQ) с кастомными обработчиками\n- **Командная оболочка \"Keramika Shell\"** с поддержкой команд:\n  - `help` — список команд\n  - `clear` — очистка экрана\n  - `end` — остановка CPU\n  - `malloc` — выделение памяти\n  - `free` — освобождение памяти\n  - `info` — информация о системе\n  - `memdump` — дамп памяти\n  - И другие...\n- **Библиотека KKLibC (Kintsugi Kernel LibC)** включая:\n  - Работу со строками, генерация числа и прочие стандартные вещи (stdlib.h)\n  - Форматированный вывод (stdio.h)\n  - Функции памяти (mem.h)\n  - Библиотека для математики (math.h)\n  - Типы данных (ctypes.h)\n  - Общий заголовочный файл kklibc.h\n  - Страничная обработка памяти (paging.h)\n  - Библиотека стандартных методов (stdlib.h)\n\n### В разработке\n - [ ] Файловая система Fat12\n - [ ] Файловая система ext2\n - [ ] Планировщик задач\n - [ ] Пользовательское пространство\n - [ ] Inter-Process Communication\n - [ ] Загрузка ELF\n - [ ] Графический интерфейс\n - [ ] Многозадачность\n - [ ] Пользовательский режим\n - [ ] Сетевой стек\n - [ ] Псевдографический интерфейс\n - [ ] Полностью реализованный LibC\n\n### Готово\n - [x] Виртуальная память (Paging)\n - [x] Динамические аллокаторы памяти\n - [x] Чувствительность к регистру\n - [x] Драйвер ATA PIO\n - [x] Система прерываний с обработкой исключений\n - [x] Полноценная shell-оболочка\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\nПроверить готовность окружения можно скриптом:\n```bash\n./check-env.sh\n```\n\n## Сборка и запуск\n\n### Базовая сборка\n```bash\nmake\n```\n\n### Создание образа диска (hdd) и запуск в QEMU\n```bash\nmake run\n```\n\n### Создание образа диска fda и запуск в QEMU\n```bash\nmake run_fda\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 загрузчик считывает ядро с диска в память по адресу 0x1000.\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. Загрузчик загружает ядро с диска в память по адресу 0x1000, используя функции BIOS.\n4. Загрузчик загружает GDT и переключает процессор в защищенный режим.\n5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x1000.\n\n## Команды оболочки\n\nKintsugiOS включает оболочку \"Keramika Shell\" со следующими командами:\n\n- `end` - остановка процессора\n- `clear` - очистка экрана\n- `malloc \u003csize\u003e` - выделение памяти (куча)\n- `free \u003caddress\u003e` - освобождение памяти\n- `info` - информация о системе\n- `memdump` - дамп памяти\n- `echp \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- `fib \u003cnum\u003e` - алгоритм фибоначчи\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     + **Интеграция с Paging:** Функция `expand_heap` динамически запрашивает новые физические страницы через менеджер виртуальной памяти (`paging.h`) при нехватке памяти в куче, что делает кучу по-настоящему расширяемой.\n     + **API:** Предоставляет знакомые API: `kmalloc`, `kfree`, `krealloc`.\n     + **Отладка:** Содержит функции для отладки и мониторинга состояния кучи: `kmemdump`, `get_meminfo`.\n\n + **`paging.h` / `paging.c`**: **Менеджер виртуальной памяти.** Один из самых низкоуровневых и критичных модулей.\n     + Организует 4-гигабайтное виртуальное адресное пространство ядра.\n     + Реализует механизм страничной адресации x86 с двумя уровнями таблиц (Page Directory и Page Table).\n     + Предоставляет функции для выделения (`alloc_frame`) и освобождения (`free_frame`) физических кадров памяти.\n     + Содержит обработчик исключения Page Fault.\n     + Предоставляет интерфейс `pkmalloc` для выделения выровненных по странице блоков памяти с возможностью получения физического адреса, что необходимо для работы с DMA и другими hardware.\n\n + **`math.h` / `math.c`**: Набор математических функций и алгоритмов, включая вычисление чисел Фибоначчи, бинарное возведение в степень, факториал и дискриминант.\n\n + **`ctypes.h` / `ctypes.c`**: Полная реализация стандартных функций классификации и преобразования символов (`isalpha`, `isdigit`, `toupper`, etc.).\n\n + **`kklibc.h`**: Главный заголовочный файл, который включает все модули библиотеки для удобства.\n\n**Философия дизайна:**\n\n + **Префиксы `k` и `p`:** Префикс `k` (например, `kmalloc`) означает принадлежность к ядру (kernel) и его куче. Префикс `p` (например, `pkmalloc`) означает работу с низкоуровневой страничной памятью (paging).\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- **Файловые системы:** Реализация 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"}