- 
	
- Отсутствует и не только у 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, 
)
											
										 
 - я ниже на это ответил, если _специально_ постараться, то изгадить можно что угодно - ыыыыыыы(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)
 
 
 - понятно, что есть еще логические блокировки (ну то есть они заложены при проектировании) - ну если лень думать при проектировании - во всех синхронизациях есть возможность поставить таймауты и смотреть статус - ыыыыыыы(26.11.2013 17:55, 
 
 - что значит по-разному называется? нельзя инверсию приоритетов назвать иначе как инверсия приоритетов. а взаимоблокировки это совершенно иное. - Mahagam(26.11.2013 17:43)
							
 
 - да, в разных осах оно по разному называется - по-моему в ecos и rtems инверсия. - ыыыыыыы(26.11.2013 17:28, 
 
 - Отсутствует и не только у uCOS. Потому как накладно это, приоритеты наследовать и решить можно другими путями. - Apтём(26.11.2013 16:36 - 16:38)