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

Народ, что думаешь про эту писанину? В принципе, это статья :)

В настоящее время при создании систем цифровой обработки сигналов широко используется понятие «Операционная Система Реального Времени» или RTOS (Real Time Operating System). Подразумевается, что эта система многозадачная, имеет средства для синхронизации независимо исполняемых программных модулей и обмена информации между ними. В принципе, под это понятие попадает любая Операционная Система (ОС), которая имеет ограничение времени отклика на любой запрос, как со стороны аппаратной части, так и со стороны исполняемых программных модулей. Но использование RTOS, к сожалению, не гарантирует режима реального времени для всего аппаратно-программного комплекса, всей системы в целом. Причина состоит в том, что необходимо учитывать собственно задачи и аппаратную часть.

Введем новое понятие – Система Реального Времени, которое распространяется не только на RTOS, но и на исполняемые задачи и аппаратную среду.

 

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

 

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

 

1. Задачи должны исполняться одновременно и, следовательно, в режиме разделенного времени.

2. Задачи не должны прерывать друг друга и, следовательно, они все имеют одинаковый приоритет.

 

Последнее следствие неочевидно, поэтому остановимся на нем особо. Когда одна задача прерывает другую? Когда ресурсов системы не хватает на обе задачи одновременно. Т.е. прерывание задачи приведет к тому, что прерванная задача не успеет обработать данные (пройти реперную точку) за оговоренное время. Таким образом, при прерывании одной задачи другой, не выполняется условие для Системы Реального Времени. Если же ресурсов хватает на всё, то необходимость прерывания одной задачи другой отпадает. Естественно, если задачи не конкурируют между собой за ресурсы, то присваивание им приоритетов не имеет смысла.

 

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

1. Т.к. несколько задач выполняется параллельно, то предлагается применить методологию выполнения нескольких программных блоков в «разделенном времени». Иначе говоря, система порождает тики, которые следуют через строго определенное время. Время между двумя тиками называется фреймом. В течение фрейма работает только одна задача. По окончании фрейма, если это необходимо, может начать работать следующая задача, либо продолжить работу предыдущая. Чередованием задач управляет Планировщик исходя из расписания. Планировщик также должен запускать процедуру сохранения и восстановления контекстов задач. На этом его функции заканчиваются. Тики организуются при помощи прерывания от таймера, обработчиком которого и выступает Планировщик.

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

3. Важной частью RTOS являются драйвера. По причинам, изложенным ниже, драйвера должны запускаться также каждый тик.

 

Наложим дополнительные ограничения на Систему Реального времени. Пусть она перерабатывает некую входную информацию, организованную в виде потоков, в информацию выходную, организованную подобным же образом (как выходные потоки). А задачи, работающие в реальном времени и параллельно, выполняют эту переработку. Это приводит к следующему: потоковая информация – это непрерывная последовательность неких чисел, следовательно, ее лучше всего обрабатывать по-блочно. Т.е. входные числа организуются в некий буфер, который передается задаче для обработки. Но время обработки этого буфера задачей может оказаться больше времени между приходом двух входных отсчетов. Потому для подобных систем, ориентированных на поточную обработку в реальном времени имеет смысл применить зеркальные буфера. Как они работают можно увидеть на следующем примере.

Пусть есть два входных буфера А1 и А2, а так же два выходных В1 и В2. Когда буфер А1 перерабатывается задачей в буфер В1, один драйвер RTOS заполняет из входного потока буфер А2, а другой из выходного буфера В2 формирует выходной поток. После того как Буфер А1 переработан в В1, буфер А2 заполнен, а буфер В2 опустошен, меняются местами А1 и А2, В1 и В2. Теперь задача перерабатывает буфер А2 в В2, А1 заполняется из входного потока, а из В1 данные отправляются в выходной поток. Затем буфера снова меняются местами. В том случае, если буфера достаточно длинные, а входной и выходной поток – короткие порции информации, то «набивка» входных буферов и выходных потоков должна происходить каждый фрейм, чтобы избежать потери данных.

 

Исходя из вышесказанного, определим формальную структуру задачи для такой системы реального времени. Предлагается разделить задачу на алгоритмическую часть и данные. Это может быть особенно интересно для систем, реализованных на сигнальных процессорах DSP, потому как там обычно применяется Гарвардская Архитектура, когда память программ и память данных разделены. Алгоритмическая часть делится на три блока: процедура восстановления контекста, тело задачи и процедура сохранения контекста. Данные делятся тоже на три типа: управляющие данные, стек (или контекст задачи) и входные/выходные буферы. Таким образом, задача оформляется в виде следующей С-фунции:

 

