Перейти к содержанию
    

ОСРВ как тема кандидатской диссертации

Я только поступил в апирантуру. Сразу оговорюсь что волею судьбы научные интересы моего научного руководителя и моей работы (читать - практической базы) оказались разные, хоть и в одной сфере. В связи с этим разбираться в выбранной теме приходится самостоятельно.

В этом году я защитил магистерскую по теме проектирования ПО для микроконтроллеров без ОС, но с планировщиком, применительно к системам автоматического управления (САУ). Скажу честно, хоть было и новое в этой работе, по большей части я просто изучал и приглядывался к принципам построения ОС.

В своей кандидатской работе я собираюсь объединить практику и теорию. На работе стоит задача переписать ПО для САУ на новый МК. Не возбраняется введение ОСРВ (раньше подзадачи тупо выполнялись в цикле определенной длительности). Естественно, целой ОСРВ там и не надо, ПО объемом <256 Кб. Но надо:

-многозадачность (многопоточность);

-защита программ друг от друга (виртуализация, МК без MMU), скорее всего аппаратными средствами;

-по возможности оптимизация.

Я не претендую на звание разработчика полноценной ОСРВ. Во избежание споров, возникающих даже из-за трактовок определения ОСРВ, и из-за использования в работе аппаратных средств назову её просто исполнительной средой (ИС).

 

Итак, моя работа будет состоять:

-Определение критериев надежности ПО (основные источник - статьи Шеремета В.П., кники Липаева В.В. и стандарты типа КТ178) и описание того, как ИС позволит их увеличить для задач моего класса.

-Выбор оптимального алгоритма планирования для специфических задач САУ (всегда есть циклические процессы ввод-обработка-вывод вместе с обычными процессами). Источники пока - Таненбаум, Курниц и интернеты, википедии.

-Определение специфики моего класса задач в необходимости абстракций (файловой системы не нужно, проецирования файлов в память не нужно, работы с сетью не нужно и т.п.). Написание ИС.

-Пример использования ИС на конкретном примере (надеюсь еще и получить внедрение).

 

Вопросы:

Какие еще материалы посоветуете по надежности ПО?

Какие материалы посоветуете по распространенным ОСРВ (RTX Keil, FreeRTOS, scmRTOS (на форуме не нашел, каюсь), MicroC/OS-II, uClinux, QNX, VxWorks, LynxOS) и их основным принципам? Именно основным, так как не хочу нарваться на уже изобретенный велосипед, а большинство статей носят обзорный характер (например, Курниц про FreeRTOS) и не рассказывают как устроен алгоритм виртуализации для МК без MMU, есть ли он вообще и прочие тонкости.

Ну и, собственно, ваше мнение по описанной проблеме. Что добавить/убавить, на чем заостриться, как облагородить тему для обретения значимости уровня кандидатской.

Изменено пользователем wedmeed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-защита программ друг от друга (виртуализация, МК без MMU), скорее всего аппаратными средствами;

 

Какие еще материалы посоветуете по надежности ПО?

Какие материалы посоветуете по распространенным ОСРВ (RTX Keil, FreeRTOS, scmRTOS (на форуме не нашел, каюсь), MicroC/OS-II, uClinux, QNX)

(например, Курниц про FreeRTOS) и не рассказывают как устроен алгоритм виртуализации для МК без MMU,

 

Так MMU и есть единственное аппаратное средство виртуализации. Нет MMU - нет виртуализации.

Из перечисленных вами RTOS только QNX поддерживает виртуализацию.

Остальные свою надежность обосновывают компактностью. Т.е. чем меньше объем исходников тем меньше ошибок. И в принципе правы.

Самой надежной будет пожалуй в таком случае scmRTOS. Ну и самой бесполезной ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из перечисленных вами RTOS только QNX поддерживает виртуализацию.

 

Добавил еще VxWorks, LynxOS. А они поддерживают?

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

Кстати, один из вопросов в том, насколько польза от устранения класса ошибок ПО будет больше ненадежности, внесенной добавлением микросхем.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил еще VxWorks, LynxOS. А они поддерживают?

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

Кстати, один из вопросов в том, насколько польза от устранения класса ошибок ПО будет больше ненадежности, внесенной добавлением микросхем.

 

В смысле!? Применить микропроцессор и на внешней его шине на логике типа FPGA организовать подобие MMU?

Сильно! Здесь помочь не смогу.

Единственно сомневаюсь в эффективности такого решения, поскольку MMU тесно связан с кэшем. Ну а кэш не бывает на внешней шине.

 

А VxWorks, LynxOS поддерживают MMU. Только вот их исходники трудно найти.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единственно сомневаюсь в эффективности такого решения, поскольку MMU тесно связан с кэшем. Ну а кэш не бывает на внешней шине.

 

