QUOTE (misyachniy @ Feb 14 2016, 16:05)
Логично предположить, что время выделяемое на них будт прямо пропорционально приоритету.
Тогда уж скорее "обратно пропорционально приоритету". Т.е. чем приоритетнее задача, т.е. чем "выше" у неё способность к вытеснению (чем больше задач она может вытеснить в силу своего высокого приоритета), тем, по-хорошему, меньше времени процессора она должна бы занимать - а то остальным меньше достанется.
В общем, возлагать на планировщик RTOS распределение времени - плохая идея. И на самом деле всё намного проще, чем вам представляется. Приоритеты задач зависят от их срочности. Например, если какая-то задача связана с аппаратурой - скажем, приходят по UART данные, и аппаратура приёмника не будет ждать, она принимает данные с определённым темпом, поэтому программа должна успевать забирать данные из регистра приёмник. Обычно, это делается в прерывании, но когда накопился пакет, надо его передать основной программе, чтобы буфер приёмника был готов к приёму следующего пакета, а времени "на всё/про всё" - интервал приёма очередного символа, и вот за это время надо успевать отреагировать и передать пакет на обработку. Если процессор будет занят чем-то другим длительное время, то будет потеря данных. Поэтому нужно иметь механизм прервать менее срочные дела и отреагировать на событие, которое во избежание потерь должно быть обработано без проволочек.
Приведённый пример с UART'ом в некотором смысле умозрительный - проблему можно обойти, например, используя кольцевой буфер или пул буферов, но принцип не меняется. RTOS с вытесняющим планировщиком позволяет построить систему, работающую на обработках событий (event-driven), и это очень удобно и эффективно с точки зрения как большей детерминированности времени реакции на событие, так и расходования процессорного времени. И никто, кроме разработчика, не знает, как распределить работу. Только разработчик, основываясь своём замысле, может правильно построить программу - классифицировать все события по срочности и ресурсоёмкости их обработки, и в соответствии с этим уже и определить, сколько ему нужно задач и какие у тех должны быть приоритеты. При этом важно, чтобы в конечном итоге процессор успел их все обработать. Если данный процессор этого не обеспечивает, значит данный процессор не годится для данной задачи. Как правило, процессор выбирается с запасом, и современные МК в подавляющем большинстве случаев позволяют обеспечить это без проблем.
QUOTE (dimka76 @ Feb 15 2016, 02:31)
А почему нельзя сделать планировщик, который просто по кругу перебирает все задачи ?
1 mS одна поработала, потом 1 mS другая и т.д.
Можно (как уже сказали, это чистая "карусель" - round-robin scheduling). Но зачем? Например, одна задача быстро делает свои дела и ей просто нечего больше делать - логично отдать управление ядру RTOS, чтобы оно передало его другой задаче, которой есть чем заняться. Если все задачи в данный момент отработали задания и отдали управление ядру, то ядро может просто перевести процессор в IDLE (один из простых вариантов - ядро передаёт управление системной задаче IDLE, которая вызывает инструкцию процессора, переводящую аппаратуру проца в один из режимов пониженного энергопотребления), таким образом, если процессору нечего делать, то он и энергии потребляет меньше, что может быть актуально в портативных приложениях.
Карусельное планирование теоретически может быть полезно для перераспределения процессорного времен между фоновыми (т.е. низкоприоритетными и работающими длительное время - например, какие-то фоновые вычисления) задачами.