task( descriptor* ddd)

{

….

}

 

Дескриптор тоже должен иметь некую структуру. Например:

 

typedef struct {

int Status;

int FrameNumber;

int CurrentFrameNumber;

int StackPointer;

void* ContextResoring;

void* FunctionBody;

void* ContextSaving;

int* *InputBuffer1;

int* *InputBufferN;

int* *OutputBuffer1;

int* *OutputBufferN;

int Control1;

int ControlN;

int Service1;

int ServiceN

} descriptor;

 

 

Status – переменная, которая характеризует статус задачи. Допустимые значения:

0 – задача пассивна, т.е. Планировщик ее всегда пропускает.

1 – задача активна и готова к выполнению. Планировщик, запуская эту задачу, присваивает статусу значение 2.

2 – задача исполняется.

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

FrameNumber – количество фреймов, которые отводятся под выполнения данной задачи. Отвод под задачу одновременно нескольких фреймов, позволяет сэкономить на перезагрузке контекста и распределить производительность процессора оптимально между задачами.

CurrentFrameNumber – количество фреймов, которые задача уже выполняется.

StackPointer – текущий указатель стека данной задачи.

ContextResoring – указатель на процедуру восстановления контекста.

FunctionBody – указатель на тело задачи.

ContextSaving – указатель на процедуру сохранения контекста.

*InputBufferN - указатель на указатель входного буфера. Это удобно для переключения зеркал буферов, т.к. для этого в эту переменную всего лишь подставить указатель на новый буфер.

*OutputBufferN - указатель на указатель выходного буфера

ControlN – команды управления для данной задачи, формируемые особым программным модулем.

ServiceN – служебные переменные.

 

Наконец, рассмотрим синхронизацию и коллизии одновременного доступа к ресурсам нескольких задач одновременно. Предлагается разрешить эту проблему при помощи простейшего системного ресурса – флага. Любому ресурсу общего пользования может быть присвоен флаг. Флаг может иметь только два значения: 0 – ресурс свободен, 1 – ресурс занят. Непосредственный доступ к флагу никто не имеет. Изменить флаг можно только API-функциями, которые реализованы, как квантовые операции через критические секции. Иными словами, на момент доступа API-функции к флагу запрещены все прерывания.

В конце сделаем несколько полезных пожеланий:

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

2. Не использовать в задачах глобальные переменные, используя для подобных целей только дескриптор задач. Это позволит взять под контроль все источники воздействия на задачу, что чрезвычайно важно на этапе отладки.

3. Скрывать от задач «зеркальность» входных/выходных буферов. Это не требует больших накладных расходов (реализуется при помощи указателей на указатель буфера), но существенно упрощает саму задачу.

4. Максимально использовать API-протокол для каких либо внешних взаимодействий.

 

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

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


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

не судите строго , по моему вы своими словами описали то что уже давно сушествует , может и не все вместе не по большому счету это уже есть .

Распределение выполнения задач в соответствии с тиками (слотами для каждой задачи) называется у буржуев - round robin algorithm. Буферные API тоже есть, флаг - mutex ...

 

Кстати если вы планируете для реального времени round robin - то он не очень то и хорош потому что момент переключения задачи не контролируется програмистом.

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


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

не судите строго , по моему вы своими словами описали то что уже давно сушествует , может и не все вместе не по большому счету это уже есть .

Распределение выполнения задач в соответствии с тиками (слотами для каждой задачи) называется у буржуев - round robin algorithm. Буферные API тоже есть, флаг - mutex ...

 

Кстати если вы планируете для реального времени round robin - то он не очень то и хорош потому что момент переключения задачи не контролируется програмистом.

 

В общем согласен, не совсем понятно, как в такой системе реагировать на асинхронные события.

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

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

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


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

не судите строго , по моему вы своими словами описали то что уже давно сушествует , может и не все вместе не по большому счету это уже есть .

Распределение выполнения задач в соответствии с тиками (слотами для каждой задачи) называется у буржуев - round robin algorithm. Буферные API тоже есть, флаг - mutex ...

 

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

 

Кстати если вы планируете для реального времени round robin - то он не очень то и хорош потому что момент переключения задачи не контролируется програмистом.

 

А зачем его контролировать?

 

