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

← 5. WrmOS: корневой пэйджер Sigma0

7. WrmOS: API →

Содержание
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() Получить диапазон идентификаторов трэдов для запрашиваемого приложения.

← 5. WrmOS: корневой пэйджер Sigma0

7. WrmOS: API →