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

 
 
> Подскажите пожалуйста, про многозадачность.
_Алекс
сообщение Oct 18 2006, 07:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Есть несколько задач (программ) которые должны выполнятся с минимальным временем, можно организовать как линейный список функций, которые последовательно вызываются из главной функции main() при условии что время выполнения каждой функции ограничено т.е. внутри функции нет кода который задерживает выполнения (ожидает чего либо).
Например одна функция обрабатывает принятый массив с USARTа. другая расшифровывает принятую команду и выполняет ее, подготавливает ответ к отправке (квитирование).
Еще пару функций, которые что-то делают (обслуживают клавиатуру, исполнительные устройства). Получается все запутанно, если делать все функции в виде конечных автоматов с минимальным временем работы каждой. Хорошо было бы, если каждая функция выполнялась в виде задачи, ожидает, данные с параллельного потока пускай ждет, получила что хотела, выполняет. Есть задержка в функции скажем, на 20 секунд, пускай ждет, в это время выполняются другие функции. С операционными системами как-то все сложно, может планировщик задач да и все. Какие есть решение не сложные? Механизм взаимодействия функций друг с другом.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yod
сообщение Oct 24 2006, 10:18
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 20-10-06
Пользователь №: 21 500



У многих "универсальных" ОС основная проблема - неоптимизированное ядро. Там бы все ручками...
А так их реакция не радует. Монопольный режим ядра, да и долгое время переключения задач.
Прикрепляю архив с "в последний лохматый раз" переделаной "переключалкой контекстов".
Описывать неохота smile.gif если кому интересны подробности - спрашивайте.
Сие работает на давайсах с мега48, другой на 16.
Написано на асме и для асма (но очень хочется сами задачи на С писать, сейчас "вопрос прорабатывается").
Если кто-нибудь что-нибудь предложит по оптимизации ядра, будет хорошо.
интересны:
Функция проверки истечения таймаута;
Функция проверки говых по событию задач;
время переключения задач:
с одной на ту же около 150 тактов (примерно)
с одной на другую от 200 тактов (примерно).
прерывания рабоают в монопольном режиме.
планировщик в общем режиме.
//--------------------------------
щаз там уарт на 115200 зашит и прием зациклен на передачу через буферную систему.
При старте выдает тестовую строчку. Работоспособность проверял только что.
С уважением, yod
Прикрепленные файлы
Прикрепленный файл  AVRasmOS.zip ( 36.65 килобайт ) Кол-во скачиваний: 69
 
Go to the top of the page
 
+Quote Post
µµC
сообщение Oct 25 2006, 12:47
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710



Цитата(yod @ Oct 24 2006, 14:18) *
Функция проверки истечения таймаута;
Функция проверки говых по событию задач;
время переключения задач:
с одной на ту же около 150 тактов (примерно)
с одной на другую от 200 тактов (примерно).
прерывания рабоают в монопольном режиме.
планировщик в общем режиме.


Ну jacOS, например:
Функция проверки истечения таймаута - ok;
Функция проверки говых по событию задач - ok;
время переключения задач:
с одной на ту же - 55 тактов (mega16, IAR 420A, prim2)
с одной на другую - от 55 тактов (OS_Cooperate(), скажем, OS_Delay() - 146 тактов).
прерывания рабоают в монопольном режиме - ? Не понял что имеется в виду.
планировщик в общем режиме - ok.
Go to the top of the page
 
+Quote Post
yod
сообщение Oct 25 2006, 12:57
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 20-10-06
Пользователь №: 21 500



jacOS - это круто, потому что FSM (Finite State Machine)
и соотвественно в расчет не идет - не сравнима.
Go to the top of the page
 
+Quote Post
µµC
сообщение Oct 25 2006, 13:14
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710



Цитата(yod @ Oct 25 2006, 16:57) *
потому что FSM (Finite State Machine)


В каком месте FSM? Да где там хоть намек на FSM, ничего не путаете? Вообще, если не трудно, поясните свою мысль.