Кроме того, для полной изоляции нужно еще IOMMU, т.к. устройства обладают такой "неприятной" возможностью как DMA.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственно, MMU я и собираюсь аппаратно организовать.

А смысл?

Не говоря уже про реализуемость.

Если нужен MMU (а точно нужен?) - так и берите соответствующий кристалл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если нужен MMU (а точно нужен?) - так и берите соответствующий кристалл.

Так стоит задача на работе. Нужно реализовать на конкретном МК (5 приемка, отечественный, большой набор встроенных нужных модулей). Это почему нельзя взять другой кристалл.

Нужен ли MMU? Как писалось выше - единственный способ виртуализироваться. А как еще защититься от того, что программа влезет в чужую память?

 

Про DMA спасибо, не думал. Если он не работает с внешней шиной, то придется защищать доступ к нему в принципе, делать через системные вызовы.

Кэша у конкретного МК нет (1887ВЕ3Т).

Изменено пользователем wedmeed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПО объемом <256 Кб. Но надо:

-многозадачность (многопоточность);

-защита программ друг от друга (виртуализация, МК без MMU), скорее всего аппаратными средствами;

-по возможности оптимизация.

 

Ваша память соизмерима с размером trusted base систем виртуализации - так что смысла нет никакого - это защита ради защиты.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие еще есть способы защитить программу? Как это делают FreeRTOS и остальные без MMU.

 

Офтоп. А, например, QNX, имеет порты на МК без MMU (напр. для Cortex-M3 оно опционально)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужен ли MMU? Как писалось выше - единственный способ виртуализироваться. А как еще защититься от того, что программа влезет в чужую память?

 

Ну есть единственный выход, это писать прикладной софт на языке поддерживающем защиту памяти софтварно.

LUA, Java ME, .NET MF ...

Только придется среду исполнения портировать.

 

Какие еще есть способы защитить программу? Как это делают FreeRTOS и остальные без MMU.

 

Офтоп. А, например, QNX, имеет порты на МК без MMU (напр. для Cortex-M3 оно опционально)?

 

QNX порты на MMU-less не имеет.

Из серьезных осей чипы без MMU поддерживают: ThreadX, Symbian, VxWorks, Nucleus Plus, MQX ... Выбирайте. ;)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ThreadX, Symbian, VxWorks, Nucleus Plus, MQX ... Выбирайте. ;)

Где можно найти какие методы они используют для обеспечения надежности?

 

Ну и к моей учебной проблеме. Написание банального диспетчера или портирование одной из осей/сред на новый МК тянет на кандидатскую?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какие еще есть способы защитить программу? Как это делают FreeRTOS и остальные без MMU.

От кого? От самой себя?

Обычно программы для такого класса процессоров линкуются статически, и очень трудно что-то сломать.

Особенно учитывая размещение самой программы в флеш-памяти.

Например, в той же scmRTOS процессы задаются жестко на этапе компиляции.

Уязвимыми остаются данные, расположенные в ОЗУ.

 

Нет, конечно, можно и на AVR линукс запустить...

А смысл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

От кого? От самой себя?

Ну, собственно, да. Или от своих соседей. Да, защищать остается именно ОЗУ.

Системы управления, для которых разрабатывается ПО обладают одним опасным свойством - "лучше не работать, чем работать неправильно". И ПО обычно больше напоминает конечный автомат, чем умную программу. И вот если этот конечный автомат при расчете порции топлива для самолета на взлете случайно "выхватит" нолик, занесенный редким и трудновычислимым багом в неприоритетном модуле предполетного контроля, будет беда.

Про источник ошибок. Программа записана на флеш. Ни о каком вредоносном коде речь, соответственно, не идет. Источник ошибок - радиация, всковырнувшая бит, или ошибка программиста. Защита от первого хоть и принесет плюс, но не обязательна, т.к. должна обеспечиваться стойкостью аппаратуры. А вот ошибки программиста, среди которых так часто переполнения стека или неуправляемые циклы, контролировать бы надо. И как бы того не хотелось, от ошибок не защищен никто...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну есть единственный выход, это писать прикладной софт на языке поддерживающем защиту памяти софтварно.

LUA, Java ME, .NET MF ...

Только придется среду исполнения портировать.

 

среду исполнения не обязательно портировать

 

http://www.ertos.nicta.com.au/research/l4....ed/approach.pml

 

но в целом направление верное - использовать ЯВУ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот ошибки программиста, среди которых так часто переполнения стека или неуправляемые циклы, контролировать бы надо. И как бы того не хотелось, от ошибок не защищен никто...

 

О методах достижения надежности в RTOS можно почитать в этой статье.

MMU для RTOS не добавляет надежности. Будет тот же самый сбой и выгрузка процесса. А в RTOS вообще не должно быть сбоев.

Недаром на навороченных чипах типа i.MX53 c MMU и прочими фичами для жизненно важных приложений выбирают uC/OS RTOS без всякой виртуализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...