← 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() | Разблокировать спин блокировку. |