Цитата(yod @ Oct 25 2006, 16:57) *
и соотвественно в расчет не идет - не сравнима.


Обычная невытесняющая ось. С чем не сравнима? На мой взгляд, невытесняющие оси, по природе своей, на порядок (двоичный, троичный) более подходят для AVR , чем вытесняющие. Но, до пьедестала несравнимых (несравненных) сама концепция их не вытягивает.
Go to the top of the page
 
+Quote Post
yod
сообщение Oct 26 2006, 03:33
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 24
Регистрация: 20-10-06
Пользователь №: 21 500



Цитата(µµC @ Oct 25 2006, 20:14) *
В каком месте FSM? Да где там хоть намек на FSM, ничего не путаете? Вообще, если не трудно, поясните свою мысль.

"Задача остается текущей столько времени, сколько захочет, а управление ядру передает исключительно добровольно. " это из манаула.
Я не знаю чего тут еще пояснять. Довольно прозрачно.
Т.е. существует конечный ряд состояний всего ПО, для каждого состояния можно определить набор состояний(из общего множества состояний ПО), следующих за ним, и условия перехода (в д.с. события, приоритеты). Это и есть FSM.

Цитата(µµC @ Oct 25 2006, 20:14) *
Обычная невытесняющая ось. С чем не сравнима? На мой взгляд, невытесняющие оси, по природе своей, на порядок (двоичный, троичный) более подходят для AVR , чем вытесняющие. Но, до пьедестала несравнимых (несравненных) сама концепция их не вытягивает.

Цитата(µµC @ Oct 25 2006, 19:47) *
Ну jacOS, например:
время переключения задач:
с одной на ту же - 55 тактов (mega16, IAR 420A, prim2)
с одной на другую - от 55 тактов (OS_Cooperate(), скажем, OS_Delay() - 146 тактов).

А как их сравнивать-то - разная идеология ("архитектура")?
в вытесняющей - сохранение контекста, вытеснение задачей задачи, там одни "такты".
в FSM - упорное выполнение "состояния", переход между состояниями - там другие такты.
Хотя критерий есть: для "RTOS в системе", не важно какая она, основной критерий - гарантированное, детерминированное время отклика на событие. Для кооперативной это считается много легче, чем для вытесняющей(если не сказать более категорично).

Если хочется сравнить "на пальцах": то за какое количество тактов провериться событие на "истечение таймаута"? за какое количество тактов провериться 10 событий на "истечение таймаута"?
в посте:
Цитата(µµC @ Oct 25 2006, 19:47) *
Цитата(yod @ Oct 24 2006, 14:18) *

Функция проверки истечения таймаута;
Функция проверки говых по событию задач;

Функция проверки истечения таймаута - ok;
Функция проверки говых по событию задач - ok;

я спрашивал не "какая ОС это умеет делать", а "кто знает как эту ПиПиСку сделать "круче""?
scmRTOS ИМХО отличная ось, но эта ПиПиСка там для АВР не оптимизирована, мне очень жаль дарить бесценные "ядрёны" такты компилятору. Для "ядра" это "одна из" долгоиграющих функций (кто не понял - void OS::TKernel::SystemTimer())
//----------------------------------------------------------------------
На самом деле из-за своей детерминестической природы FSM
выглядит очень даже привлекательно. Ну а с позиций 8-ми биток, так вообще "шоколадно", это я с Вами, уважаемый, согласен.
из мануала:
"На самом деле, проблема не в том, что для кооперативной ОС нельзя добиться времени отклика сопоставимого с тем, что есть у вытесняющих. Это как раз достижимо ценой частых переключений задач. Проблема в том, что обеспечить такое переключение не всегда будет легко. " - масло масленное конечно, но верно.
Дело за малым - выработать методологию "превращения" каждой задачи в набор состояний smile.gif
С этих позиций много проще прерывать задачи, сохранять и восстанавливать контекст.
//-----------------------------------------------------------------------
Я постараюсь конкретизировать:
Мне не нравиться, когда ключевые моменты ОС, "отданы в распоряжение" копмилятора С и посему
мне интересно, у кого есть оптимизированные "ядра" на АСМе или может есть какие-то концептуальные идеи реализации? я просто предложил свой вариант.
С уважением, yod
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 26 2006, 04:17
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(yod @ Oct 26 2006, 10:33) *
Цитата(µµC @ Oct 25 2006, 20:14) *

