|
Вопрос тем, кому посчастливилось писать планировщик, Разблокировка задач по списку и вообще по теме |
|
|
|
Feb 13 2007, 11:18
|
Местный
  
Группа: Свой
Сообщений: 446
Регистрация: 12-03-06
Из: Москва
Пользователь №: 15 142

|
Цитата Вопрос только в том, что лично мне хотелось-бы иметь более бескомпромисные с точки зрения использования системы решения, при, естественно принесении (и то на самом деле не всегда по конечным результатам) в некоторую жертву экономии "нескольких тактов" и "нескольких байтов". Уже в нескольких ветках вы ссылаетесь на эту "бескомпромисность" одних ОС (FreeRTOS,..?) относительно других (TNKernel, uCOS,...?), как на важнейший критерий вашего выбора оси. Не могли бы вы пояснить, что имеете в виду.
|
|
|
|
|
Feb 13 2007, 12:28
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 29-01-07
Пользователь №: 24 831

|
Цитата(Olej @ Feb 13 2007, 00:26)  Цитата(greezol @ Feb 13 2007, 00:17)  2 Olej, в дополнение к моему посту выше:
из Введение в QNX, Роб Кёртен:
"Простые" (бинарные) семафоры работают точно так же, как и мутексы.
В этом месте Р.Кёртен упрощает  , поверьте: http://www.books.ru/shop/books/357604Проверено  Ну я же просто привел одно предложение, разумеется он там описывает, чем механизм работы и реализации семафора отличается от мутекса, мутекс конечно гораздо проще. Цитата AlexandrY
Не, а всетаки откуда память будете брать для списков? Из статических массивов? Или выделять динамически? Так какой объем? Как его предлагаете вычислять? Блин, для списоков не нужно каких-то массивов. Цитата AlexandrY
Кажется вас сбивает с толку слово "событие", тогда назову его структура типа event. Так вот event-структуры не плодятся как грибы после дождя и не образуют никакой очереди. Их количество определяется самим программистом и им же управляется. Просто они могут быть активны, а могут быть свободны т.е. не иметь ожидающих их задач. Какой бы сервис RTOS вы ни вызывали, ему на вход всегда идет один конкретный идентификатор (он же указатель) event-структуры и идентификатор текущей задачи. Так вот все просто, по указателю event-структуры сразу входим в таблицу ее хозяев (ожидающих ее задач)... А, потом продолжу, спать пора Правильно я понял(упрощенно): структура "получено сообщение", в ней - список задач, получивших сообщения, планировщик их смотрит и разблокирует если они receive-блокированные А можно привести пример системы, если она с открытыми исходниками? Чтоб поподробнее, что представляет эта event структура? Цитата zltigo Дата Сегодня, 04:30
Постановка задачи некорректна - ARM и AVR слишком разные для "универсального", "простого" и "оптимального" решения. Практически Вы будете закладываться на слабейшего - ARM7 жалко На него и так тянут или с восьмибитников все подряд, или уж Линуксообразных монстриков. Для начала берутся разные типы данных для порта (примерно как portCHAR, portXXX во freertos-e) Сначала хочу отработать механизм на слабейшем, а переписывать - для ARM7.. Еще вопрос, как себя компилятор будет вести может и не надо переписывать. Вообще это все сейчас пока не так важно.
|
|
|
|
|
Feb 13 2007, 12:28
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Andreas1 @ Feb 13 2007, 10:18)  Уже в нескольких ветках вы ссылаетесь на эту "бескомпромисность" одних ОС (FreeRTOS,..?) относительно других (TNKernel, uCOS,...?), как на важнейший критерий вашего выбора оси. Не могли бы вы пояснить, что имеете в виду. Для ясности: 1. не в нескольких ветках, а кроме этой только в одной по TN-Kernel 2. речь шла более конкретно - о шедулерах. Так уж вышло, что еще с 90x годов (практически доинтернетовской эпохи) приходилось писать "свои" системки гордясь большей частью экономией байтов и тактов  и обходя вылезающие проблемы многочисленными наслоениями. Когда почти два года назад в качестве новой базы выбрал ARM линейку контроллеров, то решил (и не пожалел!) не продолжать практику перетаскивания своего кода, а взять готовую базу для RTOS и дорабатывать уже ее. Критериями выбора исходя из предыдущего разнообразного опыта на тот момент были - Поддержка задач с одинаковыми приоритетами. Возможность динамического создания и удаления задач, что сразу тянет за собой автоматически и третье условие - наличие менеджера памяти. Не хотелось и ограничивать число задач. Приятным бонусом в последствии явилось появление на выбранной платформе возможности запускать часть задач в невытесняющем режиме.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 13 2007, 12:42
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(greezol @ Feb 13 2007, 11:28)  Для начала берутся разные типы данных для порта (примерно как portCHAR, portXXX во freertos-e) Сначала хочу отработать механизм на слабейшем, а переписывать - для ARM7.. Речь вел не проблемах портирования а о соразмерности системы используемому контроллеру  Ну это как если движок созданный для, например Жигулей простым увеличением его геометрических размеров использовать для автомобиля класса, например, Ягуара. Ездить-то он будет, но ведь "что-то", согласитесь, не так  . Портируется-то легко... P.S. А по крайней мере пробовать писать "свою" систему надо - очень развивающее, увлекательное и затягивающее  занятие!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 13 2007, 13:33
|
Местный
  
