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

 
 
> Народ, что думаешь про эту писанину? В принципе, это статья :)
st256
сообщение Feb 19 2006, 09:07
Сообщение #1


СТАТУС: только для чтения
**

Группа: Новичок
Сообщений: 133
Регистрация: 23-12-04
Пользователь №: 1 627



В настоящее время при создании систем цифровой обработки сигналов широко используется понятие «Операционная Система Реального Времени» или 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 для задач Цифровой Обработки Сигнала. Описаны программные модули, на которых она строиться и их принцип функционирования. Определена формальная структура задачи и сделан практически важный для аппаратной части вывод, о возможности использования в системе только одного прерывания (от таймера) и отказа от приоритетов.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Виктория
сообщение Feb 21 2006, 13:57
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



st256, Вам вроде и нужна была критика smile.gif

Вот эта мысль тоже хорошая:
Цитата
исполняющая система (планировщик) потоковой сигнальной обработки

Или исполнительный монитор ЦОС. А средства поддержки проектирования есть (2 альтернативы: в ОС - библиотеки системных функций, в ЯВУ или case-системах - само описание уникально). Даже макросы и то инструмент.

Сообщение отредактировал Vic1 - Feb 21 2006, 13:58
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- st256   Народ, что думаешь про эту писанину? В принципе, это статья :)   Feb 19 2006, 09:07
- - _artem_   не судите строго , по моему вы своими словами опис...   Feb 19 2006, 19:58
|- - Andy Mozzhevilov   Цитата(_artem_ @ Feb 20 2006, 00:58) не с...   Feb 20 2006, 04:26
|- - st256   Цитата(_artem_ @ Feb 20 2006, 04:58) не с...   Feb 20 2006, 05:17
|- - Andy Mozzhevilov   Цитата(st256 @ Feb 20 2006, 10:17) Это не...   Feb 20 2006, 06:08
|- - st256   Цитата(Andy Mozzhevilov @ Feb 20 2006, 15...   Feb 20 2006, 12:52
- - Vic1   ЦитатаТеперь подведем итоги. В данной статье была ...   Feb 20 2006, 06:18
- - Olej   Цитата(st256 @ Feb 19 2006, 13:07) В наст...   Feb 20 2006, 07:59
|- - st256   Цитата(Olej @ Feb 20 2006, 16:59) Цитата(...   Feb 20 2006, 13:37
|- - Olej   Цитата(st256 @ Feb 20 2006, 17:37) Привед...   Feb 20 2006, 14:15
||- - st256   Цитата(Olej @ Feb 20 2006, 23:15) Вот так...   Feb 21 2006, 13:27
||- - fontp   Цитата(Olej @ Feb 20 2006, 17:15) Цитата(...   Feb 22 2006, 08:47
||- - Olej   Цитата(fontp @ Feb 22 2006, 12:47) Olej И...   Feb 22 2006, 10:01
|||- - st256   Цитата(Olej @ Feb 22 2006, 19:01) Вот я о...   Feb 22 2006, 11:55
|||- - Olej   Цитата(st256 @ Feb 22 2006, 15:55) Что та...   Feb 22 2006, 14:48
|||- - st256   Цитата(Olej @ Feb 22 2006, 23:48) Только ...   Feb 22 2006, 15:55
||- - st256   [quote name='fontp' date='Feb 22 2006,...   Feb 22 2006, 11:27
||- - fontp   Цитата(st256 @ Feb 22 2006, 14:27) Ув. г-...   Feb 22 2006, 11:40
||- - st256   ЦитатаЦитата Ув. г-н Фунт... т.е.Фонт... в смысле...   Feb 22 2006, 12:40
|- - v_shamaev   Цитата2. Задачи не должны прерывать друг друга и, ...   Feb 20 2006, 15:06
- - Vic1   Olej, Вам респект ! за то, что все так разло...   Feb 20 2006, 08:17
|- - dxp   Цитата(Vic1 @ Feb 20 2006, 14:17) Предмет...   Feb 20 2006, 12:12
- - Arch_Grey   Действительно, автор статьи пытался рассмотреть оч...   Feb 20 2006, 09:14
- - BVU   А какая позразумевается структура (иерархия) на за...   Feb 20 2006, 12:53
|- - st256   Цитата(Vic1 @ Feb 21 2006, 22:57) st256, ...   Feb 21 2006, 14:53
|- - Olej   Цитата(st256 @ Feb 21 2006, 18:53) Тогда ...   Feb 21 2006, 17:07
- - TMX   По-моему, автор дал описание архитектуры "cyc...   Feb 21 2006, 19:13
|- - st256   Цитата(TMX @ Feb 22 2006, 04:13) По-моему...   Feb 22 2006, 09:43
- - Vic1   st256, спасибо за леди (а то как уж тут только не ...   Feb 22 2006, 06:55
|- - st256   Цитата(Vic1 @ Feb 22 2006, 15:55) st256, ...   Feb 22 2006, 10:06
- - zltigo   Цитата(st256 @ Feb 22 2006, 13:55) После ...   Feb 22 2006, 12:35
|- - st256   Цитата(zltigo @ Feb 22 2006, 21:35) Цитат...   Feb 22 2006, 12:42
- - Vic1   ЦитатаНо они не имеют такой называть ЭТО RTOS Да,...   Feb 22 2006, 12:40
|- - fontp   Цитата(Vic1 @ Feb 22 2006, 15:40) Да, fon...   Feb 22 2006, 14:39
|- - st256   ЦитатаНо они не имеют такой называть ЭТО RTOS Да, ...   Feb 22 2006, 15:02
|- - Olej   Цитата(st256 @ Feb 22 2006, 19:02) Зачем?...   Feb 23 2006, 07:18
- - zltigo   Цитата(st256 @ Feb 22 2006, 14:42) Кстати...   Feb 22 2006, 12:51
|- - st256   Цитата(zltigo @ Feb 22 2006, 21:51) Цитат...   Feb 22 2006, 15:18
- - zltigo   Цитата(st256 @ Feb 22 2006, 17:18) А есть...   Feb 22 2006, 15:37
- - _artem_   По моему раздел медленно переходит от темы исследо...   Feb 22 2006, 16:59
- - zltigo   Цитата(st256 @ Feb 22 2006, 17:55) И поче...   Feb 22 2006, 17:19
- - fontp   " Я написал ОС РВ. Все свободны. Обсуждение. ...   Feb 24 2006, 07:44
- - slabnoff   В общем статью надо переписывать. Полностью. Под н...   Apr 9 2006, 21:01
|- - Olej   Цитата(slabnoff @ Apr 10 2006, 00:01) рек...   Apr 10 2006, 05:55
- - slabnoff   Цитата(Olej @ Apr 10 2006, 09:55) Не знаю...   Apr 10 2006, 12:23
- - slabnoff   В общем статья действительно довольно здравая. Хот...   Apr 10 2006, 19:52
- - Nixon   Положил в \pub\doc\books\os...   Apr 12 2006, 15:07
|- - slabnoff   Цитата(Nixon @ Apr 12 2006, 19:07) Положи...   Apr 12 2006, 19:11
- - Боинг749   Цитата(st256 @ Feb 19 2006, 13:07) Систем...   Aug 29 2008, 19:28


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

 


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


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