Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы реального времени и технологии разработки кроссплатформенного программного обеспечения. Ч.1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
2.6. Параметры и характеристики операционной системы реального времени
41
Определив эти черты операционной системы реального времени, можно немного перефразировать определение, данное ранее.
Так, более точно ОС РВ можно определить как совокупность связан­ных между собой элементов, выполняющих определенные функции и реаги­рующих на внешние события в течение определенных интервалов времени.
2.6. Параметры и характеристики операционной системы реального времени
ОС РВ должна успевать реагировать на все внешние события и оп-
тимально распоряжаться программными и аппаратными ресурсами. При этом время реакции является критичным, и его величина является характе­ристикой задачи, которая должна быть выполнена.
В связи с этим можно выделить следующие основные характери-
стики ОС РВ.
1. Время реакции системы.
2. Время переключения контекста.
3. Время перезагрузки системы.
4. Размер системы выполнения.
5. Система приоритетов.
6. Средства диспетчеризации.
7. Механизмы взаимодействия между задачами.
8. Средства работы с тайминговыми системами.
9. Наличие драйверов устройств, в том числе специфических.
10. Поддержка микропроцессорных модулей различной архитектуры.
11. Наличие средств нативной и кроссплатформенной разработки.
12. Поддержка специфических средств ввода-вывода.
Время реакции системы будем понимать как интервал времени
между моментом возникновения события и моментом выполнения первой команды в программном стеке для обработки этого события. Это время ре­акции складывается:
из времени реакции системы на внешнее событие (временной ин-
тервал выполнения цепочки действий от начала события на внешнем ис­точнике до момента генерации прерывания);
2. Основные положения
42
времени между возникновением запроса на прерывание и момен-
том выполнения первой команды обработчика.
Время реакции системы напрямую зависит от особенностей аппара-
туры и слабо зависит от операционной системы. Исключением может яв­ляться только такой специфический базис, как микроконтроллер, в котором без операционной системы (на чистом ассемблере) можно получить за­держку входа в прерывание, равную 4-м тактам процессора, а с операцион­ной системой – около 30-ти тактов.
Для оценки эффективности ОС берется наихудшая оценка для всех
возможных вариантов, т.е. ситуация, когда микропроцессор полностью за­гружен, в очереди задач присутствуют задачи на выполнение и постоянно поступают новые запросы на обработку прерываний.
Время переключения контекста как параметр ОС РВ следует из
того факта, что современные ОС всегда проектируются как многопоточ­ные системы, которые допускают одновременное выполнение нескольких задач. При этом время переключения между потоками может быть рас­считано заранее и определено стандартом, т.е. этот параметр считается прогнозируемым.
Время перезагрузки системы является критическим параметром для
тех ситуаций, когда требуется непрерывная и надежная работа системы. В ОС РВ даже размещаются специальные ловушки, которые отслеживают зависания, превышение критических значений временных параметров и т.п. Время перезагрузки можно регулировать в некоторых пределах, изме­няя стартовые последовательности. Современные ОС РВ, основанные на Linux и размещенные на твердотельных накопителях, загружаются всего несколько секунд, а отдельные образцы с минимальными функциями – меньше секунды. Это время меньше, чем время стартовой настройки (ини­циализации) оборудования.
Размер системы исполнения напрямую влияет на скорость загрузки системы и на емкость требуемых носителей (ОЗУ и ПЗУ). В базовом вари­анте это множество программных инструментов, состоящее из ядра си­стемы, системных модулей и драйверов. При этом систему можно вполне эффективно пересобрать прямо на целевом оборудовании, оставив только самые необходимые модули и драйвера. Заодно остается только один вари­ант ядра системы и оптимальный набор программного обеспечения с нуж­ной архитектурой.
2.7. Особенности программирования операционных систем реального времени
43
Если говорить о размерах, то современные Linux-системы могут
иметь размер в несколько мегабайт, а специализированные дистрибутивы и того меньше: ОСРВ OS9 – 22 Кбайт, VxWorks – 16 Кбайт.
Решению проблемы минимизации помогают такие возможности
ОС, как:
возможность полного размещения ОС в ОЗУ и нормальной ра-
боты оттуда же;
специальные механизмы управления потоками и задачами. Наличие таких специальных программных компонент, как драйвера
внешних и периферийных устройств или драйвера устройств ввода-вывода, также являются важными характеристиками. Никто не будет использовать в реальной ситуации такую ОС, в которой отсутствуют драйвера для устройств, которые используются на практике. То же самое может быть сказано и об архитектурах микропроцессоров. ОС РВ должна поддержи­вать различные модели и архитектуры процессоров и, что особенно важно, должна уметь использовать заложенные в микропроцессор алгоритмы с ап­паратной реализацией.
Инструментарий разработки и кроссплатформенного программиро-
вания применяется для разработки новых программ или модификации су­ществующих.
2.7. Особенности программирования операционных систем реального времени
Согласно современным подходам к программированию, разра-
ботку программного обеспечения для ОС РВ можно разделить на три ос­новных вида.
1. Последовательное программирование.
2. Программирование систем реального времени.
3. Параллельное программирование.
Последовательное программирование – это почти “канонический”
вид программирования, когда программа выполняется последовательно на одном ядре и на одном процессоре. В данном случае программа работает как система фильтров для наборов данных, поэтапно изменяя последние. Результат работы однозначно определяется заложенными алгоритмами и
2. Основные положения
44
входными данными. В этом случае, требования ко времени выполнения не выходят на передний план. При этом соблюдается следующая закономер­ность: вне зависимости от мощности аппаратуры и инструментальных средств программирования, результат выполнения не меняется. Результат работы зависит только от заложенных алгоритмов.
Программирование для систем реального времени – это отдельный
подход к программированию. Здесь самым важным моментом является учет особенностей той среды, в которой будет выполняться программа. Программы для ОС РВ, работающие в теплице, и программы для реактив­ного самолета, работающие с разной скоростью, но по одним и тем же принципам. В любом случае, программы для систем реального времени должны быстро реагировать на сигналы внешней среды и находиться в рамках временных ограничений.
Следует отметить, что чрезвычайно сложно соблюсти все особенно­сти работы ОС реального времени только при помощи стандартных прие­мов программирования. Как минимум, стандартные программы не умеют запускать процессы или потоки для параллельной обработки данных. Для этого существует особый подход, который называется “параллельное про­граммирование”. Параллельное программирование делает упор на одно­временное выполнение программного кода и на правильное взаимодей­ствие между отдельными участками исполняемого кода.
При этом параллельное выполнение алгоритмов может происходить как на одном компьютере, так и в компьютерной сети. Этот эффект назы­вается “распределенные вычисления”.
Различия между программами, разработанными при помощи стан­дартных средств и подходом, и параллельными решениями можно свести к следующему списку.
1. Логика решения задачи может быть одинаковая, но может разли-
чаться кардинально, причем под влиянием внешних событий и самой при­роды решаемой проблемы.
2. Параллельная программа может не только обрабатывать сразу
несколько потоков данных, но несколько источников внешних сигналов. Примерами могут являться внешние события или сигналы с датчиков.
3. Логика решения задачи может явно зависеть от времени. Напри-
мер, если система не может обработать сигналы от нескольких датчиков в
2.7. Особенности программирования операционных систем реального времени
45
установленных временных интервалах и обработчики не зависят друг от друга, то можно смело применять параллельный подход.
4. Исходя из предыдущего пункта, ясно, что подобные системы ра-
ботают в условиях жесткого времени и любая задержка может быть вос­принята как ошибка или неверный результат вычислений.
5. Результат работы параллельной системы зависит от возможно-
стей и общего состояния системы и его иногда невозможно предсказать заранее.
6. Для параллельной системы очень важно правильное разграниче-
ние ответственности между решающими модулями и важны процедуры синхронизации и обмена данными.
7. Система всегда ориентирована на получение и обработку новых
данных, так что состояние простоя – это всегда состояние ожидания.
Здесь следует упомянуть, что фактор времени не равен фактору про­изводительности системы. В жестких временных рамках важнее стабиль­ность работы, быстрота реагирования и достаточность скорости решения задачи. Именно достаточность определяет качество системы. “Медленные” системы могут отлично справляться с задачами своего масштаба.
Поэтому скорость выполнения программ рассматривается не в кон­тексте единиц времени, а в контексте и относительно решаемой задачи.
При параллельном программировании применяются техники, отли­чающиеся от классических. Наиболее важными из них являются методы, ориентированные на эффективное решение следующих задач.
1. Перехват внешних событий.
2. Быстрый вызов реакции на внешнее событие, т.е. передача управ-
ления на обработчик события с минимальными задержками.
3. Обработка исключительных ситуаций и ошибок.
4. Возможность прямого вызова функций операционной системы
(например, обращение к ядру или к драйверу, минуя “прослойки” и стан­дартные средства вызова).
Очень часто программы для ОС РВ строятся не по “монолитной” схеме (когда есть один большой блок исполняемого кода с вызовами и пе­реходами), а по схеме “сервер-клиент”.
Этот подход является удачным решением благодаря следующим особенностям.
2. Основные положения
46
1. Каждый поток выполняет свою определенную функцию.
2. Каждый поток является “клоном” соседних, если они решают одну
и ту же задачу. При этом их можно запускать просто путем клонирования.
3. При обнаружении ошибки или внештатной ситуации в парал-
лельном потоке, последний можно попросту “отключить” от сервера и за­пустить заново.
4. Надежность системы типа “сервер-клиент” выше за счет того, что
при “падении” клиента, сервер остается работоспособным.
5. Клиенты могут быть с минимальными изменениями запущены как
на одной машине, так и на разных машинах в локальной или глобальной сети.
6. Система постоянно “готова” к запуску клиентов.
7. Состояние простоя системы является просто состоянием отсут-
ствия запущенных клиентов.
8. У системы отсутствует состояние аварийного завершения – это
состояние есть только у отдельных клиентов.
9. Каждому отдельному клиенту достаточно легко установить “кри-
тические секции”, т.е. области ответственности и ограничения потребляе­мых ресурсов. В условиях недостатков ресурсов для параллельного выпол­нения можно просто уменьшить число параллельно работающих клиентов, сведя систему до “гибридного” состояния (когда большое количество задач решается последовательно небольшим числом параллельно запущенных потоков).
10. Прерывание работы клиенты не сказывается на его ресурсах и
данных, так как другие клиенты не изменяют их.
Конечно, в реальных системах всегда ищут компромисс. Например,
не все 100 % задач или входных сигналов обрабатываются своим клиентом. Большое количество запущенных параллельно обработчиков сильно грузят систему. Процессы должны выполняться быстро, так что часто приходится принимать решение и выбирать между чистой архитектурой, ясностью программного кода и эффективностью. Обычно выбор склоняется к по­следнему. Не всегда в конечном решении присутствует “чистый” код и “чи­стая” архитектура.
Поэтому здесь и говорится отдельно о программировании для си-
стем реального времени и чистом параллельном программировании.
2.7. Особенности программирования операционных систем реального времени
47
Параллельное программирование – это скорее абстрактный процесс разработки программ и отдельный способ мышления. Во главу угла здесь как раз поставлена чистота архитектуры, разделение ответственности между исполнителями.
Чисто спроектированная параллельная программа должна работать параллельно вне зависимости от программной среды и от аппаратуры.
Этот подход может доводить до абсолюта, когда говорится, что каж­дый параллельный поток должен запускаться на своем процессоре, пусть даже и виртуальном.
При всем этом параллельные программы требуют не только специ­альных методов проектирования и программирования, специальных биб­лиотек, средств сборки и компиляции, но даже специальных способов от­ладки и методов тестирования.
3. Архитектура ОС РВ
48
3. АРХИТЕКТУРА ОС РВ
3.1. Ядро ОС РВ
Программы для первых вычислительных устройств создавались чи­сто на машинных кодах, каждая программа была уникальной и специали­зировалась на решении одной конкретной задачи. Собственно, для этого программы и разрабатывались – не было тогда еще программного обеспе­чения универсального или общего назначения.
Любые изменения в аппаратуре, модификация состава устройства, изменение системы команд или внесение новых элементов архитектуры приводили к необходимости существенной переработки старых программ или к созданию новых.
Однако вскоре разработчики пришли к выводу, что целесообразно дополнительно создавать и программное обеспечение общего назначения.
Первыми попытками в этом направлении была базовая система ввода-вывода (BIOS). Параллельно с этим процессом унифицировалось и оборудование, появлялись общие части, не зависящие от конкретной ап­паратуры.
Постепенно стали выделяться и обобщенные методы разработки программного обеспечения. Возникли такие понятия, как файл, комплекс программ, система ввода-вывода и т.п.
Постепенно выделился набор программного обеспечения, который содержал универсальные программы и специальные программы. Этот ком­плекс программ стал называться операционной системой (ОС).
Впоследствии обобщенная часть ОС стала называться ядром ОС. Его дополнили планировщиком и другими системными утилитами, а также раз­делили на несколько уровней абстракции, которые помогли отделить аппа­ратуру со своими особенностями от программного обеспечения.
Ядро операционной системы (kernel) имеет самый низкий уровень абстракции в системе и имеет прямой доступ к ресурсам, необходимым для обработки информации. Как правило, именно ядро системы предоставляет исполняемым процессам доступ к ресурсам при помощи механизмов пря­мого доступа, механизмов межпроцессного взаимодействия и системного вызова.
3.1. Ядро ОС РВ
49
Абстрактный уровень ядра операционной системы предоставляет сле-
дующие категории сервисов для прикладного программного обеспечения:
сервис управления задачами. Относится к основной группе сер-
висов и позволяет разработчикам разрабатывать программы как совокуп­ность отдельных фрагментов или компонентов. При этом каждый объект может относиться к своей предметной области, разделяя свою определен­ную ответственность. Фрагмент может иметь свой собственный квант вре­мени. Программный код, занимающий этот квант, называется задачей. За­дачами управляет планировщик при помощи арбитражного алгоритма, оче­реди задач и системы приоритетов. Он же и следит за выполнением теку­щих задач, запускает их в соответствующие периоды времени и отслежи­вает состояние;
система динамического распределения памяти. Относится к спе-
циальной группе сервисов для управления взаимодействием между зада­чами и областями оперативной памяти. Под управлением данной системы задачам назначается один или несколько участков памяти “во временное пользование”. После окончания работы задачи и выделенная ей память воз­вращается в доступную всем область;
система управления таймерами. Относится к специальной группе
сервисов, следящих за работой таймеров и счетчиков. Группа задает ре­жимы работы таймеров, следит за их работой, отмеряет лимиты времени, в пределах которых должна выполняться задача. Кроме всего прочего, эти сервисы позволяют генерировать прерывания, создают одноразовые и пе­риодические будильники и сторожевые таймеры;
система управления взаимодействием между задачами. Отно-
сится к специальной группе сервисов, деятельность которых направлена на обмен данными между задачами и обеспечение ее защищенности;
система контроля устройств ввода-вывода. Относится к специ-
альной группе сервисов, обеспечивающей работу программного интер­фейса. Обмен командами и данными через программный интерфейс мо­жет охватывать как прикладное программное обеспечение, так и группу драйверов;
система управления файлами. Относится к общей группе сервисов
и занимается управлением файловой системой, контролем целостности фай­лов, созданием, удалением, модификацией объектов файловой системы;
3. Архитектура ОС РВ
50
система управления сетевыми соединениями. Относится к общей группе сервисов и занимается созданием и поддержанием сетевых соеди­нений, соблюдением протоколов различного уровня, преобразованием форматов данных, формированием пакетов информации и т.п.;
система управления базами данных. Относится к общей группе сервисов и занимается управлением доступа к структурированным храни­лищам информации, т.е. к базам данных;
система управления графическим интерфейсом пользователя. Относится к общей группе сервисов для организации отображения инфор­мации для пользователя или администратора системы в воспринимаемом ими виде. Интерфейсы могут быть текстовыми или графическими. Могут подразумевать обратную связь с пользователями или нет (являться чисто информационными).
Рассмотрим далее особенности архитектуры стандартной операци­онной системы реального времени.
3.2. Архитектура ОС РВ
На самом деле, четкого разделения между как таковым ядром опера­ционной системы и другими составляющими ее программами нет. Это раз­деление скорее условное и зависит оно от набора функциональных возмож­ностей конкретного ПО.
Для определенности принято считать, что ядро операционной си­стемы реального времени предоставляет пользователю базовые функции, а “полная” операционная система также дополняет эти функции другими возможностями (например, работой с файловой системой, поддержкой се­тевых соединений, интерфейса взаимодействия с оператором и т.п.).
По своей структуре и принципам функционирования, операционные системы можно условно разделить:
на монолитные;
системы с микроядром;
слоистые или многоуровневые;
клиент-серверные;
объектно-ориентированные.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]