6.1 Сравнение архитектур |
Предыдущая Содержание Следующая |
![]() |
В этом разделе мы сравним архитектуру традиционной RTOS со встроенным Linux.Традиционная RTOS обычно базируется на плоской модели памяти. Все приложения вместе с ядром являются частью единого образа, который затем загружается в память.Службы ядра, такие как планировщики, управление памятью, таймеры и тому подобные, работают в том же физическом адресном пространстве, что и пользовательские приложения. Приложения запрашивают любую службу ядра с помощью простого интерфейса вызова функции. Пользовательские приложения также делят общее адресное пространство между собой. Рисунок 6.1 показывает плоскую модель памяти традиционной RTOS.
![]() Рисунок 6.1 Плоская модель памяти ОСРВ.
Основным недостатком такой RTOS является то, что она основана на плоской модели памяти. В целях защиты памяти не использовался MMU. Следовательно, любое пользовательское приложение может повредить код ядра или данных. Это может также повреждать структуры данных другого приложения. Linux, с другой стороны, для предоставления отдельного виртуального адресного пространства для каждого процесса использует MMU. Виртуальное адресное пространство защищено; это означает, что процесс не может получить доступ к любой структуре данных, принадлежащей другому процессу. Код ядра и структуры данных также защищены. Доступ к службам ядра пользовательскими приложениями осуществляется через чётко определенный интерфейс системных вызовов. Рисунок 6.2 показывает модель памяти Linux на основе MMU.
![]() Рисунок 6.2 Модель памяти Linux.
С этого места любое упоминание RTOS относится к традиционной RTOS с плоской моделью памяти и без защиты памяти, если не указано иное.
Проблемами переноса, возникающими из вышеописанного сравнения являются:
▪Приложения, которые "делят" единое адресное пространство в RTOS должны быть перенесены на модель защищённого виртуального адресного пространства Linux. ▪RTOS обычно предоставляет свой родной набор программных интерфейсов для различных служб, таких как создание задачи, IPC (interprocess communicaton, межпроцессное взаимодействие), таймеры, и так далее. Таким образом, должно быть определено соответствие каждого такого родного API с эквивалентным API Linux. ▪Интерфейс ядра в Linux не является простым интерфейсом вызова функции. Так что пользовательские приложения не могут делать какие-либо прямые вызовы драйвера или ядра.
|
Предыдущая Содержание Следующая |