реклама на сайте
подробности

 
 
> "Тормозные" RTOS и запрещение прерываний
yuri_t
сообщение May 19 2011, 05:00
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



В последнее время прочитал несколько сообщений в русскоязычных конференциях по электронике (Electronix, Caxapa)
о том, что есть замечательные варианты повышения быстродействия RTOS - "без блокировки прерываний вообще,
без spin-lockов, без циклов"(цитата) .

На эту тему замечу:

1) Системы с запрещением прерываний на время изменения системных данных надежно работают в любых проектах
и с любыми CPU.

2) Системы без запрещения прерываний на время изменения системных данных можно разделить на две категории

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

- Segmented Interrupt Architecture - системы, в которых прерывания не запрещаются, а просто останавливается
переключатель контекста. Если во время прерывания появляется условия, требующие переключения контекста,
то эти условия помещаются в специальную очередь и обрабатываются вне прерываний.
Такой подход кажется привлекательным на первый взгляд, но на практике имеет столь серьезные недостатки,
что мне известно только 2 коммерческих RTOS (CMX, Velocity) использующих такой подход. Для тех, кому
интересны детали, рекомендую статью W.Lamie (автор ThreadX RTOS) "Pardon the Interruption: Two Approaches to
RTOS Interrupt Architectures"

В общем, если вы не хотите получить случайные, совершенно непонятные баги и проклинать тот день, когда решили
связаться с операционной системой - используйте RTOS с запрещением прерываний (VxWorks, pSOS, ThreadX/Nucleous,
TNKernel, FreeRTOS, scmRTOS и т.п. ).



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yuri_t
сообщение May 23 2011, 15:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Статьи Ralph Moore и David Kliedermacher я читал (и не только их).

Здесь (ИМНО) две вещи

- техническая

об этом хорошо написал VslavX в этом топике

- рекламная

Например, собрался инженер покупать RTOS - a их на рынке несколько десятков и все совсем не дешевые.. Какую
выбрать? А тут ему ребята из компании, у которой RTOS имеет Segmented Interrupt Architecture и говорят: " У нас -
продвинутая архитектура, а у других - каменный век" и далее в таком же духе..
К чести производителей коммерческих RTOS, таких компаний очень мало, но "умы смущают©" - ведь большинство
инженеров не связаны непосредственно с разработкой RTOS и, следовательно, не посвящены в тонкие детали
дизайна таких систем.
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 24 2011, 09:28
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(yuri_t @ May 23 2011, 19:34) *
А тут ему ребята из компании, у которой RTOS имеет Segmented Interrupt Architecture и говорят: " У нас - продвинутая архитектура, а у других - каменный век"


И ведь они совершенно правы sm.gif
Go to the top of the page
 
+Quote Post
kikos
сообщение May 25 2011, 07:14
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-11
Пользователь №: 62 608



Цитата(sasamy @ May 24 2011, 13:28) *
И ведь они совершенно правы sm.gif

не так давно в России кто-то запатентовал "бутылку стеклянную" ... и был бы "прав" до сих пор, если бы автора не занесло потребовать от пивных компаний отчислений за использование его изобретения. Тут его патент и кансельнули...

Сообщение отредактировал kikos - May 25 2011, 07:15
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 25 2011, 09:56
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(kikos @ May 25 2011, 11:14) *
не так давно в России кто-то запатентовал "бутылку стеклянную" ... и был бы "прав" до сих пор, если бы автора не занесло потребовать от пивных компаний отчислений за использование его изобретения. Тут его патент и кансельнули...


Вы об этом ?
http://electronix.ru/forum/index.php?showtopic=69735

только я не понял какое отношение патенты имеют к типу обработки прерываний в ОС sm.gif
Go to the top of the page
 
+Quote Post
evg123
сообщение May 26 2011, 11:15
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Несколько замечаний из собственного опытов:
1) На Cortex-M3 (Luminary) я использовал Keil-овскую RTOS "RTL"; 2) на DSP TMS320VC5509a - техасовскую DSP/BIOS.

