Этот документ определяет архитектурные и функциональные требования к базовой реализации стандартной библиотеки C для операционной системы RAND Elecorner 36 (VLSMC).
- Архитектура: 32-битный x86 (IA-32).
- Среда выполнения: Пользовательский уровень (Ring 3), независимость от внешних библиотек (freestanding).
- Интерфейс: Взаимодействие с ядром только через системные вызовы (
int 0x80) или оберткиAppAPI. - Безопасность указателей: Валидация через проверку на
NULLи границы сегментов. Границы стека и кучи определяются через символы линкер-скрипта (например,_stack_top,_heap_start) или экспортируемые ядром глобальные переменные вcrt0. - Стиль кода: В соответствии с глобальными правилами проекта, запрещено использование любых комментариев в исходном коде.
- Безопасность: Реализация
strlcpy/strlcat(всегда\0). Добавлениеstrncmp_sиmemcmp_sс явной проверкой границ обоих буферов. - Оптимизация: SWAR-техники для длинных строк с обязательной корректной обработкой "хвостов" (partial words) для предотвращения выхода за границы буфера.
- Функционал:
strlen,strnlen,strcpy,strlcpy,strcmp,strncmp,strncmp_s,strchr,strstr.
memcpy,memmove,memset,memcmp.- Оптимизация под 32-битное выравнивание для повышения производительности.
- Преобразование типов:
atoi,itoa(десятичная и шестнадцатеричная системы). - Базовая арифметика для работы калькулятора (целочисленное деление, остаток).
- Опционально: Работа с числами с плавающей точкой (требуется поддержка FPU/SSE в ядре).
Используется для выделения памяти в пользовательском режиме.
- Аллокатор:
malloc,free,realloc. - Фрагментация и производительность:
- Coalescing: Обязательное объединение соседних свободных блоков.
- Fast List: Использование отдельных быстрых списков (Fast Bins) для малых блоков (< 64 байт) для ускорения частых аллокаций.
- Инфраструктура: Boundary Tags для эффективного освобождения за O(1).
- Безопасность:
- Выравнивание 16 байт (совместимость с SSE).
- Проверка целостности метаданных (Magic Numbers) — должна включаться через флаги компиляции (опционально для релиз-сборок).
- Вывод: Аналог
printf. Поддержка спецификаторов%s,%d,%x,%p,%c. - Ввод: Функции
getchar(уже есть в API) и создание оберткиgets_s(безопасное чтение строки). - Буферизация: Реализация строковой буферизации для минимизации количества системных вызовов
sys_print.
- Механизм errno: Введение глобальной (в будущем TLS-локальной) переменной
errno. Системные ошибки (включаяPermissionDenied) устанавливаютerrnoи возвращают-1илиNULL. - Защита стека: Минималистичная реализация
__stack_chk_fail. Она не должна зависеть от сложных функций Libc, чтобы избежать рекурсии при порче стека. - Валидация сисколлов: Проверка всех указателей перед передачей в
int 0x80.
- Автономность: Libc должна быть полностью независимой библиотекой.
- Цикл зависимостей: Использование
AppAPIвнутри Libc категорически запрещено для предотвращения циклических зависимостей. Libc является фундаментом, на котором строитсяAppAPI.