Вообще-то, это разрабатывалось, для систем, допустим, аудиообработки. Когда, у вас есть куча потоковых задач типа МР3 и могут быть еще спорадически возникающие, типа файдинга или отработки перестройки эквалайзера.

 

не судите строго , по моему вы своими словами описали то что уже давно сушествует , может и не все вместе не по большому счету это уже есть .

Распределение выполнения задач в соответствии с тиками (слотами для каждой задачи) называется у буржуев - round robin algorithm. Буферные API тоже есть, флаг - mutex ...

 

Кстати если вы планируете для реального времени round robin - то он не очень то и хорош потому что момент переключения задачи не контролируется програмистом.

 

В общем согласен, не совсем понятно, как в такой системе реагировать на асинхронные события.

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

 

Это не универсальная система, а такая узкоспециализированная. Естественно, время тика должно быть меньше времени реакции системы. Кстати, подобную систему моей разработки сравнивали с микроСи. МикроСи даже близко не лежала по времени реакции :)

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


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

Это не универсальная система, а такая узкоспециализированная. Естественно, время тика должно быть меньше времени реакции системы. Кстати, подобную систему моей разработки сравнивали с микроСи. МикроСи даже близко не лежала по времени реакции :)

 

Тогда во вступлении нужно четко оговорить круг применяемости такого подхода, дабы не возникало лишних вопросов. Но по моему опыту работы (хотя с DSP-процессорами я не работал практически, лишь реализовал некоторые DSP-шные алгоритмы на ARM), система, как правило, нуждается в 1-2 детерменированных по времени реакции процессах. Для остальных процессов время реакции зачастую уже не имеет значения в разумных границах. А в таких случаях более оптимально время процессора распределяется как раз в вытесняющих ОС.

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


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

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

 

Это не универсальная система, а такая узкоспециализированная. Естественно, время тика должно быть меньше времени реакции системы.

 

Легкое противоречие...

Если краткое резюме - RTOS я бы не стала это называть. А так все нормально, проблемно-ориентированное ПО. Вопрос то в чем? Оценка хорошего проекта? Найти и определить область применимости?

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


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

В настоящее время при создании систем цифровой обработки сигналов широко используется понятие «Операционная Система Реального Времени» или RTOS (Real Time Operating System).

 

Во-первых, RTOS - термин намного шире, чем "создании систем цифровой обработки сигналов" - много чести будет ;) - для отдельной прикладной области городить столь сложное изделие как RTOS...

Во-вторых, само "реальное время" - во многом спекулятивный и спорный термин, вот хоть здесь см.:

http://qnxclub.net/files/articles/RemarksO...TheMargins.html

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

 

2. Задачи не должны прерывать друг друга и, следовательно, они все имеют одинаковый приоритет.

 

Последнее следствие неочевидно, ...

 

Последнее следствие не только не очевидно, но, как на мой взгляд - и глубоко ошибочно...

Для анализа фиксированных deadline-ов параллельно выполняющихся задач - есть, по крайней мере, немного строгих математических моделей анализа и предсказания поведения:

http://qnxclub.net/files/articles/rta/rta.doc

http://qnxclub.net/files/articles/rms/rms.doc

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

И то же самое (рост числа уровней приоритетов) наблюдается в реально используемых RTOS: VxWorks - 256 уровней, QNX 6.2.1 - 64 -> QNX 6.3 - 256 - на лицо миграция к большему числу...

Но уж, по-крайней мере, если если уж утверждать нечто, противоречащее общей в мире практике на протяжении 10-20 лет принятой - то это что-то нужно уж о-о-о-очень сильно доказывать...

 

Когда одна задача прерывает другую? Когда ресурсов системы не хватает на обе задачи одновременно. Т.е. прерывание задачи приведет к тому, что прерванная задача не успеет обработать данные (пройти реперную точку) за оговоренное время.

 

Совсем не так! - это только 1 из многих частных случаев... Задача может прерывать другую - когда для неё наступит асинхронное событие, которого она молча, может быть, 3 часа ожидала - это классика всех сетевых обменов... Или задача может прерывать другую, когда для неё сработают взведенные ею таймерные процедуры - а это целая область специальных техник в RT-программировании (таймеры и всё с ними связанное)...

 

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

 

Всё это умозрительно, "на пальцах" и ... не убеждает. ;)

 

