Multitask. Реалии и мифы...
Итак, многозадачность. Многие думают,
что данный девайс не может быть реализован на SPECCY в силу того, что его ресурсы и скорость проца не достаточно
развиты. Суки, п!@#$!$е на свой ПыЦы и
д@#$%&е на многозадачность LINUX'A.
Короче, хватит маты гнуть, к делу. Хочу сказать, что алгоритм многозадачности
полностью реализован на ALASM'e, но не
оптимизирован. Однако, при этом показывает достаточно высокие показатели скорости выполнения прог, прицепленных к
нему (3 задачи). При этом коэффициент
торможеня в среднем составляет где-то
1.1-1.17, но я знаю как его уменьшить.
Ну всё, перейдем к описанию алгорима
многозадачности. Суть его заключается во
"влаживании" прерываний друг в друга.
Примерно так:
1. Идёт выполнение основной проги на
EI (с этим проблемы, но о них позже);
2. Пришли прерывания - лезем на прогу
обработки; та сохраняет полностью ситуацию до прерывания, меняет вектор - и
на другую задачу.
3. Исполняем вторую задачу.
4. Пришли прерывания и всё аналогично
пункту 2. Так до последней задачи после
которой - на основной обработчик, а из
него в основную прогу.
Ограничения на использование этого алгоритма следующие:
1. Память не ниже 512Кб (а где же еще
держать задачи);
2. Стабильная шина, а то получится,
что таблицы векторов будут занимать
больше, чем задачи.
3. Стиль программирования тоже будет
особый. В частности, проги должны будут
исполняться с любого адреса;
А вот то, что я хочу реализовать - так
это диспетчер задач, который будет
распределять задачи по приоритетам
(очень хитро: по длине и времени исполнения за INT), разбивать память на блоки
(скорее всего по 2Кб) и следить за границами задач и за процессом обмена информацией между задачами и многое другое
до мелочей. Скорее всего именно он и будет основной задачей. Вот и всё, что я
хочу сказать о многозадачности и её релизации на SPECCY...
>>
|