Введение элементов многозадачности в MS DOS
Операционная система MS DOS является однозадачной, то есть принципиально не содержит механизмов переключения задач (процессов), структур данных, локализующих состояние задачи и пр.. Поэтому все традиционные средства управления процессами в MS DOS создаются прикладными программами. Такие программы имеют много общих принципов реализации и могут быть написаны на Си или ассемблере :
- резидентная программа (иначе TSR-программа) запускается как обычная EXE-программа и выполняет в функции main() следующие действия:
- определяется размер программы в параграфах как сумма размеров сегментов данных и команд (справедливо для Small-модели памяти программы на Си);
- сохраняет вектора аппаратных и программных прерываний, по которым она будет в дальнейшем активизироваться (клавиатура, таймер, последовательный порт, прерывание 21h DOS и др.);
- устанавливает на эти вектора адреса собственных функций обработки прерывания;
- инициализирует собственные данные программы;
- выполняет функцию keep() - выйти в DOS с сохранением занятой памяти;
- программы обработки прерываний должны иметь вызов функции обработки прерывания по сохраненному вектору прерывания, то есть вызывать по цепочке предыдущий обработчик прерывания;
- программы обработки прерываний не должны содержать функций, прямо или косвенно обращающихся к DOS или BIOS, поэтому все средства диалога (экран, клавиатура) должны быть реализованы "вручную".