Лекция 23 Программное обеспечение систем реального времени. Операционные системы
Операционные системы
Операционные системы реального времени (ОС РВ) характеризуются тем, что значение времени принятия решения используется как одна из переменных, от которых зависит результат. То есть при опоздании результатов они либо могут быть бесполезными, либо ущерб в результате опоздания может быть бесконечно велик. Основная задача операционных систем общего назначения - эффективное разделение ресурсов ЭВМ между несколькими одновременно выполняющимися программами. Операционные системы реального времени разрабатываются в расчете на наличие внешних источников данных. Основная задача ОС РВ - своевременно обработать запрос; все остальные аспекты функционирования ЭВМ отходят на второй план.
Напомним, что существуют системы «мягкого» и «жесткого» реального времени. Поэтому иногда говорят, что та или иная ОС «мягкая» или «жесткая». Нет «мягких» и «жестких» ОС. Одна и та же ОС РВ может лишь служить основой для построения таких систем.
По своей внутренней структуре ОС можно условно разделить на монолитные ОС, ОС на основе микроядра (модульные) и объектно-ориентированные ОС.
В монолитных ОС (рис. 23.1) все обрабатывающие программы сосредоточены вместе в едином процессе, которое исполняется в едином адресном пространстве.
Рисунок 23.1
Монолитные архитектуры можно представить в виде прикладного уровня, состоящего из работающих прикладных процессов, и системного уровня, состоящего из монолитного ядра. В нем можно выделить следующие части: интерфейс между приложениями и ядром, собственно ядро и интерфейс между ядром и оборудованием (драйверы устройств). Интерфейс в таких системах играет двойную роль:
- управление взаимодействием функциональных задач с операционной системой;
- обеспечение непрерывности выполнения программ операционной системы.
Основное преимущество монолитной архитектуры - относительная быстрота работы по сравнению с другими архитектурами за счет написания значительных частей системы на языке ассемблера.
Недостатки монолитной архитектуры:
- системные вызовы, требующие переключения уровней привилегий (от пользовательской задачи к ядру), должны быть реализованы как прерывания или специальный вид исключения, что сильно увеличивает время их работы;
- ядро не может быть прервано пользовательской задачей; это может приводить к тому, что высокоприоритетная задача может не получить управления из-за работы низкоприоритетной;
- сложность переноса системы на новые архитектуры процессора из-за значительных ассемблерных вставок;
- недостаточная гибкость и сложность развития: изменение части ядра требует его полной перекомпиляции.
Поскольку в такой системе невозможно выполнение системных вызовов в то время, когда реализуется какой-либо поток ядра, режим реального времени невозможен.
Модульная (микроядерная) архитектура (рис. 23.2) является альтернативой классическому способу построения ОС. Она была разработана с целью убрать интерфейс между приложениями и ядром и облегчить модернизацию системы и перенос ее на новые процессоры. В микроядерных ОС в привилегированном режиме остается работать только очень небольшая часть ОС, называемая микроядром. При такой структуре микроядро выполняет две основные функции:
- управление взаимодействием частей системы (например, менеджеров процессов и файлов);
- обеспечение непрерывности выполнения ядра ОС (то есть отсутствие переключения задач во время выполнения микроядра).
Рисунок 23.2
Микроядерные ОС удовлетворяют большинству требований, предъявляемых к современным ОС, обладая переносимостью (легкостью переноса с одной аппаратной платформы на другую), расширяемостью (добавление и изменение функций), надежностью (защита серверов ОС друг от друга) и создавая хорошие предпосылки для поддержания распределенных приложений. За эти достоинства приходится платить снижением производительности, что является основным недостатком микроядерной архитектуры.
В микроядерной архитектуре ядро отвечает только за базовые примитивы ОС (создание и уничтожение потоков, диспетчеризация и синхронизация потоков, поддержка механизма прерываний, часов и таймеров). Это действительно микроядро, так как его объем, например, в системе QNX, всего 12 Кбайт. Все остальные компоненты системы: драйверы, файловые системы, стеки протоколов, пользовательские приложения - выполняются вне пределов ядра как отдельные процессы, каждый в своем защищенном адресном пространстве. Программы, реализующие эти сервисные функции, называются администраторами ресурсов. Все эти компоненты используют для общения друг с другом единый, четко детерминированный механизм - обмен сообщениями. Он образует между компонентами системы виртуальную «программную шину», позволяющую подключать к ней или, наоборот, отключать любой компонент на лету. Связь между микроядром и администраторами ресурсов осуществляется с помощью администратора процессов.
Недостатки модульной структуры фактически те же, что и у монолитной. Проблемы перешли с уровня интерфейса на уровень микроядра. Системный интерфейс по-прежнему не допускает переключения задач во время работы микроядра, только сократилось время пребывания в этом состоянии, проблемы с переносимостью ядра уменьшились (в связи с сокращением его размера), но остались.
В объектно-ориентированной ОС (рис. 23.3) все системные процессы распределены по отдельным администраторам, которые включаются менеджером прерываний и менеджером задач.
Объектная архитектура строится на основе объектов - микроядер. В ней интерфейс между приложениями и ядром отсутствует вообще. Взаимодействие между компонентами системы (микроядрами) и пользовательскими процессами осуществляется посредством обычного вызова функций, поскольку и система, и приложения написаны на одном языке. Это обеспечивает максимальную скорость системных вызовов. Фактическое равноправие всех компонент системы обеспечивает возможность переключения задач в любое время. Объектно-ориентированный подход обеспечивает модульность, безопасность, легкость модернизации и повторного использования кода.
В отличие от предыдущих систем, не все компоненты самой операционной системы должны быть загружены в оперативную память. Если микроядро уже загружено для другого приложения, то оно повторно не загружается, а используется код и данные уже имеющегося микроядра. Поскольку разные приложения разделяют одинаковые микроядра, то они должны работать в одном адресном пространстве. Следовательно, система не может использовать виртуальную память и поэтому работает быстрее, так как исключаются задержки на трансляцию виртуального адреса в физический.
Рисунок 23.3
При описании работы программного обеспечения важное значение имеет понятие задачи. Задача - это набор операций, предназначенный для выполнения логически законченной функции системы. Задача конкурирует с другими задачами за получение контроля над ресурсами вычислительной системы. Различают две разновидности задач: процессы и потоки.
Процесс - это отдельный загружаемый программный модуль (файл), который во время исполнения имеет в памяти свои независимые области для кода и данных. Процесс - это выполняемая программа. Процесс включает код и данные программы, а также различную дополнительную информацию - переменные системного окружения и т.п.
Поток - это отдельный загружаемый программный модуль (файл), который может использоваться общими участками кода и данных в рамках единого программного модуля. Поток - это фрагмент процесса, содержащий непрерывную последовательность команд, которые могут выполняться параллельно с другими потоками того же и других процессов.
Процесс является, по сути дела, контейнером потоков и содержит как минимум один поток.
К преимуществам потоков можно отнести:
- экономию ресурсов как внешней, так и внутренней памяти, так как множество потоков может размещаться внутри одного ЕХЕ-модуля;
- использование потоками общей области памяти, что позволяет эффективно организовать межзадачный обмен сообщениями (достаточно передать указатель на сообщение). Процессы не имеют общей области памяти, поэтому ОС должна либо целиком скопировать сообщение из области памяти одной задачи в область памяти другой (что для больших сообщений весьма накладно), либо предусмотреть специальные механизмы, которые позволили бы одной задаче получить доступ к сообщению из области памяти другой задачи;
- меньше время переключения между задачами-потоками, чем между задачами-процессами, так как, как правило, контекст потоков меньше, чем контекст процессов;
- значительное упрощение использования программ- отладчиков, так как все потоки, а иногда и само ядро ОС РВ размещаются в одном ЕХЕ-модуле.
К недостаткам потоков можно отнести то, что:
- как правило, потоки не могут быть подгружены динамически. Чтобы добавить новый поток, необходимо провести соответствующие изменения в исходных текстах и перекомпилировать приложение. Процессы, в отличие от потоков, подгружаемы, что позволяет динамически изменять функции системы в процессе ее работы. Кроме того, так как процессам соответствуют отдельные программные модули, они могут быть разработаны различными компаниями, чем достигается дополнительная гибкость и возможность использования ранее наработанного программного обеспечения;
- потоки имеют доступ к областям данных друг друга, это может привести к ситуации, когда некорректно работающий поток способен испортить данные другого потока. В отличие от этого процессы защищены от взаимного влияния, а попытка записи в «не свою» память приводит, как правило, к возникновению специального прерывания по обработке «исключительных» ситуаций.
Контрольные вопросы:
1 Чем характеризуются операционные системы реального времени (ОС РВ)?
2 Классификация систем реального времени.
3 Охарактеризуйте монолитные ОС.
4 Основное преимущество и недостатки монолитной архитектуры ОС РВ.
5 Охарактеризуйте модульную (микроядерную) архитектуру построения ОС.
6 Преимущества и недостатки модульной структуры ОС.
7 Охарактеризуйте объектно-ориентированную ОС.
8 Дайте определение понятия задачи при описании работы программного обеспечения.
9 Дайте определение понятиям процесс, поток.
10 Преимущества и недостатки потоков
Дата: 2019-04-23, просмотров: 296.