inc ah
int 16h ; выдача запроса
jz _bs1 ; если 0 -- нет доступного
; символа
cmp ax,BGCombo ; это символ заднего плана?
jnz _bs1 ; если не 0 -- нет
xor ah,ah ; ah <== 0 (запрос чтения)
int 16h ; удаление символа из буфера
pop ax ; восстановление ax
;
; Выполнение на заднем плане и запрос приостановки.
;
_bs0: call BKGRestoreDTA ; восстановление DTA
call BKGRestorePSP ; восстановление PSP
call BKGRestoreErrHndlr ; восстановление старых
; драйверов критической ошиб-
; ки и прерывания
call SCRBackground ; восстановление экрана
call BKGSaveAll ; сохранение регистров зад-
; него плана
les di,InDosFlag ; es:di <== адрес входа в DOS
dec BYTE PTR es:[di] ; уменьшение флажка входа в
; DOS
switch BKGStack,OldStack ; изменение стеков
call BKGRestoreAll ; восстановление регистров
mov cs:PgmState,BKG_C_BG ; программы на заднем
; плане
ret ; возврат
_bs1: pop ax ; восстановление начального
; значения ax
_bs2: ret ; возврат
- 4-48 -
SuspendResume ENDP
_text ENDS
----------------------------------------------------------------
Удаление TSR из памяти
В связи с ограниченным размером физической памяти персональ-
ного компьютера может возникнуть необходимость удаления TSR из
памяти, когда она станет ненужной. Процесс удаления TSR из памяти
не представляет большого труда, однако, имеются некоторые пробле-
мы. Очень часто TSR захватывает векторы прерываний и перед осво-
бождением памяти необходимо восстановить эти векторы.
При инициализации TSR должна записать начальное содержимое
векторов, которые она будет изменять в процессе своей работы. Ес-
ли отсутствует другая TSR, загружаемая после захвата этих векто-
ров, то можно восстановить эти векторы прерываний в их первона-
чальные значения и освободить память, занимаемую TSR. Если
интересующие Вас векторы прерываний все еще указывают на Вашу
программу, то это является надежным подтверждением того, что дру-
гая программа TSR не захватила их. Но, допустим, что Ваша TSR ис-
пользует вектор прерывания совместно с другой TSR, которая загру-
жается после нее. Тогда, каждая TSR должна иметь записанное
первоначальное содержимое вектора и вставленный вход IVT, указы-
вающий на свою собственную программу. Существующий вход IVT ука-
зывает на TSR, загруженную последней, которая должна иметь сохра-
ненный вектор для первой TSR. Первая TSR, в свою очередь, должна
иметь сохраненный вектор для исходной ISR.
Если текущий вход IVT замещается сохраненным значением, то
тем самым из цепочки ISR эффективно удаляется другая TSR. Если
вторая TSR могла быть введена только с помощью этого единственно-
го вектора, то все, что Вы получите, будет потеря памяти. Если
вторая TSR имеет другую точку входа и пытается включиться в це-
почку к сохраненному вектору прерывания, который изменен Вами, то
эта ссылка будет указывать на незанятый блок памяти.
Наиболее чистым решением этой проблемы является разработка
TSR, которая управляет другими TSR. Имеется превосходный пакет
общего назначения Mark/Release (отметить/освободить), который
доступен из многих информационных источников.TSR Mark (отметить),
выполняемая перед другими программами, загружается и делает копию
IVT, а также записывает текущее состояние памяти. Другие TSR
пользователь загружает по мере необходимости. Выполнение TSR
Release (освободить) восстанавливает память и таблицу IVT значе-
ниями, записанными с помощью программы Mark. Возможна вложенность
вызовов программы Mark.
Программы Mark/Release работают в большинстве, но не во всех
случаях. Они перезапоминают IVT и память. Если TSR изменила неко-
торую другую структуру данных DOS, то после удаления TSR из памя-
ти эта структура данных так и останется измененной.
Заключение
В этой главе были описаны технические приемы написания рези-
дентных программ TSR. Здесь были приведены пояснения, что необхо-
димо выполнить и почему следует выполнять эти действия. Рассмот-
ренные технические приемы имеют множество других приложений. Вы
можете их использовать и для добавления фоновых сохранений в
- 4-49 -
системах подготовки текстов или фоновых вычислений в средстве ве-
дения электронных таблиц. Кроме того, Вы можете реализовать многие
простые функции как фоновые программы TSR. Фрагменты программ,
представленные в этой главе, являются хорошим началом для написа-
ния более серьезных TSR.
Глава 5. ПРОГРАММЫ РЕАЛЬНОГО ВРЕМЕНИ В СРЕДЕ MS-DOS
Обзор программ реального времени
Использование MS-DOS для приложений реального времени
Проектирование систем реального времени в MS-DOS
Многозадачность в MS-DOS
Резюме
Библиография
Системы реального времени используются многими приложениями
и лишь немногие пользователи не имеют с ними дело почти каждый
день. Системы реального времени используются в приложениях, по-
добных обслуживанию телефонных коммутаторов, силовых генераторов
и распределителей, кассовых аппаратов и т.д.
MS-DOS широко используется как для личных, так и для коммер-
ческих компьютерных приложений, но ее использование для приложе-
ний в реальном времени менее популярно. В этой главе обсуждаются
системы реального времени и то, как использовать MS-DOS для мно-
гих простых, но полезных приложений в реальном времени.
Обзор программ реального времени
Перед обсуждением систем реального времени, предлагается об-
судить другие типы операционных систем. Это поможет лучше понять
системы реального времени.
В начале компьютеризации стоимость компьютеров была высока и
сравнима с зарплатой профессионалов-разработчиков. Поэтому было
выгодно максимально использовать каждый компьютер. В результате,
при пакетной обработке в операционных системах, когда компьютер
был источником постоянной задержки в работе, он использовался не
одним пользователем. Почти вся человеческая деятельность была вне
непосредственной связи с ЭВМ, так что неизбежные человеческие за-
держки не выливались в потерю машинного времени.
Когда стоимость компьютеров стала падать, стало невыгодно
иметь высокооплачиваемый персонал, ожидающий машинное время. В
связи с этим стало приобретаться больше компьютеров для диалого-
вой работы. Так появилась диалоговая обработка. Однако, компьютер
был слишком быстр для людей, он терял время в ожидании ответа
пользователя. Это привело к развитию систем разделения времени.
Системы разделения времени позволяют одновременно работать не-
скольким пользователям, причем каждый получает небольшой отрезок
времени. Разделение времени создает у пользователя впечатление,
что операционная система закреплена только за ним.
В дополнение к пакетной и диалоговой обработке, к системам
разделения времени важным типом операционных систем являются сис-
темы реального времени, которые и будут обсуждаться в оставшейся
части этой главы.
Что такое реальное время?
Для понимания того, что такое реальное время, предлагается
рассмотреть простой пример системы cоздания фильма, в котором
компьютер используется для создания видеоэффекта. Система созда-
ния фильма может воспроизводить кадр движущегося фильма каждые
несколько минут. Это будет давать эффект сверхмедленного движе-
ния. Но, в идеале, движение будет производится на полной скорос-
ти, что позволит зрителю видеть его. Если компьютер будет произ-
- 5-2 -
водить 24 кадра в секунду, что соответствует скорости их движения
в фильме, то кадры будут появляться в нерастянутом масштабе вре-
мени, или в "реальном времени".
Операционная система в реальном времени - это система, кото-
рая:
- Обеспечивает прямое обращение к внешнему окружению компьютера.
- Достаточно оперативно отслеживает внешнее окружение.
При таком понимании реального времени, область применения ре-
ального времени в широком смысле включает все компьютерные систе-
мы. Например, система с пакетной обработкой может быть выполнена
в реальном времени, если критерий времени ответа достаточно ве-
лик.
Если внутренняя налоговая инспекция объявляет, что возврат
чеков будет производится в течении 60 дней, и если компьютеры с
пакетной обработкой могут управлять этой работой, они работают в
системе реального времени. Однако, термин "системы реального вре-
мени", используемый в специальной литературе, обычно включает
только системы с временем реакции порядка секунд или меньше. Сис-
темы реального времени в этом смысле и будут освещены в этой гла-
ве. Вывод: когда компьютер используется для обращения к имеющему
определенные ограничения по времени (обычно меньше, чем несколько
секунд) внешнему окружению, которое должно работать безотказно,
то это обеспечивается системой реального времени.
Системы с пакетной обработкой, диалоговые системы и системы
с разделением времени не являются системами реального времени,
так как они не гарантируют абсолютного ограничения времени реак-
ции. Например, системы с разделением времени обычно достаточно
быстры для диалогового использования, но они могут работать дос-
таточно медленно и одна пользовательская задача может блокировать
другую.
Характеристики систем реального времени
Системы реального времени имеют ряд уникальных характерис-
тик. Внешнее окружение систем реального времени обычно состоит из
устройств ввода/вывода, которые функционируют, как органы чувств
системы. Вообще-то говоря, о любой компьютерной системе можно