В каком месте FSM? Да где там хоть намек на FSM, ничего не путаете? Вообще, если не трудно, поясните свою мысль.

"Задача остается текущей столько времени, сколько захочет, а управление ядру передает исключительно добровольно. " это из манаула.
Я не знаю чего тут еще пояснять. Довольно прозрачно.

Это просто кооперативная ОСь. Ничего FSM'ного отсюда не следует.

Цитата(yod @ Oct 26 2006, 10:33) *
Т.е. существует конечный ряд состояний всего ПО, для каждого состояния можно определить набор состояний(из общего множества состояний ПО), следующих за ним, и условия перехода (в д.с. события, приоритеты). Это и есть FSM.

Нет. Эдак любую программу можно к FSM'у притянуть - в любой программе всегда есть состояния.

ОС FSM'ного типа - это кооперативная ОС, в которой каждая задача организована как АВТОМАТ СОСТОЯНИЙ. Делается это для того, чтобы процессор не проводил много времени в задаче - зашел, выполнил кусок, вывалился. В следующий раз зашел и сделал другой кусок (следующую порцию общей работы). Вот так и прыгает по задаче. Латентность тут будет определеяться временем выполнения куска. А само "прыгание" по частям всего кода задачи организовывается как автомат состояний. Salvo и jacOS - обычные кооперативные ОСи, в них вы можете зайти в задачу и сидеть там по посинения, а все остальное (ну, кроме прерываний) будет стоять колом. Поэтому никто так не делает, а всегда сами руками разбивают задачу на куски, между которыми отдают управление. FSM ОС предоставляет формализованный путь сделать это. Примером именно такой ОС - nesos от товарища Нильсена.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 26 2006, 06:06
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(dxp @ Oct 26 2006, 07:17) *
А само "прыгание" по частям всего кода задачи организовывается как автомат состояний. Salvo и jacOS - обычные кооперативные ОСи, в них вы можете зайти в задачу и сидеть там по посинения, а все остальное (ну, кроме прерываний) будет стоять колом. Поэтому никто так не делает, а всегда сами руками разбивают задачу на куски, между которыми отдают управление.

Что-то я потерял нить...
Если все задачи реализованы как АВТОМАТ СОСТОЯНИЙ, то зачем тогда ОС? Точнее, можно ли этот способ выполнения задач назвать OC, если каждая задача гарантированно выйдет из обработки своего состояния? :
for (;;)
{
Task1();
Task2();
Task3();
}
Сам так делаю, но наглости назвать это ОС не хватает smile.gif
ОС и нужна для того, чтобы не самостоятельно "врукопашную" бить каждую задачу на состояния, а чтобы планировщик автоматически предоставлял время каждой задаче. Предоставлял и отбирал, поэтому задача не может сидеть там до посинения. Иначе это не RTOS. Это Windows :-)
Ссылочку посмотрю, конечно...


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
osnwt
сообщение Oct 26 2006, 06:39
Сообщение #9


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(Dog Pawlowa @ Oct 26 2006, 09:06) *
Если все задачи реализованы как АВТОМАТ СОСТОЯНИЙ, то зачем тогда ОС? Точнее, можно ли этот способ выполнения задач назвать OC, если каждая задача гарантированно выйдет из обработки своего состояния? :
for (;;)
{
Task1();
Task2();
Task3();
}
Сам так делаю, но наглости назвать это ОС не хватает smile.gif

Не совсем такая структура - см. ссылку на jacOS. Нечто подобное должно быть внутри каждой задачи, только там Task2() в приведенном примере - это, например, OS_Cooperate() вызов для передачи управления, а 1 и 3 - это что-то полезное, что делается в задаче.

