← 5. WrmOS: корневой пэйджер Sigma0
Содержание 6.1 Описание 6.2 Параметры конфигурации 6.3 Вызовы Alpha (Alpha calls)
6.1 Описание [наверх]
Корневое приложение — это начальное приложение в основанной на принципах L4 операционной системе. Корневое приложение является привилегироаванным приложением и может осуществлять привилегированные системные вызовы. Например, только корневое приложение (и корневой пэйджер) может создать/удалить/модифицировать адресные пространства и трэды. В WrmOS корневое приложение называется Alpha.
Корневое приложение Alpha должно осуществлять следующие действия:
- прочитать конфигурационный файл времени выполнения, описывающий системные ресурсы и список приложений;
- создать адресное пространство и трэд для каждого приложения из списка приложений и запустить его;
- обрабатывать пэйджфолты от приложений во время их выполнения;
- обрабатывать запросы по протоколу Alpha-protocol от приложений.
6.2 Параметры конфигурации [наверх]
Корневое приложение Alpha имеет следующие конфигурационные параметры:
Name | Location | Description |
---|---|---|
usr_app_dbg | cfg/prj/<project-name>.prj | Отладочный флаг для приложений. Может иметь значение 0 или 1. Флаг позволяет использовать отладочную конфигурацию проекта с assert'ами, дополнительной отладочной выдачей и т.д. (для значения 1) или использовать релизную конфигурацию (для значения 0). |
6.3 Вызовы Alpha (Alpha calls) [наверх]
Как упоминалось выше, только Alpha может создавать/удалять/модифицировать адресные пространства и трэды, а так же выполнять другие привилегированные системные вызовы. Так же, во время своего запуска Alpha получает все системные ресурсы (память, устройства, прерывания и т.д.) и контролирует доступ к ним.
Чтобы контролировать доступ пользовательских приложений к ресурсам ОС (адресные пространства, трэды, системные устройства и т.д.) Alpha предоставляет вызовы Alpha (Alpha calls) — сообщения IPC с определённой метком и форматом. Вызовы Alpha используются для реализации WrmOS API. Описание вызовов Alpha находится ниже:
Вызов Alpha | WrmOS API | Описание |
---|---|---|
Map IO | wrm_dev_map_io() | Замапить MMIO устройство к вызывающему адресному пространству. |
Attach interrupt | wrm_dev_attach_int() | Установить вызывающий трэд в качестве обработчика прерываний. |
Detach interrupt | wrm_dev_detach_int() | Удалить вызывающий трэд из обработчиков прерываний. |
Get usual memory | wrm_mem_get_usual() | Получить от Alpha обычную память, разрешённую для вызывающего приложения. |
Get named memory | wrm_mem_get_named() | Получить от Alpha именованную память, разрешённую для вызывающего приложения. |
Create thread | wrm_thread_create() | Создать трэд. |
Create task | wrm_task_create() | Создать таск (адресное пространство). |
Register named thread | wrm_nthread_register() | Зарегистрировать трэд по имени. Это позволяет другим приложениям узнать идентификатор трэда по зарегистрированному имени. |
Get named thread ID | wrm_nthread_get_id() | Получить идентификатор трэда по его имени. |
Get app thread IDs | wrm_app_threads() | Получить диапазон идентификаторов трэдов для запрашиваемого приложения. |