ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
4 июля
122584 Топик полностью
AlexandrY (10.06.2008 10:17, просмотров: 208) ответил Evgeny_CD на Такие сложности уже продуманы :)
Древовидная очередь - термин сильный... Хотя есть мнение, что любые структуры данных можно представить связными списками. Которые в свою очередь можно назвать цепочками,очередями. Но именно в дереве необходимости не вижу. Искать то ничего не надо, нужно просто расставлять запросы по порядку согласно их хронологии. Это должна быть очередь с произвольной вставкой, но выборка и удаление всегда производится от начала. И проблема, еще раз объясню, такая: В какой-то момент несколько задач решили поставить себе будильники. Скажем таймер работает с тактовой 1 МГц. Обычное дело для задач работающих с файловыми системами на SD/MMC картах, или с NOR FLASH запросить таймаут на 100 мкс. В этот период где-то должно укладываться время для таймера чтобы войти в ISR, добраться до очереди, найти первый элемент, прочитать указатель на его управляющую структуру (хэндлер флага, семафора, или может майлбокса, чего угодно...) и сделать вызов соответствующего сервиса ОС-и. И вдруг оказывается что через пару тиков таймера было зарезервировано уже другое событие. Если текущий вызов ISR не позаботился о всех остальных ближайших событиях чтобы их передвинуть во времени, то они окажутся сдвинуты автоматически на весь период таймера! Даже если ISR и думает о других, то сама текущая ISR активизируется не мгновенно и за это время таймер может проскочить сразу несколько событий. Прерывание будет только одно и обработается только первый элемент очереди. Чтобы отработать остальных пропущенных текущая ISR как минимум должна провести не слабый логический анализ очереди на предмет выявления опоздавших событий чтобы их тут же обслужить либо передвинуть во времени. Это еще сильнее удлиняет время выполнения каждой ISR и приводит к непредсказуемости времени ее выполнения, поскольку непредсказуема длина очереди. При этом учтем, что ISR должна сохранять весь контекст оси, чтобы самой пользоваться всеми сервисами оси. Обработка такой ISR займет не меньше 10 мкс на ARM-е до 100 МГц. Т.е. элементарно оказываемся на грани фола и при этом сильно перегружаем процессор уже при 10-и клиентах такой очереди. Real-time, ясно, при таких делах уходит фтопку и мы получаем уменьшенное подобие линукса.
INDEMSYS