5. WrmOS: корневой пэйджер Sigma0 →
Содержание 4.1 Описание 4.2 Параметры конфигурации 4.3 Системные вызовы
4.1 Описание [наверх]
Основным документом на микроядро L4 является L4 Kernel Reference Manual Version X.2. Он описывает API и ABI ядра и принципы семейcтва операционных систем L4.
Ядро — это основная часть WrmOS, которая выполняется на целевом процессоре в привилегированном режиме. Ядром должны осуществляться следующие действия:
- завершение инициализации системы
- инициализация MMU
- инициализация UART для ядра
- инициализация контроллера прерываний
- создать приложение корневой пэйджер Sigma0 и запустить его
- во время работы системы обрабатывать исключительные ситуации, прерывания и системные вызовы
4.2 Параметры конфигурации [наверх]
Ядро имеет следующие конфигурационные параметры:
Имя | Файл | Описание |
---|---|---|
usr_krn_dbg | cfg/prj/<project-name>.prj | Отладочный флаг ядра. Может иметь значение 0 или 1. Флаг позволяет использовать отладочную конфигурацию проекта с assert'ами, дополнительной отладочной выдачей и т.д. (для значения 1) или использовать релизную конфигурацию (для значения 0). |
usr_krn_log | Флаг включения логирования в ядре. Может быть 0 или 1. Флаг включает внутреннее логирование в ядре, это позволяет видеть активность и собятия ядра. | |
krn_vaddr | cfg/plt/<platform-name>.plt | Стартовый адрес виртуального адресного пространства ядра. |
krn_tick_usec | Тик ядра в микросекундах. Периодический таймер ядра будет генерировать прерывание каждые krn_tick_usec микросекунд. | |
krn_uart_paddr | Физический адрес UART для ядра. | |
krn_uart_sz | Размер UART для ядра в байтах. | |
krn_uart_bitrate | Битовая скорость UART ядра. | |
krn_uart_irq | Номер прерывания UART ядра. | |
krn_intc_paddr | Физический адрес контроллера прерываний. | |
krn_intc_sz | Размер контроллера прерываний в байтах. | |
krn_timer_paddr | Физический адрес таймера ядра. | |
krn_timer_sz | Размер таймера ядра в байтах. | |
krn_timer_irq | Номер прерывания таймеря ядра. |
4.3 Системные вызовы [наверх]
Полное описание системных вызовов операционных систем L4 можно найти в документе L4 Kernel Reference Manual Version X.2. Краткое описание системных вызовов находится ниже:
System call | Privileged | L4 API | Description |
---|---|---|---|
Kernel Interface | Any applications | l4_kip() | Получить адрес KIP (Kernel Interface Page). |
Exchange Registers | Any applications | l4_exchange_registers() | Прочитать или модифицировать: stack pointer, instruction pointer, thread flags, pager, user defined handle. |
Thread Control | Root-pager, Root-task | l4_thread_control() | Корневой пэйджер (root-pager) Sigma0 или корневое приложение (root-task) Alpha могут создать или удалить трэд. |
System Clock | Any applications | l4_system_clock() | Получить текущее значение системного времени (время работы системы с момента старта в микросекундах). |
Thread Switch | Any applications | l4_thread_switch() | Освободить текущий процессор. |
Schedule | Any applications | l4_schedule() | Изменить параметры трэда: приоритет, величину кванта времени и другие параметры планирования трэдов. |
IPC | Any applications | l4_ipc() l4_send() l4_receive() |
Межпроцессное взаимодействие (IPC) — основная операция для межпроцессного взаимодействия и синхронизации. |
Unmap | Any applications | l4_unmap() | Отмапить память от вызывающего адресного пространства. |
Space Control | Root-pager, Root-task | l4_space_control() | Корневой пэйджер (root-pager) Sigma0 или корневое приложение (root-task) Alpha могут конфигурировать адресное пространство. |
Processor Control | Root-pager, Root-task | --- | Управление внутренней частотой, внешней частотой или электрическим напряжением для системного процессора. |
Memory Control | Root-pager, Root-task | l4_memory_control() | Установить атрибуты страницы памяти. Например, кэшируемая или нет. |
Kernel Debugger | Any applications | l4_kdb() | Вызвать отладчик ядра. |