В первом случае: a)keil декларирирует, что RTL не запрещает прерываний, что хотите, то и делайте. б) RTL предоставляет ряд механизмов: семафоров, "сигналы" (ихнее собственное понятие), с помощью которых ISR может взаимодействовать с шедьюлером RTOS.
Можно использовать как UIA так и SIA - архитектуры. Я пользовался как тем так и другим. Но официально KEIL рекомендует пользоваться SIA-подходом. Они говорят, что "у нас есть замечательный механизм сигналов; вы пишете ISR, который просто выставляет сигнал, а какая-то высокоприоритетная задача его ожидает и отрабатывает действие, в этом случае не необходимости иметь высокоприоритетные/низкоприоритетные прерывания - так как ISR выполняют только установку бита сигнала, который ловится "фактическим обработчиком прерывания" - задачей, которая ожидает этот сигнал. И этот фактический обработчик прерывания - он уже имеет приоритет". Это - они говорят - наиболее правильный подход. Т.е. SIA в чистом виде. Этим способом я пользовался. Т.е. ISR-обрабочик SPI у меня просто устанавливал сигнал, и дальше высокприоритетная легковесная задача "делала своё дело". Передача сигнала операционкой RTL делается очень быстро. (Можно посмотреть спецификации этой RTOS - они есть в документации - я на вскидку здесь их не приведу). Второй вариант: ISR обработки SPI при приёме данных может формировать небольшой массив из байт (например 32 байта) и по готовности массива отправить сигнал в высокоприоритетную задачу-обработчик, которая берёт этот массив и кдадёт его в почтовый ящик для следующей по ходу задачи. То есть ISR уже не тупая, а более "интеллектуальная". Т.е. возможны гибкие решения. И главное, что всё работает быстро.

Во втором случае DSP/BIOS - мощная RTOS, (кейловская RTL - это малютка по сравнению с ней). а) DSP/BIOS может по своему усмотрению запрещать прервания.
б)даёт ряд механизмов, из которых ISR может взаимодействовать с операционкой - в частности: семафоры (которые могут ожидаться задачами с определёнными приоритетами); вызовы программных прерываний SWI - software interrupts; выделение памяти из специальных memory pool-ов и отправка их в "очереди" или "почтовые ящики" (это стандартные "системные" объекты RTOS) - тут обилие всяческих вариантов. Т.е. можно с легкостью построить как SIA так и UIA - модель. в)Есть также изумительная абстракция драйвера. Кто-то со стороны может написать определённым образом "оформленный" модуль - "драйвер", и вы можете его подключить к своей программе и общаться с устройством на уровне "пакетов". Послал пакет/получил пакет. И всё. Но по сути тут вот что: вы из контекста задачи кладёте в некую "скрытую", организованную на memory pool-е, очередь и из контекста вашей задачи запускаете устройство в работу (например SPI или McBSP). Прерывание (ISR) этого устройства из контекста прерывания разгребает эту очередь (т.е., например отправляет все её пакеты). Если очередь переполнена (вы пытаетесь положить больше пакетов, чем позволяет её максим. длина), то ваша задача "засыпает", и проснётся только после того, когда такая возможность появится. Это порисходит всё внутри RTOS, а вы пользуетесь примитивным стандартным вызовом функции драйвера - "отправить очередной пакет".

Мой лично вывод - RTOS должна позволять и то и это (и SIA и UIA). А если нет, то что-то тут не так. (Но те RTOS, что я юзал - коммерческие, и очень толково сделаны).
Go to the top of the page
 
+Quote Post
VslavX
сообщение May 26 2011, 12:34
Сообщение #7


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(evg123 @ May 26 2011, 14:15) *
Несколько замечаний из собственного опытов:
1) На Cortex-M3 (Luminary) я использовал Keil-овскую RTOS "RTL";
...
В первом случае: a)keil декларирирует, что RTL не запрещает прерываний, что хотите, то и делайте.

