Evgeny_CDАрхитектор (20.01.2017 02:06, просмотров: 905) ответил ig_z на На электрониксе было бурное, но весьма сумбурное обсуждение одной РТОС, по основному признаку (один стек на всех) близкой к кооперативной, но с возможностью вытеснения текущей задачи более приоритетной. После активного обсуждения пар вышел, но
Очень интересно! А можете ссылочку на тред прислать или хотя бы имя ОСи. Вопросы у меня фундаментальные имеются. http://dunkels.com/adam/pt/
http://caxapa.ru/599497.html
1. Есть Contiki OS ->, а у нее каждый поток (которые вытесняются) может иметь кучу Protothreads -->. Понятное решение.
2. Можно сделать фиксированным статус задачи - кооперативная она или вытесняемая. Неразрешимых проблем с алгоритмами не вижу, хотя детали могут оказаться очень неприятными.
3. Но вот динамически менять статус потока - вытесняемый или кооперативный - это уже какой-то пц.
Вот идет кооперативная задача. Пришло важное прерывание. Нужно вызвать задачу.
Если она вытесняемая - все понятно: вызвали, контекст вернули - продолжили исполнение кооперативки.
А если она кооперативная? Вызвали ее с текущим стеком. Она его использовала, не завершилась - и тут снова выосокоприоритетный вызов новой кооперативной задачи.
Через какое-то действие граф передачи управления "замороженным" кооперативным задачам, чтобы они отработали свое и свалили из стека, пойдет в противоречие с логикой передачи управления.
Я почти уверен, что аниверсальный алгоритм, который гарантированно вернет систему в норальное состояние, не получится. Получится куча исключений, и совпадут ли события реальной жизни с картой исключений - это большой вызов.
Можно получить прибор, который будет необъяснимо глючить у Заказчика. Иногда, но это будет непобедимо в принципе.