7. WrmOS: API

← 6. WrmOS: корневое приложение Alpha

Содержание
7.1 Описание
7.2 L4 API
7.3 WrmOS API

7.1 Описание [наверх]


Одна часть API операционной системы предоставляется посредством L4 API, который описывается в документе L4 Kernel Reference Manual Version X.2. Другая часть API операционной системы предоставляется посредством WrmOS API, который включает в себя системные вызовы, вызовы Alpha и дополнительные функции. WrmOS API частично покрывает L4 API.

7.2 L4 API [наверх]


Системные вызовы L4 и вспомогательные функции для них обёрнуты в C-функции, которые перечислены ниже. Все эти функции находятся в заголовочном файле lib/l4/inc/l4_api.h.

Функция Описание
l4_kip() Получить адрес KIP (Kernel Interface Page) посредством системного вызова или из сохранённого в памяти значения.
l4_utcb() Получить адрес UTCB (User Thread Control Block). Системные вызовы для этого не используются.
l4_ipc() Осуществить системный вызов IPC (Inter Process Communication). Он используется для обмена данными и синхронизации трэдов. Он может иметь только фазу отправки, только фазу получения или обе эти фазы.
l4_send() Осуществить только фазу отправки системного вызова IPC. Это вспомогательная функция для l4_ipc().
l4_receive() Осуществить только фазу получения системного вызова IPC. Это вспомогательная функция для l4_ipc().
l4_unmap() Осуществить системный вызов Unmap.
l4_thread_control() Осуществить системный вызов Thread Control.
l4_space_control() Осуществить системный вызов Space Control.
l4_memory_control() Осуществить системный вызов Memory Control.
l4_system_clock() Получить системное время посредством системного вызова System Clock.
l4_thread_switch() Осуществить системный вызов Thread Switch.
l4_schedule() Осуществить системный вызов Schedule.
l4_exchange_registers() Осуществить системный вызов Exchange Registers.
l4_kdb() Осуществить системный вызов Kernel Debug.
l4_kdb_putsn() Напечатать сообщение в консоль посредством системного вызова KDB. Это вспомогательная функция для l4_kdb().
l4_exreg_ip() Прочитать и/или установить регистр IP (Instruction Pointer) для указанного трэда. Это вспомогательная функция для l4_exchange_registers().
l4_exreg_flags() Прочитать и/или установить флаги для указанного трэда. Это вспомогательная функция для l4_exchange_registers().
l4_exreg_pager() Прочитать и/или установить пэйджер для указанного трэда. Это вспомогательная функция для l4_exchange_registers().

7.3 WrmOS API [наверх]


WrmOS API предоставляет контроль за всеми объектами ОС такими как трэды, мьютексы, устройства и другие. Все функции находятся в заголовочных файлах lib/wrmos/inc/wrm_*.h. Они перечислены ниже.

Function Description
Функции для работы с приложениями (lib/wrmos/inc/wrm_app.h)
wrm_app_threads() Получить диапазон идентификаторов трэдов для указанного приложения.
Функции для работы с трэдами (lib/wrmos/inc/wrm_thr.h)
wrm_task_create() Создать новый таск (адресное пространство) и трэд внутри него.
wrm_thread_create() Создать новый трэд внутри указанного таска (адресного пространства).
Функции для работы с именованными трэдами (lib/wrmos/inc/wrm_nthr.h)
wrm_nthread_register() Зарегистрировать трэд по имени. Это позволяет другим приложениям узнать идентификатор трэда по зарегистрированному имени.
wrm_nthread_get_id() Получить идентификатор трэда по его имени.
Функции для работы с устройствами (lib/wrmos/inc/wrm_dev.h)
wrm_dev_map_io() Замапить MMIO устройство к вызывающему адресному пространству.
wrm_dev_attach_int() Установить вызывающий трэд в качестве обработчика прерываний.
wrm_dev_detach_int() Удалить вызывающий трэд из обработчиков прерываний.
wrm_dev_wait_int() Ожидать прерывания.
Функции для логирования и вывода в консоль (lib/wrmos/inc/wrm_log.h)
wrm_loge() Напечатать сообщение об ошибке.
wrm_logw() Напечатать сообщение о предупреждении.
wrm_logi() Напечатать информационное сообщение.
wrm_logd() Напечатать отладочное (debug) сообщение.
Функции для работы с памятью (lib/wrmos/inc/wrm_mem.h)
wrm_mem_get_usual() Получить от Alpha обычную память, разрешённую для вызывающего приложения.
wrm_mem_get_named() Получить от Alpha именованную память, разрешённую для вызывающего приложения.
Функции для работы с пулом памяти (lib/wrmos/inc/wrm_mpool.h)
wrm_mpool_dump() Вывести в консоль состояние пула памти для текущего приложения.
wrm_mpool_add() Добавить память в пул памяти.
wrm_mpool_alloc() Получить память из пула памяти.
wrm_mpool_alloc_log2sz() Получить память из пула памяти.
wrm_mpool_size() Получить суммарный размер оставшейся в пуле памяти.
wrm_malloc() Враппер для аллоцирования памяти, используется в качестве malloc-callback в реализации стандартной библиотеки wlibc.
Функции для работы с мьютексами (lib/wrmos/inc/wrm_mtx.h)
wrm_mtx_init() Инициализировать структуру мьютекса.
wrm_mtx_destroy() Деинициализировать структуру мьютекса.
wrm_mtx_lock() Заблокировать мьютекс.
wrm_mtx_unlock() Разблокировать мьютекс.
Функции для работы с семафорами (lib/wrmos/inc/wrm_sem.h)
wrm_sem_init() Инициализировать структуру семафора.
wrm_sem_destroy() Деинициализировать структуру семафора.
wrm_sem_value() Получить значение семафора.
wrm_sem_wait() Ожидать семафор.
wrm_sem_post() Взвести семафор.
Функции для работы со спин блокировками (lib/wrmos/inc/wrm_slock.h)
wrm_spinlock_init() Инициализировать структуру спин блокировки.
wrm_spinlock_lock() Заблокировать спин блокировку.
wrm_spinlock_unlock() Разблокировать спин блокировку.

← 6. WrmOS: корневое приложение Alpha