1. Т.к. несколько задач выполняется параллельно, то предлагается применить методологию выполнения нескольких программных блоков в «разделенном времени». Иначе говоря, система порождает тики, которые следуют через строго определенное время. Время между двумя тиками называется фреймом. В течение фрейма работает только одна задача. По окончании фрейма, если это необходимо, может начать работать следующая задача, либо продолжить работу предыдущая. Чередованием задач управляет Планировщик исходя из расписания. Планировщик также должен запускать процедуру сохранения и восстановления контекстов задач. На этом его функции заканчиваются. Тики организуются при помощи прерывания от таймера, обработчиком которого и выступает Планировщик.

 

Это, как уже отмечали - описана одна из возможных дисциплин диспетчирования: round-robin - но этого мало для всего множества реальных задач, см. ещё дисциплины: fifo, адаптивная, спорадическая (это - особенно)...

 

3. Важной частью RTOS являются драйвера. По причинам, изложенным ниже, драйвера должны запускаться также каждый тик.

 

Драйверы, вообще-то, являются достаточно ;) важной частью любой OS, не только RT...

Но только в RTOS с хорошо продуманной и проработанной архитектурой (кто понимает о чём это я - догадывается ;) : микроядерной) - так драйверы могут выполняться как "ещё один рядовой пользовательский процесс" - так что о них и говорить отдельно нужды нет...

 

Наложим дополнительные ограничения на Систему Реального времени. Пусть она перерабатывает некую входную информацию, организованную в виде потоков, в информацию выходную, организованную подобным же образом (как выходные потоки). А задачи, работающие в реальном времени и параллельно, выполняют эту переработку. Это приводит к следующему: потоковая информация – это непрерывная последовательность неких чисел, следовательно, ее лучше всего обрабатывать по-блочно. Т.е. входные числа организуются в некий буфер, который передается задаче для обработки. Но время обработки этого буфера задачей может оказаться больше времени между приходом двух входных отсчетов. Потому для подобных систем, ориентированных на поточную обработку в реальном времени имеет смысл применить зеркальные буфера. Как они работают можно увидеть на следующем примере.

 

- это описание, может и достаточно адекватное, но одного очень частного класса задач: digital signal processing... Но не нужно применительно к частному классу оперировать терминами RTOS etc. - можно нарваться на очень серьёзные возражения, только потому, что область RTOS намного-намного шире... Тогда и говорить о чём-то таком "исполняющая система (планировщик) потоковой сигнальной обработки"...

 

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

2. Не использовать в задачах глобальные переменные, используя для подобных целей только дескриптор задач. Это позволит взять под контроль все источники воздействия на задачу, что чрезвычайно важно на этапе отладки.

3. Скрывать от задач «зеркальность» входных/выходных буферов. Это не требует больших накладных расходов (реализуется при помощи указателей на указатель буфера), но существенно упрощает саму задачу.

4. Максимально использовать API-протокол для каких либо внешних взаимодействий.

 

Именно API, и, желательно, стандартный, и для всего этого - уже давно есть такой стандарт API: POSIX 1003b - расширения реального времени...

 

P.S. Если у вас будет возможность - посмотрите вот это:

http://www.books.ru/shop/books/357604

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


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

Olej, Вам респект :a14: !

за то, что все так разложили по полочкам :).

Тема вообще то интересная даже и в таком ключе

"исполняющая система потоковой сигнальной обработки"...

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

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


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

Действительно, автор статьи пытался рассмотреть очень узкую задачу - чистая ЦОС РВ, т.е. имеются только задачи обработки данных, которые, естественно, должны обработать данные одного отсчета до начала следующего. В таком случае все задачи должны успеть отработать в течение одного фрейма. Тут действительно не до приоритетов. Но в реальной работе кроме ЦОС требуются мониторинг, статистика, диагностика и т.д. и т.п. - т.е. куча других задач.

И вот тогда высказывание :

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

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


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

Предметная область цифровой обработки требует очень часто выжать максимум быстродействия. Целесообразность применения ОС РВ - спорная для многих задач

Ну, это как посмотреть. Вот, к примеру, если процессор задействован на обработке не одного потока данных, а у него таких потоков эн (при условии, разумеется, что успевает их обрабатывать с некоторым запасом) и они (потоки данных) еще и имеют разные скорости, источники и приоритеты (а кроме этого еще есть всякого другого служебного хозяйства и других задач, помимо ЦОС), то RTOS тут может оказаться очень кстати. Естественно, что накладные расходы на RTOS должны быть адекватными возможностям процессора и задаче, поэтому крутые и толстые ОС, сделанные по всем правилам, тут не рулят. А вот какая-нить uC/OS-II или ThreadX (и их калибра) могут вполне себе неплохо решать задачу.

 

