6.1 Сравнение архитектур

Предыдущая  Содержание  Следующая V*D*V

В этом разделе мы сравним архитектуру традиционной RTOS со встроенным Linux.Традиционная RTOS обычно базируется на плоской модели памяти. Все приложения вместе с ядром являются частью единого образа, который затем загружается в память.Службы ядра, такие как планировщики, управление памятью, таймеры и тому подобные, работают в том же физическом адресном пространстве, что и пользовательские приложения. Приложения запрашивают любую службу ядра с помощью простого интерфейса вызова функции. Пользовательские приложения также делят общее адресное пространство между собой. Рисунок 6.1 показывает плоскую модель памяти традиционной RTOS.

 

Рисунок 6.1 Плоская модель памяти ОСРВ.

Рисунок 6.1 Плоская модель памяти ОСРВ.

 

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

Linux, с другой стороны, для предоставления отдельного виртуального адресного пространства для каждого процесса использует MMU. Виртуальное адресное пространство защищено; это означает, что процесс не может получить доступ к любой структуре данных, принадлежащей другому процессу. Код ядра и структуры данных также защищены. Доступ к службам ядра пользовательскими приложениями осуществляется через чётко определенный интерфейс системных вызовов. Рисунок 6.2 показывает модель памяти Linux на основе MMU.

 

Рисунок 6.2 Модель памяти Linux.

Рисунок 6.2 Модель памяти Linux.

 

С этого места любое упоминание RTOS относится к традиционной RTOS с плоской моделью памяти и без защиты памяти, если не указано иное.

 

Проблемами переноса, возникающими из вышеописанного сравнения являются:

 

Приложения, которые "делят" единое адресное пространство в RTOS должны быть перенесены на модель защищённого виртуального адресного пространства Linux.

RTOS обычно предоставляет свой родной набор программных интерфейсов для различных служб, таких как создание задачи, IPC (interprocess communicaton, межпроцессное взаимодействие), таймеры, и так далее. Таким образом, должно быть определено соответствие каждого такого родного API с эквивалентным API Linux.

Интерфейс ядра в Linux не является простым интерфейсом вызова функции. Так что пользовательские приложения не могут делать какие-либо прямые вызовы драйвера или ядра.

 

Предыдущая  Содержание  Следующая