ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
556230 Топик полностью
fk0123 (29.10.2014 11:34, просмотров: 1) ответил Д.ARMоед на саудиты(ппц) изобразили неплохой обзорчик по шедулерам ->
Time triggered и/или big loop может быть относительно просто улучшен, об этом странно что не пишут, следующим образом: 1) процессор спит до прерывания (если нужно программируется аппаратный таймер на нужное время, но не большее чем T раз в секунду, например); 2) после прерывания проверяется единственный (на всю систему) флаг "событие" и если не установлен -- опять спит (пункт 1); 3) иначе сбрасывается, выполняется цикл и переход к п.2 (проверке флага). Флаг устанавливается в обработчиках прерываний, если требуется последующая обработка в основном цикле (как минимум -- для прерывания таймера), и устанавливается в случаях, когда требуется продление цикла. Последнее требует изменений в уже существующем ПО и все случаи отследить сложно. Поэтому флаг можно заменить на счётчик -- при установке ему присваивается какое-то значение N и считает до нуля, тогда засыпает. Большинство процессов (цепочек событий вызванных какими-то изменениями в системе) завершаются за M (M<N) циклов (обработка события в каком-то одном модуле может повлечь обработку событий в других модулях). Оставшиеся (M > N) можно отследить вручную и установить флаг при необходимости (чтоб процессор не спал в паузах между циклами и таки образом снижалось время реакции на какие-либо события). В чём преимущество перед time triggered? Реакция может быть быстрей (нет задержки). В чём преимущество перед big loop? Таки экономится энергия (процессор спит).