2015-06-01 5 views
2

Я планирую запустить RTOS, например Nuttx, как процесс других RTOS, например FreeRTOS, так что задачи freertos и Nuttx, работающие как задача Freertos, будут сосуществовать.RTOS в RTOS

Будет ли это осуществимой реализацией, учитывая, что базовое оборудование представляет собой одноядерный процессор ARM cortex A8? Какие изменения могут потребоваться, если реализация не основана на концепции VM?

+0

Как планировщик NUTTX используется? – sniper

ответ

1

Ваше требование в двух словах состоит в том, чтобы позволить GUEST RTOS полностью работать в областях основной ОСНОВНОЙ ОСНОВНОЙ ОСНОВЫ. Первым ответом будет использование расширения виртуализации, но у A8-процессора этого нет, поэтому он будет управлять этим вариантом. Без расширений виртуализации вы должны прибегнуть к одному из следующих методов и потребовать много изменений кода.

Вариант 1 - Порт гостевой ОС API,

Возьмите все гостевую ОС API, и заменить их реализацию, так что он имитирует требуемое поведение API путем использования хостовой ОС по API. Технически теперь ваша GUEST OS не будет иметь планировщика и будет уменьшена до уровня переноса поверх вашей ОС HOST. Этот метод используется компаниями, когда им нужны их программные решения для работы через несколько RTOS. Они напишут свое программное решение на основе RTOS. Когда клиент приходит к ним с требованием запуска программного обеспечения на своих RTOS, они просто переносят реализации интерфейса RTOS на RTOS клиента.

Вариант 2 - Para-виртуализация

Ваш гость RTOS пользователя и пространство ядра должны как работать внутри пользовательского пространства вашего хоста RTOS. Давайте разложим проблему на несколько частей.

Обработка Привилегированные Инструкции

Когда гостевой ОС, при выполнении в режиме «Кернел» пытается выполнить привилегированную команду, вызовет прерывание команд UNDEF. Вы должны изменить обработчик прерывания команды undef вашего ядра хоста, чтобы захватить/перехватить эти инструкции и действовать на них. Все привилегированные инструкции должны быть захвачены/перехвачены и «имитированы». Есть несколько инструкций, которые не будут ловить ловушку, но нужно будет обрабатывать путем изменения кода. Например. Если ваш код ядра считывает CPSR для подтверждения режима выполнения, CPSR скажет, что режим является режимом пользователя. (Эта команда не будет вызывать инструкция прервать, чтобы вы не могли следовать ловушку и имитировать модель. Единственный способ для идентификации, поиска и заменить эти инструкции в вашей гостевой ОС кодовую.) Блок

управления памятью

Если происходит нарушение привилегий, то Data Abort будет запущен на вашу ОС хоста. Он должен быть перенаправлен на гостевую ОС.

Прерывание

Вы должны заменить GUEST драйвер контроллера прерываний ОС с фиктивными вызовами SVC, который будет вызывать ваш HOST ОСА прерывания установки.

Таймеров

Вы должны изменить драйвер таймера ГОСТЕВОГО для учета «потерянные» клещи, когда вы запускали свои задачи ОС HOST.

Аппаратные драйверы

Все другие аппаратные драйверы, используемые гостевой ОС должны быть модифицированы, чтобы обеспечить совместное использование устройств между гостем и принимающей стороной.

Планировщиков

гостевой ОС планировщик теперь работает внутри (и, таким образом, находится во власти) другой планировщик (HOST OS Scheduler).

+0

спасибо за информацию ребята, есть одна маленькая деталь, которую я пропустил, задавая вопрос, хотя - весь мой код должен запускаться в режиме SVC, поэтому нет концепции пространства пользователя и ядра ... – user66350

0

Возможна. Вам нужно разделить ресурсы: память, таймеры, прерывания и т. Д. Так что ОС «Хост» (FreeRTOS) даже не «знает» о ресурсах, используемых операционной системой «Гость» (Nuttx).

Для Cortex-A8 вы можете использовать IRQ для FreeRTOS и FIQ для GuestOS. Это позволит вам не переписывать контроллер IRQ (но, опять же, убедитесь, что Host не контролирует FIQ после запуска GuestOS).

Возможно, для переключения контекста могут потребоваться некоторые изменения: вам необходимо установить переключатель контекста Host-Host, переключатель Host-Guest (и Guest-Host) и гостевой гостевой контекст.

0

Хотя не прямой ответ на ваш вопрос, обратитесь к этой проблеме на уровне проектирования, разделите код, который зависит от аппаратного обеспечения (создайте API), и сделайте код уровня приложения независимым от базовой ОС или среды выполнения, а скорее зависит от конкретной реализации пусть это зависит от API.

, где когда-либо нуждался порт аппаратных средств (ОС) зависит от кода к основной OS/Время воспроизведения