Вытесняющая многозадачность.

На первый взгляд идея кажется немного дикой, зачем организовывать под ДОСом вытесняющую многозадачность? Ответ прост, под ДОСом она уже организована, и почему-бы этим не воспользоваться (вспомните про TSR). Трудно найти программу которая не пользовалась-бы многозадачностью ДОСа. И мышь, и клавиатура, и коммуникационные порты, и многое многое другое оборудование ориентировано на работу в многозадачной среде. Сама архитектура процессоров Intel 80x расчитана на многозадачное применение.

Конечно под ДОСом получается скорее не многозадачность а многопоточность, так как выполняется одна программа. Но можно организовать в этой программе несколько потоков выполняющихся параллельно. Эту задачу я решил за неделю работы, причем 4 дня было потрачено только на отладку. Получился простенький модуль, который в откомпилированном виде жрет около 3х кил кода и 26 байт данных.

Хочу заметить, что модуль выгодно отличает способность корректно сохранять состояние математического сопроцессора, правильно завершать свою работу даже при возникновении ошибок периода исполнения в любом месте программы, хорошо переносить вызовы halt и runerror из любого потока, а также наличие средств динамического распределения времени между запущенными потоками. Модуль автоматически инициализируется при старте, и сам завершает запущенные потоки при выходе из программы, освобождая все используемые им ресурсы.

Если будут просьбы, готов подробно рассмотреть его структуру. Использовать можно свободно. (Ссылка на автора желательна, с условиями лицензии GNU можно ознакомиться по адресу http://www.gnu.org).

Скачать исходник (7.421b)

Пишите мне: xor@imail.ru