Цитата(Леонид Иванович @ May 24 2008, 23:58)

вместо вытесняющей многозадачности возможно применение кооперативной многозадачности.
Кооперативка, реализованная на С, настолько некрасива, по сравнению, например,с
таким подходом на асме , что у меня язык не поворачивается называть эти все switch(state) процессом.
Цитата(rezident @ May 25 2008, 00:22)

Я аналогично делаю. Есть единый счетчик тиков...
Дык это ужЕ аксиома. Имеем "длинный" счетчик с тиком 10 мс (или 1мс, но 32-бита), с флагом предупреждения об "атомарности" доступа (т.е. он выскочит когда значение младшего байта равно 0xfe и снимется - когда будет 0x01), после чего жаба за ресурсы не удушит, также быстрый 8-битный с тиком переполнений от 8-битного таймера.
По теме.
Решил пойти от обратного. Имеем априорно известное максимально допустимое время выполнения программы, выше которого все развалится. Поскольку ограничивать по времени надо процессы с наименьшим приоритетом, можно замерять и фиксировать максимальное время выполнения процесса, а затем перед следующим вызовом проверять, успеет оно поработать или нет. Если не успевает - то не вызывать. Количество не-вызовов тоже подсчитываем и, если их много, сбрасываем измеренное время выполнения в ноль. И на все 3-4 байт на задачу.