Может быть "RTX" имелся ввиду?
Когда они пишут что не запрещают прерывания - то лукавят, конкретно в порту для CM3 используется исключение SVC. Ессно, при вызове обработчика инструкцией SVC приоритет прерываний снижается до фактического запрета. Да, очереди событий они сделали прикольные, но - жрут память, и беспомощны перед переполнением. Я точно не помню, но там кажется только один единственный сервис может быть вызван из ISR - "положить событие в очередь".

Цитата(evg123 @ May 26 2011, 14:15) *
Можно использовать как UIA так и SIA - архитектуры.

Нет, насколько я понял RTX не поддерживает SIA в понимании данного топика.

Цитата(evg123 @ May 26 2011, 14:15) *
Я пользовался как тем так и другим. Но официально KEIL рекомендует пользоваться SIA-подходом. Они говорят, что "у нас есть замечательный механизм сигналов; вы пишете ISR, который просто выставляет сигнал, а какая-то высокоприоритетная задача его ожидает и отрабатывает действие, в

Это стандартная практика, я много лет пользуюсь ей в TNKernel, но к SIA это не имеет никакого отношения, ИМХО.

Цитата(evg123 @ May 26 2011, 14:15) *
Во втором случае DSP/BIOS - мощная RTOS, (кейловская RTL - это малютка по сравнению с ней). а) DSP/BIOS может по своему усмотрению запрещать прервания.
б)даёт ряд механизмов, из которых ISR может взаимодействовать с операционкой - в частности: семафоры (которые могут ожидаться задачами с определёнными приоритетами); вызовы программных прерываний SWI - software interrupts; выделение памяти из специальных memory pool-ов и отправка их в "очереди" или "почтовые ящики" (это стандартные "системные" объекты RTOS) - тут обилие всяческих вариантов.

Это все есть (кроме SWI который есть не на всякой архитектуре и вообще особо не нужен, и даже вреден если Вы пишете мультиплатформенный софт) и в TNKernel, которая ни разу не SIA.

Цитата(evg123 @ May 26 2011, 14:15) *
пакетов, чем позволяет её максим. длина), то ваша задача "засыпает", и проснётся только после того, когда такая возможность появится. Это порисходит всё внутри RTOS, а вы пользуетесь примитивным стандартным вызовом функции драйвера - "отправить очередной пакет".

И это есть в TNKernel sm.gif

Цитата(evg123 @ May 26 2011, 14:15) *
Но те RTOS, что я юзал - коммерческие, и очень толково сделаны).

