Вычислительные установки, на которых применяются ОСРВ, можно условно разделить на три группы.
1. "Обычные" компьютеры. По логическому устройству совпадают с настольными системами. Аппаратное устройство несколько отличается. Для обеспечения минимального времени простоя в случае технической неполадки процессор, память и т.д. размещены на съемной плате, вставляемой в специальный разъем так называемой "пассивной" основной платы. В другие разъемы этой платы вставляются платы периферийных контроллеров и другое оборудование. Сам компьютер помещается в специальный корпус, обеспечивающий защиту от пыли и механических повреждений. В качестве мониторов часто используются жидкокристаллические дисплеи, иногда с сенсочувствительным покрытием.
По экономическим причинам среди процессоров этих компьютеров доминируют семейство Intel 80x86.
Подобные вычислительные системы обычно не используются для непосредственного управления промышленным или иным оборудованием. Они в основном служат как терминалы для взаимодействия с промышленными компьютерами и встроенными контроллерами, для визуализации состояния оборудования и технологического процесса.
На таких компьютерах в качестве операционных систем часто используются «обычные» операционные системы с дополнительными программными комплексами, адаптирующими их к требованиям "реального времени".
2. Промышленные компьютеры. Состоят из одной платы, на которой размещены: процессор, контроллер памяти, память 4-х видов:
— ПЗУ, постоянное запоминающее устройство (ROM, read-only memory), где обычно размещена сама ОСРВ; типичная емкость – 500Kb;
— ОЗУ, оперативное запоминающее устройство (ДАМ, random access memory), куда загружается код н данные ОСРВ; обычно организована на базе динамической памяти (dynamic RAM, DRAM); типичная емкость – 16Mb;
|
— статическое ОЗУ (static RAM, SRAM) (то же, что и ОЗУ, но питается от имеющейся на плате батарейки), где размещаются критически важные данные, которые не должны пропадать при выключении питания; типичная емкость - 3Mb; типичное время сохранения данных - 5 лет;
— флеш-память (flash RAM) (электрически программируемое ПЗУ), которое играет роль диска для ОСРВ; типичная емкость – 4Mb;
Контроллеры периферийных устройств: SCSI (Small Computer system interface), Ethernet, COM портов, параллельного порта, несколько программируемых таймеров. На плате находится также контроллер и разъем шины, через которую компьютер упpавляет внешними устройствами. В качестве тины в подавляющем большинстве случаев используется шина VME, которую в последнее время стала теснить шина Compact PCL.
Отметим, что, несмотря на наличие контроллера SCSI, обычно ОСРВ работает бея дисковых накопителей, поскольку последние не удовлетворяют предъявляемым к системам реального времени требованиям по надежности, устойчивости к вибрации, габаритам и времени готовности после включения питания.
Плата помещается в специальный корпус (крейт), в котором разведены разъемы шины и установлен блок питания. Корпус обеспечивает надлежащий температурный режим, защиту от пыли и механических повреждений. В тот же корпус вставляются платы аналого-цифровых и/или цифро-аналоговых преобразователей (АПП и/или ЦАП) (analog to digital and/or digital and analog converters, ADC and/or DAC), через которые осуществляется ввод/вывод управляющей информации, платы управления электромоторами и т.п. В тот же корпус могут вставляться другие такие же (или иные) промышленные компьютеры, образуя многопроцессорную систему.
|
Среди процессоров промышленных компьютеров доминируют процессоры семейств PowerPC (Motorola - IBM) и Motorola 68xxx (Motorola).Также присутствуют процессоры семейств SPARC (SUN), Intel 80x86 (Intel), ARM (ARM), Intel 80960x (Intel) При выборе процессора определяющими факторами являются получение требуемой производительности при наименьшей тактовой частоте, а, значит, н наименьшей рассеиваемой мощности, а также наименьшее время переключения задач и реакции на прерывания. Подчеркнем важность малой рассеиваемой мощности процессора с точки зрения получения высокой отказоустойчивости системы в целом, поскольку малый нагрев процессора позволяет обойтись бея охлаждающего вентилятора, который является достаточно ненадежным механическим устройством.
Промышленные компьютеры используются для непосредственного управления промышленным или иным оборудованием. Они часто не имеют монитора и клавиатуры, и для взаимодействия с ними служат "обычные" компьютеры, соединенные с ними черта последовательный порт (COM порт) или Ethernet.
3. Встраиваемые системы. Устанавливаются внутрь оборудования, которым они управляют. Для крупного оборудования (например, локомотив или самолет) могут по исполнению совпадать с промышленными компьютерами. Для оборудования поменьше (например, принтер) могут представлять собой процессор с сопутствующими элементами, размещенный на одной плате с другими электронными компонентами этого оборудования. Для миниатюрного оборудования (например, мобильный телефон) процессор с сопутствующими элементами может быть частью одной из больших интегральных схем этого оборудования.
|
В дальнейшем под компьютером для ОСРВ мы будем понимать промышленный компьютер. Отметим основные особенности ОСРВ, диктуемые необходимостью ее работы на промышленном компьютере. Система часто должна работать на бездисковом компьютере, осуществлять начальную загрузку из ПЗУ. В силу этого:
— критически важным является размер системы;
— для экономии места в ПЗУ часть системы часто хранится в сжатом виде и загружается в ОЗУ по мере необходимости;
— система часто позволяет исполнять код как в ОЗУ, так и в ПЗУ;
— при наличии свободного места в ОЗУ система часто копирует себя из медленного ПЗУ в более быстрое ОЗУ;
— сама система компилируется, линкуется и превращается в загрузочный модуль на другом, "обычном" компьютере, связанном с промышленным компьютером через последовательный порт или Ethernet это требует специального кроссплатформенного инструментария разработчика, поскольку типы процессоров и/или операционных систем на этих двух компьютерах не совпадают.
Система по возможности должна поддерживать как можно более широкий ряд процессоров, что дает возможность потребителю выбрать процессор подходящей мощности
Система по возможности должна поддерживать как можно более широкий ряд специального оборудования (периферийные контроллеры, таймеры и т.д.), которые могут стоять на плате компьютера и платах, которыми он управляет через обитую шину.
• Очевидно, что для получения законченной системы управления не достаточно промышленного компьютера, АЦП и/или ЦАП платы, крейта и ОСРВ. Нужно еще написать программу, которая будет непосредственно управлять конкретным промышленным оборудованием. Для этого необходим (кроссплатформенный) инструментарий разработчика, цена которого может превосходить цену перечисленных выше компонент, вместе взятых. Правда, этот инструментарий нужен только разработчику, и полученная программа может работать на многих компьютерах.
• Критически важным параметром для ОСРВ является время ее реакции на прерывания (которое складывается из аппаратного времени задержки и программных задержек), а также предсказуемость этого времени.
Основные определения
Определение. Программа — это описание на некотором формализованном языке алгоритма, решающего поставленную задачу. Программа является статической единицей, т.е. неизменяемой с точки зрения операционной системы, ее выполняющей.
Определение. Процессор — это устройство, выполняющее определенный набор инструкций. Для того, чтобы быть выполненной, программа должна быть, прежде всего, переведена с алгоритмического языка на язык этих инструкций (скомпилирована).
Определение. Процесс — это динамическая сущность программы, ее код в процессе своего выполнения имеет:
• собственный стек,
• (в системах с виртуальной памятью) собственное отображение виртуальной памяти на физическую,
• собственное состояние.
Процесс может находиться в одном из следующих типичных состояний (точное количество и свойства того или иного состояния зависят от операционной системы):
1. "остановлен" - процесс остановлен и не использует процессор; например, в таком состоянии процесс накопится сразу после создания;
2. "терминирован" - процесс терминирован и не использует процессор; например, процесс закончился, но еще не удален операционной системой;
3. "ждет" - процесс ждет некоторого события (которым может быть аппаратное или программное прерывание, сигнал или другая форма межпроцессного взаимодействия);
4. "готов" - процесс не остановлен, не терминирован, не ожидает, не удален, но не работает; например, процесс может не получать доступа к процессору, если в данный момент выполняется другой, более приоритетный процесс;
5. "выполняется" - процесс выполняется и использует процессор; в ОСРВ это обычно означает, что этот процесс является самым приоритетным, среди веек процессов, находящихся в состоянии "готов".
Определение. Стек (stack) - это область памяти, в которой размещаются локальные переменные, аргументы и возвращаемые значения функций. Вместе с областью статических данных полностью задает текущее состояние процесса.
Определение. Виртуальная память - это "память", в адресном пространстве которой работает процесс. Виртуальная память:
1. позволяет увеличить объем памяти, доступной процентам за счет дисковой памяти;
2. обеспечивает выделение каждому из процессов виртуально непрерывного блока памяти, начинающегося (виртуально) с одного и того же адреса;
3. обеспечивает изоляцию одного процесса от другого.
Трансляцией виртуального адреса в физический занимается операционная система. Для ускорения этого процесса многие компьютерные системы имеют поддержку со стороны аппаратуры, которая может быть либо прямо в процессоре, либо в специальном устройстве управления памятью. Среди механизмов трансляции виртуального адреса преобладает страничный, при котором виртуальная и физическая память разбиваются на куски равного размера, называемые страницами (типичный размер – 4Kb), между страницами виртуальной и физической памяти устанавливается взаимно-однозначное (для каждого nроцесса) отображение. Отметим, что ОСРВ стремятся получить максимальную производительность на имеющемся оборудовании, поэтому некоторые ОСРВ не используют механизм виртуальной памяти из-за задержек, вносимых при трансляции адреса.
Определение. Межпроцессорное взаимодействие - это тот или иной способ передачи информации из одного процесса в другой. Наиболее распространенными формами взаимодействия являются (не все системы поддерживают перечисленные ниже возможности):
1. Разделяемая память — два (или более) процесса имеют доступ к одному и тому же блоку памяти. В системах с виртуальной памятью организация такого вида взаимодействия требует поддержки со стороны операционной системы, поскольку необходимо отобразить соответствующие блоки виртуальной памяти процессов на один и тот же блок физической памяти.
2. Семафоры — два (или более) процесса имеют доступ к одной переменной, принимающей значение 0 или 1. Сама переменная часто находится в области данных операционной системы и доступ к ней организуется посредством специальных функций.
3. Сигналы — это сообщения, доставляемые посредством операционной системы процессу. Процесс должен зарегистрировать обработчик этого сообщения у операционной системы, чтобы получить возможность реагировать на него. Часто операционная система извещает процесс сигналом о наступлении какого-либо сбоя, например, делении на 0, или о каком-либо аппаратном прерывании, например, прерывании таймера.
4. Почтовые ящики - это очередь сообщений (обычно - тех или иных структур данных), которые помещаются в почтовый ящик процессами и/или операционной системой. Несколько процессов могут ждать поступления сообщения в почтовый ящик и активизироваться по его поступлении. Требует поддержки со стороны операционной системы.
Определение. Событие - это оповещение процесса со стороны операционной системы о той или иной форме межпроцессного взаимодействия, например, о принятии семафором нужного значения, о наличии сигнала, о поступлении сообщения в почтовый ящик.
Создание, обеспечение взаимодействия, разделение процессорного времени требует от операционной системы значительных вычислительных затрат, особенно в системах с виртуальной памятью. Это связано, прежде всего, с тем, что каждый процесс имеет свое отображение виртуальной памяти на физическую, которое надо менять при переключении процессов и при обеспечении иx доступа к объектам взаимодействия (общей памяти, семафорам, почтовым ящикам). Очень часто бывает так, что требуется запустить несколько копий одной и той же программы, например, для управления несколькими единицами одного и того же оборудования. В этом случае мы несем двойные накладные расходы: держим в оперативной памяти несколько копий кода одной программы и еще тратим дополнительное время на обеспечение их взаимодействия. Улучшает ситуацию введение задач.
Определение. Задача (или поток, или нить, thread) - это как бы одна из ветвей исполнения процесса:
• разделяет с процессом область памяти под код и данные,
• имеет собственный стек,
• (в системах с виртуальной памятью) разделяет с процессом отображение виртуальной памяти на физическую.
• имеет собственное состояние.
Таким образом, у двух задач в одном процессе вся память является разделяемой и дополнительные расколы, связанные с разным отображением виртуальной памяти на физическую, сведены к нулю. Для задач так же, как для процессов, определяются понятия состояния задачи и межзадачного взаимодействия. Отметим, что для двух процессов обычно требуется организовать что-то общее (память, канал и т.д.) для их взаимодействия, в то время как для двух потоков часто требуется организовать что-то (например, область памяти), имеющее свое значение в каждом из них.
Определение. Ресурс - это объект, необходимый для работы процессу или задаче. Определение. Приоритет - это число, приписанное операционной системой каждому процессу и задаче. Чем больше это число, тем важнее этот процесс или задача и тем больше процессорного времени он или она получит. Как отмечалось выше, часто в ОСРВ задача с меньшим приоритетом может вообще не получить управления при наличии в состоянии готовности задачи с большим приоритетом.
Если в операционной системе могут одновременно существовать несколько процессов или/и задач, находящихся в состоянии "выполняется", то говорят, что это многозадачная система, а эти процессы называют параллельными. Отметим, что если процессор один, то в каждый момент времени на самом деле реально выполняется только один процесс или процесс или задача. Система разделяет время между такими "выполняющимися" процессами/задачами, давая каждому из них квант времени, пропорциональный его приоритету. Этот квант времени часто не зависит от специфики решаемой задачи реального времени, поэтому такой подход обычно не используется в ОСРВ. Обычно в ОСРВ в состоянии выполнения может быть только один процесс. В хорошей ОСРВ это можно изменить программным путем.
Определение. Связывание (линковка, linkage) - это процесс превращения скомпилированного кода (объектных модулей) в загрузочный модуль (т.е. то, что может исполняться процессоры при поддержке операционной системы). Различают:
• статическое связывание, когда код необходимых для работы программы библиотечных функций физически добавляется к коду объектных модулей для получения загрузочного модуля;
• динамическое связывание, когда в результирующем загрузочном модуле проставляются лишь ссылки на код необходимых библиотечных функций; сам код будет реально добавлен к загрузочному модулю только при его исполнении.
При статическом связывании загрузочные модули получаются очень большого размера. Поэтому подавляющее большинство операционных систем использует динамическое связывание, несмотря на то, что при этом начальная загрузка процесса на исполнение медленнее, чем при статическом связывании из-за необходимости поиска и загрузки кода нужных библиотечных функций (часто только тех из них, которые не были загружены для других процессов). При этом обычно для избежания недетерминированной задержки на загрузку программы на исполнение все необходимые процессы реального времени запускают при старте системы (т.е. заранее, а не по требованию).
Типы задач
Всякий процесс содержит одну или несколько задач. Операционная система позволяет задаче порождать новые задачи. Задачи по своей манере действовать можно разделить на 3 категории.
1. Циклические задачи. Характерны для процессов управления и интерактивных процессов.
2. Периодические задачи. Характерны для многих технологических процессов и задач синхронизации.
3. Импульсные задачи. Характерны для задач сигнализации и асинхронных технологических процессов.
Виды программирования
В зависимости от архитектуры целевого компьютера и назначения, подходы к написанию программ можно разделить на 3 группы.
1. Последовательное программирование. Программа исполняется на одном процессоре в виде одного процесса, состоящего из одной задачи. Поведение программы детерминировано. Результат работы не зависит от временных характеристик компьютера, таких, как производительность процессора, скорость переключения задач, время реакции на внешние события.
2. Параллельное программирование. Различают квазипараллельные программы, состоящие из нескольких независимых процессов, и истинно-параллельные программы, состоящие из нескольких связанных между собой параллельно работающих процессов или/и задач. Конечное состояние программы может зависеть от временных характеристик компьютера, когда процессы или/и задачи могут завершаться в разном порядке.
3. Программирование дли систем реального времени. Является по необходимости параллельным, поскольку на одном компьютере обычно работают несколько процессов и задач, управляющих оборудованием, находящимся в одной технологической цепочке, ограничения и при этом обеспечить максимально высокую скорость выполнения.
Виды ресурсов
По своей природе ресурсы можно разделить на
• аппаратные:
— процессор,
— область памяти,
— периферийные устройства,
— прерывания,
• программные:
— программа,
— данные,
— файлы,
— сообщения.
По своим характеристикам ресурсы разделяют на:
• активные:
— способны изменять информацию (процессор),
• пассивные:
— способны хранить информацию,
• локальные:
— принадлежат одному процессу время жизни совпадает с временем жизни процесса,
• разделяемые:
— могут быть использованы несколькими процессами; существуют, пока есть хоть один процесс, который их использует,
• постоянные:
— используются посредством операций "захватить" и "освободить",
• временные
— используются посредством операций "создать" и "удалить".
Разделяемые ресурсы бывают:
• не критичные:
— могут быть использованы одновременно несколькими процессами (например, жесткий диск или канал Ethernet)
• критичные:
— могут быть использованы только одним процессом, и пока этот процесс не завершит работу с ресурсом, последний не доступен другим процессам (например, разделяемая память, доступная на запись).