|
Подскажите пожалуйста, про многозадачность. |
|
|
|
Oct 18 2006, 07:29
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377

|
Есть несколько задач (программ) которые должны выполнятся с минимальным временем, можно организовать как линейный список функций, которые последовательно вызываются из главной функции main() при условии что время выполнения каждой функции ограничено т.е. внутри функции нет кода который задерживает выполнения (ожидает чего либо). Например одна функция обрабатывает принятый массив с USARTа. другая расшифровывает принятую команду и выполняет ее, подготавливает ответ к отправке (квитирование). Еще пару функций, которые что-то делают (обслуживают клавиатуру, исполнительные устройства). Получается все запутанно, если делать все функции в виде конечных автоматов с минимальным временем работы каждой. Хорошо было бы, если каждая функция выполнялась в виде задачи, ожидает, данные с параллельного потока пускай ждет, получила что хотела, выполняет. Есть задержка в функции скажем, на 20 секунд, пускай ждет, в это время выполняются другие функции. С операционными системами как-то все сложно, может планировщик задач да и все. Какие есть решение не сложные? Механизм взаимодействия функций друг с другом.
|
|
|
|
|
 |
Ответов
|
Oct 24 2006, 10:18
|
Участник

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

|
У многих "универсальных" ОС основная проблема - неоптимизированное ядро. Там бы все ручками... А так их реакция не радует. Монопольный режим ядра, да и долгое время переключения задач. Прикрепляю архив с "в последний лохматый раз" переделаной "переключалкой контекстов". Описывать неохота  если кому интересны подробности - спрашивайте. Сие работает на давайсах с мега48, другой на 16. Написано на асме и для асма (но очень хочется сами задачи на С писать, сейчас "вопрос прорабатывается"). Если кто-нибудь что-нибудь предложит по оптимизации ядра, будет хорошо. интересны: Функция проверки истечения таймаута; Функция проверки говых по событию задач; время переключения задач: с одной на ту же около 150 тактов (примерно) с одной на другую от 200 тактов (примерно). прерывания рабоают в монопольном режиме. планировщик в общем режиме. //-------------------------------- щаз там уарт на 115200 зашит и прием зациклен на передачу через буферную систему. При старте выдает тестовую строчку. Работоспособность проверял только что. С уважением, yod
|
|
|
|
|
Oct 25 2006, 12:47
|
Участник

Группа: Новичок
Сообщений: 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.
|
|
|
|
|
Oct 25 2006, 12:57
|
Участник

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

|
jacOS - это круто, потому что FSM (Finite State Machine) и соотвественно в расчет не идет - не сравнима.
|
|
|
|
|
Oct 25 2006, 13:14
|
Участник

Группа: Новичок
Сообщений: 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 , чем вытесняющие. Но, до пьедестала несравнимых (несравненных) сама концепция их не вытягивает.
|
|
|
|
|
Oct 26 2006, 03:33
|
Участник

Группа: Новичок
Сообщений: 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-ми биток, так вообще "шоколадно", это я с Вами, уважаемый, согласен. из мануала: "На самом деле, проблема не в том, что для кооперативной ОС нельзя добиться времени отклика сопоставимого с тем, что есть у вытесняющих. Это как раз достижимо ценой частых переключений задач. Проблема в том, что обеспечить такое переключение не всегда будет легко. " - масло масленное конечно, но верно. Дело за малым - выработать методологию "превращения" каждой задачи в набор состояний  С этих позиций много проще прерывать задачи, сохранять и восстанавливать контекст. //----------------------------------------------------------------------- Я постараюсь конкретизировать: Мне не нравиться, когда ключевые моменты ОС, "отданы в распоряжение" копмилятора С и посему мне интересно, у кого есть оптимизированные "ядра" на АСМе или может есть какие-то концептуальные идеи реализации? я просто предложил свой вариант. С уважением, yod
|
|
|
|
|
Oct 26 2006, 04:17
|

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 от товарища Нильсена.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 26 2006, 06:06
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(dxp @ Oct 26 2006, 07:17)  А само "прыгание" по частям всего кода задачи организовывается как автомат состояний. Salvo и jacOS - обычные кооперативные ОСи, в них вы можете зайти в задачу и сидеть там по посинения, а все остальное (ну, кроме прерываний) будет стоять колом. Поэтому никто так не делает, а всегда сами руками разбивают задачу на куски, между которыми отдают управление. Что-то я потерял нить... Если все задачи реализованы как АВТОМАТ СОСТОЯНИЙ, то зачем тогда ОС? Точнее, можно ли этот способ выполнения задач назвать OC, если каждая задача гарантированно выйдет из обработки своего состояния? : for (;;) { Task1(); Task2(); Task3(); } Сам так делаю, но наглости назвать это ОС не хватает ОС и нужна для того, чтобы не самостоятельно "врукопашную" бить каждую задачу на состояния, а чтобы планировщик автоматически предоставлял время каждой задаче. Предоставлял и отбирал, поэтому задача не может сидеть там до посинения. Иначе это не RTOS. Это Windows :-) Ссылочку посмотрю, конечно...
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Oct 26 2006, 06:39
|

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

|
Цитата(Dog Pawlowa @ Oct 26 2006, 09:06)  Если все задачи реализованы как АВТОМАТ СОСТОЯНИЙ, то зачем тогда ОС? Точнее, можно ли этот способ выполнения задач назвать OC, если каждая задача гарантированно выйдет из обработки своего состояния? : for (;;) { Task1(); Task2(); Task3(); } Сам так делаю, но наглости назвать это ОС не хватает  Не совсем такая структура - см. ссылку на jacOS. Нечто подобное должно быть внутри каждой задачи, только там Task2() в приведенном примере - это, например, OS_Cooperate() вызов для передачи управления, а 1 и 3 - это что-то полезное, что делается в задаче. Цитата ОС и нужна для того, чтобы не самостоятельно "врукопашную" бить каждую задачу на состояния, а чтобы планировщик автоматически предоставлял время каждой задаче. Предоставлял и отбирал, поэтому задача не может сидеть там до посинения. Иначе это не RTOS. Это Windows :-) То, что Вы хотите - это преемптивная OS (с разделением времени и принудительным переключением). А то, что обсуждается - кооперативная. Как уже говорилось, в последней гораздо проще оценить временные характеристики, поскольку все под контролем автора кода. А насчет Windows - да, в какой-то степени это так. Но не стоит забывать, что OS - это не только переключение задач (и связанные с этим критические секции и т.п. головная боль). Это также и средства межпроцессного взаимодействия (семафоры, очереди, сообщения, поддержка ожидания событий, задержка на заданные интервалы времени и т.п.). И эти средства при правильном их использовании могут быть исключительно удобными и полезными даже в кооперативной OS.
|
|
|
|
Сообщений в этой теме
_Алекс Подскажите пожалуйста, про многозадачность. 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|