Ага, TNKernel тоже... ну - Вы поняли sm.gif, за исключением того что она свободная, и даже свободней чем, скажем, софт под GPL
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yuri_t   "Тормозные" RTOS и запрещение прерываний   May 19 2011, 05:00
- - AlexandrY   Цитата(yuri_t @ May 19 2011, 08:00) В пос...   May 19 2011, 05:48
- - kikos   1) Что такое "RTOS" ? Слишком общее на...   May 19 2011, 09:47
|- - AlexandrY   Цитата(kikos @ May 19 2011, 12:47) 1) Что...   May 19 2011, 10:35
|- - kikos   Цитата(AlexandrY @ May 19 2011, 14:35) Ну...   May 19 2011, 12:01
- - VslavX   Цитата(yuri_t @ May 19 2011, 08:00) что м...   May 20 2011, 07:26
|- - AlexandrY   Цитата(VslavX @ May 20 2011, 10:26) ИМХО,...   May 20 2011, 09:45
- - yuri_t   Применение Segmented Interrupt Architecture в мал...   May 20 2011, 13:01
|- - AlexandrY   Цитата(yuri_t @ May 20 2011, 16:01) Приме...   May 20 2011, 13:28
||- - VslavX   Цитата(AlexandrY @ May 20 2011, 16:28) Но...   May 20 2011, 15:42
||- - AlexandrY   Цитата(VslavX @ May 20 2011, 18:42) А обя...   May 20 2011, 17:16
||- - Terminator   Цитата(AlexandrY @ May 21 2011, 00:16) Ну...   May 22 2011, 08:13
|- - kikos   Цитата(yuri_t @ May 20 2011, 17:01) Приме...   May 23 2011, 11:04
|- - evg123   Цитата(VslavX @ May 26 2011, 16:34) Может...   May 27 2011, 08:59
|- - AlexandrY   Цитата(evg123 @ May 27 2011, 11:59) Я так...   May 27 2011, 11:01
||- - evg123   Я понимаю, что я немного не в тему, но всё равно, ...   May 30 2011, 08:48
||- - sasamy   Цитата(evg123 @ May 30 2011, 12:48) А что...   May 31 2011, 05:29
||- - AlexandrY   Цитата(evg123 @ May 30 2011, 11:48) Я не ...   May 31 2011, 05:59
||- - evg123   Цитата(AlexandrY @ May 31 2011, 08:59) Эт...   May 31 2011, 15:11
||- - AlexandrY   Цитата(evg123 @ May 31 2011, 18:11) Верно...   May 31 2011, 17:25
|||- - evg123   Цитата(AlexandrY @ May 31 2011, 20:25) Эт...   Jun 1 2011, 21:04
|||- - sasamy   Цитата(evg123 @ Jun 2 2011, 01:04) 20 тыс...   Jun 2 2011, 05:27
|||- - LightElf   QUOTE (evg123 @ Jun 2 2011, 01:04) Вы что...   Jun 2 2011, 08:18
||||- - kikos   Цитата(LightElf @ Jun 2 2011, 12:18) Испо...   Jun 2 2011, 11:00
|||- - AlexandrY   Цитата(evg123 @ Jun 2 2011, 00:04) Одни д...   Jun 2 2011, 10:00
|||- - evg123   Цитата(AlexandrY @ Jun 2 2011, 14:00) Зач...   Jun 2 2011, 15:43
||||- - AlexandrY   Цитата(evg123 @ Jun 2 2011, 18:43) ... и ...   Jun 3 2011, 05:14
|||||- - aaarrr   Цитата(AlexandrY @ Jun 3 2011, 09:14) Вот...   Jun 3 2011, 08:01
||||- - sasamy   Цитата(evg123 @ Jun 2 2011, 19:43) Поясня...   Jun 3 2011, 07:37
||||- - evg123   Цитата(sasamy @ Jun 3 2011, 11:37) ...Вы ...   Jun 7 2011, 09:28
|||- - neiver   Цитата(AlexandrY @ Jun 2 2011, 14:00) Для...   Jun 3 2011, 10:29
||- - sasamy   Цитата(evg123 @ May 31 2011, 19:11) А поп...   May 31 2011, 22:50
||- - AlexandrY   Цитата(sasamy @ Jun 1 2011, 01:50) ОС без...   Jun 1 2011, 05:27
|- - VslavX   Цитата(evg123 @ May 27 2011, 11:59) Я реж...   May 27 2011, 11:46
|- - kikos   Цитата(VslavX @ May 27 2011, 15:46) Более...   May 27 2011, 13:47
|- - AlexandrY   Цитата(kikos @ May 27 2011, 16:47) Покажи...   May 27 2011, 20:46
- - kikos   Согласен. Хотел обратить внимание на то, что ...   May 24 2011, 07:59
- - yuri_t   Цитата(kikos @ May 27 2011, 16:47) Покажи...   May 27 2011, 13:56
- - kikos   Цитата(yuri_t @ May 27 2011, 17:56) http:...   May 30 2011, 08:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 19:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01936 секунд с 7
ELECTRONIX ©2004-2016