Skip to content

Commit 7eb2fbd

Browse files
committed
update readme
1 parent 7e10152 commit 7eb2fbd

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit 7e10152d363ffbde636a316c6da7d99f0257f5ec
2+
Author: Alexeev Bronislav <[email protected]>
3+
Date: Mon Sep 1 01:11:27 2025 +0700
4+
5+
small update for util scripts
6+
17
commit 3f710e02f6bc2fd28d65b73e38dc8061b36d3d2c
28
Author: Alexeev Bronislav <[email protected]>
39
Date: Sun Aug 31 22:32:14 2025 +0700

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,67 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
165165
- `binpow <base> <exponent>` - бинарное возведение в степень
166166
- `fib <num>` - алгоритм фибоначчи
167167

168+
## Kintsugi Kernel LibC
169+
KKLibc — это собственная реализация стандартной библиотеки языка C, разработанная специально для нужд ядра Kintsugi OS. В отличие от пользовательских libc (вроде glibc), она тесно интегрирована с архитектурой ядра, лишена избыточности и содержит только самые необходимые функции для работы в пространстве ядра.
170+
171+
**Структура и основные модули:**
172+
173+
Библиотека организована в набор модулей, каждый из которых отвечает за свою предметную область:
174+
175+
+ **`stdlib.h` / `stdlib.c`**: Ядро библиотеки. Содержит:
176+
+ **Преобразования данных:** `itoa`, `utoa`, `atoi`, `hex_strtoint` для конвертации между числами и строками в различных системах счисления.
177+
+ **Работа со строками:** Полный набор функций для манипуляций со строками: `strlen`, `strcpy`/`strncpy`, `strcmp`/`strncmp`, `strcat`/`strncat`, `strchr`, `strstr`, `strtok`, `strspn`, `strcspn`.
178+
+ **Работа с памятью:** Аналоги стандартных `memcpy`, `memset`, `memmove`, `memcmp`, `memchr`, а также низкоуровневые `memory_set`, `u32memory_set`.
179+
+ **Генерация псевдослучайных чисел:** Реализация на основе быстрого алгоритма `xorshift32` (`rand`) и функция для получения числа в диапазоне (`rand_range`).
180+
+ **Управление системой:** Функции `reboot()` и `wait(int ms)` для взаимодействия с железом.
181+
+ **Форматированный вывод в буфер:** Реализации `sprintf`, `snprintf` и `vsnprintf` для безопасного и небезопасного формирования строк.
182+
+ *Утилиты:* Алгоритм нечеткого поиска `fuzzy_search` для будущего использования в интерфейсах.
183+
184+
+ **`stdio.h` / `stdio.c`**: Модуль форматированного вывода. Реализует функции `printf`, `printf_colored` и `printf_at`, которые напрямую взаимодействуют с драйвером экрана (`screen.h`), обеспечивая вывод текста в заданном месте и цвете.
185+
186+
+ **`mem.h` / `mem.c`**: **Менеджер памяти (кучи) ядра.** Реализует динамическое выделение памяти внутри ядра.
187+
+ **Аллокатор:** Использует алгоритм с разделением и слиянием свободных блоков памяти для минимизации фрагментации.
188+
+ **Интеграция с Paging:** Функция `expand_heap` динамически запрашивает новые физические страницы через менеджер виртуальной памяти (`paging.h`) при нехватке памяти в куче, что делает кучу по-настоящему расширяемой.
189+
+ **API:** Предоставляет знакомые API: `kmalloc`, `kfree`, `krealloc`.
190+
+ **Отладка:** Содержит функции для отладки и мониторинга состояния кучи: `kmemdump`, `get_meminfo`.
191+
192+
+ **`paging.h` / `paging.c`**: **Менеджер виртуальной памяти.** Один из самых низкоуровневых и критичных модулей.
193+
+ Организует 4-гигабайтное виртуальное адресное пространство ядра.
194+
+ Реализует механизм страничной адресации x86 с двумя уровнями таблиц (Page Directory и Page Table).
195+
+ Предоставляет функции для выделения (`alloc_frame`) и освобождения (`free_frame`) физических кадров памяти.
196+
+ Содержит обработчик исключения Page Fault.
197+
+ Предоставляет интерфейс `pkmalloc` для выделения выровненных по странице блоков памяти с возможностью получения физического адреса, что необходимо для работы с DMA и другими hardware.
198+
199+
+ **`math.h` / `math.c`**: Набор математических функций и алгоритмов, включая вычисление чисел Фибоначчи, бинарное возведение в степень, факториал и дискриминант.
200+
201+
+ **`ctypes.h` / `ctypes.c`**: Полная реализация стандартных функций классификации и преобразования символов (`isalpha`, `isdigit`, `toupper`, etc.).
202+
203+
+ **`datatypes/vector.h` / `vector.c`**: Реализация динамического массива (вектора) — фундаментальной структуры данных, которая будет полезна для управления списками процессов, дескрипторов файлов и т.д.
204+
205+
+ **`kklibc.h`**: Главный заголовочный файл, который включает все модули библиотеки для удобства.
206+
207+
**Философия дизайна:**
208+
209+
+ **Префиксы `k` и `p`:** Префикс `k` (например, `kmalloc`) означает принадлежность к ядру (kernel) и его куче. Префикс `p` (например, `pkmalloc`) означает работу с низкоуровневой страничной памятью (paging).
210+
+ **Самостоятельность:** Библиотека минимально зависима от внешнего кода, что является обязательным требованием для кода ядра.
211+
+ **Производительность над избыточностью:** Функции реализованы с оглядкой на скорость и минимальный расход памяти, а не на абсолютную совместимость со стандартом.
212+
213+
KKLibc является живым, развивающимся проектом и продолжает обрастать новыми функциями и оптимизациями по мере развития самой Kintsugi OS.
214+
215+
---
216+
217+
### Планы на будущее для KKLibc
218+
219+
+ **Решение проблем с кучей:** Текущая архитектура с двумя аллокаторами (`kmalloc` и `pkmalloc`) мощная, но требует доработки для полной стабильности. Основная задача — **устранить все возможные scenarious повреждения кучи**, особенно в моменты, когда `kmalloc` вызывает `expand_heap`, который, в свою очередь, через `pkmalloc` и `alloc_frame` запрашивает новые физические страницы. Необходимо тщательно протестировать это взаимодействие на предмет race condition и корректности обновления внутренних структур данных аллокатора.
220+
+ **Внедрение кананингов (Canaries):** Для отладки повреждения кучи планируется добавить механизм "канареек" — специальных значений, размещаемых вокруг выделенных блоков памяти. При освобождении памяти или в отладочной сборке будет проверяться целостность этих канареек, что позволит сразу обнаружить операции записи за пределами выделенного блока (buffer overflow).
221+
+ **Отладочный аллокатор:** Реализация специальной версии `kmalloc`, которая ведет логи всех операций выделения/освобождения памяти (с указанием размера, адреса и callstack'а). Это незаменимый инструмент для поиска утечек памяти (memory leaks) в ядре.
222+
+ **Планировщик и синхронизация:** Когда будет реализован планировщик задач и многозадачность, **критически важным станет сделать аллокатор потокобезопасным**. Это потребует добавления механизмов синхронизации (спинлоков или мьютексов) внутрь функций `kmalloc` и `kfree`.
223+
+ **Поддержка пользовательского пространства:** В будущем, когда появится разграничение на режим ядра и пользовательский режим, KKLibc будет разделена. Большая часть останется в ядре, а для пользовательского пространства будет создана отдельная, возможно, урезанная и более безопасная версия библиотеки.
224+
+ **Оптимизация производительности:** Постоянный процесс: переписывание ключевых функций (например, `memcpy`, `memset`) на ассемблере для максимальной скорости, внедрение более эффективных алгоритмов поиска свободных блоков памяти.
225+
+ **Новые модули:** По мере необходимости будут добавляться новые структуры данных (связные списки, хэш-таблицы), функции для работы со строками в кодировке UTF-8 и другие утилиты, требуемые развивающейся операционной системой.
226+
227+
Развитие KKLibc напрямую связано с развитием Kintsugi OS. Каждый новый системный вызов, драйвер или компонент ядра будет опираться на ее надежное и эффективное API.
228+
168229
## Литература и источники
169230

170231
### Ассемблер
@@ -175,6 +236,7 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
175236
### Язык C
176237
- Керниган Б., Ритчи Д. «Язык программирования C»
177238
- Шилдт Г. «Полный справочник по C»
239+
- [C standard library for embedded systems](https://github.com/peterzuger/libc)
178240

179241
### Операционные системы
180242
- Таненбаум Э. «Современные операционные системы»

0 commit comments

Comments
 (0)