Группа: Свой
Сообщений: 446
Регистрация: 12-03-06
Из: Москва
Пользователь №: 15 142

|
Цитата(zltigo @ Feb 13 2007, 12:28)  1. не в нескольких ветках, а кроме этой только в одной по TN-Kernel Един да един-это два, а несколько-это более одного. Цитата(zltigo @ Feb 13 2007, 12:28)  Критериями выбора исходя из предыдущего разнообразного опыта на тот момент были - Поддержка задач с одинаковыми приоритетами. Возможность динамического создания и удаления задач, что сразу тянет за собой автоматически и третье условие - наличие менеджера памяти. Не хотелось и ограничивать число задач. Приятным бонусом в последствии явилось появление на выбранной платформе возможности запускать часть задач в невытесняющем режиме. Так этим условиям(кроме последнего?) удовлетворяют и FreeRTOS, и TNKernel. Поэтому, прежде чем начать более глубоко разбираться с обеими(или сразу выбрать одну), интересно мнение того, кто уже копал обе. Чем не устроил шедулер TNKernel и понравился FreeRTOS? В предыдущих ветках вы часто их сравнивали(более двух раз  ), но как-то невнятно(для меня  ).
|
|
|
|
|
Feb 13 2007, 17:07
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Похоже перехвалил, о механизмах планировки еще разговора не было. Идет пока речь только о реализации механизмов синхронизации. И они в действительности очень разные. В ThreadX, например реально сделано более топорно и именно на основе нескольких разнородных списков для семафоров отдельно, для очередей отдельно и т.д. Кстати это в ThreadX всего 32 приоритета. Но операционка тем не менее для ARM-ов очень популярная. В ThreadX память для элементов списка выделяется самим юзером, в отличие от uCOS. И такая практика на мой взгляд плохая. Одна ошибка в процедуре выделения-восстановления памяти в одной задаче и посыпется вся Ось. В uCOS такого не будет. Так что прикладных моментов для обсуждения достаточно, и не стоит отмахиваться какой-то соразмерностью Цитата(zltigo @ Feb 13 2007, 12:30)  Там действительно лет двадцать тому впервые был заложен (похоже тогда в студенческой работе) знакомый ныне до боли механизм планировки. Немерянное количество OS наследовали этот подход. Имеют право.
|
|
|
|
|
Feb 13 2007, 17:55
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(AlexandrY @ Feb 13 2007, 16:07)  Кстати это в ThreadX всего 32 приоритета. Но операционка тем не менее для ARM-ов очень популярная. Есть еще более популярные решения - "а зачем вообще эта операционка". Ну и что?  Цитата Так что прикладных моментов для обсуждения достаточно, Немеряно! Цитата и не стоит отмахиваться какой-то соразмерностью А я не отмахиваюсь - почти все имеет право на существование и свою нишу для применения. Я только хотел сказать, что рассмотрение минималистичных решений заточеных под восьмибитовики на ARM платформе лично мне уже совсем не интересны.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 15 2007, 19:04
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
Цитата(AlexandrY @ Feb 13 2007, 09:37)  [...] я описывал механизм работы uCOS. Только там нынче поддерживается 65536 задач и при этом ничего не изменилось в планировщике принципиально. В кодах 2.83, 2.84 поддерживается до 256 приоритетов = мах числу задач. В коде 2.52 максимальное число приоритетов = 64. (за вычетом Idle и если используется, Stat процессов, 255 и 63 или 254 и 62 соответственно) Конечно, можно увеличить priority bitmap до размера 8KB и переменную группы соответственно, чтобы отыскать младший установленный бит в 65536-битовом числе. Цитата(AlexandrY @ Feb 13 2007, 09:37)  А Time Slice делается в uCOS довольно просто с помощью одной дополнительной высокоприоритетной задачи. На сайте Infineon в одном аппноте, было разжевано как это делается. TS в системе где нет двух процессов с равным приоритетом? Проще (и логичнее) переделать алгоритм планировщика uCOS, чем моделировать тоже самое из уровня приложения... -- Андрей
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|