Jump to content

    

защита пользовательских задач с помощью MPU

Добрый день!

интересует вопрос, каким образом с помощью MPU происходит защита одной пользовательской задачи от другой, в cortex M?

например как это происходит в различных РТОС  имеющих порт на кортекс с MPU?

Share this post


Link to post
Share on other sites

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

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

железо у нас MMU-шное, но трансляции адресов нет и динамической загрузки (если не Линукс, а FreeRTOS), поэтому разницы с MPU не должно быть

 

Share this post


Link to post
Share on other sites
29 минут назад, yes сказал:

железо у нас MMU-шное, но трансляции адресов нет и динамической загрузки (если не Линукс, а FreeRTOS), поэтому разницы с MPU не должно быть

Даже без трансляции адресов разница огромная. Так как в MPU всего 8 регионов и есть существенные ограничения на дискретность задания их границ. Хотя если задач - мало и памяти - вагон, но можно сделать.

Share this post


Link to post
Share on other sites
52 минуты назад, yes сказал:

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

ну если есть возможность тупо прописать по неверному указателю, или прочитать, то о какой защите может быть речь?

меня интересует как задействуют MPU для защиты одной пользовательской задачи от другой пользовательской задачи.

единственное что приходит на ум это при переключении контекста каждый раз менять настройки MPU таким образом чтобы для чтения и записи была доступна только та область ОЗУ в которой находятся данные и стек активной задачи, а вся остальная область под запретом.

вот хотел узнать так ли это реализовано в различных РТОС  с поддержкой MPU или нет

Share this post


Link to post
Share on other sites
14 минут назад, TTTTTTS сказал:

единственное что приходит на ум это при переключении контекста каждый раз менять настройки MPU таким образом чтобы для чтения и записи была доступна только та область ОЗУ в которой находятся данные и стек активной задачи, а вся остальная область под запретом.

Почти так. Не забывайте, что задачи не в вакууме работают. Им наверное необходимо между собой данными обмениваться. Т.е. - нужна ещё какая то общая область обмена.

И должно быть разделение на системный и прикладной уровни.

Share this post


Link to post
Share on other sites
1 минуту назад, jcxz сказал:

Почти так

спасибо

Share this post


Link to post
Share on other sites

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

а во FreeRTOS-e это есть, уверен, что взяли готовую. нужно смотреть Cortex-A порты. может и для Cortex-M есть, тут не знаю

Share this post


Link to post
Share on other sites
22 часа назад, yes сказал:

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

Т.е. криворукость лечим блокировкой памяти? А если их поделье заглючит, то что с общей системой произойдет тогда?

ЗЫ. Вообще, как я думаю, вся эта защита нужна только для запуска сторонних программ под осью общего применения, типа винды или линя... И то, чтоб просто закрыть эту программу не порушив всю ось. Во встраиваемых решениях, где нет всяких подгрузок и выгрузок все нужно решать только корректным программированием, иначе все равно ничего не поможет...

Share this post


Link to post
Share on other sites
On 18 мая 2019 г. at 3:01 PM, mantech said:

Т.е. криворукость лечим блокировкой памяти?

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

Share this post


Link to post
Share on other sites
34 минуты назад, yes сказал:

в проекте с лимоном+ строк, десятком исполнителей

Если не секрет, что делает сей мегапроект?

Share this post


Link to post
Share on other sites
1 hour ago, mantech said:

Если не секрет, что делает сей мегапроект?

Лимон строк эт простенькая RTOS типа Nucleus Plus с GUI и парой коммуникационных стеков. 
Я такой проект тянул один. 
Чтобы проект требовал десяти человек надо минимум десять лимонов строк. 

С изоляцией задач тема актуальная в IoT и для нее придумали Cortex-M33.
Кому нужно найдет все в mbed uVisor.  

Share this post


Link to post
Share on other sites
On 5/18/2019 at 8:01 PM, mantech said:

Т.е. криворукость лечим блокировкой памяти? А если их поделье заглючит, то что с общей системой произойдет тогда?

Нет, криворукость здесь совершенно не причём по следующим пунктам:

1. MPU != MMU. MPU (Memory Protection Unit) как раз штатно и предназначен для защиты областей памяти от несанкционированного доступа.

2. MPU вкупе с другими возможностями (например, обработчиком Hard Fault) является отличным инструментом для поиска ошибок в софте.

On 5/18/2019 at 8:01 PM, mantech said:

А если их поделье заглючит, то что с общей системой произойдет тогда?

Ну лучше-то иметь больше инструментов для верификации, чем уповать на "безглчное ПО". ИМХО)))

Share this post


Link to post
Share on other sites
13 часов назад, AlexandrY сказал:

Лимон строк эт простенькая RTOS типа Nucleus Plus с GUI и парой коммуникационных стеков.

Ооо да, как раз в духе сегодняшних "вебописателей", когда хочешь проверить почту, а там 3-5 мегов чего-то загружается...

10 часов назад, haker_fox сказал:

Ну лучше-то иметь больше инструментов для верификации, чем уповать на "безглчное ПО".

Тестирование - это понятно, но в релизных-то прогах зачем это??

Share this post


Link to post
Share on other sites
2 minutes ago, mantech said:

Тестирование - это понятно, но в релизных-то прогах зачем это??

А где 100%-я гарантия, что релизная программа без багов? А если он вылезет, что будет с устройством? А если оно на объекте, и не на одном? Так хоть можно параметры ошибки в лог занести, и потом расшифровать неспешно)

Share this post


Link to post
Share on other sites
4 минуты назад, haker_fox сказал:

Так хоть можно параметры ошибки в лог занести, и потом расшифровать неспешно)

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

6 минут назад, haker_fox сказал:

А если он вылезет, что будет с устройством?

Как правило рестарт по хардфаулту или собаке, другого не придумано :yes3:

7 минут назад, haker_fox сказал:

А где 100%-я гарантия, что релизная программа без багов?

Ктож ее вам даст? Может тот-же боинг, например?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now