

                Глава 5. ПРОГРАММЫ РЕАЛЬНОГО ВРЕМЕНИ В СРЕДЕ MS-DOS

               Обзор программ реального времени
               Использование MS-DOS для приложений реального времени
               Проектирование систем реального времени в MS-DOS
               Многозадачность в MS-DOS
               Резюме
               Библиография

              Системы реального времени используются  многими приложениями
         и лишь немногие пользователи не имеют с ними  дело  почти  каждый
         день.  Системы реального времени используются в приложениях,  по-
         добных обслуживанию телефонных коммутаторов,  силовых генераторов
         и распределителей, кассовых аппаратов и т.д.
              MS-DOS широко используется как для личных, так и для коммер-
         ческих компьютерных приложений,  но ее использование для приложе-
         ний в реальном времени менее популярно.  В этой главе обсуждаются
         системы реального времени и то,  как использовать MS-DOS для мно-
         гих простых, но полезных приложений в реальном времени.

                         Обзор программ реального времени

              Перед обсуждением систем реального времени, предлагается об-
         судить другие типы операционных систем.  Это поможет лучше понять
         системы реального времени.
              В начале компьютеризации стоимость компьютеров была высока и
         сравнима с зарплатой профессионалов-разработчиков.  Поэтому  было
         выгодно максимально использовать каждый компьютер.  В результате,
         при пакетной обработке в операционных системах,  когда  компьютер
         был источником постоянной задержки в работе,  он использовался не
         одним пользователем. Почти вся человеческая деятельность была вне
         непосредственной связи с ЭВМ, так что неизбежные человеческие за-
         держки не выливались в потерю машинного времени.
              Когда стоимость  компьютеров  стала падать,  стало невыгодно
         иметь высокооплачиваемый персонал,  ожидающий машинное  время.  В
         связи  с этим стало приобретаться больше компьютеров для диалого-
         вой работы. Так появилась диалоговая обработка. Однако, компьютер
         был  слишком  быстр  для людей,  он терял время в ожидании ответа
         пользователя.  Это привело к развитию систем разделения  времени.
         Системы  разделения  времени позволяют одновременно работать  не-
         скольким пользователям, причем каждый получает небольшой  отрезок
         времени.  Разделение  времени создает у пользователя впечатление,
         что операционная система закреплена только за ним.
              В дополнение к пакетной и диалоговой обработке,  к  системам
         разделения времени важным типом операционных систем являются сис-
         темы реального времени,  которые и будут обсуждаться в оставшейся
         части этой главы.

                             Что такое реальное время?

              Для понимания того,  что такое реальное время,  предлагается
         рассмотреть простой пример системы  cоздания  фильма,  в  котором
         компьютер используется для создания видеоэффекта.  Система созда-
         ния фильма может воспроизводить кадр  движущегося  фильма  каждые
         несколько  минут.  Это будет давать эффект сверхмедленного движе-
         ния.  Но, в идеале, движение будет производится на полной скорос-
         ти,  что позволит зрителю видеть его. Если компьютер будет произ-

                                      - 5-2 -
         водить 24 кадра в секунду, что соответствует скорости их движения
         в фильме,  то кадры будут появляться в нерастянутом масштабе вре-
         мени, или в "реальном времени".
              Операционная система в реальном времени - это система, кото-
         рая:

         - Обеспечивает  прямое обращение к внешнему окружению компьютера.
         - Достаточно оперативно отслеживает внешнее окружение.

             При таком понимании реального времени, область применения ре-
         ального времени в широком смысле включает все компьютерные систе-
         мы.  Например, система с пакетной обработкой может быть выполнена
         в реальном времени,  если критерий времени ответа достаточно  ве-
         лик.
              Если внутренняя  налоговая инспекция объявляет,  что возврат
         чеков будет производится в течении 60 дней,  и если компьютеры  с
         пакетной обработкой могут управлять этой работой,  они работают в
         системе реального времени. Однако, термин "системы реального вре-
         мени",  используемый  в  специальной литературе,  обычно включает
         только системы с временем реакции порядка секунд или меньше. Сис-
         темы реального времени в этом смысле и будут освещены в этой гла-
         ве.  Вывод: когда компьютер используется для обращения к имеющему
         определенные ограничения по времени (обычно меньше, чем несколько
         секунд) внешнему окружению,  которое должно работать  безотказно,
         то это обеспечивается системой реального времени.
              Системы с пакетной обработкой,  диалоговые системы и системы
         с разделением времени не являются  системами  реального  времени,
         так как  они не гарантируют абсолютного ограничения времени реак-
         ции.  Например,  системы с разделением времени обычно  достаточно
         быстры для диалогового использования,  но они могут работать дос-
         таточно медленно и одна пользовательская задача может блокировать
         другую.

                      Характеристики систем реального времени

              Системы реального  времени  имеют ряд уникальных характерис-
         тик. Внешнее окружение систем реального времени обычно состоит из
         устройств ввода/вывода,  которые функционируют, как органы чувств
         системы.  Вообще-то говоря,  о любой компьютерной  системе  можно
         сказать,  что она чувствительна к внешнему окружению,  потому что
         она выполняет ввод/вывод.  Обычно, ввод и вывод оказывается диск-
         ретным,  отчетливо разделенным по времени. В то же время, системы
         реального времени имеют устройства ввода/вывода такие, как термо-
         пары, оптические сканеры, клапаны, моторы и др., которые собирают
         и выдают данные непрерывно.  Непрерывный вывод обычно сопровожда-
         ется непрерывным вводом.  Например, системы реального времени мо-
         гут непрерывно следить за  температурой  химического  процесса  и
         принимать меры для поддержания его в заданных рамках.
              Системы реального времени обычно требуют одновременной обра-
         ботки многочисленных процессов ввода/вывода. В системах реального
         времени необходимость одновременной обработки вызвана  безотлага-
         тельной  обработкой  двух  или более процессов ввода/вывода.  Это
         требование одновременности отлично  от  требования  независимости
         обработки  транзакций перекрывающихся процессов в системах разде-
         ления времени. Например, система реального времени для управления
         химическими процессами нуждается в поддержании процесса в требуе-
         мом состоянии и в одновременном наблюдении за температурой, уров-

                                      - 5-3 -
         нем, давлением,  концентрацией,  потоками и т.д., и в регулировке
         клапанов, калориферов и т.п.

                      Основные типы систем реального времени

              Системы реального времени разделяются на три типа на основа-
         нии направления потока данных, как показано на рис. 5-1:
              - Однонаправленные
              - Двухнаправленные стабильные
              - Двухнаправленные потенциально нестабильные
              Любая система реального времени может быть представлена  од-
         ним из этих трех основных типов.
                         ┌────────────────┐
                         │ Системы реаль- │
                         │  ного времени  │
                         └────────┬───────┘
                                  │
                   ┌──────────────┴──────────────┐
                   │                             │
          ┌────────┴────────┐           ┌────────┴────────┐
          │                 │           │                 │
          │ Однонаправленные│           │ Двухнаправленные│
          └─────────────────┘           └─────────┬───────┘
                                                  │
                                   ┌──────────────┴──────────────┐
                                   │                             │
                          ┌────────┴────────┐           ┌────────┴────────┐
                          │    Стабильные   │           │   Потенциально  │
                          │                 │           │   нестабильные  │
                          └─────────────────┘           └─────────────────┘


                     Рис. 5-1. Типы систем реального времени,
                      основанные на направлении потока данных

                             Однонаправленные системы

              Однонаправленными считаются системы,  в которых поток данных
         имеет только одно направление, то есть или из внешнего устройства
         в компьютер,  или из компьютера во внешнее устройство, но не то и
         другое.  Это главным образом системы генерации или сбора  данных.
         Приведенная ранее система генерации кинокартины является примером
         системы генерации данных.  Единственным требованием является  то,
         что  кадры должны воспроизводиться с частотой 24 кадра в секунду.
         Это означает,  что генерация кадра не должна занимать больше 1/24
         секунды.  Даже незначительная задержка будет заметна и неприемле-
         ма. Если большинство кадров могут быть воспроизведены за 1/24 се-
         кунды, а некоторые займут немного больше времени, тогда для полу-
         чения эффекта реального времени может быть использован буфер, как
         показано на рис. 5-2. На самом деле компьютер может воспроизвести
         несколько  кадров перед началом отображения. Новые кадры заносят-
         ся  в буфер  по мере  генерации,  и один кадр из буфера отобража-
         ется каждую 1/24 часть секунды.  Даже если компьютеру  необходимо
         больше  времени для воспроизведения одного кадра,  это допустимо,
         так как вывод из буфера воспроизводится только 24 раза в секунду.


                                      - 5-4 -
            ┌──────────────┐       ┌──────────────┐       ┌──────────────┐       ┌
            │ Генерирующий │       │              │       │              │       │
            │     кадры    ├───────┤     Буфер    ├───────┤   Дисплей    │
            │   компьютер  │       │              │       │              │       │
            └──────────────┘       └──────────────┘       └──────────────┘       └

                Рис. 5-2. Генерация данных с использованием буфера

              Системы сбора данных противоположны системам генерации  дан-
         ных.  В системах сбора данных внешние устройства определяют быст-
         родействие компьютера. Если быстродействие мало, некоторые данные
         могут  быть потеряны.  Буфер не может компенсировать частоту  по-
         ступления данных, как при генерации. Система лабораторных измере-
         ний,  которая  собирает данные,  является примером такой системы.
         После сбора данных   они могут быть проанализированы и отображены
         в графическом или текстовом виде.Таким образом,  система осущест-
         вляет также и вывод. Но фаза вывода обычно отделена от фазы сбора
         данных. Таким образом,  система лабораторных измерений  является
         ярким представителем системы сбора данных.

                        Двухнаправленные стабильные системы

              Однонаправленные системы  осуществляют  ввод  или  вывод  из
         компьютера,  но не то и другое одновременно.  Однако,  для многих
         систем реального времени, необходим и ввод  и вывод. Такие систе-
         мы называются двухнаправленными системами. Эти системы могут быть
         стабильными и потенциально нестабильными. Давайте сначала обсудим
         двухнаправленные стабильные системы на примере системы управления
         домом.
              Система управления домом может быть использована для  управ-
         ления отоплением, вентиляций, кондиционированием, освещением, по-
         ливом лужаек и т.д.  Для поддержания определенной температуры не-
         обходимо  ее  измерять  и  корректировать каждые несколько минут.
         Температура остается приемлемой,  даже если она остается неизмен-
         ной 10 или 20 минут. Таким образом, случайная задержка не являет-
         ся катастрофой, так как температура какое-то время удерживается и
         система остается под контролем.  Такая система считается стабиль-
         ной.  Другим примером является автоматический  кассовый  аппарат.
         Большинство транзакций занимает всего несколько секунд, но допус-
         тимо,  если отдельная транзакция длится дольше из-за  перегрузки.
         Заметим,  что здесь не фиксируется абсолютное ограничение времени
         (т.е., что ответ должен приходить в течении х секунд). Но ограни-
         чение времени  все  же имеется (т.е.  покупатель будет раздражен,
         если не получит деньги через 5 минут после запроса).

                Ддухнаправленные потенциально нестабильные системы

              Рассмотрим балансирование рукоятки метлы на кончиках пальцев.
         Для удержания равновесия надо постоянно достаточно быстро двигать
         кончиками пальцев. Эта система двухнаправленная, потому что необ-
         ходимо  чувствовать  позицию рукоятки метлы и соответственно кор-
         ректировать свои действия.  Если немного опоздать, рукоятка метлы
         может сдвинутся слишком далеко и выйти из баланса. Таким образом,
         имеется некоторое "абсолютное" ограничение времени, которое долж-
         но всегда  поддерживаться.  Даже  случайная задержка неприемлема.
         Такая система считается нестабильной.  Другой пример - это управ-
         ление полетом ракеты. Ракета балансирует на выхлопе подобно руко-

                                      - 5-5 -
         ятке метлы на кончиках пальцев.  И подобно рукоятке  метлы,  если
         ракета отойдет слишком далеко от баланса,  она станет неуправляе-
         мой.
              В двухнаправляемых потенциально нестабильных системах компь-
         ютер принимает решения,  как управлять внешними устройствами. Та-
         кие системы в наибольшей  степени требуют использования компьюте-
         ра, так как даже небольшие задержки могут иметь весьма  болезнен-
         ные последствия.

                    Типичные временные характеристики и решения
                             систем реального времени

              Для понимания того,  как быстро внешнее  устройство  требует
         ответа,  наиболее важной временной характеристикой является время
         ответа. Время ответа - это время между вводом в компьютерную сис-
         тему  и  завершением  ею обработки или пересылки ответа на вывод.
         Таким образом,  это полное время,  в течение которого  транзакция
         или активная задача остается в вычислительной системе.
              Например, если  система  автоматических  кассовых  аппаратов
         (АКА) имеет только один терминал,  тогда время ответа есть просто
         время от того момента, когда покупатель делает заявку, до полного
         выполнения ее компьютером.  Однако,  в действительности,  система
         АКА имеет много терминалов. Поэтому время ответа включает задерж-
         ки,  вызванные тем, что компьютер обрабатывает несколько запросов
         одновременно.
              Диапазон времен  ответов для некоторых приложений показан на
         рисунке 5-3. Для АКА или систем резервирования билетов на авиали-
         нии время ответа должно быть порядка секунд.  Для некоторых спра-
         вочных систем базы данных допустимо время ответа до 20  секунд. С
         другой стороны, время ответа для таких приложений, как управление
         полетом ракеты,  радарное слежение и сбор научных данных,  должно
         измерятся в миллисекундах.

                               │  ┐
                      0,1 мсек─┼─ │    Радарный поиск
                               │  ┘ ┐
                        1 мсек─┼─   │
                               │    |  Печать на пишущей машинке
                       10 мсек─┼─   |
                               │   |
                      100 мсек─┼─  |   Ввод данных экспериментов
                               │   │
                         1 сек─┼─  ┘ ┐
                               │   ┐ │ Банки,системы резервирования, кассы
                        10 сек─┼─ ┐│ ┘
                               │  │|   Запросы к базам данных
                       100 сек─┼─ │|
                               │  │    Система управления домом
                      1000 сек─┼─ │
                               │  ┘
                     10000 сек─┼─

                    Рис. 5-3. Интервалы типичных времен ответа

              Другой важной временной характеристикой  является  временной
         интервал между двумя транзакциями. Он определяет, как часто могут
         обрабатываться транзакции.  Временной интервал может быть случай-

                                      - 5-6 -
         ным или периодическим.  Он случаен,  когда определяется событиями
         во  внешнем  устройстве  (таким,  как нажатие клерком клавиши или
         прерывание от какого-либо устройства).  Оно  периодическое,  если
         определяется часами или каким-либо другим устройством в компьюте-
         ре. При определении требуемого временного интервала  надо  учиты-
         вать максимально возможную в любое время загрузку. Иначе в период
         пика загрузки могут быть потеряны данные, что неприемлемо.
              Подобно времени ответа, временной интервал может  изменяться
         от частей миллисекунды (или меньше), до нескольких минут.Разветв-
         ленная система сберегательных банков в  напряженное  время  ленча
         может иметь одну транзакцию в секунду. Оператор может печатать от
         5 до 10 символов в секунду. Система сканирования радара может по-
         сылать данные каждую миллисекунду. Справочная система базы данных
         поддерживает только случайные запросы.
              На таблице 5-1 приводятся типы реализаций, обычно используе-
         мые для приложений в реальном времени, в зависимости от запрошен-
         ного времени ответа. Заметим, что MS-DOS не включена в эту табли-
         цу,  так как не является общепринятой для приложений  в  реальном
         времени.

                                                         Таблица 5-1
                  Времена ответа и общепринятые реализации систем
                                 реального времени
         ──────────────────┬──────────────────────────────────────────────
         Диапазон времен   │     Общепринятые реализации реального
              ответа       │                времени
         ──────────────────┼──────────────────────────────────────────────
          10 нсек-100 нсек │Выделенная логика ECL, фиксированная программа
         100 нсек - 1 мксек│Выделенная стандартная логика, программируемая
           1    - 100 мксек│Быстрый процессор с выделенной программой
         100 мксек- 1 мсек │Микропроцессор с ядром в реальном времени
           1 мсек - 1 сек  │Микропроцессор в реальном времени
           1 мсек - выше   │Все какие угодно
         ──────────────────┴──────────────────────────────────────────────

               Использование MS-DOS для приложений реального времени

              Как уже обсуждалось,  системы реального  времени  охватывают
         широкий  диапазон  приложений,  от простых систем сбора данных до
         сложной и детально разработанной системы управления ракетой. Сис-
         темы  реального  времени  разделяются не только по основным типам
         (однонаправленные,  двухнаправленные стабильные/потенциально нес-
         табильные), но также по временным характеристикам. Прежде чем вы-
         яснить, когда можно использовать MS-DOS для приложений в реальном
         времени, надо оценить его быстродействие.

                               Быстродействие MS-DOS

              Быстродействие MS-DOS  зависит от процессора и от используе-
         мого метода передачи данных.  В следующих разделах  будет  обсуж-
         даться,  что  определяет  быстродействие MS-DOS и как определить,
         можно ли использовать MS-DOS для приложений в реальном времени.

                              Тактовая частота MS-DOS

              Во время написания этой книги   MS-DOS  доступна  для  шести
         процессоров семейства 8086: 8088, 8086, 80188, 80286 и 80386. Са-
         мый медленный из них 8088,  а самый быстрый - 80386 (и самый мощ-

                                      - 5-7 -
         ный). Процессорам семейства 8086 доступна различная тактовая час-
         тота,  как показано в таблице  5-2.  Тактовая  частота  4.77  МГц
         означает, что генерируется 4.77 миллиона тактов в секунду. Такто-
         вая частота определяет быстродействие процессора:  чем она  выше,
         тем быстрее  процессор. Заметим однако, что процессор 80286 быст-
         рее, чем 8086, имеющий такую же тактовую частоту.
              В связи с тем, что процессор 8088 самый медленный из семейс-
         тва 8086,  все временные характеристики в этой главе  даются  для
         процессора 8088,  имеющего тактовую частоту 4.77  МГц.  Если  Ваш
         компьютер имеет большее быстродействие, Вы сможете получить ответ
         быстрее.  Так как семейство процессоров  8086  имеет  возможность
         предварительной выборки команд из очередей,  действительное время
         выполнения некоторой последовательности команд  может  отличаться
         от времени выполнения, суммированного из отдельных команд.

                                                         Таблица 5-2
                      Тактовая частота для MS-DOS компьютеров
         ────────────────┬───────────────────────────┬─────────────────
                         │                           │
         Процессоры 8086 │ Наименование компьютера   │Тактовая частота
         ────────────────┼───────────────────────────┼─────────────────
                         │                           │
           8088          │ IBM PC                    │  4.77,8 МГц
           8086          │ IBM PC Compatible         │  8,12 МГц
           80188/186     │ IBM PC Compatible         │  8,10 МГц
           80286         │ IBM PC AT (режим 8086)    │  8,10 МГц
           80386         │ IBM PC AT (386) (режим 8086) 16,20,25 МГц
         ────────────────┴───────────────────────────┴──────────────────

              MS-DOS поддерживает  часы  в реальном масштабе времени.  Они
         обеспечивают дату и время и доступны любой программе.  Время под-
         держивается  с точностью до 10 миллисекунд.  Таким образом,  если
         для приложения необходима разрешающая способность меньше 10  мил-
         лисекунд, оно не может использовать эти часы.
              Следующая программа считывает дату из MS-DOS. Для считывания
         даты программное обеспечение использует прерывание 21h.  В  дейс-
         твительности, прерывание 21h используется при запросе любого обс-
         луживания MS-DOS, при этом регистр AH должен содержать код выпол-
         няемой  функции.  Позднее мы обсудим несколько примеров программ,
         использующих  программные  прерывания  для  вызова   MS-DOS   или
         POM-BIOS.

              mov     ah,2ah       ; считывание даты
              int     21h          ; вызов DOS
              mov     year,cx      ;  год в CX (от 1980 до 2099)
              mov     month,dh     ; месяц в DH (от 1 до 12)
              mov     day,dl       ; день в DL (от 1 до 31)

              В приведенной  программе день недели возвращается в AL.  Как
         видно из программы,  для вызова MS-DOS или  POM-BIOS  выполняются
         следующие шаги:
              - Занесение в регистры соответствующих кодов команд и  пара-
         метров.
              - Осуществление  прерывания,   соответствующего   вызываемой
         функции.
              - Возврат,  считывание возвращаемых параметров и статуса ин-
         формации из регистров.
              Для считывания времени из MS-DOS используется прерывание int

                                      - 5-8 -
         21h с кодом команды AH=2ch, как показано в следующей программе:

              mov     ah,2ch       ; cчитывание времени
              int     21h          ; вызов DOS
              mov     hours,ch     ; часы в CH (от 0 до 23)
              mov     mins,cl      ; минуты в CL (от 0 до 59)
              mov     secs,dh      ; секунды в DH (от 0 до 59)
              mov     msec,dl      ; 10 мсек в DL (от 0 до 99)

              Программа считывает системное время и запоминает его в  ука-
         занных переменных. Время и дату можно получить, используя функцию
         вызова MS-DOS.

                   Передача данных в операционной системе MS-DOS

              Во время работы с системами реального времени  компьютеру  с
         операционной  системой  MS-DOS  приходится  обмениваться  данными
         внешней средой. Данные, подлежащие передаче, делятся на три кате-
         гории:
            - данные,  состоящие из одного бита, указывающего текущее сос-
              тояние  устройств,  которые могут находиться в одном из двух
              состояний,
            - данные,  представляющие  собой цифровое выражение аналоговых
              сигналов,  выдаваемых аналогово-цифровыми преобразователями,
            - цифровая информация, поступающая от оборудования другого ви-
              да (которое в свою очередь принимало данные  одним  из  трех
              указанных способов).

                         ┌───────┐
                         │ Порты │
                         └───┬───┘
                             │
                ┌────────────┴─────────────┐
                │                          │
          ┌─────┴──────────┐      ┌────────┴─────────┐
          │   Порты цент-  │      │ Порты операцион- │
          │   рального про-│      │ ной системы DOS  │
          │   цессора CPU  │      │                  │
          └────────────────┘      └────────┬─────────┘
           Доступ к ним ве-                │
           дется по коман-                 │
           дам IN и OUT           ┌────────┴─────────┐
                                  │                  │
                                  │                  │
                          ┌───────┴──────┐    ┌──────┴───────┐
                          │Последователь-│    │ Параллельные │
                          │ ные порты    │    │ порты        │
                          └──────────────┘    └──────────────┘
                          Доступ к ним ве-    Доступ к ним ве-
                          дется по обраще-    дется по обраще-
                          ниям к функциям     ниям к функциям
                          операционной сис-   операционной сис-
                          темы DOS и системы  темы DOS и системы
                          ПЗУ-BIOS            ПЗУ-BIOS

                      Рис. 5-6. Типы портов и методы доступа


                                      - 5-9 -

              "Порты" используются  операционной системой MS-DOS для пере-
         дачи данных.  Данные,  считываемые через порт, представляют собой
         данные внешней среды.  Данные,  поступающие в порт (иначе - "дан-
         ные,  записываемые в порт"), влияют (управляют) на внешнюю среду.
         В  операционной системе MS-DOS существует два типа портов:  порты
         центрального процессора CPU и порты операционной  системы MS-DOS.
         На рисунке 5-6 представлены два типа портов и методы,  используе-
         мые для доступа к этим портам.  Физически эти порты могут  выгля-
         деть  одинаково.  И  только по методу доступа их можно различить.
         Порты центрального процессора CPU называются  также  "логическими
         портами".
              Порты центрального процессора CPU представляют передачу дан-
         ных низкого уровня. Обращение к ним происходит непосредственно от
         процессора. Каждый порт центрального процессора CPU идентифициру-
         ется  своим  адресом.  Может существовать до 65536 разных портов.
         Операционная система MS-DOS использует некоторые порты  централь-
         ного процессора CPU для программируемого таймера и для таких спе-
         цифических целей,  как общение с клавиатурой и  обмен  данными  с
         дисками. Другие порты центрального процессора CPU могут использо-
         ваться пользователем для других целей.  Основной способ обращения
         к этим портам заключается в применении команд IN и OUT языка  Ас-
         семблер. По команде IN происходит считывание одного байта или од-
         ного слова из порта.  По команде WRITE происходит  запись  одного
         байта или одного слова в порт.
              В операционной  системе MS-DOS порт 61h центрального процес-
         сора CPU используется для говорящего устройства.  Второй  младший
         бит  (бит  1) используется для управления звуком,  поступающим от
         говорящего устройства.  Если этот бит установлен в значение  "1",
         говорящее устройство включено.  В противном случае оно выключено.
         Другие биты этого порта управляют другими функциями. Ниже листинг
         5-1 содержит программу,  использующую  порт говорящего устройства
         для генерации звуковых сигналов:

             Листинг 5-1. Генерация звуковых сигналов при помощи порта
                               говорящего устройства
         ----------------------------------------------------------------

                      in     al,61h    ; 61h - это адрес порта говоря-
                                       ;       щего устройства
                      mov    bl,Ofch   ; маска для сброса битов О и 1
                      and    al,bl     ; маскировка al
            noise_on:
                      or     al,2      ; бит 1 в al установлен в зна-
                                       ; чении "1"
                      out    61h,al    ; включение говорящего уст-
                                       ; ройства
                      mov    cx,Offh   ; время включения
            time_1:
                      loop   time_1
            noise_off:
                      and    al,bl     ; сброс битов 0 и 1
                      out    61h,al    ; выключение говорящего уст-
                                       ; ройства
                      mov    cx,Offh   ; меньшее значение в cx озна-
                                       ; чает повышенную частоту
                                       ; звука

                                      - 5-10 -
            time_2:
                     loop    time_2
                     push    ax        ; сохранение ax
                     mov     ax,1      ; считать значение состояния
                                       ; клавиатуры
                     int     16h       ; вызов средств клавиатуры
                                       ; BIOS
                     pop     ax        ; сохранить ax до выполнения
                                       ; перехода

                     jnz     exit      ; символ был набран
                     jmp     noise_on  ; символ не был набран
            exit:
                     ret
         ----------------------------------------------------------------

            В представленной выше программе говорящее  устройство повторно
         включается  и  выключается  путем записи байта в порт 61h.  После
         включения говорящего устройства команда LOOP выполняется  с целью
         предоставления  этому  устройству некоторого времени  для  работы
         прежде чем оно будет отключено.  Звук продолжает поступать до тех
         пор, пока с клавиатуры не будет введен какой-нибудь символ. Функ-
         ция прерывания "int 16h"  используется  для  считывания  значения
         состояния клавиатуры.
            В таблице 5-3 представлены номера портов центрального  процес-
         сора CPU, используемые в операционной системе MS-DOS для каких-то
         конкретных целей.

                                                         Таблица 5-3
                Порты центрального процессора CPU, используемые для
                                определенных целей
         ───────────────────────┬────────────────────┬──────────────────
            Порт центрального   │ Адрес ввода/вывода │Вектор прерыва-
            процессора CPU      │                    │      ния
         ───────────────────────┼────────────────────┼──────────────────
            Таймер              │ 040=043            │     8
            Вторичный RS-232    │ 2F8=2FF            │    11
            Клавиатура          │ 060=063            │     9
            Жесткий диск        │ 320=32F            │    13
            Печатающее уст-     │ 378=37F            │    15
            ройство(принтер)    │                    │
            Монохромный дисп-   │ 380=3BF            │     -
            лей                 │                    │
            Цветной дисплей     │ 3D0=3DF            │     -
            Гибкий диск         │ 3F0=3F7            │    14
            Первичный RS-232    │ 3F8=3FF            │    12
         ───────────────────────┴────────────────────┴──────────────────

              Порты операционной системы MS-DOS предназначены для передачи
         данных  высокого уровня.  Это значит,  что процессор не управляет
         непосредственно этими данными, а доступ к ним осуществляется пос-
         редством  обращения к функциям операционной системы MS-DOS и сис-
         темы  ПЗУ-BIOS.  Существует  два типа портов операционной системы
         MS-DOS, известные  под названием "последовательных портов" и "па-
         раллельных портов".
              Параллельные порты  в основном разрабатываются для подключе-

                                      - 5-11 -
         ния к ним печатающих устройств (принтеров). Данные через эти пор-
         ты проходят параллельно,  то есть, все восемь битов, составляющие
         байт,  передаются на принтер одновременно.  Операционная  система
         DOS  поддерживает  передачу потока данных через параллельный порт
         только в одном направлении (то есть от  компьютера  к  принтеру),
         хотя  сами по себе аппаратные средства могут осуществлять функции
         и ввода и вывода. Ниже предложена часть программы, в которой про-
         исходит вывод строки,  заданной при помощи DS:DX,  в параллельный
         порт.  Функция прерывания операционной системы MS-DOS "int 21h" с
         параметром  AH=40H  (записать  файл)  используется для выполнения
         этого условия.  Регистр BX содержит описатель файла для стандарт-
         ного  устройства  печати (4).  После обработки запроса регистр ax
         будет содержать количество символов,  действительно помещенных  в
         параллельный порт.

                        mov    ah,40h            ; функция = запись
                                                 ;            файла
                        mov    bx,4              ; описано для стан-
                                                 ; дартного принтера

                        mov    cx,20             ; подсчет числа сим-
                                                 ; волов

                        mov    dx,seg OUTSTR     ;
                        mov    ds,dx             ;
                        mov    dx,offset OUTSTR  ;  ds:dx указывает на
                                                 ;  OUTSTR
                        int    21h               ;  обращение к опера-
                                                 ;  ционной системе
                                                 ;  MS-DOS
                        jc     failed            ;  установленное в
                                                 ;  единицу  значение
                                                 ;  переноса означает
                                                 ;  сбой принтера

              Последовательные порты  обычно  используются для подключения
         модемов,  а также для подключения устройства "мышь". Данные через
         последовательные порты передаются по одному биту по одному и тому
         же проводнику.  Операционная система  DOS  поддерживает  передачу
         данных в двух направлениях, то есть, в компьютер и от компьютера.
              Передача данных через последовательные порты ведется  асинх-
         ронно.  Поэтому  на обоих концах линии передачи должен быть уста-
         новлен ряд согласующих параметров.   Скорость передачи  данных  в
         бодах "последовательного порта" равна числу битов, передаваемых в
         секунду.  Скорость передачи данных в бодах, поддерживаемая опера-
         ционной  системой MS-DOS версии 3.3,  лежит в диапазоне от 110 до
         19200 битов в секунду. "Длина слова" представляется числом битов,
         составляющих символ.  Это значение может равняться 7 или 8. "Чет-
         ность" - это простой механизм обнаружения ошибок в линии  переда-
         чи. Согласно стандартам, принятым в интерфейсах RS-232 для после-
         довательной передачи данных, значением параметра  четности  может
         быть "четно" или " нечетно" (два способа проверки ошибок) или мо-
         жет не существовать проверки на четность. Каждый символ отделяет-
         ся от других битами,  называемыми "битами останова".  Можно зада-
         вать один или  два  бита  останова.  Эти  параметры  должны  быть
         проинициализированы до начала процесса передачи данных.
              Функция прерывания "int 14h" системы BIOS  используется  для

                                     - 5-12 -
         передачи данных через последовательный порт. Инициализация после-
         довательного порта выполняется  установкой  в  регистре  AH  кода
         функции 0. Параметры передачи задаются в регистре AL, как это по-
         казано в таблице 5-4.  "Номер порта" указывается в DX. Существует
         четыре  последовательных портов в операционной системе MS-DOS. Их
         именами являются значения от COM1 до COM4.  В представленной ниже
         программе  последовательный порт инициализируется исходно для пе-
         редачи данных со скоростью 9600 бод,  слов  длиной в 8  битов,  с
         одним битом  останова при отсутствии проверки на четность.  После
         выполнения запроса к функции регистр AH содержит значение состоя-
         ние порта.

                   mov     ah,0      ; инициализировать последователь-
                                     ; ный порт
                   mov     al,0e3h   ; 9600 бод, 8-битовое слово, от-
                                     ; сутствие проверки на четность,
                                     ; 1 бит останова
                   mov     dx,0      ; порт COM1 инициализируется
                   int     14h       ; вызов системы ПЗУ-BIOS


                                                         Таблица 5-4
                     Параметры связи, задаваемые в регистре AL
         ─────────────┬──────────────┬────────────────┬─────────────────
          Скорость    │   Четность   │ Биты останова  │ Длина слова
          в бодах     │              │                │
         ─────────────│──────────────┼────────────────┼─────────────────
         Биты   Ско-  │ Биты Чет-    │        Биты    │ Биты  Длина
         7,6,5  рость │ 4,3  ность   │ Бит 2  останова│  1,0
         ─────────────┼──────────────┼────────────────┼─────────────────
         000    110   │x0  Отсутствует  0     1 бит   │  10   7 битов
         001    150   │01  Нечетная  │  1     2 бита  │  11   8 битов
         010    300   │11  Четная    │                │
         011    600   │              │                │
         100   1200   │              │                │
         101   2400   │              │                │
         110   4800   │              │                │
         111   9600   │              │                │
         ─────────────┴──────────────┴────────────────┴─────────────────

              В предлагаемом  ниже куске программы символ 'x' записывается
         в последовательный порт. При возврате, если бит 7 регистра AH ус-
         тановлен в значение "0",  обращение к функции было успешным. Зна-
         чение "0" *, в бите 7 регистра AH указывает на сбой.
         --------------------------
             * Возможно,  в оригинал текста вкралась опечатка:  или  здесь
               или  в предыдущем предложении должно стоять значение "1"...
               (Примеч. переводчика.)

                   mov     ah,1      ; функция 1= запись символа
                   mov     al,'x'    ; регистр AL содержит символ
                   mov     dx,0      ; запись в порт COM1
                   int     14h       ; обращение к системе ПЗУ-BIOS

              Время, требуемое для передачи данных через порты, обычно за-
         висит от характеристик внешних устройств.  Например, время, необ-
         ходимое для записи/считывания 1 байта на жесткий диск или с жест-

                                      - 5-13 -
         кого диска,  зависит от нескольких факторов: типа жесткого диска,
         таких  параметров жесткого диска,  как количество головок и коли-
         чество цилиндров,  размера порций ввода/вывода на  жесткий  диск,
         структуры файлов, количества файлов и так далее. Если ваша систе-
         ма реального времени использует внешние устройства,  Вам  следует
         провести несколько опытов,  чтобы  снять  время, затрачиваемое на
         выполнение операций. Поскольку разрешающая способность часов сис-
         темы  в  операционной  системе MS-DOS равна 10 м/сек,  операция в
         опыте  должна повторяться много раз с целью получения точных вре-
         менных оценок. Они изображены ниже на рисунке 5-7:

              ┌───────────────────┐
              │                   │
              │  Передача данных  │
              │                   │
              └─────────┬─────────┘
                        │
             ┌──────────┼────────────┐
             │          │            │
          ┌──┴────┐ ┌───┴─────┐ ┌────┴───┐
          │Метод  │ │ Прямой  │ │Метод   │
          │упоря- │ │ доступ  │ │доступа │
          │дочен- │ │ к памяти│ │по пре- │
          │ного   │ │ (DMA)   │ │рываниям│
          │опроса │ │         │ │        │
          └───────┘ └─────────┘ └───┬────┘
                                    │
                    ┌───────────────┼──────────────┐
                    │               │              │
                    │               │              │
             ┌──────┴──────┐    ┌───┴───┐     ┌────┴────┐
             │ Устройства  │    │ Таймер│     │Программа│
             │ ввода/выво- │    │       │     │         │
             │ да          │    └───────┘     └─────────┘
             └─────────────┘

                         Рис. 5-7. Методы передачи данных

              Метод упорядочения опроса может  использоваться  в  действи-
         тельности для любого устройства.  В нашей схеме порты проверяются
         (опрашиваются) в некоторой постоянной последовательности  с целью
         определения  наличия данных для пересылки в каком-либо порту. Это
         значит,  что масса компьютерного времени тратится  впустую,  если
         порты находятся большую часть времени в неактивном состоянии. Бо-
         лее того,  сам процессор во времени передачи данных  находится  в
         "занятом" состоянии, и опрос в это время не ведется.
              Для того,  чтобы понять насколько быстро протекает  передача
         найденных  в результате упорядоченного опроса данных,  рассмотрим
         предложенную ниже программу, в которой осуществляется ввод данных
         через  порт центрального процессора CPU в память.  Регистр DX со-
         держит адрес этого порта.

            read:     in   ax,dx      ; считывание данных - 12 циклов
                      add  di,2       ; следующее место назначения -
                                        4 цикла
                      mov  [di],ax    ; сохранение данных - 18 циклов
                      loop read       ; выполнение цикла до полного

                                      - 5-14 -
                                      ; завершения - 17 циклов
                                      ; общее количество -51 цикл
                                            для 8088
                                      ; общее количество -43 цик-
                                            ла для 8086
              Для микропроцессора  модели  8088,  работающего  с  частотой
         4,77 МГц 51 цикл занимает 10,69 микросекунд,  что приводит к ско-
         рости передачи данных на частоте 93 КГц.  Эта  скорость  передачи
         данных  означает,  что  компьютер может считывать данные максимум
         93000 раз из порта.
              В приводимом ниже куске программы происходит проверка на на-
         личие готовых к пересылке данных в  последовательном  порту.  Для
         этого используется функция прерывания "int 14h" со значением AH=3
         (требование к состоянию последовательного  порта).  При  возврате,
         если бит 0 регистра AH имеет значение "1", это значит, что имеются
         готовые данные.  Программа обычно ожидает появление готовых данных
         и они возвращаются в регистр AL.

            wait:
                     mov      ah,3       ; считать значение состояния
                                         ; последовательного порта
                     mov      dx,0       ; требуется состояние порта
                                         ; COM1
                     int      14h        ; обращение к ПЗУ-DIOS
                     and      ah,1       ; данные готовы?
                     jz       waite      ; нет, ожидать, пока данные
                                         ; не будут готовы
                     mov      ah,2       ; Функция=считывания данных
                     mov      dx,0       ; считывание из порта COM1
                     int      14h        ; обращение к ПЗУ-BIOS


              Передача данных методом прямого доступа к памяти (DMA)

              Передача данных  методом  прямого доступа к памяти (DMA) ис-
         пользуется,  когда требуется передача больших объемов  данных,  а
         процессор занят выполнением других задач на фоне передачи данных.
         Обычно только процессор имеет доступ к  памяти.  Но  при  наличии
         прямого  доступа к памяти (DMA) внешние устройства тоже могут об-
         ращаться к памяти. Внешнее устройство блокирует процессор и начи-
         нает само вести обмен данных с памятью.  Во время передачи данных
         процессор не может обращаться к памяти, но может выполнять какую-
         то  другую  работу.  После  завершения  процедуры передачи данных
         процессор вновь получает возможность обращения к памяти.

                     Передача данных методом прерываний данных

              Передача данных методом прерываний данных используется, ког-
         да передача данных ведется асинхронно (то есть, время, отведенное
         для  передачи  данных заранее не определяется).  И такая передача
         данных обычно происходит сравнительно не часто. Прерывание указы-
         вает на появление какого-либо внешнего события в процессоре, тре-
         бование может вызываться каким-либо внешним по отношению  к  про-
         цессору устройством, часами (таймером) или какой-либо программой.
         При наступлении прерывания процессор  приостанавливает выполнение
         текущей  программы ("подвешивает" ее),  считывает адрес сервисной
         программы прерываний (программы ISR) из таблицы векторов прерыва-

                                      - 5-15 -
         ний и выполняет последнюю.
            Основными функциями,  выполняемыми  сервисной  программой ISR,
         являются :
            1. Разрешение прерываний таким образом, что могут обслуживать-
         ся прерывания более высоких приоритетов.
            2. Сохранение регистров, которые будут использоваться програм-
         мой ISR.
            3. Выполнение функций обработки,  связанных с прерыванием, как
         можно быстрее.
            4. Восстановление содержимого сохраненных регистров.
            5. Выполнение  команды IRET для возобновления выполнения  пре-
         рванной программы.

            Представленная ниже  программа  содержит  структуру  программы
         ISR:
                  sti                       ; разрешить прерывания
                  push      ax              ; сохранить только те
                  push      bx              ; регистры, которые ис-
                  push      cx              ; пользуются программой
                  push      dx              ; ISR
                  .
                  .
                  .
                  mov       ax,cs           ; локальные данные, к ко-
                                            ; торым будет вестись об-
                                            ; ращение
                  mov       ds,ax           ; с использованием области
                                            ; DS
                  .
                  .
                  .                         ; обработать прерывания

                  pop       dx              ; восстановить регистры в
                  pop       cx              ; обратном порядке
                  pop       bx              ;
                  pop       ax              ;
                  iret                      ; возобновить выполнение
                                            ; прерванной программы

              При появлении прерывания процессор сохраняет три  слова (CS,
         IP, флаги) и считывает два слова (адрес программы ISR). Таким об-
         разом, на обслуживание любого прерывания в процессоре 8088 затра-
         чивается 71 цикл, а в процессоре 8086 - 51 цикл. Не требуется до-
         полнительных  затрат на задание прерывания и  его  сброс,  потому
         что процесс обслуживания прерывания уже сбрасывает его (это назы-
         вается "автоматическое завершение режима прерывания").

                         Сравнение методов передачи данных

              Сравнение времен и максимальных скоростей передачи данных не
         методами прямого доступа (DMA) представлено в таблице  5-5.  Вре-
         менные затраты (циклы и времена) в таблице вычисляются только для
         тех циклов,  в которых не происходит действительной передачи дан-
         ных.  Информация о временных затратах дается только в целях  при-
         близительного сравнения.  Например, временные затраты на выполне-
         ние "программного цикла" получают при выполнении следующей коман-
         ды языка ассемблер:

                     again:  loop again

              Регистр CX  загружается  некоторым  определенным   значением
         счетчика и в этом цикле передачи данных не происходит.
              Циклы для проведения упорядоченного опроса строятся  в  виде
         предложенной ниже программы, в которой происходит считывание сос-
         тояния из порта, проверка бита готовности и потом выполняется сам
         цикл, если готовности нет.

            again:
                   in     ax,dx        ; порт задается в DX
                   test   ax,bx        ; сравнение регистр/регистр
                   jnz    again        ; повторять цикл до готовности


                                                         Таблица 5-5
                 Скорости передачи данных для не -DMA интерфейсов
         ┌───────────────┬───────────────┬──────────────┬─────────┐
         │Готовые данные,│   Затраты     │   Передача   │Макси-   │
         │определяемые:  │   времени     │    данных    │мальная  │
         │               ├───────────────┼──────────────┤скорость │
         │               │ циклы  время  │  циклы  время│передачи │
         │               │               │              │данных   │
         ├───────────────┼───────────────┼──────────────┼─────────┤
         │Программный    │17  3.564 мксек│  -      -    │ -       │
         │цикл           │               │              │         │
         │(8088,4.77 MГц)│               │              │         │
         │               │               │              │         │
         │Упорядоченный  │27  5.660 мксек│51 10.692мксек│61 КГц   │
         │опрос          │               │              │         │
         │(8088;4,77 МГц)│               │              │         │
         │               │               │              │         │
         │Прерывание     │115 24.109мксек│43  9.015мксек│30 КГц   │
         │(8088;4,77 МГц)│               │              │         │
         │               │               │              │         │
         │Прерывание     │ 83 10.375мксек│43  5.375мксек│63 КГц   │
         │(8086; 8 МГц)  │               │              │         │
         └───────────────┴───────────────┴──────────────┴─────────┘

              Скорости передачи данных, которых можно достичь в практичес-
         ки  используемых  прикладных программах,  ниже,  чем максимальные
         скорости передачи данных,  представленные в таблице  5-5,  потому
         что  время  требуется  для установки таймеров, получения данных и
         т.д. Если  используется так называемый "блок сбора данных",  ско-
         рость передачи данных также зависит от скорости  передачи  данных
         блока.

                        Средства ускоренной записи программ

               Многие программные средства и блоки сбора данных (стандарт-
         ные  и  обычные)  могут  использоваться  для ускорения выполнения
         программ oперационной системы MS-DOS.  Эти средства следует  рас-
         сматривать только,  если структура системы реального времени тре-
         бует  ускоренного ответа от компьютера.  И хоть исчерпывающее об-
         суждение всего этого выходит за рамки данной  главы,  мы  все  же
         рассмотрим некоторые из этих средств в этом разделе.
              Если прикладная программа требует вычислений с использовани-

                                      - 5-17 -
         ем математических формул с плавающей запятой,  применение матема-
         тического  процессора  8087 (или 80287/80387) может улучшить ско-
         рость  вычислений  на  несколько  порядков.   Фирма   "Интел"   -
         производитель  микропроцессоров  8087  -  выпускает оборудование,
         скорость которого в некоторых математических операциях  в  тысячу
         раз  возрастает,  когда  микропроцессор  8087 используется вместо
         стандартных программ  математического  программного  обеспечения.
         Микропроцессор  8087  предоставляет  системе команды для быстрого
         выполнения операций с плавающей запятой.  К таким операциям отно-
         сятся следующие действия:  преобразование чисел, основные матема-
         тические действия и некоторые трансцендентные функции  (например,
         нахождение синусов и косинусов и логарифмов).  Поскольку же мате-
         матические программы стандартно  присутствуют  в  микропроцессоре
         8087,  а не в памяти программ, использование микропроцессора 8087
         тоже может привести к уменьшению размеров программ.  Подробнее  о
         программировании  можно узнать из главы 10 "Программирование рас-
         ширения числовой обработки фирмы "Интел"".
              Если требуется просмотреть какой-либо массив,  можно исполь-
         зовать команду XLAT во всех  процессорах,  кроме  микропроцессора
         8088. Команда XLAT имеет возможность производить быстрое индекси-
         рование в 256-байтовой таблице и получать  содержимое  указанного
         адреса,  что показано на рисунке 5-8.  Объединяя несколько команд
         XLAT в цепочки, можно управлять просмотром больших таблиц.
              Вместо исполнения команды IN/OUT в цикле для передачи набора
         байтов можно  исполнять  команду  INS/OUTS  для  микропроцессоров
         80188, 80186, 80286 и 80386.
              Используя средства DMA (средства метода  прямого  доступа  к
         памяти)  для  передачи данных можно значительно увеличить быстро-
         действие системы.  Передача данных происходит с полной скоростью,
         на  которую способна шина и память,  потому что в это действие не
         вовлекаются ресурсы процессора. Другое преимущество в данном слу-
         чае заключается в том,  что передача данных не ограничивается ши-
         риной шины данных, ведущей к процессору.

                                                        Регистр BX
                                                         указывает
                                                         на базу
                        Перед выполнением ┌─────────┐ ────────────
                        команды XLAT,     │         │  
            Регистр AX  AL указывает на   │         │  │
          ┌──────┬─────┐  ЭЛЕМЕНТ         ├─────────┤  │
          │      │ AL  ├─────────────────│ ЭЛЕМЕНТ │  Максимальное
          │      │     │       ┌──────────┤         │  количество
          └──────┴─────┘       │          ├─────────┤  │ элементов
                              │          │         │  │ равно 256
                    │          │          └─────────┘  
                    └──────────┘
                   После выполнения
                   команды XLAT,
                   ЭЛЕМЕНТ замещает AL

                Рис. 5-8. Работа команды XLAT при просмотре таблиц

              Использование макрокоманд  вместо  обращения  к  стандартной
         подпрограмме ускоряет работу программы. Это происходит вследствие
         того,  что макрокоманда производит расширение на месте, а при об-
         ращении  к  стандартной  подпрограмме  приходится  помещать адрес

                                      - 5-18 -
         возврата в стек,  обычно сохранять регистры и потом делать  пере-
         ход.  Обратитесь к Главе 1 "Структурированное программирование 1:
         Инструменты для структурированного программирования ",  где более
         подробно говорится о задании макрокоманд.

              Случаи, когда следует использовать операционную команду
                 MS-DOS для прикладных программ реального времени

              Решение об использовании  операционной  системы  MS-DOS  для
         конкретной  прикладной  программы зависит от нескольких соображе-
         ний. Следует учитывать:
            . время ответа
            . интервалы
            . количество вводов
            . количество выводов
            . используемый тип процессора
            . частоту системных часов
            . структуру системы

              Из всех  перечисленных  выше  соображений  только  структура
         прикладной программы реального времени зависит  от  разработчика:
         может быть выбрана более быстрая операционная система MS-DOS. Все
         другие соображения  продиктованы внешней средой и не  могут  быть
         изменены разработчиком.
              Нам нужно вычислить время ответа для прикладной программы, а
         также нужно вычислить время ответа, которое может обеспечить дан-
         ная операционная система  MS-DOS  в  среде  прикладных  программ.
         Обычно  бывает  несложно  определить  требуемое  время ответа для
         прикладной программы.  Рассмотрим простой  пример  сбора  данных.
         Предположим,  что за одну секунду Вы должны собрать 50 000 байтов
         данных  и  обработать  их.   Это значит,  что вы имеете 1/50000 =
         20 микросекунд для сбора и обработки каждого байта информации.
              В другом примере предположим  Вам  требуется  время  ответа,
         равное 10 мсек,  для контроля и принятия корректирующего действия
         для управления температурным режимом в химическом  процессе. (Эти
         действия  могут  основываться  на таких временных характеристиках
         оборудования,  которые управляют температурами, а также самим ха-
         рактером протекающего процесса). Таким образом, время ответа, тре-
         буемое прикладной программе,  присуще как этой прикладной програм-
         ме, так и существующей среде.
              Гораздо труднее определить время ответа, которое может обес-
         печить система реального времени. Для определения времени ответа,
         которое может поддерживаться операционной системой MS-DOS,   рас-
         смотрим сначала существующую операционную систему MS-DOS и имеющ-
         ееся оборудование (если оно действительно присутствует),  а также
         некоторый  простой  способ  разработки  программного  обеспечения
         (разные методы разработки будут обсуждаться позднее).  Теперь да-
         вайте вычислим время ответа, которое равно времени, затрачиваемо-
         му  на  необходимый ввод,  отработку и вывод,  и всех связанных с
         этими действиями задержек. Если это время ответа меньше требуемо-
         го времени ответа,  это значит, что Вы нашли приемлемую структуру
         системы, используя операционную систему MS-DOS.
              И снова рассмотрим пример со сбором  данных,  где  требуемым
         временем  ответа является значение в 20 микросекунд. Операционная
         система MS-DOS может обеспечить время ответа  в  20  микросекунд,
         если  будет иметься достаточное количество основной первичной па-
         мяти для размещения требуемого объема данных. Но если такого объ-

                                      - 5-19 -
         ема памяти нет,  возможно,  Вам придется размещать данные во вто-
         ричной памяти. В этом случае двадцати микросекунд может оказаться
         недостаточно для размещения данных.
              Если время   ответа,  поддерживаемое  операционной  системой
         MS-DOS,  не меньше,  чем требуемое время ответа, Вам следует про-
         вести  ряд опытов с другими техническими средствами в поисках бо-
         лее быстрых программ (они уже рассматривались  выше), стандартных
         или  обычных блоков,  более быстрого процессора,  других структур
         системы и использовать более быстрое оборудование(может быть, это
         будет более дорогостоящее устройство). Этот выбор является наибо-
         лее трудной частью проектирования систем реального времени, а об-
         суждение  всех этих средств далеко выходит за пределы этой главы.
              Требуемая продолжительность временного  интервала определяет
         частоту обработки транзакций. В зависимости от требуемой обработ-
         ки оперативной системы MS-DOS может управлять определенным макси-
         мальным числом транзакций в секунду.  Если общее количество тран-
         закций может  больше,  чем  то  число,  которым  может  управлять
         операционной системой MS-DOS, очевидно, что систему MS-DOS нельзя
         будет использовать.  Например,  если  система  реального  времени
         должна получить 1 миллион транзакций в секунду, операционная сис-
         тема MS-DOS не может использоваться для такой системы.
              Возможность применения операционной системы  MS-DOS  зависит
         также от  необходимости  использования  мультизадачности. В общем
         случае операционная система MS-DOS не может использоваться , если
         требуется применение мультизадачного режима.
              Например, операционная система MS-DOS не может быть примене-
         на в банковской системе с восемью терминалами.  Однако, оператив-
         ная система MS-DOS,   предназначенная для использования в  персо-
         нальном компьютере IBM PC/AT,  предусматривает наличие нескольких
         свойств, позволяющих организовать  очень  простой  мультизадачный
         режим. Это будет обсуждено позже. Также мы будем позднее рассмат-
         ривать концепцию "циклических планировщиков"  в  качестве  метода
         проектирования очень простой формы мультизадачности.
              В общем, мы можем сказать, операционная система MS-DOS может
         быть  использована для большинства однонаправленных систем,   не-
         скольких двунаправленных устойчивых систем и очень  малого  коли-
         чества двунаправленных потенциально неустойчивых систем.  Сущест-
         вует  несколько  сравнительно  простых,  но  часто   используемых
         прикладных  программ реального времени,  в которых может быть ис-
         пользована операционная система MS-DOS. В эти прикладные програм-
         мы включаются системы управления домашним хозяйством, системы ла-
         бораторных измерений, упрощенные системы роботов и т.д.

             Проектирование систем реального времени с использованием
                            операционной системы MS-DOS

              Проектирование систем  реального  времени  с  использованием
         операционной системы MS-DOS  затруднено  отсутствием  официальной
         методологии  такого  проектирования.  Эта нехватка общего подхода
         выражается в возникновении таких проблем, как:
            1. В работающих системах реального времени могут возникать не-
         объяснимые аварийные ситуации или результаты работы будут  выгля-
         деть странно из-за проблем синхронизации.
            2. Существующие реализации указанных систем  становятся  неуп-
         равляемыми  вследствие произошедших в них изменений и расширений.
            3. Когда процесс программирования системы закончен, нельзя по-
         ручится за ее работоспособность в дальнейшем.

                                      - 5-20 -

              На рисунке 5-9 представлены методы проектирования систем не-
         реального времени.  Синхронные методы разработки требуют выполне-
         ния  только одной задачи в каждой реализации системы.  Синхронные
         методы могут быть трех типов:
            . упорядоченный опрос (без прерываний)
            . главный цикл с прерываниями
            . циклическое планирование.

              Для обеспечения механизма действия каждого из трех указанных
         методов мы будем пользоваться примерами и  программами  на  языке
         Ассемблер. Мы ограничим наше обсуждение только вопросами проекти-
         рования и не будем касаться соображений синхронизации, которое мы
         уже  обсудили. Режим  же мультизадачности будет рассматриваться в
         следующем разделе.

                ┌───────────────────┐
                │     Методы        │
                │  проектирования   │
                │                   │
                └─────────┬─────────┘
               ┌──────────┴────────────┐
               │                       │
         ┌─────┴─────┐            ┌────┴───┐
         │ синхронные│            │мульти- │
         │(однознач- │            │задачный│
         │ ные)      │            │режим   │
         └───────────┘            └───┬────┘
                        ┌─────────────┼────────────┐
                        │             │            │
                 ┌──────┴──────┐  ┌───┴───┐   ┌────┴─────┐
                 │упорядоченный│  │главный│   │цикличес- │
                 │опрос (без   │  │цикл с │   │кое плани-│
                 │прерываний)  │  │прерыва│   │рование   │
                 └─────────────┘  │ниями  │   └──────────┘
                                  └───────┘

             Рис. 5-9. Методы проектирования систем реального времени

             Пример упрощенной системы управления домашним хозяйством

              Давайте рассмотрим упрощенную  систему  управления  домашним
         хозяйством, предназначенную следить за расходом тепла, предупреж-
         дать о пожаре и управлять орошением газонов,  что показано на ри-
         сунке 5-10.  Температура регистрируется температурно-чувствитель-
         ным   устройством.    Некоторый    преобразователь    преобразует
         температуру из аналогового в цифровое значение.  Это значение мо-
         жет быть считано из порта и сравнено с  образцовой  температурой.
         Значение  образцовой  температуры может задаваться пользователем.
         Для простоты давайте будем считать это значение постоянной  вели-
         чиной с именем ref_temp.  Программа adjust_temp,  предназначенная
         управлять температурами,  задана в листинге 5-2. Отметим, что эта
         программа  содержит только важные части программы.  Менее сущест-
         венные подробности (такие,  как объявление и инициализация  пере-
         менных) здесь не показаны.


                                      - 5-21 -
                                    образцовая
                                    температура
                      преобразова-                 преобразова-
                      тели                         тели
          от датчика  ┌────────┐   ┌─────────┐   ┌─────────┐   к наг-
          температур  │        │   │         │   │         │   рева-
          ───────────│        │──│         │──│         │──телю
                      └────────┘   │         │   └─────────┘
          от датчика  ┌────────┐   │компьютер│   ┌─────────┐   к сигна-
          огня(дыма)  │        │   │         │   │         │   лу тре-
          ───────────│        │──│         │──│         │──воги
                      └────────┘   │         │   └─────────┘
          от таймера реального     │         │   ┌─────────┐   к венти-
          времени                  │         │   │         │   лю оро-
          ────────────────────────│         │──│         │──шения
                                   │         │   └─────────┘   газонов
                                   └─────────┘

                Рис. 5-10.  Упрощенная система управления домашним
                                    хозяйством

                        Листинг 5-2. Программа adjust_temp
         ----------------------------------------------------------------
            adjust_temp:
                    ; delta- для избежания колебаний температур
                    ; ref_temp- значение образцовой температуры
                    ; temp_port- порт, через который выводится
                    ;            информация  по  управлению
                                 температурой
                    ; inc_cod-  сегмент программы для повышения
                                температуры
                    ; dec_code- сегмент программы для снижения
                                температуры
                    ; read_port- порт, через который ведется
                    ;            считывание значений текущей
                                 температуры
                    in   al,read_port ; считать температуру в AL
                    mov  bl,ref_temp  ; получить ref_temp в BL
                    mov  cl,bl  ; BL будет использоваться позднее
                    sub  cl,delta     ; ref_temp - delta в CL
                    cmp  al,cl        ; текущая температура меньше
                                      ; ref_temp - delta ?
                    jl   increase     ; тогда увеличить температуру
                    add  bl,delta     ; ref_temp + delta в BL
                    cmp  al,bl        ; текущая температура больше
                                      ; ref_temp + delta ?
                    jg   decrease     ; тогда уменьшить температуру
                    ret               ; сделано
            decrease:
                    mov  al,dec_code  ; dec_code
                    out  temp_port,al ; temp_port
                    ret
            increase
                    mov  al,inc_code  ;inc_cod подлежит выводу в
                    out  temp_port,al ; temp_port
                    ret
         ----------------------------------------------------------------

                                      - 5-22 -

              Отметим, что нагревание не меняется, когда температура оста-
         ется  в пределах диапазона от ( ref_temp - delta) до (ref_ temp +
         delta),  как это показано на рисунке 5-11.  Здесь значение  delta
         представляет собой маленькую величину допуска (например,  в одном
         градусе 1F * и он используется для избежания температурных  коле-
         баний.
         ──────────────────────────────
            * Один градус по Фаренгейту (1F) приблизительно равен по Цель-
              сию 0,56 градуса (0,56 C) (Примеч. переводчика.)


                              Образцовая температура
                                    (ref_temp)

                                        │
             низкая темпера-            │            высокая темпера-
                тура         │─delta──│──delta─│ тура
            ─────────────────┼──────────┼──────────┼───────────────────
                   повышение       температура       уменьшение
                  температуры      не меняется       температуры

             Рис. 5-11. Использование допуска delta небольшой величины
                       для избежания температурных колебаний

              Для того,  чтобы понять концепцию колебаний,  будем считать,
         что значение delta равно нулю.  В этом случае температуру следует
         корректировать  всякий  раз,  когда  она  точно не равна значению
         ref_temp. Предположим,  что  температура оказалась немного меньше
         значения ref_temp.  Теперь при обращении к процедуре будет предп-
         ринято действие, повышающее температуру. В результате температура
         повысится до значения, превышающего величину ref_temp. Теперь при
         очередном вызове процедуры будет предпринято действие, понижающее
         температуру. В результате таких действий температура будет то по-
         вышаться, то понижаться попеременно. Вот это и называется колеба-
         нием температур. Таким образом, применение величины delta (малой,
         но  не равной нулю) способствует погашению колебаний,  потому что
         температура не меняется при этом в небольшом  диапазоне ref_temp.
             Теперь давайте  рассмотрим  программу  по активизации сигнала
         пожарной тревоги. Нам следует только послать какой-нибудь сигнал,
         который отключит потом сигнал о пожаре.  Эта процедура под назва-
         нием initiate_alarm представлена в Листинге 5-3.
                      Листинг 5-3. Программа initiate_alarm:
         ---------------------------------------------------------------
         initiate_alarm:
                         ; alarm_port -порт для подачи сигнала тревоги
                         ; activate_signal  -  сигнал для активизации
                                               тревоги
                         mov        al,activate_signal
                         out        alarm_port,al
                         ret
         ---------------------------------------------------------------

              Далее рассмотрим  процедуру  управления  орошением  газонов.
         Предположим,  что нам нужно поливать газоны по вечерам с 18.30 до
         20.30.  Это требование диктует нам необходимость пользоваться ре-
         альным  временем,  то есть часами.  В листинге 5-4 показана такая

                                      - 5-23 -
         процедура, имеющая имя water_lawn.

                        Листинг 5-4. Программа  water_lawn
         ----------------------------------------------------------------
            water_lawn:
                        ; start_hours -  компонент "часы" начального
                        ;                времени
                        ; start_mins  -  компонент "минуты" начального
                        ;                времени
                        ; stop_hours -   компонент "часы" конечного
                        ;                времени
                        ; stop_miins -   компонент "минуты" конечного
                        ;                времени
                        ; water_port -   порт для управления
                        ;                орошением газона
                        ; start_code   - программа  начала
                        ;                орошения
                        ; stop_code -    программа окончания
                        ;                орошения
                        ; watering  -    переменная состояния,
                        ;                говорящая о том, что
                        ;                началось ли орошение
                        ;                или нет

                   mov   ah,2ch         ; функция считывания времени
                   int 21h              ; обращение к DOS при возврате
                                        ; cx содержит часы и минуты
                   mov   bl,watering    ; началось ли орошение?
                   test  bl,1           ;
                   jz    start_or_not     нет, тогда начать орошение
                   mov   dh,stop_hours  ; не пора ли кончить поливку?
                   mov   dl,stop_mins   ; сравнивать со временем ос-
                                          танова
                   cmp   cx,dx          ; пора прекратить орошение?
                   jl    exit       ; нет,пусть орошение продолжается
                   mov   watering,0     ; орошение прекращено
                   mov   al, stop-code  ; вывести код останова
                   out   water_port, al ; через water_port
                   ret                  ; выполнено
            start_or_not:
                   mov   dh,start_hours ; время начала находится в DX
                   mov   dl,start_mins  ;
                   cmp   cx,dx          ; пора ли начать орошение?
                   jl    exit           ; нет еще
                   mov   watering,1     ; да, орошение началось
                   mov   al,start_code  ; вывести код пуска
                   out   water_port,al  ; через water_port
            exit:
                   ret                  ; выполнено
         ----------------------------------------------------------------

              В этой программе предполагается, что время остановки (значе-
         ние "stop_hours:stop_mins") больше времени начала орошения  (зна-
         чения   "start_hours:start_mins).  Глобальная булевая  переменная
         "watering" используется здесь таким образом, что сигнал на запуск
         или останов поливки должен выдаваться только один раз в день.
             Теперь, когда у нас есть индивидуальные  процедуры управления

                                      - 5-24 -
         нагреванием,  пожарной тревогой и орошением газонов, давайте про-
         ведем исследование требований ко всей системе. Температуру следу-
         ет регулировать повторно каждые несколько минут.  Сигнал пожарной
         тревоги должен раздаваться сразу же после обнаружения  огня  (или
         дыма) - здесь недопустима задержка!
              Газон должен орошаться ежедневно в течение двух часов  начи-
         ная  с 18.30.  Мы предположили,  что соответствующие устройства и
         преобразователи для ввода/вывода данных уже связаны с процессором
         через интерфейс. Теперь мы готовы обсудить общую конструкцию сис-
         темы реального времени для упрощенного  управления  домашним  хо-
         зяйством.
              Мы будем рассматривать три синхронных метода: упорядоченного
         опроса (без прерываний),  основного цикла  с  прерываниями  цикли-
         ческих планировщиков. Как мы уже упоминали, синхронные методы тре-
         буют наличия только одного и задачи в системе для их реализации.

                           Система упорядоченного опроса

              Система упорядоченного  опроса состоит из главного цикла,  в
         течение которого все устройства последовательно опрашиваются (или
         вызываются нужные процедуры) по одному.  Программа для упрощенной
         системы домашнего контроля использует эту структуру,  что демонс-
         трируется программой в системе 5-5.
              В этой программе слова  "wait_loop"  обозначают  программный
         цикл, в котором происходит ожидание в течение некоторого времени.
         В общем случае может потребоваться вводить "передышки"  в системы
         опроса.  Для того, чтобы понять необходимость введения таких "пе-
         редышек",   рассмотрим пример управления управляемой  компьютером
         автомашины.  Предположим,  что компьютер решил повернуть машину в
         право и выдал команду: "поворот направо". Колеса начали выполнять
         поворот, но в этот момент, предположим, компьютер продолжает про-
         верять и оценивать входные данные  с  все  большей  скоростью.  И
         компьютер  продолжает  считать,  что машина еще не поворачивает и
         повторно посылает команду поворота вправо.  Прежде чем  осознать,
         что машина уже поворачивает,  компьютер успевает выдать несколько
         команд "поворота вправо", что приведет к заносу машины. Чтобы из-
         бежать подобной ситуации компьютер должен быть так запрограммиро-
         ван,  чтобы он имел возможность делать паузы после выдачи  команд
         для их выполнения. Но в случае управления домашним хозяйством та-
         кие паузы недопустимы,  так как обнаружение пожара требует немед-
         ленных,  а не "отложенных" действий, как уже было упомянуто выше.

                         Листинг 5-5. Программа ref_level
         ----------------------------------------------------------------
                   ; ref_level - опасный уровень дыма
            forever:
                   call    adjust_temp     ;вызов стандартной подпрог-
                                           ;раммы
                   in      al, smoke_port  ;получить значение уровня
                                           ;дыма
                   cmp     al, ref_level   ;проверка наличия опасности
                   jl      no_danger
                   call    initiate_alarm  ;включить сигнал тревоги
            no_danger:
                   call    water_lawn      ;вызов стандартной подпрог-

                                      - 5-25 -
                                           ;раммы
                   call    wait_loop       ;пауза (отсутствие действий)
                   jmp     forever
            wait_loop:
                   mov     cx, 0ffh        ;значение в cx определяет
                                           ;время ожидания
            wait:
                   loop    wait
                   ret
         ----------------------------------------------------------------

              Преимуществами описанного метода являются:
            . простая конструкция системы
            . быстрое время ответа.

              Недостатками же являются следующие:
            . процессор всегда находится в занятом состоянии, поскольку он
              полностью посвящен опросу портов
            . время циклов может стать чрезмерным по мере возрастания  ко-
              личества опрашиваемых устройств
            . время тратится на опрос портов,  большую часть времени нахо-
              дящихся  в неактивном состоянии,  например,  датчиков дыма в
              нашем примере.

                           Основной цикл с прерываниями

              Структуру метода основного цикла с прерываниями можно  расс-
         матривать  как  систему  опроса с прерываниями.  Как и в случае с
         чистой системой опроса,  в этом методе используется понятие  "ос-
         новного цикла".  Во время этого цикла может ничего не делаться, а
         может что-то выполняться,  что будет прерываться так  часто,  как
         того  требуют  внешние  устройства или часы (таймер).  Как только
         возникает какое-либо событие,  прерывание посылается в процессор.
         Отдельная  стандартная  программа  обслуживания  прерывания (ISR)
         связывается с каждым видом прерывания.
              Давайте вернемся к примеру упрощенной системы управления до-
         машним хозяйством.  В нашем примере прерывания  разработаны  так,
         что работа процессора прерывается, когда:
            1. температура  выходит за  пределы диапазона от (ref_temp -
               - delta) до (ref_temp + delta)
            2. уровень дыма выходит за пределы безопасности.

              Процедуры adjust_temp и  initiate_alarm  представляют  собой
         две программы ISR,  соответствующие указанным двум видам прерыва-
         ний.
              В общем случае прерывание не может быть связано с процедурой
         water_lawn,  потому что эта процедура использует функцию прерыва-
         ния "int 21h" операционной системы MS-DOS для определения времени
         суток. Поскольку программа операционной системы MS-DOS не являет-
         ся реентерабельной, программа ISR не может произвести другое пре-
         рывание  в  операционной  системе   MS-DOS.   Поэтому   процедура
         water_lawn не разрабатывается в виде программы ISR, но вызывается
         из главного программного цикла main_loop:

          forever:
              call    water_lawn   ;
              call    wait_loop    ; для протекания некоторого времени

                                      - 5-26 -
                           ; до повторного вызова процедуры water_lawn
              jmp     forever

              Стандартные программы  обслуживания  прерываний   называются
         adjust_temp и initiate_alarm. Текст программы ISR такой же, что и
         для уже описанных процедур, со следующей разницей:

            1. Программа ISR использует команду IRET вместо команды
               RET в  обычной  процедуре.  Команда IRET осуществляет
               возврат управления в главную программу по завершении
               выполнения программы ISR.
            2. Вы должны сохранять регистры, используемые программой
               ISR. Регистры  должны восстанавливаться до выполнения
               команды IRET.
            3. Прерывания должны разрешаться/запрещаться.

              Программа adjust_temp  должна разрешать использование преры-
         ваний.  В противном случае сигнал об обнаружении дыма  может  ос-
         таться  нераспознанным,  что неприемлемо.  Аналогично,  программа
         initiate_alarm должна запрещать управления,  потому что она явля-
         ется  процедурой  наивысшего  приоритета  и не должна прерываться
         вплоть до возбуждения сигнала о пожаре.
              Указанные программы  ISR должны быть связаны с соответствую-
         щими уровнями прерываний.  Связь эта может быть реализована через
         функцию  "Установить  вектор  прерываний"  в операционной системе
         MS-DOS. Функция прерывания "int 21h" с кодом функции в AH=25h ис-
         пользуется для этой цели. DS:DX указывает на программу ISR до вы-
         полнения запроса.

                   mov     ah,25h        ; функция= установить вектор
                                         ;          прерываний
                   mov al,int_level      ; уровень  прерываний   в   AL
                   mov dx,sadjust_temp
                   mov ds,dx             ; адрес программы ISR в DS:DX
                   mov dx,offset adjust_temp
                   int 21h               ; обращение к операционной
                                         ; системе DOS

              Подобные запросы  к  функциям  должны выполняться для других
         программ ISR в системе.
              Преимуществами этого подхода являются:
            . на опрос неактивных устройств не тратится время
            . на  любое  количество асинхронных внешних событий (если
              большинство устройств неактивны) поступает очень быстрый от-
              вет
            . более простой текст программ, поскольку каждая программа ISR
              пишется независимо от других.

              Недостатками этого подхода являются:
            . сложное взаимодействие между программой ISR  и  главной
              программой
            . сложное  протекание  главной  программы,  что  является
              следствием асинхронной природы возникновения событий.




                                      - 5-27 -
                             Циклические планировщики

              Для того,  чтобы  понять  работу  циклических  планировщиков
         рассмотрим систему управления процессом.  Требуется,  чтобы конт-
         роль и управление происходили бы каждые 100 мсек.  Другими харак-
         теристиками,  требующими контроля, являются давление, влажность и
         химический состав. Эти характеристики требуют менее частого конт-
         роля, чем температура процесса.
              Предположим, что процедура temp_control требует 10  мсек для
         контроля и управления температурой. Процедура temp_control должна
         выполняться каждые 100 мсек, потому что температуру следует конт-
         ролировать каждые 100 мсек.
              Аналогичным образом процедуры B,  C,  и D контролируют и уп-
         равляют тремя другими характеристиками, как это показано в табли-
         це 5-6. Далее, предположим, что процедуры C и D выполняются раз в
         каждые  300 мсек, а процедура  B  выполняется  два  раза   каждые
         300 мсек.

                                                         Таблица 5-6
                     Процедуры, требуемые для данного примера
         ┌───────────────┬───────────┬──────────┬────────────────────┐
         │               │ Контроли- │  Время   │ Требуемые повторы  │
         │ Имя процедуры │ руемая    │  выпол-  ├────────────────────┤
         │               │ характе-  │  нения   │время   комментарий │
         │               │ ристика   │          │                    │
         ├───────────────┼───────────┼──────────┼────────────────────┤
         │  temp_control │Температура│ 20 мсек  │100 мсек  Изменения │
         │               │           │          │        не разрешены│
         │  B            │ Давление  │ 40 мсек  │150 мсек  Изменения │
         │               │           │          │          разрешены │
         │  C            │ Влажность │ 60 мсек  │300 мсек  Изменения │
         │               │           │          │          разрешены │
         │  D            │ Химический│ 38 мсек  │300 мсек  Изменения │
         │               │ состав    │          │          разрешены │
         └───────────────┴───────────┴──────────┴────────────────────┘

              Такая система реального времени может быть построена при ис-
         пользовании конструкции циклического планировщика, представленной
         блок-схемой 5-1.  Здесь имеется три цикла:  0,  1 и 2. Последова-
         тельность выполнения циклов такова: 0, 1, 2 и 0, 1, 2 повторно.
              Отметим, что  процедура  temp_control выполняется один раз в
         каждом цикле. Каждый цикл требует 100 мсек для своего выполнения,
         куда  включается время,  требуемое для выполнения главного цикла,
         время, требуемое для выполнения процедуры  temp_control  и  время
         "передышки",  появляющейся  в  конце  каждого цикла.  "Передышки"
         предназначены для синхронизации выполнения циклов с требованиями,
         предъявляемыми к временам, затрачиваемым на наиболее часто выпол-
         няемые процедуры (в нашем примере это относится к процедуре temp_
         control).

                                      - 5-28 -
         ┌──────────────────────────────────────────────────────────┐
         │                     ┌──────────┐                         │
         │                     │          │                         │
         │                     │   СТАРТ  │                         │
         │                     │          │                         │
         │                     └────┬─────┘                         │
         │                          │                               │
         │                     ┌─────────┐                         │
         │                     │          │                         │
         │                     │счетчик=0 │                         │
         │                     │          │                         │
         │                     └────┬─────┘                         │
         │   ┌─────────────────────>┤                               │
         │   │             ┌──────────────────┐                    │
         │   │             │счетчик= счетчик+1 │                    │
         │   │             │                   │                    │
         │   │             └────────┬──────────┘                    │
         │   │                      │                               │
         │   │                 ┌─────────┐                         │
         │   │           0     │переход по│  2                      │
         │   │       ┌─────────│счетчику  │───────┐                 │
         │   │       │ цикл 0  │на MOD3   │цикл 2 │                 │
         │   │       │         └────┬─────┘       │                 │
         │   │       │            1 │цикл 1       │                 │
         │   │  ┌─────────┐   ┌─────────┐   ┌─────────┐          │
         │   │  │temp_cont-│   │temp_cont-│   │temp_cont-│          │
         │   │  │rol       │   │rol       │   │rol       │          │
         │   │  │   20 мсек│   │   20 мсек│   │   20мсек │          │
         │   │  └────┬─────┘   └────┬─────┘   └────┬─────┘          │
         │   │       │              │              │                │
         │   │  ┌─────────┐   ┌─────────┐   ┌─────────┐          │
         │   │  │    B     │   │    C     │   │    В     │          │
         │   │  │    40мсек│   │    60мсек│   │    40мсек│          │
         │   │  └────┬─────┘   └────┬─────┘   └────┬─────┘          │
         │   │       │              │              │                │
         │   │  ┌─────────┐        │              │                │
         │   │  │    D     │        │              │                │
         │   │  │    38мсек│        │              │                │
         │   │  └────┬─────┘        │              │                │
         │   │       │              │              │                │
         │   │  ┌─────────┐   ┌─────────┐   ┌─────────┐          │
         │   │  │пауза на  │   │пауза на  │   │пауза на  │          │
         │   │  │   2 мсек │   │  20 мсек │   │ 40 мсек  │          │
         │   │  └────┬─────┘   └────┬─────┘   └────┬─────┘          │
         │   │                                                   │
         │   └─────────────────────────────────────┘                │
         │                      <-----                              │
         └──────────────────────────────────────────────────────────┘
                Блок-схема 5-1. Структура циклического планировщика

              В блок-схеме  5-1 показана концепция построения циклического
         планировщика без прерываний.  Во многих прикладных программах мо-
         жет  оказаться  необходимым использование прерываний,  которые бы
         сигнализировали  о наличии внешнего события,  требующего  к  себе
         немедленного  внимания.  Циклический планировщик может быть также
         построен с применением требований,  что показано на рисунке 5-12.
              На рисунке  5-12  (A) показано,  как мы гарантируем то,  что
         главный цикл требует 100 мсек для выполнения каждого  цикла, если
         не  возникает  прерывания.  Предположим,  прерывание возникает во

                                      - 5-29 -
         время выполнения процедуры temp_control.  Процедура  temp_control
         завершается и после этого обрабатывается прерывание.  После обра-
         ботки прерывания выполняется процедура  B.  Поскольку  невозможно
         предсказать момент возникновения прерывания, общее время выполне-
         ния каждого цикла также не может быть предсказано. Таким образом,
         время  выполнения  цикла циклическим планировщиком с прерываниями
         является неопределяемым.
              Преимуществами конструкции циклического планировщика являют-
         ся:
            . Простая форма мультизадачности.
            . Определенность рабочего времени за исключением случаев
              с прерываниями.

              Недостатками этой конструкции являются:
            . Неэффективность  -  все  циклы  должны выполняться до
              полного своего завершения.
            . Время выполнения цикла увеличивается с увеличением чис-
              ла циклов.
            . Трудность  проведения  модификаций  и сохранения тех же
              временных параметров.



                                                               
                │                │                 │    проис-  │
                │                │                 │    ходит   │
           ┌─────────┐          │            ┌─────────┐преры-│
           │temp_cont-│          │            │temp_cont-│вание │
           │rol       │          │            │rol       │──── │
           │   20 мсек│          │            │   20 мсек│      │
           └────┬─────┘          │            └────┬─────┘      │
                │                │                 │            │
           ┌─────────┐                       ┌─────────┐ общее вре-
           │    B     │     общее время       │прерывание│ мя цикла
           │    40мсек│    цикла = 100 мсек   │обслужено │ превышает
           └────┬─────┘                       │   20 мсек│ 100 мсек
                │                │            └────┬─────┘ из-за на-
           ┌─────────┐          │            ┌─────────┐ личия пре-
           │    D     │          │            │    B     │ рывания
           │    38мсек│          │            │   40 мсек│      │
           └────┬─────┘          │            └────┬─────┘      │
                │                │                 │            │
           ┌─────────┐          │            ┌─────────┐      │
           │пауза на  │          │            │    D     │      │
           │    2мсек │          │            │  38 мсек │      │
           └────┬─────┘          │            └────┬─────┘      │
                │                │                 │            │
                                                             
            А. Цикл 0, если преры-       Б. Цикл 0 при наличии пре-
               ваний не произошло           рываний (неопределяемый)
               (определяемый)
           Рис. 5-12.  Циклический планировщик при наличии  прерываний:
                            неопределяемое время цикла


                                      - 5-30 -
                          Выбор метода построения системы

              Выбор структуры системы зависит от внешней среды, аппаратных
         средств,  а также от временных требований, предъявляемых к систе-
         ме.  Выбор также зависит от того,  будут ли использоваться только
         уже имеющиеся в наличии технические средства или планируется  ис-
         пользование  новых  аппаратных средств.  Если будут приобретаться
         новые устройства,  то мы можем рассматривать  и  применение  уст-
         ройств, работающих под управлением прерываний, и устройств, рабо-
         тающих без  прерываний.  Если,  однако,  мы пользуемся только уже
         имеющимися аппаратными средствами,  мы не можем выбирать: исполь-
         зовать или нет прерывания.  Например,  некоторое устройство может
         не  предусматривать  работу  по прерыванию.  Тогда мы сами должны
         применить метод упорядоченного опроса для этого устройства.
              В некоторых  прикладных  программах  выбор может диктоваться
         требованиями, предъявляемыми к временным характеристикам, как это
         делается в простом примере,  предложенном  ниже. Принятие решения
         о выборе метода построения системы на практике, конечно, является
         более сложным занятием.
              Предположим,  что  мы  будем работать в операционной системе
         MS-DOS  под   управлением   процессора   8088,   имеющего частоту
         4,77 МГц.  Предположим также,  что нам нужно собирать  данные  со
         скоростью  35000 байтов в секунду.  Отметим по предыдущей таблице
         5-5, что при наличии прерываний  максимальная  скорость  передачи
         данных  равна  30 КГц.  Это значит,  что мы не можем использовать
         прерывания.  Тем не менее, системы опроса могут работать с макси-
         мальной  скоростью  передачи данных,  равной 60 КГц.  Более того,
         данные могут храниться при этом в основной памяти.
              И, наконец,  если требуется, чтобы разные процедуры выполня-
         лись с разной частотой, можно в этом случае применять циклические
         планировщики.
              Все три рассмотренных метода являются синхронными  (работаю-
         щими только с одной задачей,  то есть без мультизадачности). Ниже
         мы рассмотрим мультизадачный режим в операционной системе MS-DOS.

                Мультизадачный режим в операционной системе MS-DOS

              В общем  случае  операционная система MS-DOS не поддерживает
         работу в мультизадачном режиме,  несмотря на то, что операционная
         система  MS-DOS для персональных компьютеров IBM PC/AT предусмот-
         рены условия  работы в простом мультизадачном  режиме.  Мультиза-
         дачность  представляет собой очень мощное средство для систем ре-
         ального времени.  Оно  упрощает  структуру  системы  и  позволяет
         разрабатывать большие, сложные системы.
              Системы реального времени нацелены на  обработку  нескольких
         независимых событий, происходящих в произвольные моменты времени.
         Эти события могут возникать асинхронно и одновременно.  Это  зна-
         чит, что одно событие может происходить во время обработки друго-
         го.
              Мультизадачность может  использоваться  в таких системах для
         упрощения программного обеспечения.  Вместо  написания  отдельной
         программы  для управления всеми событиями вы можете написать  не-
         сколько программ, каждая из которых будет управлять отдельным со-
         бытием.  Все  эти программы могут одновременно выполняться компь-
         ютером,  поддерживающим мультизадачность. Эти отдельные программы
         называются  "задачами".  Поскольку они одновременно выполняются в
         компьютере, эта структура называется мультизадачной. Многие зада-

                                      - 5-31 -
         чи  выполняются  компьютером одновременно,  аналогично тому,  как
         жонглер удерживает много шаров в воздухе в одно и тоже время. А в
         действительности же,  в отдельный момент времени, конечно, выпол-
         няется только одна задача.

                  Условия существования мультизадачного режима в
                         персональном компьютере IBM PC/AT

               Система BIOS персонального компьютера IBM PC/AT  предусмат-
         ривает наличие "крюков" для применения планировщика. Поддерживае-
         мые функции являются очень простыми,  но могут использоваться для
         проектирования  и  реализации  программы,  поддерживающей простые
         возможности мультизадачности (обсуждение этих  возможностей лежит
         за пределами задач настоящей главы). Разработка общецелевого пла-
         нировщика в операционной системе MS-DOS  является  очень  трудным
         процессом,  поэтому  мы  рекомендуем  разрабатывать  планировщик,
         предназначенный только для вашей прикладной программы.
              Прерывание 15h  предусматривается  для поддержания мультиза-
         дачного планировщика.  Исходно планировщик настраивает  сервисную
         стандартную программу на обработку прерывания 15h.
              Планировщик может поддерживать такие  простые  функции,  как
         переключение задач и циклы простоев.
              Одно из средств персонального компьютера  IBM  PC/AT  должно
         реализовать  циклы простоя,  выдает прерывания 15h с шестнадцати-
         ричным значением кода функции "90 hex" в AH.  В этом месте плани-
         ровщик должен сохранить состояние текущей задачи. Эта схема дейс-
         твий позволяет выполнять задачи "с перекрытием" или " с наложени-
         ем", когда присутствует цикл простоя.
              Ожидающая задача может позднее возобновить свою  работу  при
         помощи планировщика, когда прерывание 15h с кодом функции 91h по-
         явится в AH. В этом месте планировщик должен будет запомнить, что
         задача будет готова возобновить свою работу позднее.
              Этим рассуждением завершается наше  изучение мультизадачного
         режима  в операционной системе MS-DOS.  Нам пришлось ограничиться
         коротким простым разговором,  потому что мультизадачный  режим  в
         операционной  системе  MS-DOS  для  персонального  компьютера IBM
         PC/AT очень невелик и трудно реализуем.

                                    Заключение

              Система реализации  времени взаимодействует напрямую с внеш-
         ней средой и всегда должна удовлетворять некоторым временным  ог-
         раничениям.  При классификации систем реального времени мы разби-
         ваем их на следующие три категории в зависимости  от  направления
         потока данных:
            . Однонаправленные системы
            . Двунаправленные потенциально устойчивые системы
            . Двунаправленные потенциально неустойчивые системы.

              Мы рассматривали скорость,  как требование операционной сис-
         темы VS-DOS, которое должно использоваться в прикладной программе
         реального времени. В дополнение к частоте синхронизации, скорость
         работы  операционной  системы  MS-DOS зависит от передачи данных.
         Используя  примеры,  мы  проиллюстрировали  использование  портов
         центрального  процессора  CPU  и  последовательных и параллельных
         портов для обмена данными с внешней средой. Мы также обсудили три
         основных метода передачи данных в компьютер и из него:

                                      - 5-32 -
            . Упорядоченный опрос
            . Метод прямого доступа DMA
            . Метод использования прерываний.

              Мы объяснили важность времени ответа во время принятия реше-
         ния  о  возможности  использования  операционной  системы MSDOS в
         прикладных программах реального времени.  Были описаны три  синх-
         ронных метода проектирования систем реального времени:
            . Упорядоченного опроса
            . Главного цикла с прерываниями
            . Циклического планирования.

              При помощи примеров и программ на языке Ассемблер мы  проде-
         монстрировали,  что  операционная  система MS-DOS может использо-
         ваться для сравнительно простых,  но полезных прикладных программ
         реального времени.  И,  наконец,  мы рассмотрели поддержку режима
         мультизадачности в операционной системе MS-DOS.
