Растущая популярность ОС Windows NT подтолкнула ряд компаний к использованию этой системы в приложениях, где влияние Microsoft было еще крайне незначительно. Это прежде всего рынок встраиваемых систем и систем реального времени. Два программных продукта - Component Integrator 3.4 и RTX 4.1, выпущенных американской компанией VenturCom, служат подтверждением тому, что имеющийся в NT потенциал может побудить разработчиков взглянуть на эту ОС с иной точки зрения.
Какую бы область индустрии мы ни взяли, нетрудно заметить, что сегодня набирает силу процесс интеграции компьютерной техники с выпускаемой производителями аппаратурой. Причем интеграции в буквальном смысле слова - компьютер все чаще является составной частью какого-нибудь изделия, будь то медицинская техника или сетевое оборудование, игровая приставка или WEB-телевизор. Очевидно, что развитие Internet и связанное с этим стремление соединить все со всем способно вызвать к жизни множество примеров подобного "воссоединения". Было бы неплохо, если бы специализированные устройства могли легко обмениваться данными с существующими компьютерными системами, как корпоративными или промышленными, так и персональными. Это прежде всего означает, что операционная система, под управлением которой функционируют эти устройства должна обеспечивать эффективные средства взаимодействия с семейством систем и сред Windows, а еще лучше, ничем от них не отличаться.
Решение этой проблемы позволило бы также ускорить процесс создания приложений для специализированных систем. Значение этого шага трудно переоценить, поскольку разработка ПО занимает сегодня доминирующее положение в изготовлении конечного продукта. В то время как все системы имеют конкретное предназначение, решают задачи управления и обладают отдельными характеристиками надежности традиционных встраиваемых систем, современные устройства включают в себя дополнительные возможности: сетевой интерфейс, интерфейс с оператором и, что самое главное, используют для создания приложений коммерческое программное обеспечение.
Рост доли ПО во встраиваемых системах и соотвественно быстрое увеличение стоимости разработки программного обеспечения для этих систем привели к радикальным изменениям в процессе разработки соответствующих приложений. Сегодня создание кода на языках программирования высокого уровня типа Cи и С++ остается пока важным аспектом для всех приложений, однако все больше разработчиков выбирают для использования стандартное коммерческое ПО, дабы насколько возможно уменьшить затраты на разработку и время выхода продукта на рынок. Успех такой методики зависит от критического фактора - выбора ОС для встраиваемых компьютерных систем. Этот выбор очень важен, потому что он в значительной степени определяет доступность программного и аппаратного обеспечения.
Многие сегодня предпочитают Windows NT, лучшую из семейства продуктов Windows операционную систему, обладающую интерфейсом программирования WIN32 API и дополненную тысячами приложений, созданными с использованием этого стандарта. Программные драйверы для NT постепенно становятся нормой для новых аппаратных платформ и периферии (практически во всем мире ПК), позволяя разработчикам выбирать любые изделия из широкого диапазона аппаратного обеспечения. В то же время в Windows NT отсутствуют некоторые особенности, которые важны для использования во встраиваемых системах.
Первый критический фактор - поддержка работы в реальном времени, когда приложения используются для наблюдения или управления реальными физическими процессами, что требует соответствующего быстродействия. Вторая особенность - поддержка аппаратных конфигураций, отличных от конфигураций настольных компьютеров. Многие встраиваемые системы требуют работы без монитора или клавиатуры, поддержки FLASH диска, поддержки специальной шины (например, VME) и т.п. Эти особенности, по вполне понятным причинам, отсутствуют в Windows NT, предназначенной для использования с офисными ПК. Третье критическое положение - сам факт, что размер загрузочного модуля Windows NT, ее сложность и ориентация на ПК крайне затрудняют использование этой ОС во встраиваемых приложениях.
Стандартная поставка Windows NT занимает несколько сотен мегабайт дискового пространства, поэтому совершенно не подходит для систем с небольшим объемом памяти. Кроме того, управление множеством настраиваемых конфигураций Windows NT требует хранения сотен файлов и переменных конфигураций - ручное управление конфигурацией очень дорого и полно ошибок, поэтому над автоматизацией этой задачи постоянной бьются разработчики. Сегодня ряд компаний работает над решением указанных проблем, а подход, предложенный VenturCom стал фактически стандартом в этой области. Два программных продукта, Component Integrator и RTX, позволяют снять большинство ограничений, которые мешают использовать Windows NT в системах жесткого реального времени и встраиваемых конфигурациях.
1. Component Integrator
Продукт Component Integrator (CI) - это основанный на графическом интерфейсе удобный инструмент, предназначенный для проектирования, конфигурирования, расширения и создания систем на основе Windows NT. Версия СI 3.4 логически разделяет Windows NT на более чем 50 компонентов (и их конфигураций), необходимых для поддержки встраиваемых приложений. CI 3.4 (рис. 1) создает предварительно сконфигурированные, загрузочные ОЕМ гибкие диски, сетевые образы, CD-ROM диски или диски для заводской установки.
Структура Component Integrator 3.4
Component Integrator позволяет выбирать для установки только компоненты NT, необходимые для работы целевой системы. Минимальный размер рабочей системы, которую можно создать с помощью CI - 9,5 Мбайт, и такая версия NT требует менее 8 Мбайт оперативной памяти. Вместе с тем известно, что NT берет еще место на диске для работы с виртуальной памятью (paging). Кроме того, во встраиваемых системах часто отсутствуют видеоадаптеры и клавиатура. В состав CI входит так называемый Embedded Component Kit (ECK), который преодолевает указанные ограничения. ECK состоит из набора драйверов, DLL модулей и других компонентов, часто используемых во встраиваемых системах, однако он не является частью стандартной поставки NT и обычно недоступен на открытом рынке. Основные возможности, поддерживаемые ECK 1.1:
- ECK дает возможность использовать NT на аппаратных платформах без видеоадаптера. Компоненты NT, взаимодействующие с видео адаптером и подсистемы GDI/DDI будут нормально функционировать и без такой аппаратуры;
- можно сохранить лишь минимальный набор исполняемых файлов, динамических библиотек, драйверов, информации в регистре и стандартный профиль пользователя с полными правами доступа. Это отправная точка для создания системы с минимальными требованиями к дисковому пространству и объему памяти;
- позволяет системам на основе NT загружаться и исполняться из Flash памяти размером менее 10 Мбайт;
- избавляет от необходимости использовать часть диска или Flash накопителя для размещения файла подкачки, улучшая тем самым, реакцию системы за счет устранения задержек, возникающих при обращении к диску.
Каждая система, созданная на базе NT, содержит необходимый набор исполняемых модулей, библиотек, драйверов и Registry, профиль пользователя с неограниченными правами доступа и приложение, выполняемое при загрузке. В таких системах отсутствует большая часть подсистем Windows NT: поддержка сети и печати, рабочий стол, приложения контрольной панели, шрифты и др. Каталог /WINNT/SYSTEM32/Drivers содержит только драйверы, необходимые для загрузки системы. Лишь отдельные файлы, в частности, из каталога /WINNT/SYSTEM32, не имеют прямого отношения к создаваемым конфигурациям. Они обеспечивают возможность обращения к дополнительным библиотекам для некоторых необходимых компонентов.
В системе, построенной с помощью Component Integrator имеются три пользователя: Администратор, Пользователь по умолчанию (Default_User) и Гость. Первые два по умолчанию являются членами групп Администраторы и Пользователи соответственно. Гость - член группы с одноименным названием. Стандартно создаваемые системы загружаются с автоматической регистрацией Пользователя по умолчанию.
Возможность работы без файла подкачки (swapping) обеспечивается с помощью модифицированного процесса winlogin. Менеджер виртуальной памяти Windows NT при загрузке пытается создать файл, размер которого равен объему физической памяти, установленной в компьютере плюс 12 Мбайт, что соответствует примерно 20 Мбайт. Очевидно, что система, установленная на диск объемом 10 Мбайт не будет иметь достаточно места для работы менеджера виртуальной памяти, что приводит к необходимости использовать эту опцию. Большинство стандартных приложений, не требующих для функционирования больших объемов памяти будут нормально работать и в условиях ограничения адресного пространства. В системах, где имеется накопитель объемом хотя бы 40 Мбайт, ОС NT может создавать файл достаточного размера для организации работы виртуальной памяти.
Для создания встраиваемых систем на базе Windows NT в состав Component Integrator включены компоненты, позволяющие загружать NT с CD-ROM, EPROM или Flash памяти. Основой этой технологии служит специальный драйвер диска, который направляет запросы на запись в кэш-память и обрабатывает запросы на чтение как с устройства так и с кэш-памяти. Это позволяет NT загружаться и работать с любого носителя информации, поддерживающего только чтение данных. Такой драйвер можно применять и для защиты какого-либо раздела жесткого диска от записи.
В создаваемую систему можно включать дополнительные компоненты, например, разработанную программу или драйвер. Для этого необходимо составить в определенном формате описание того, что следует добавить. Информация из файла с описанием (Kit Definition File) будет включена в Component Integrator и приложение станет частью целевой системы. Кроме того, CI позволяет создавать из стандартных ПК компонентов аналог сетевого компьютера, что в корне решает проблемы администрирования систем на платформе NT. Так как компьютер пользователя в этом случае не имеет никаких средств записи информации, вместе с системой безопасности, встроенной в NT, получается компьютерная платформа, не требующая администрирования и способная исполнять любые приложения, ориентированные на NT.
Component Integrator автоматически использует содержимое Service Pack при генерации целевой системы. Для этого достаточно указать, где находятся файлы, входящие в Service Pack. Component Integrator позволяет уменьшить размер памяти, занимаемой Windows NT, работать без жесткого диска, клавиатуры, дисплея - работать с NT во встраиваемых системах, что, тем не менее, не устраняет всех препятствий на пути использования NT в системах жесткого реального времени. Для преодоления этих ограничений VenturCom предлагает программный продукт RTX 4.1, представляющий собой подсистему реального времени, функционирующую вместе с NT и программно совместимую с Win32.
2. RTX
RTX состоит из собственно подсистемы реального времени и программного интерфейса RTX API, в котором реализованы функции, необходимые для создания приложений, работающих в режиме реального времени в среде Windows NT. Задачей разработчиков RTX было создание программного интерфейса, похожего на Win32 API. Дело в том, что в стандартном Win32 API в основном уже содержатся необходимые функции для работы с задачами и нитями (processes and threads), управления приоритетами, блокировки приложения в памяти и другие, но в среде Win32 они работают не так, как требуется для систем реального времени. Разработанную с использованием RTX программу можно запускать как в среде Win32, так и в среде RTX, но добиться жесткого детерминизма в работе программы удается лишь в последнем случае. Разумеется, в RTX есть функции, не имеющие аналогов в Win32, например, функции работы с прерываниями. Однако большая часть является совместимой, а соответствующие функции отличаются лишь префиксом "Rt" в названии, например: RtCreateSemaphore (RTX) и CreateSemaphore (Win32). Это означает, что программист, знакомый с Win32, может с помощью RTX писать приложения реального времени. Более того, программу можно отлаживать в среде Win32 и лишь потом переносить в RTX. Сама система разработки и исполнения представляет собой единое целое, что дает дополнительные преимущества для программиста.
Система RTX состоит из нескольких уровней (рис. 2).
Структура RTX 4.1
2.1 Слой аппаратных абстракций реального времени (HAL)
Слой HAL реального времени является основой RTX 4.1. Структура HAL, разработанная VenturCom, обеспечивает необходимые ресурсы для реализации быстродействующих часов и таймеров, наряду с изоляцией прерываний между RTX и Windows NT, что делает возможным детерминированное поведение программ. Более того, HAL реального времени перехватывает состояние Windows NT, известное под названием "blue screen" и позволяет подсистеме реального времени функционировать, ожидая возобновления нормальной работы той части приложения, которая ориентирована на Windows NT.
2.2 Подсистема реального времени (RTSS)
RTSS обеспечивает основные функции и управление ресурсами в RTX. Реализованная в виде драйвера Windows NT, RTSS является дополнением к этой ОС, использующим сервисы NT и HAL реального времени для обеспечения функций, необходимых для работы подсистемы реального времени. RTSS использует HAL реального времени для реализации быстродействующих часов и таймеров, а также функций для работы с прерываниями, используемых RTX процессами. Встроенные в RTSS менеджер процессов (thread manager) и планировщик, основанный на фиксированной системе приоритетов, гарантируют эффективное управление пользовательскими процессами. RTSS также обеспечивает интерфейс между процессами RTX и Windows NT с помощью сервиса IPC (Inter Process Communications) в реальном времени.
2.3 Интерфейс прикладного программирования для создания приложений реального времени (RTAPI)
RTAPI обеспечивает необходимый набор программных расширений в дополнение к Win32 API. Вместе с Win32(RT) - подмножеством функций Win32 - RTAPI реализует полнофункциональный набор интерфейсов прикладного программирования. RTAPI может использоваться как RTX так и NT процессами, поэтому создаваемые приложения переносимы и способны работать в той и другой среде. Поскольку RTAPI функционирует в среде Windows NT, можно использовать любые средства разработки для создания программ, ориентированных на обе среды.
Способность одновременной работы в Windows NT и в RTX создает много преимуществ: приложения могут быть разделены на критические компоненты, функционирующие в RTSS и стандартные компоненты, работающие в среде NT; RTX процессы и процессы Windows NT взаимодействуют и обмениваются информацией, используя функции обмена данными IPC.
2.4 Свойства RTAPI 2.0
Управление процессами и задачами. RTAPI обеспечивает интерфейсы для создания, назначения приоритета, контроля, мониторинга и завершения RTX задач.
Планировщик системы RTX обеспечивает 128 фиксированных, не изменяющихся со временем, приоритетов, которые гарантируют правильную последовательность выполнения RTX процессов. RTX обеспечивает расстановку приоритетов, контроль инверсии и вытеснения для того, чтобы выделить ЦПУ в эксклюзивное распоряжение процессов реального времени. Все нити RTSS процесса должны освобождать процессор путем перехода в режим ожидания, изменения приоритета или завершения исполнения. Все нити RTSS выполняются раньше, чем нити NT. Планировщик нитей получает контроль над процессором в ответ на прерывание, генерируемое слоем аппаратных абстракций (HAL). Два из этих прерываний встроены и обеспечивают прерывания от часов реального времени, а также специализированное программное прерывание RTSS. Прерывание от часов реального времени осуществляет контроль над таймером в то время как программное прерывание служит сигналом для RTSS на проверку состояния очереди сообщений, поступающих от NT. Третьим типом является прерывание от устройства, для которого RTSS процесс назначил обработчик прерывания. После того, как все нити RTSS процесса завершатся, планировщик переходит в режим ожидания и NT процессы возобновляют функционирование.
Обработчики прерываний в RTSS реализованы как нити реального времени. Такой подход вносит небольшую задержку в процесс обработки прерывания, но вместе с этим организация всей задачи в виде нитей реального времени выражается в более простом, логически ясном и надежном подходе.
RTAPI позволяет процессу получать в распоряжение последовательные участки памяти и фиксировать как память процесса, так и память, находящуюся в распоряжении ядра NT. По умолчанию, все процессы и объекты памяти в RTSS автоматически фиксируются в физической памяти. Однако большая часть ядра Windows NT и все процессы Windows NT, как правило, не фиксируются в памяти. Для предотвращения задержек в работе Win32 - приложения можно использовать функции блокировки в памяти, такие как RtLockKernel. В противоположность ядру и подсистеме Win32, драйверы NT, как правило, фиксированы в памяти, а драйверы, загруженные при инициализации системы, фиксированы всегда.
Возможности фиксации приложений в памяти позволяют избежать задержек, связанных с обращением к файлу подкачки.
Для обеспечения взаимодействия между NT и RTSS, последняя организует и поддерживает две очереди сообщений. Одна очередь - для передачи сообщений от NT в RTSS, другая - в обратном направлении. Эти очереди выполнены в виде кольцевых буферов. Такая организация необходима, поскольку на низшем уровне NT и RTSS не синхронизированы, кроме возможности регистрации индекса последнего сообщения, записанного в очередь. RTSS процессы запрашивают сервисы NT с помощью данного механизма, а RTAPI обеспечивает механизмы "семафоров" (semaphores) и мутексов (mutex) для обеспечения средств синхронизации. Win32 и RTSS объекты имеют идентичный доступ к этим объектам через драйвер RTSS и очередь сообщений. Фактически две Win32 программы могут осуществлять синхронизацию с семафором RTSS точно так же, как и с семафором Win32. Это, в свою очередь, означает, что программа Win32, использующая RTAPI интерфейс, будет осуществлять синхронизацию без модификации после компиляции с RTSS библиотеками. Дополнительно обмен данными может производиться через область общей памяти (Shared Memory).
RTX обеспечивает внутренние часы с разрешением 1 мкс и таймеры, основанные на этих часах. Разрешение таймеров переменное и может составлять 100, 200, 500, 1000 мкс. Это дает возможность точно измерять временные интервалы и планировать задачи согласно заданным отрезкам времени. В состав RTAPI включены функции "сна", а взаимодействие процессов осуществляется и регулируется с помощью средств межпроцессорного обмена (IPC) и синхронизации посредством объектов mutex и semaphore.
Поскольку приложение может компилироваться как для среды Win32 так и для RTSS, отладку можно производить сначала с помощью любого имеющегося отладчика, например, встроенного в Visual C++, а затем, перекомпилировав программу как RTSS, используя WinDbg или NuMega SoftIce.
Каково же максимальное время реакции на внешнее воздействие (прерывание) в системе, построенной на основе RTX? Основные источники задержек при реакции на прерывание в стандартной Windows NT следующие:
- Программные
- Маскировка прерываний на уровне контроллера. Ядро NT и драйверы могут маскировать прерывания через вызовы HAL IRQL. Драйверы могут отключать прерывания на срок до 2 мс.
- Маскировка всех прерываний процессором. Ядро Windows NT, HAL и специализированные драйверы могут маскировать прерывания на срок до 100 мкс.
- Аппаратные
- Блокировка шины периферийными устройствами. Например, видеоадаптер может блокировать процессор при попытке чтения содержимого регистра на этой плате.
- Блочные передачи DMA, инициализированные SCSI контроллерами.
- Необходимость очистки кэш памяти процессора
RTX устраняет задержки, связанные с маскировкой прерываний на уровне контроллера - путем модификации HAL с целью изоляции аппаратных прерываний. Windows NT и драйверы не могут деактивировать прерывания RTSS, поэтому все прерывания NT отключены на время исполнения RTSS процесса. Маскировка прерываний на уровне процессора значительно улучшена путем динамической модификации длительных блоков инструкций cli/sti в более короткие, за счет использования внутренних процедур.
Таким образом, основные источники нестабильности связаны теперь не с программными, а с аппаратными аспектами. Для решения этих проблем и помощи в правильном выборе оптимальной компьютерной платформы в состав RTX включены утилиты, позволяющие протестировать компьютер и определить элементы конфигурации, оказывающие основное воздействие на производительность. На стандартных компьютерах (процессор Pentium) максимальное время реакции на прерывание находится в пределах 90 - 20 мкс, при типовом времени от 12 до 5 мкс - время от момента поступления прерывания до входа в нить обработки (thread) с полным восстановлением контекста.
Заключение
Сегодня очевидно, что разработчики встраиваемых систем в основном склоняются к использованию стандартного коммерческого программного обеспечения. Windows NT является критическим элементом, который лежит в основе успеха такого подхода. С добавлением описанных инструментов и компонентов NT становится неплохой платформой для таких приложений. Уже сегодня имеется ряд примеров успешного использования Windows NT во встраиваемых приложениях: управление промышленными процессами, системы наблюдения за пациентами, телекоммуникационное оборудование и т.д.
Компания "ПЛК Системы", Москва plc@space.ru