Вообще, в embedded (на МК, коим вполне может быть и DSP :) ), где система и программа зачастую составляют единое целое, процесс разработки программы и использования (при этом) RTOS весьма отличается от писания приложений под [RT]OS, когда система о приложении ничего не знает, а только лишь предоставляет правила и сервисы. При рассуждениях этот момент, имхо, упускать нельзя - он очень значим.

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


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

Тогда во вступлении нужно четко оговорить круг применяемости такого подхода, дабы не возникало лишних вопросов. Но по моему опыту работы (хотя с DSP-процессорами я не работал практически, лишь реализовал некоторые DSP-шные алгоритмы на ARM), система, как правило, нуждается в 1-2 детерменированных по времени реакции процессах. Для остальных процессов время реакции зачастую уже не имеет значения в разумных границах. А в таких случаях более оптимально время процессора распределяется как раз в вытесняющих ОС.

 

Представьте себе такую систему (Вы с ней сталкиваетесь очень часто). Сигнальный процессор. На нем реализованы следующие функции:

- МР3

- эквалайзер, стерео на 5 полос в каждом канале.

- 3D-sound

- басс-бустер (не знаю как по русски)

- плавная регулировка громкости (страшно пакостная вещь из-за мощного канала управления)

- передискретизатор из 44.1кГц в 96кГц

 

И кто тут кого должен вытеснять?

 

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

 

Это не универсальная система, а такая узкоспециализированная. Естественно, время тика должно быть меньше времени реакции системы.

 

Легкое противоречие...

 

Пока не понял в чем именно.

 

Если краткое резюме - RTOS я бы не стала это называть. А так все нормально, проблемно-ориентированное ПО. Вопрос то в чем? Оценка хорошего проекта? Найти и определить область применимости?

 

Ну назовите планировщик... Хотя МикроСи называют все-таки RTOS. Вопрос в том, чтобы не печетать совсем уж явные ляпы. Всплывают они именно при подобных обсуждениях. А применяют этот софт в уже разных странах :)

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


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

А какая позразумевается структура (иерархия) на запросы аппарантой и программной частей? Если будет как оговаривается: "ограничение времени отклика на любой запрос, как со стороны аппаратной части, так и со стороны исполняемых программных модулей" - т.е. если они будут равноценными, то получиться - полный бедлам! И грош цена такой RTOS.

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


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

2. Задачи не должны прерывать друг друга и, следовательно, они все имеют одинаковый приоритет.

 

Последнее следствие неочевидно, ...

 

Последнее следствие не только не очевидно, но, как на мой взгляд - и глубоко ошибочно...

 

Приведите пример, когда нужно использовать в реал-тайме вытеснение. Все остальное - лишнее.

 

Когда одна задача прерывает другую? Когда ресурсов системы не хватает на обе задачи одновременно. Т.е. прерывание задачи приведет к тому, что прерванная задача не успеет обработать данные (пройти реперную точку) за оговоренное время.

 

Совсем не так! - это только 1 из многих частных случаев... Задача может прерывать другую - когда для неё наступит асинхронное событие, которого она молча, может быть, 3 часа ожидала - это классика всех сетевых обменов...

 

Пример не корректен, во-первых TCP/IP не реал-тайм уже по определению.

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

И так, кто кого дожен прервать, чтобы звук не прервался?

 

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

 

Всё это умозрительно, "на пальцах" и ... не убеждает. ;)

 

 

Убедите меня тогда Вы. Приведите пример, когда есть необходимость прерывания в отсутствиии конкуренции за рессурсы.

 

3. Важной частью RTOS являются драйвера. По причинам, изложенным ниже, драйвера должны запускаться также каждый тик.

 

Драйверы, вообще-то, являются достаточно ;) важной частью любой OS, не только RT...

Но только в RTOS с хорошо продуманной и проработанной архитектурой (кто понимает о чём это я - догадывается ;) : микроядерной) - так драйверы могут выполняться как "ещё один рядовой пользовательский процесс" - так что о них и говорить отдельно нужды нет...

 

А если не получается их оформить в процесс? Ну у Вас задача обработать буффер в 1024 слова. Эта задача выполняется 5 мс, а данные прут со скоростью одно слово зо 5мкс. Как не потерять данные во время выполнения задачи, если ее прерывать нельзя?

 

 

 

 

 