Цитата
ОС и нужна для того, чтобы не самостоятельно "врукопашную" бить каждую задачу на состояния, а чтобы планировщик автоматически предоставлял время каждой задаче. Предоставлял и отбирал, поэтому задача не может сидеть там до посинения. Иначе это не RTOS. Это Windows :-)

То, что Вы хотите - это преемптивная OS (с разделением времени и принудительным переключением). А то, что обсуждается - кооперативная. Как уже говорилось, в последней гораздо проще оценить временные характеристики, поскольку все под контролем автора кода.

А насчет Windows - да, в какой-то степени это так. Но не стоит забывать, что OS - это не только переключение задач (и связанные с этим критические секции и т.п. головная боль). Это также и средства межпроцессного взаимодействия (семафоры, очереди, сообщения, поддержка ожидания событий, задержка на заданные интервалы времени и т.п.). И эти средства при правильном их использовании могут быть исключительно удобными и полезными даже в кооперативной OS.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Алекс   Подскажите пожалуйста, про многозадачность.   Oct 18 2006, 07:29
- - Сергей Б   Ну для этого и придуманы прерывания, например для ...   Oct 18 2006, 07:35
|- - _Алекс   Цитата(Сергей Б @ Oct 18 2006, 10:35) Ну ...   Oct 18 2006, 07:42
- - Сергей Б   Ну так ясное дело в прерывании, например для юарта...   Oct 18 2006, 08:01
|- - Alexander Storm   Попробуй всеж чуток с операционками разобраться, п...   Oct 18 2006, 19:24
|- - Dog Pawlowa   Осень. Пора, как все, лететь к RTOS. Но я пока ...   Oct 19 2006, 09:04
||- - _Алекс   Цитата(Dog Pawlowa @ Oct 19 2006, 12:04) ...   Oct 19 2006, 09:26
||- - Dog Pawlowa   Цитата(_Алекс @ Oct 19 2006, 12:26) Поясн...   Oct 19 2006, 09:48
|- - osnwt   Цитата(Alexander Storm @ Oct 18 2006, 22...   Oct 19 2006, 14:09
|- - AVR   Цитата(osnwt @ Oct 19 2006, 18:09) Цитата...   Oct 19 2006, 16:38
- - GinRider   Цитата(_Алекс @ Oct 18 2006, 10:29) Получ...   Oct 18 2006, 08:13
|- - Сергей Б   Цитата(GinRider @ Oct 18 2006, 12:13) Цит...   Oct 18 2006, 08:27
- - rezident   Можно и без вложенных прерываний в одном прерывани...   Oct 18 2006, 08:37
- - GetSmart   В винде вот красиво сделано. Там есть обработчики ...   Oct 18 2006, 08:43
- - IgorKossak   Наклёвывается необходимость применения RTOS. По кр...   Oct 18 2006, 08:52
|- - GinRider   Цитата(IgorKossak @ Oct 18 2006, 11:52) Н...   Oct 18 2006, 09:28
|- - µµC   Цитата(GinRider @ Oct 18 2006, 13:28) Есл...   Oct 18 2006, 09:47
|- - SasaVitebsk   Цитата(GinRider @ Oct 18 2006, 12:28) Цит...   Oct 18 2006, 09:50
|- - GinRider   Цитата(SasaVitebsk @ Oct 18 2006, 12:50) ...   Oct 18 2006, 11:29
|- - µµC   Цитата(GinRider @ Oct 18 2006, 15:29) Про...   Oct 18 2006, 12:12
|- - defunct   Цитата(µµC @ Oct 18 2006, 15:12) Получает...   Oct 18 2006, 13:48
- - _Алекс   Есть функции, есть планировщик задач. Функции заци...   Oct 18 2006, 11:18
|- - Сергей Борщ   Цитата(_Алекс @ Oct 18 2006, 14:18) Есть ...   Oct 18 2006, 11:56
- - defunct   Цитата(_Алекс @ Oct 18 2006, 10:29) Есть ...   Oct 18 2006, 11:32
- - Михаил Горюнов   Скромная попытка объяснить необъятное двумя словам...   Oct 18 2006, 13:09
- - _Алекс   Почитал по операционнкам, попроще получается коопе...   Oct 19 2006, 08:06
|- - Hz!   Цитата(_Алекс @ Oct 19 2006, 11:06) Почит...   Oct 19 2006, 09:20
- - Hz!   ЦитатаЯсно, а кто задачи с приоритетами 2 и 3 дела...   Oct 19 2006, 10:05
- - Alex B._   Автор jacOS высылает исходники по запросу, напишит...   Oct 19 2006, 17:50
- - _Алекс   Посмотрел ОС scmRTOS, jacOS, Salvo. многозадачност...   Oct 20 2006, 05:52
|- - osnwt   Цитата(_Алекс @ Oct 20 2006, 08:52) Посмо...   Oct 20 2006, 06:09
|- - µµC   Цитата(_Алекс @ Oct 20 2006, 09:52) Посмо...   Oct 20 2006, 09:47
|- - _Алекс   Исходники можно взять для jacos, и повторю, нужны ...   Oct 20 2006, 10:50
|- - µµC   Цитата(_Алекс @ Oct 20 2006, 14:50) А у в...   Oct 20 2006, 11:19
- - Alex B._   >> Один минус: отсутствие исходников Это не...   Oct 20 2006, 12:39
|- - osnwt   Цитата(Alex B._ @ Oct 20 2006, 15:39) ...   Oct 20 2006, 16:57
- - Alex B._   Согласен на полминуса. Для того чтобы лучше понять...   Oct 20 2006, 18:27
|- - osnwt   Поддержка - или платить постоянно за нее, или авто...   Oct 20 2006, 18:33
- - haker_fox   Цитата(_Алекс @ Oct 18 2006, 16:29) Есть ...   Oct 21 2006, 03:26
|- - Turion   А ничего, что на сайте scmRTOS висит версия 2.04a-...   Oct 25 2006, 11:59
||- - Сергей Борщ   Цитата(Turion @ Oct 25 2006, 14:59) А нич...   Oct 25 2006, 12:13
|- - µµC   Цитата(yod @ Oct 26 2006, 07:33) "За...   Oct 26 2006, 17:30
- - bodja74   2vod Смотрел,хорошая оська,незнаю как насчет фунц...   Oct 26 2006, 22:05
- - yod   to bodja74 Цитата(bodja74 @ Oct 27 2006, 05...   Oct 27 2006, 03:42
- - bodja74   Цитата(yod @ Oct 27 2006, 06:42) Я пока ...   Oct 27 2006, 20:13
- - trofim   .def Zero = rxx ;любой регистр clr Zero ; в и...   Oct 31 2006, 11:16
- - bodja74   Цитата(trofim @ Oct 31 2006, 14:16) Кто п...   Oct 31 2006, 13:02
- - =GM=   Цитата(bodja74 @ Oct 31 2006, 13:02) Цита...   Oct 31 2006, 16:30
- - bodja74   Цитата(=GM= @ Oct 31 2006, 19:30) Цитата(...   Oct 31 2006, 16:40
- - =GM=   Цитата(bodja74 @ Oct 31 2006, 16:40) Абсо...   Oct 31 2006, 17:41
- - bodja74   Цитата(=GM= @ Oct 31 2006, 20:41) Ну ладн...   Oct 31 2006, 19:27
- - =GM=   GM Ну ладно, при случае(:-). А вы где территориаль...   Nov 1 2006, 11:07
- - bodja74   Цитата(=GM= @ Nov 1 2006, 14:07) GM Ну ла...   Nov 1 2006, 16:41
- - =GM=   [quote name='bodja74' date='Nov 1 2006...   Nov 1 2006, 18:01
- - =GM=   Цитата(bodja74 @ Nov 1 2006, 16:41) ЗЫ ГЫ...   Nov 2 2006, 15:43


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:17
Рейтинг@Mail.ru


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