-
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- ну, правильно все. Необязательно правда выходную очередь чистить, потому как она отдельно от задачи живет, ну да ладно. state machine можно передать как аргумент функции новой задачи - задача запускается смотрит параметр Gamma SPb(96 знак., 30.10.2007 13:41)
- В общем, получается, что убиваемая задача должна иметь, как минимум, механизм управления. А это уже нетривально для простых ОСей. Сигналы нужны. - Evgeny_CD(30.10.2007 13:41)
- два проца на плате, не меньше, угу, иначе работать не будет. - Gamma SPb(30.10.2007 13:33)
- Мне неохота спорить про принципы ОСей. Книжку Таненбаума почитайте штоль. -> - Evgeny_CD(30.10.2007 13:38, ссылка)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- ну понятно, что посередине выполнения задачу корректно оборвать не получится. Александр этого и не хотел, как я понял, он хотел загрузить новую задачу и запустить ее только после того, как старая дойдет до Gamma SPb(384 знак., 30.10.2007 13:25)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)