Возврат программы в DOS с сохранением ее резидентности - часть 14
максимальной скоростью.
Ускорение таймера в 256 раз было выбрано потому, что это было
просто сделать. Однако если брать в расчет производительность, то
лучше было бы ускорить работу таймера в 5 раз, поскольку на
обработку каждого прерывания от таймера тратится по меньшей мере 10
микросекунд, и даже больше, если в буфере печати есть символы.
Время, затраченное на обработку прерываний, идет в ущерб выполнению
системой других заданий, например ассемблирования. При такой
частоте прерываний от таймера, становится заметным замедление
работы. Для оптимизации производительности следует ускорять таймер
менее, чем в 256 раз.
Что же происходит в процедуре работы с таймером, когда в буфере
есть символы, предназначенные для печати? Программа считывает порт
состояния, чтобы определить, готов ли принтер к приему символа.
Поскольку в процедуре используется базовый адрес из области данных
BIOS, то наша подпрограмма будет работать и с автономным адаптером
устройства печати, и с портом адаптера монохромного дисплея. Если
устройство печати не готово, процедура возвращает управление на
метку TIMER_RETURN, где в случае необходимости поддерживаются
стандартные функции таймера. Процедура вывода на печать не ждет,
когда устройство печати освободится, если оно занято. Мы знаем, что
прерывание от таймера очень скоро повторится, тогда мы и повторим
попытку вывода. Ожидание готовности устройства печати здесь
связывало бы бы всю систему. Результат был бы таким же, как и в
случае отсутствия буферизации печати.
Если принтер готов, программа извлекает символ из буфера и
передает его на принтер. И в данном случае программа вновь не
делает всего, что следовало бы. Подпрограмма, входящая в BIOS,
делает проверку на ситуацию ошибки при передаче каждого символа. То
же самое следовало бы делать и в нашей процедуре. Но что же
произойдет в случае сбоя? Если процедура вывода обнаружила ошибку,
Содержание Назад Вперед