You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+62Lines changed: 62 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -165,6 +165,67 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
165
165
-`binpow <base> <exponent>` - бинарное возведение в степень
166
166
-`fib <num>` - алгоритм фибоначчи
167
167
168
+
## Kintsugi Kernel LibC
169
+
KKLibc — это собственная реализация стандартной библиотеки языка C, разработанная специально для нужд ядра Kintsugi OS. В отличие от пользовательских libc (вроде glibc), она тесно интегрирована с архитектурой ядра, лишена избыточности и содержит только самые необходимые функции для работы в пространстве ядра.
170
+
171
+
**Структура и основные модули:**
172
+
173
+
Библиотека организована в набор модулей, каждый из которых отвечает за свою предметную область:
+**Преобразования данных:**`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`) при нехватке памяти в куче, что делает кучу по-настоящему расширяемой.
+**Отладка:** Содержит функции для отладки и мониторинга состояния кучи: `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
+
168
229
## Литература и источники
169
230
170
231
### Ассемблер
@@ -175,6 +236,7 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
175
236
### Язык C
176
237
- Керниган Б., Ритчи Д. «Язык программирования C»
177
238
- Шилдт Г. «Полный справочник по C»
239
+
-[C standard library for embedded systems](https://github.com/peterzuger/libc)
0 commit comments