Часть I.
Возможность использования Windows NT в качестве ОС реального времени
В последнее время приобретают
популярность расширения реального времени для Windows NT. Это обусловлено,
с одной стороны, расширением областей применения компьютерного управления,
с другой стороны - сравнительно малой известностью и высокой стоимостью
специализированных операционных систем реального времени. Интерфейс Win32
является стандартным и хорошо знакомым большому числу программистов. Под
NT существует огромное число готовых приложений (в том числе коммуникационных),
а также популярные средства разработки. К сожалению, Windows NT
"в чистом виде" нельзя отнести к операционным системам реального времени.
Обсуждению причин этого посвящены статьи Martin Timmerman и Jean-Christophe
Monfret в Real-Time Magazine Q21997 [1,2].
Вот некоторые из них: недостаточное количество real-time приоритетов, отсутствие
наследования приоритетов, как средства борьбы с инверсией приоритетов,
неподходящая для RTOS система обработки прерываний. В Windows NT доступ
к прерываниям осуществляется из драйвера ядра, а сами прерывания обрабатываются
в два этапа: сначала вызывается очень
короткая Interrupt Service Routine (ISR), осуществляющая критическую обработку,
основная обработка прерывания происходит в Deferred Procedure Call (DPC).
Все DPC выполняются с одинаковым уровнем приоритета в порядке поступления
(FIFO).
Таким образом, время окончания
обработки вашей DPC оказывается зависимым непредсказуемым образом от наличия
в системе других драйверов и их активности. Для систем с жестким детерминизмом
необходимо точно знать максимальное время от момента возникновения прерывания
до входа в процедуру обработки и гарантировать его непревышение.
RTX - real-time extension для Windows NT от компании VenturCom
Одним из возможных решений является
использование совместно с Windows NT подсистемы реального времени, исполняющейся
на том же процессоре (если процессор один) или на выделенном процессоре(-ах)
(если их несколько). Этот подход использован фирмой VenturCom в продукте
RTX (Real Time Extension). Сущность подхода заключается в использовании
модифицированного HAL (Hardware Abstraction
Level). Изменять kernel Microsoft не разрешает, а исходный код HAL предоставляет
своим партнерам, одним из которых является VenturCom.
После установки RTX стандартная
NT Workstation или Server превращается в операционную систему реального
времени с жестким детерминизмом (hard real-time). Сама NT об этом, правда,
не подозревает. Ни ядро, ни исполняющая подсистема NT не были изменены.
Подсистема реального времени видна из Windows NT, как еще один драйвер
устройства. Схема функционирования RTX в составе Windows NT представлена
на рисунке.
В системе появляется планировщик
задач реального времени. Новый HAL по прерыванию от часов реального времени
передает управление этому планировщику, который следит за очередью задач
реального времени, находящихся в системе и выделяет им время в соответствии
с приоритетом. В RTX существует 128 фиксированных приоритетов для задач
реального времени. Если в очереди таких задач нет, то управление передается
стандартному планировщику NT. При этом времена исполнения кодов модифицированного
и оригинального HAL совпадают, т.е. присутствие RTX не сказывается на производительности
Windows в отсутствие real-time процессов. Однако, если real-time процессы
будут занимать все процессорное время, то Windows NT не получит управления
и окажется подвешенной. В принципе, если данная ситуация не входит в планы
разработчика, ее можно предупредить, установив в опциях настройки RTX "сторожевой"
таймер, срабатывающий, если один поток занимает CPU
больше определенного времени.
Все программы, исполнявшиеся
на машине до установки RTX, будут по-прежнему на ней исполняться, но, к
сожалению, не в real-time режиме. Такие программы нужно писать и компилировать
самому с помощью поставляемых VenturCom библиотек, содержащих функции Real-Time
API (RTAPI).
Создание приложений реального времени с помощью RTAPI
Одним из преимуществ RTX, является
возможность использования стандартных компиляторов для создания real-time
программ и стандартного софта (commercial off the shelf, COTS), взаимодействующего
с ними и работающего на той же машине. Действительно, для создания real-time
программ Вы можете использовать Visual C++ 4.2 или 5.0. Кроме того, при
создании Win32-части приложения можно использовать любой компилятор, понимающий
вызовы функций Win32 API (например C++ Builder). Один и тот же код можно
откомпилировать как Win32 и как RTSS приложение с расширениями .exe и .rtss
соответственно. Exe-вариант программы является приложением "мягкого" реального
времени.
Функции, входящие в RTAPI
на данный момент, можно разделить на 4 группы. К первой относятся функции,
чья семантика и/или поведение отличается от функций Win32 API. В названии
всех функций этой группы присутствует префикс Rt (например RtAttachInterruptVector)
Во вторую входят функции, чья семантика и функциональность совпадают с
функциями из Win32 API, но они работают в RTSS подсистеме. В третью группу
входят функции runtime C библиотеки. К последней (но не по важности) группе
относятся функции т.н. Windows NT Driver
IPC API, позволяющие rtss и Win32 потокам взаимодействовать с обычными
драйверами, работающими в режиме ядра.
Программы, скомпилированные
как rtss, могут содержать только функции, входящие в RTAPI, На программы,скомпилированные
как exe, такое ограничение не распространяется.
Разработку любого RTSS приложения
удобно начинать с exe-варианта. Это позволяет использовать отладочные средства
Visual Studio (или другого используемого компилятора). Например, если Вы
пишете rtss-драйвер, обслуживающий прерывания, то скомпилировав его как
Win32 программу, можно установить точку останова в процедуре обработки
прерывания (в RTX обработка прерываний не разделяется на ISR и DPC, а выполняется
одним потоком (см. ниже)) и сделать пошаговый прогон всей процедуры. Программы,
скомпилированные как rtss, при необходимости отлаживаются с помощью WinDBG
(на двух компьютерах) или SoftIce (на одном компьютере).
Обычно (хотя и не обязательно)
приложение состоит минимум из двух частей - real-time процесса, исполняющегося
в RTSS подсистеме и исполняющего критическую по времени работу и exe-процесса,
исполняющегося в Win32, взаимодействующего с rtss-частью с помощью средств
межпроцессного взаимодействия. Exe-часть может взаимодействовать с сервисами
NT, другими программами, пользователем.
Назад | Содержание | Вперед