Skip to content

Latest commit

 

History

History
56 lines (41 loc) · 5.68 KB

File metadata and controls

56 lines (41 loc) · 5.68 KB

Требования к стандартной библиотеке C (Libc) для VLSMC

Этот документ определяет архитектурные и функциональные требования к базовой реализации стандартной библиотеки C для операционной системы RAND Elecorner 36 (VLSMC).

1. Общие принципы

  • Архитектура: 32-битный x86 (IA-32).
  • Среда выполнения: Пользовательский уровень (Ring 3), независимость от внешних библиотек (freestanding).
  • Интерфейс: Взаимодействие с ядром только через системные вызовы (int 0x80) или обертки AppAPI.
  • Безопасность указателей: Валидация через проверку на NULL и границы сегментов. Границы стека и кучи определяются через символы линкер-скрипта (например, _stack_top, _heap_start) или экспортируемые ядром глобальные переменные в crt0.
  • Стиль кода: В соответствии с глобальными правилами проекта, запрещено использование любых комментариев в исходном коде.

2. Основной функционал

2.1. Работа со строками (string.h)

  • Безопасность: Реализация strlcpy/strlcat (всегда \0). Добавление strncmp_s и memcmp_s с явной проверкой границ обоих буферов.
  • Оптимизация: SWAR-техники для длинных строк с обязательной корректной обработкой "хвостов" (partial words) для предотвращения выхода за границы буфера.
  • Функционал: strlen, strnlen, strcpy, strlcpy, strcmp, strncmp, strncmp_s, strchr, strstr.

2.2. Работа с памятью (memory.h / string.h)

  • memcpy, memmove, memset, memcmp.
  • Оптимизация под 32-битное выравнивание для повышения производительности.

2.3. Математические функции (math.h / stdlib.h)

  • Преобразование типов: atoi, itoa (десятичная и шестнадцатеричная системы).
  • Базовая арифметика для работы калькулятора (целочисленное деление, остаток).
  • Опционально: Работа с числами с плавающей точкой (требуется поддержка FPU/SSE в ядре).

3. Управление памятью (malloc.h)

Используется для выделения памяти в пользовательском режиме.

  • Аллокатор: malloc, free, realloc.
  • Фрагментация и производительность:
    • Coalescing: Обязательное объединение соседних свободных блоков.
    • Fast List: Использование отдельных быстрых списков (Fast Bins) для малых блоков (< 64 байт) для ускорения частых аллокаций.
    • Инфраструктура: Boundary Tags для эффективного освобождения за O(1).
  • Безопасность:
    • Выравнивание 16 байт (совместимость с SSE).
    • Проверка целостности метаданных (Magic Numbers) — должна включаться через флаги компиляции (опционально для релиз-сборок).

4. Форматированный ввод-вывод (stdio.h)

  • Вывод: Аналог printf. Поддержка спецификаторов %s, %d, %x, %p, %c.
  • Ввод: Функции getchar (уже есть в API) и создание обертки gets_s (безопасное чтение строки).
  • Буферизация: Реализация строковой буферизации для минимизации количества системных вызовов sys_print.

5. Безопасность и отказоустойчивость

  • Механизм errno: Введение глобальной (в будущем TLS-локальной) переменной errno. Системные ошибки (включая PermissionDenied) устанавливают errno и возвращают -1 или NULL.
  • Защита стека: Минималистичная реализация __stack_chk_fail. Она не должна зависеть от сложных функций Libc, чтобы избежать рекурсии при порче стека.
  • Валидация сисколлов: Проверка всех указателей перед передачей в int 0x80.

6. Независимость и интеграция

  • Автономность: Libc должна быть полностью независимой библиотекой.
  • Цикл зависимостей: Использование AppAPI внутри Libc категорически запрещено для предотвращения циклических зависимостей. Libc является фундаментом, на котором строится AppAPI.