Действительно, автор статьи пытался рассмотреть очень узкую задачу - чистая ЦОС РВ, т.е. имеются только задачи обработки данных, которые, естественно, должны обработать данные одного отсчета до начала следующего. В таком случае все задачи должны успеть отработать в течение одного фрейма. Тут действительно не до приоритетов. Но в реальной работе кроме ЦОС требуются мониторинг, статистика, диагностика и т.д. и т.п. - т.е. куча других задач.

И вот тогда высказывание :

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

 

Ну и как они конкурируют? Зъим сколько смогу, а остальное покусаю? Нафиг, такие этнически ориетированные задачи...

 

А какая позразумевается структура (иерархия) на запросы аппарантой и программной частей? Если будет как оговаривается: "ограничение времени отклика на любой запрос, как со стороны аппаратной части, так и со стороны исполняемых программных модулей" - т.е. если они будут равноценными, то получиться - полный бедлам! И грош цена такой RTOS.

 

Не понял, Бедлам-то откуда возмется? Можете субсидировать Афтара примером?

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


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

Приведите пример, когда нужно использовать в реал-тайме вытеснение. Все остальное - лишнее.

 

Вот так сразу? ;)

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

Если у вас там 5, ну хоть 50 - неперерывных потоковых задач, и вы их RR-диспетчируете - то может вытеснений у вас и не возникать (вы бы ещё 1 поток RR диспетчировали, и сокрушались, что там вытеснять нечего ;))... но как только ваши 5 задач надумают взаимодействовать (синхронизации там и т.д. - Дэйкстра там, Хоар ... - слышали?) вот тут вашей "гребёнке" RR и ... "приехали": даже простейшие операции на семафоре потребуют перепланирования, а что это как не вытеснение?

 

Пример не корректен, во-первых TCP/IP не реал-тайм уже по определению.

 

Пример корректен - потому что вы просто не знаете TCP/IP "по определению" ;) ... цитату покажите, где такое "по определению" написано?

Но я не говорил, кажется, о TCP/IP ... ни буквы ... а с MAC-уровнем как будем? он тоже "по определению"?...

Но это всё суть не принципиально важно: я вам указал, что все системы сетевые, обмена данными, поступление данных на RS-232 ... все они построены на асинхронных событиях, на которые нужно немедленно реагировать, и никакие синхронные процедуры диспетчирования - не решат вам проблемы реакции на асинхронные события.

 

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

И так, кто кого дожен прервать, чтобы звук не прервался?

 

- когда вы начали дёргать свой эквалайзер, то, в принципе, здесь вы никого можете и не прерывать (как вы может быть предполагали ;))...

- но вот когда вы этой задачей пересчитаете свои коэффициенты и попробуете их "вписать" задаче потоковой обработки "чтобы звук не прервался" - вот так "на ходу", без синхронизации и перепланирования задач...

- ... нет, если это у тинэйджера плеер на шее - то вы можете и "на ходу" поменять коэффициенты;

- а вот если у меня это система управления движением, или управления полётом - то лучше так не делать... "не ровён час"...

 

Убедите меня тогда Вы. Приведите пример, когда есть необходимость прерывания в отсутствиии конкуренции за рессурсы.

 

Вы что ресурсами называете? только процессорные циклы? а если видов ресурсов у вас намного больше, тогда как? Кому нужно ОС вообще, если потоки не конкурируют за ресурсы?

 

А если не получается их оформить в процесс? Ну у Вас задача обработать буффер в 1024 слова. Эта задача выполняется 5 мс, а данные прут со скоростью одно слово зо 5мкс. Как не потерять данные во время выполнения задачи, если ее прерывать нельзя?

 

Я вам о том, что в QNX умудряются все драйверы (а их там мно-о-о-го устройств, не только плеера ;)) представлять как пользовательские процессы - а вы мне про 1024 слова которые нельзя прерывать ;).

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


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

2. Задачи не должны прерывать друг друга и, следовательно, они все имеют одинаковый приоритет.

 

Последнее следствие неочевидно, ...

 

Последнее следствие не только не очевидно, но, как на мой взгляд - и глубоко ошибочно...

 

Приведите пример, когда нужно использовать в реал-тайме вытеснение. Все остальное - лишнее.

 

Это что - для реал-тайм задач - один процессор, а для всех остальных - другой?

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

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


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

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

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

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

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

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

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

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

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

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