Дело в том, что ты сразу себе должен отдавать отчёт в невозможности применения стандартных методов вытесняющей многозадачности. Просто нет поддержки со стороны железа и всё. Поэтому уже на одном этом основании предполагается, что используется именно невытесняющая многозадачность. Правила невытеснящей многозадачности ты знаешь, сверху они в упрощённой форме озвучены, повторяться нет смысла.Сообщение от Alex/AT
А что нужна именно невытесняющая (кооперативная) многозадачность (по крайней мере сейчаз) мне кажется очевидным: стандартная раскладка, в которой сейчаз хочется увидеть многозадачность такова: имеется обработчик клавиатуры (кооперативен), имеется обработчик мышки (кооперативен), имеется плеер AY-музона (тоже кооперативен), имеется текстовый редактор (или какой либо другой редактор, тоже вообще то кооперативен), имеются 1,2, и т.д. потоков, которые выполняются в фоне (вычисления, компиляция, форматирование текста, анализ загруженных данных и т.д.; некооперативны).
Отстаётся единственный вопрос, как отслеживать "зажравшиеся" потоки/задачи/процессы (они обозначены как некооперативные), которые не придерживаются правил кооперации в системе. Вот для этого и необходим обработчик прерываний (и не только для этого на самом деле, но это уже не для спектрума). Обработчик прерываний будет давать информацию (а т.к. он имеет более высокий приоритет, то он и будет исполняться раньше) для диспетчера потоков о том, что какой-то поток нарушает требования. А дальше уже диспетчер потоков решает как поступать с "заблудшим" потоком.




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