Выше уже рассматривался этот вопрос. Многозадачность и защита от неправильного поведения задач - это разные вещи. На голом Z80 без аппаратных примочек реализовать защиту невозможно. Если же подразумевать, что все задачи работают корректно - то управление вернется в диспетчер ровно тогда, когда нужно.
Многозадачная ОС и RealTime ОС - это где-то пересекающиеся, но не совпадающие множества. Для RealTime ОС гарантируется время реакции на событие. В моем диспетчере, как и во многих других, в том числе Windows и Linux, это не гарантируется. Так что они не являются RealTime ОС.
Возврат управления в диспетчер осуществляется не просто так "чтобы было", а с определенной целью. Например, отработать событие, могущее вызвать переключение потоков. Если в системе нет прерываний ("фонового инициатора вытеснения") - то источником таких событий может быть работа задач.
---------- Post added at 13:42 ---------- Previous post was at 13:34 ----------
Спасибо за обзор альтернатив! В этой теме уже довольно много альтернатив упоминалось, так что она превращается в единое место на форуме, куда сходится информация о реализациях многозадачности на ZX. Это тоже хорошо.
Мой диспетчер тоже открытый, бесплатный и простой. Не скажу, что тормозной - старался оптимизировать. Насчет мощности - планы на реализацию дополнительных важных функций тоже имеются!
---------- Post added at 13:47 ---------- Previous post was at 13:42 ----------
Вот этот абсурд стал возможен из-за того, что в Win95/98 драйвер дисковода слишком часто и надолго переводит систему в состояние, когда многозадачность как бы отключена. Ну типа запрет прерываний, долгая работа на IRQL=DISPATCH_LEVEL и т.п. В Windows NT драйвер дисковода был чуть лучше, но все равно там было много таких мест, убивающих многозадачность. Я изучал его исходники. Драйвер параллельного порта был еще хуже. Сканнеры, подключаемые через параллельный порт, блокировали во время работы все задачи даже на Win2000/XP. Когда появился HyperThreading - то он даже рекламировался тем способом, что "ваша система больше не будет виснуть во время работы сканнера". Так как хоть один логический процессор виснет, остается еще второй, на котором система может как-то ковылять.
Дрова этому виной, одним словом.





Ответить с цитированием