-
- Отсутствует и не только у uCOS. Потому как накладно это, приоритеты наследовать и решить можно другими путями. - Apтём(26.11.2013 16:36 - 16:38)
- в простейшем случае (<32 приоритетов) это одно слово в контексте и проверка ждущих задач в переключателе - очень небольшой оверхед - ыыыыыыы(26.11.2013 17:31, )
- Мне как-то кажется, простейшие случаи -- это чего-то вроде protothreads, что далеко от реальной жизни. Это надо перетряхнуть очередь ожидающих (их там 100500). Кому-то поднять приоритет (перятряхнуть ещё дцать очередей после чего, где найденный fk0(47 знак., 26.11.2013 18:04)
- ну так для этого и ограничивают <32, чтобы путем логических операций and/or и т.п. эта процедура имела минимальное время. protothread я увы не пользовал, но учитывая, что это пришло из "больших" компьютеров предполагаю, что там сложнее - ыыыыыыы(26.11.2013 18:13, )
- Причём тут ассемблер. Очередь -- это скорей binary heap уже отсортированный по приоритету. И нужное где-то в середине, поиск за O(N) (или ещё как-то по критерию адреса упорядочивать дополнительно -- затраты на каждый чих в два-три раза выше, fk0(1247 знак., 26.11.2013 18:39)
- Чего-то переусложняете вы. Наследование приоритетов как раз очень просто реализовывается и время выполнения там фиксированное. Оверхед - один-два байта в структуре мутекса (исходный приоритет текущего владельца мутекса и нынешний приоритет). LightElf(132 знак., 27.11.2013 09:18)
- выступлю за противный :) лагерь: если в нашем случае (с задачами 1,2,3) во время ожидания задачей 3 семафора, произошло событие и запустились задачи 4,5 (приоритеты 5>4>3) и 5 задача полезла за тем же семафором, после завершения задачи 1 (уже с 5 ыыыыыыы(332 знак., 27.11.2013 15:54, )
- не-не-не, после освобождения семафора его старому владельцу просто возвращается свой приоретет. aoreh(298 знак., 27.11.2013 16:01)
- ну так вопрос в том, когда 5 закончилась, а 3 продолжает ждать, какой приоритет у 1, держащий 3? и вот зачем нужна была 4. если оставить 5 приоритет, то нарушение приоритетов - 4 задача ждет 3, если вернуть 1, то "залочка" с 3,2 - ну как-то так - ыыыыыыы(27.11.2013 16:44, )
- охблин, шой-то ты намудрил... aoreh(543 знак., 27.11.2013 16:54)
- Прямой ответ на твой вопрос... когда 5-я закончилась, у 1-й уже давным давно родной (низкий) приоритет aoreh(117 знак., 27.11.2013 16:57)
- охблин, шой-то ты намудрил... aoreh(543 знак., 27.11.2013 16:54)
- Долго тут обсуждать, работать нужно. Если вкратце, то проблема наследования известна и исследована и есть общее мнение, что наследование ресурсоёмко. Есть полно публикаций на тему. Поэтому есть альтернативные способы вроде вроде priority ceiling. fk0(93 знак., 27.11.2013 16:27)
- я с этим не спорю, пытаюсь объяснить ыыыыыыыыы как работает обозначенный выше вариант - aoreh(27.11.2013 17:01)
- ну так вопрос в том, когда 5 закончилась, а 3 продолжает ждать, какой приоритет у 1, держащий 3? и вот зачем нужна была 4. если оставить 5 приоритет, то нарушение приоритетов - 4 задача ждет 3, если вернуть 1, то "залочка" с 3,2 - ну как-то так - ыыыыыыы(27.11.2013 16:44, )
- не-не-не, после освобождения семафора его старому владельцу просто возвращается свой приоретет. aoreh(298 знак., 27.11.2013 16:01)
- выступлю за противный :) лагерь: если в нашем случае (с задачами 1,2,3) во время ожидания задачей 3 семафора, произошло событие и запустились задачи 4,5 (приоритеты 5>4>3) и 5 задача полезла за тем же семафором, после завершения задачи 1 (уже с 5 ыыыыыыы(332 знак., 27.11.2013 15:54, )
- в ecos (с которой я имел больший опыт) хорошо объясняется как делать жесткий реалтайм с комфортом - смысл в том, что для разных классов задач (в одном приложении) доступны разные API сервисов синхронизации: ISR имеет жесткие ограничения, DSR имеет ыыыыыыы(627 знак., 26.11.2013 19:13, )
- Чего-то переусложняете вы. Наследование приоритетов как раз очень просто реализовывается и время выполнения там фиксированное. Оверхед - один-два байта в структуре мутекса (исходный приоритет текущего владельца мутекса и нынешний приоритет). LightElf(132 знак., 27.11.2013 09:18)
- Причём тут ассемблер. Очередь -- это скорей binary heap уже отсортированный по приоритету. И нужное где-то в середине, поиск за O(N) (или ещё как-то по критерию адреса упорядочивать дополнительно -- затраты на каждый чих в два-три раза выше, fk0(1247 знак., 26.11.2013 18:39)
- а если к этому добавить что может быть целая каша из всего этого, то случай может оказаться совсем не простейшим... - aoreh(26.11.2013 18:07)
- ну так для этого и ограничивают <32, чтобы путем логических операций and/or и т.п. эта процедура имела минимальное время. protothread я увы не пользовал, но учитывая, что это пришло из "больших" компьютеров предполагаю, что там сложнее - ыыыыыыы(26.11.2013 18:13, )
- Как-то вы упрощаете...Или нет? Не представил короче... - Apтём(26.11.2013 17:51)
- Мне как-то кажется, простейшие случаи -- это чего-то вроде protothreads, что далеко от реальной жизни. Это надо перетряхнуть очередь ожидающих (их там 100500). Кому-то поднять приоритет (перятряхнуть ещё дцать очередей после чего, где найденный fk0(47 знак., 26.11.2013 18:04)
- в простейшем случае (<32 приоритетов) это одно слово в контексте и проверка ждущих задач в переключателе - очень небольшой оверхед - ыыыыыыы(26.11.2013 17:31, )
- От залочки оно не поможет. - fk0(26.11.2013 16:38)
- обрисуйте мне схему залочки, плиз. может мы о разном? - ыыыыыыы(26.11.2013 17:27, )
- если речь об инверсии, то, как пример... aoreh(549 знак., 26.11.2013 17:38)
- Это не залочка. Залочка (взаимоблокировка, deadlock) от приоритетов вообще не зависит, это когда A ждёт B, а B ждёт A. Можно ещё ввести в дело C, D... но сути уже не меняет. Возникает обычно при программировании из головы, без этапа fk0(70 знак., 26.11.2013 17:59, ссылка)
- я ниже на это ответил, если _специально_ постараться, то изгадить можно что угодно - ыыыыыыы(26.11.2013 18:03, )
- ну так посмотрите, что означает термин, три названия которого тут приведены: для этого примера это значит, что задача 1 получает приоритет равный задаче 3 пока не отдаст семафор - ыыыыыыы(26.11.2013 17:47, )
- А вот как вы выразились "залочка" - это когда задача 1 захватила ресурс, в этот меомент вытесняется задачей 2, которая хватает другой ресурс и входит в ожидание ресурса блокированного 1-й, в этот момент управление возвращается 1-й задаче и она aoreh(143 знак., 26.11.2013 17:56)
- еще на 0 делить можно, ну или с железкой писать в управляющие регистры случайные числа (хотя ММE от этого помагает) - есть таймауты, если думать лень/ну или слишком сложно и нужно патчить а не думать, ну а вообще есть обычно некоторый датафлоу из ыыыыыыы(79 знак., 26.11.2013 18:07, )
- На ноль делить НУЖНО, если числа не целочисленные. А если у вас не делится на ноль -- нужно сжечь компилятор и его авторов. fk0(320 знак., 26.11.2013 18:22)
- уважаемый, вы суть проблемы понимаете или нет? если вы разрабатываете свой новый девайс с 2-3-я задачами, то все отлично, если вам необходимо, н-р, поддерживать чей-то код с 25-30 потоками, который +- отлажен и много лет работает, то как минимум aoreh(339 знак., 26.11.2013 18:13)
- да вот как раз поддерживается, в примере с FreeRTOS поддерживается старый код, который с жестким реалтаймом и большими вычислительными затратами, при этом все еще обвешано перделками/свистелками типа TCP/IP, дисков и т.п. - ыыыыыыы(26.11.2013 18:21, )
- Во FreeRTOS эта проблема решается наследованием приоритетов, это значит, что разработчики FreeRTOS понимали и знали о существовании такой вещи, как инверсия приоритетов, поэтому и учли - aoreh(26.11.2013 18:32)
- да вот как раз поддерживается, в примере с FreeRTOS поддерживается старый код, который с жестким реалтаймом и большими вычислительными затратами, при этом все еще обвешано перделками/свистелками типа TCP/IP, дисков и т.п. - ыыыыыыы(26.11.2013 18:21, )
- еще на 0 делить можно, ну или с железкой писать в управляющие регистры случайные числа (хотя ММE от этого помагает) - есть таймауты, если думать лень/ну или слишком сложно и нужно патчить а не думать, ну а вообще есть обычно некоторый датафлоу из ыыыыыыы(79 знак., 26.11.2013 18:07, )
- Нет, термин значит, что задача с высоким приоритетом (3) ждет завершения задачи с более низким (2), хотя она даже и не блокирует ресурс нужный 3 - налицо поднятие приоритета задачи 2 выше задачи 3. Инверсия - общеупотребительный термин - aoreh(26.11.2013 17:53)
- А вот как раз если поднять приоритет задачи 1 до уровня задачи 3 - вопрос решится сам собой - aoreh(26.11.2013 17:59)
- ну а как Вы думаете? что rtos-ы пишут идиоты, а интелектуалы на сахаре флудят :))) - ыыыыыыы(26.11.2013 18:02, )
- я думаю, что у вас проблемы с терминологией - остальное сильно зависит от конкретной ос - aoreh(26.11.2013 18:03)
- ну а как Вы думаете? что rtos-ы пишут идиоты, а интелектуалы на сахаре флудят :))) - ыыыыыыы(26.11.2013 18:02, )
- предполагаем, что у нас rtos не кооперативная, то есть срабатывает висящий на таймере шедулер - войдет он в задаче 2 а выйдет в 1 и будет отдавать ей управление до тех пор пока она не отдаст семафор - так понятнее? - ыыыыыыы(26.11.2013 17:58, )
- на самом деле шедулер сработает при вызове семафора в задаче 3, то есть в 2 вообще управление не попадет, но с таймером вроде понятнее - ыыыыыыы(26.11.2013 18:00, )
- щедулер сработает как только понадобится активность в 3 выполнение додет до заблокированного ресурса и задача отправится в отстойник ожидать высвобождения, а выйдет из щедулера в след. по приоритету -в 2. aoreh(116 знак., 26.11.2013 18:02)
- ну не бывает такого - приведите пример несамопальной ртос где НЕ так. разве что в uC/OS :) да и то я ее лет 20 назад юзал, может уже добавили - ыыыыыыы(26.11.2013 18:16, )
- Читал книгу Jean J. Labrosse (автор uC/OS) в момент существования первых версий -- там проблема инверсии приоритетов рассматривалась и её решения тоже. - fk0(26.11.2013 18:27)
- да вот я тоже читал (давно уже) и по-моему решения описывались, но в коде этого не было. но в этом я не уверен - ыыыыыыы(26.11.2013 18:33, )
- а книжка дельная, как введение с 0. не смотря даже на то, что автор реднек :) - ыыыыыыы(26.11.2013 18:35, )
- как введение с 0 неплох мануал к embos. с картинками:) - Vit(26.11.2013 18:37)
- а книжка дельная, как введение с 0. не смотря даже на то, что автор реднек :) - ыыыыыыы(26.11.2013 18:35, )
- да вот я тоже читал (давно уже) и по-моему решения описывались, но в коде этого не было. но в этом я не уверен - ыыыыыыы(26.11.2013 18:33, )
- Читал книгу Jean J. Labrosse (автор uC/OS) в момент существования первых версий -- там проблема инверсии приоритетов рассматривалась и её решения тоже. - fk0(26.11.2013 18:27)
- ну не бывает такого - приведите пример несамопальной ртос где НЕ так. разве что в uC/OS :) да и то я ее лет 20 назад юзал, может уже добавили - ыыыыыыы(26.11.2013 18:16, )
- щедулер сработает как только понадобится активность в 3 выполнение додет до заблокированного ресурса и задача отправится в отстойник ожидать высвобождения, а выйдет из щедулера в след. по приоритету -в 2. aoreh(116 знак., 26.11.2013 18:02)
- с каких это делов если у задачи 2 приоритет более высокий? - aoreh(26.11.2013 18:00)
- на самом деле шедулер сработает при вызове семафора в задаче 3, то есть в 2 вообще управление не попадет, но с таймером вроде понятнее - ыыыыыыы(26.11.2013 18:00, )
- А вот как раз если поднять приоритет задачи 1 до уровня задачи 3 - вопрос решится сам собой - aoreh(26.11.2013 17:59)
- А вот как вы выразились "залочка" - это когда задача 1 захватила ресурс, в этот меомент вытесняется задачей 2, которая хватает другой ресурс и входит в ожидание ресурса блокированного 1-й, в этот момент управление возвращается 1-й задаче и она aoreh(143 знак., 26.11.2013 17:56)
- Это не залочка. Залочка (взаимоблокировка, deadlock) от приоритетов вообще не зависит, это когда A ждёт B, а B ждёт A. Можно ещё ввести в дело C, D... но сути уже не меняет. Возникает обычно при программировании из головы, без этапа fk0(70 знак., 26.11.2013 17:59, ссылка)
- если речь об инверсии, то, как пример... aoreh(549 знак., 26.11.2013 17:38)
- обрисуйте мне схему залочки, плиз. может мы о разном? - ыыыыыыы(26.11.2013 17:27, )
- инверсия приоритетов это - Mahagam(26.11.2013 16:28)
- да, в разных осах оно по разному называется - по-моему в ecos и rtems инверсия. - ыыыыыыы(26.11.2013 17:28, )
- что значит по-разному называется? нельзя инверсию приоритетов назвать иначе как инверсия приоритетов. а взаимоблокировки это совершенно иное. - Mahagam(26.11.2013 17:43)
- понятно, что есть еще логические блокировки (ну то есть они заложены при проектировании) - ну если лень думать при проектировании - во всех синхронизациях есть возможность поставить таймауты и смотреть статус - ыыыыыыы(26.11.2013 17:55, )
- термин неудачный - почему инверсия? низкоприоритетная задача временно получает высокий приоритет - что тут инверсируется? - ну и конкретно FreeRTOS www.freertos.org/Real-time-embedded-RTOS-mutexes.html - ыыыыыыы(26.11.2013 17:50, )
- Приоритет инвертируется. - fk0(26.11.2013 18:05)
- что значит по-разному называется? нельзя инверсию приоритетов назвать иначе как инверсия приоритетов. а взаимоблокировки это совершенно иное. - Mahagam(26.11.2013 17:43)
- да, в разных осах оно по разному называется - по-моему в ecos и rtems инверсия. - ыыыыыыы(26.11.2013 17:28, )
- Отсутствует и не только у uCOS. Потому как накладно это, приоритеты наследовать и решить можно другими путями. - Apтём(26.11.2013 16:36 - 16:38)