Поскольку стоимость аппаратной части постоянно снижается, стало экономически целесообразно применять вычислительные системы с несколькими процессорами. Рассмотрим распределенные системы (distributed systems), которые по своей природе лучше подходят для управления сложными процессами в реальном времени.
К основным преимуществам распределенных систем относятся:
- экономичность;
- надежность (при отказе нескольких процессоров остальные продолжают работать);
- возможность подобрать аппаратные средства в соответствии с конкретными требованиями.
Говоря о распределенной системе, необходимо иметь в виду, каким способом достигается распределение ресурсов. Одна крайность – когда единственным распределяемым ресурсом является сеть, соединяющая ЭВМ. Каждый из процессоров работает независимо и лишь обменивается сообщениями с остальными. Другая крайность – реально распределенная сетевая операционная система, предоставляющая пользователю гомогенную вычислительную среду, не зависящую от аппаратной платформы. Пользователь может вводить произвольные команды, а операционная система находит наиболее подходящий способ и место их выполнения.
Распределенные системы используются в управлении процессами, поскольку эти приложения являются принципиально распределенными и такая архитектура обеспечивает более полное соответствие между аппаратными и программными средствами и управляемым объектом. Сложный технологический процесс можно разбить на несколько уровней, на каждом из которых собираются и обобщаются (агрегируются) данные, передающиеся на более высокие уровни. Такой тип распределенной системы отвечает сформулированным выше принципам:
· она более экономична, чем централизованная система с одним процессором, выполняющим все функции (если процессор с необходимой производительностью возможно создать);
· она надежна в том смысле, что отказ одного из компонентов не влияет на работу других (при условии, что система хорошо структурирована);
· ее можно построить таким образом, чтобы она в максимальной степени соответствовала управляемому процессу.
Однако чисто аппаратный подход к надежности не решает всех проблем. В распределенной системе процессы, исполняющиеся на разном оборудовании, зависят и друг от друга, и от коммуникаций. Если процесс или оборудование в одном узле перестанет работать или возникнут проблемы с коммуникациями, то остановится выполнение не только конкретного процесса, но и процессов, зависящих от него.
По сравнению с централизованными системами распределенные системы управления требуют принципиально иных программных средств, поскольку такие системы тесно связаны с сетью. Сетевая операционная система должна управлять как ресурсами конкретной ЭВМ, так и всей сети. Поэтому функции операционной системы нельзя отделять от функциональных свойств сети, а работа сети оказывает заметное влияние на работу распределенной системы.
Главным различием между однопроцессорной и распределенной архитектурой является способ обмена информацией между процессами. Эта процедура важна при мультипрограммировании и программировании в реальном времени.
Функции операционных систем в среде реального времени
Операционная система (Operating System – OS) - это сложный программный продукт, предназначенный для управления аппаратными и программными ресурсами вычислительной системы. Она предоставляет каждому процессу виртуальную вычислительную среду, включающую в себя время процессора и память. «Виртуальная вычислительная среда» – это концептуальное понятие. Ее характеристики могут как совпадать, так и не совпадать с параметрами реального оборудования.
Многозадачность сейчас доступна почти на всех типах ЭВМ, и ее поддержка является одной из основных характеристик таких операционных систем, как UNIX и Windows NT. В первую очередь многозадачность должна обеспечивать распределение и защиту ресурсов. Первоначальной целью создания многозадачных систем и систем разделения времени (time-sharing systems), было желание обеспечить одновременный доступ нескольких пользователей к дорогим вычислительным ресурсам и, соответственно, снизить эксплуатационные расходы. В системах реального времени целью многозадачного режима является изоляция друг от друга операций и распределение рабочей нагрузки между отдельными программными модулями. Единственным "пользователем" в этом случае является система.
В системах разделения времени, или многопользовательских системах, основное внимание уделялось защите и изоляции пользователей друг от друга с использованием паролей, управления доступом, учета использования ресурсов и т. д. Системы реального времени в этом смысле имеют меньше ограничений, поскольку разработчик знает, что делает каждый модуль. В ситуациях, когда ценится каждый квант машинного времени, его нельзя тратить на дополнительные расходы по получению доступа. Поэтому файловые системы и механизмы защиты не являются компонентами операционных систем реального времени. Многопользовательские системы должны быть, в определенном смысле, "справедливыми", поскольку в режиме большой нагрузки нельзя допускать дискриминации ни одного пользователя. Наоборот, в приоритетных системах реального времени процессы четко разграничены с точки зрения права доступа к ресурсам процессора.
Распределенные операционные системы
Распределенная операционная система (distributed operating system) – это термин, обозначающий решения с различным уровнем функциональности. Распределенная операционная система может представлять собой средство сетевого взаимодействия, сетевую файловую систему с единым интерфейсом или даже совокупность независимых ЭВМ, которую пользователи системы воспринимают как единую ЭВМ.
Управление процессором и состояния процесса
Равными объектами в многозадачной среде являются процессы или задачи. На одном процессоре в любой момент времени может исполняться только одна задача. Контекст исполняемой задачи можно "заморозить", сохранив содержимое регистров процессора. При остановке текущей задачи процессор продолжает исполнение других задач. Таким образом, процессор есть ограниченный ресурс, который распределяется между всеми задачами. Для организации многозадачного режима выполнение каждой задачи разбивается на несколько коротких интервалов. Процессор исполняет часть первой задачи, затем второй, третьей и т.д. Временной интервал, собственный для каждой задачи, составляет, например, 10 миллисекунд.
Внешний эффект разделения процессорного времени между задачами состоит в параллельном выполнении n задач. Когда n задач выполняются в системе, каждая из них в среднем монопольно "располагает" процессором с производительностью 1/n, т. е. работает на виртуальном процессоре, производительность которого в n раз меньше, чем у реального физического процессора. Если вместе используется несколько процессоров, то это просто другая реализация того же логического принципа. В первом случае процессы разделены во времени, во втором в пространстве. Если исключить накладные расходы на планирование и межзадачное взаимодействие, то при выполнении n процессов на k одинаковых процессорах каждому процессу в среднем выделяется виртуальный процессор с производительностью равной k/n части от производительности одного физического процессора.
Простейшая многозадачная однопроцессорная система состоит из процесса, сохраняющего контекст текущего исполняющегося процесса в стеке или в определенной области памяти, и восстанавливающего контекст другого процесса, исполнение которого возобновляется с того места, где он был прерван. Системная программа, выбирающая один из готовых для исполнения процессов, называется планировщиком (scheduler). Стратегии выбора достаточно разнообразны и меняются от одной операционной системы к другой, однако чаще всего используется один из механизмов на основе приоритетов. Планировщик работает как один из процессов, который автоматически получает управление после каждого прерывания текущего процесса.
Операции по переключению процессов критичны по времени и должны выполняться с максимальной эффективностью. На процессорах первоначально разработанных для однозадачного режима, процедура сохранения и восстановления контекста – переключение процессов – реализуется длинной последовательностью стандартных инструкций. В набор команд процессора, спроектированного для работы в многозадачном режиме, входят специальные инструкций для сохранения и восстановления контекста. Заметим, что переменные процесса (массивы данных) не входят в состав контекста и сохранять их специально нет необходимости, поскольку они находятся в памяти, выделенной процессу и защищенной операционной системой от других процессов.
Планировщик вызывается обычно после обработки каждого прерывания. Если используется стратегия переключения процессов на основе квантования времени, необходимо иметь внешний по отношению к процессору интервальный таймер, вырабатывающий прерывания по истечении кванта времени (time slice) выделенного процессу. При возникновении прерывания исполнение текущего процесса останавливается и проверяется, должен ли быть прерван текущий процесс и заменен на новый. Принудительная приостановка текущего процесса для передачи управления другому процессу называется вытеснением.
Продолжительность кванта времени влияет на производительность системы. При коротком кванте улучшается общее время обслуживания коротких процессов. Однако, если величина кванта сопоставима со временем, необходимым для переключения процессов, большая часть ресурсов процессора будет уходить на планирование и переключение процессов. Если величина кванта слишком большая, увеличивается время ожидания процессами и, соответственно, время реакции на внешнее событие.
Стратегии выбора процесса
Существует несколько возможных стратегий выбора готовых к выполнению процессов. Для определения той или иной стратегии приходится принимать во внимание несколько противоречащих друг другу факторов – общее время, необходимое для решения, ограничение на время реакции, важность и другие. Возможны две основные стратегии.
Наиболее простой стратегией выбора является циклический, когда процессы выбираются последовательно один за другим в фиксированном порядке и через равные интервалы времени. Основное достоинство метода – простота, однако, поскольку процессам с различными требованиями выдаются равные ресурсы процессора, некоторые из них обслуживаются неадекватно потребностям.
Более сложный принцип выбора основан на приоритетах (priorities). При переключении планировщик передает управление готовому процессу с наивысшим приоритетом. Приоритет присваивается процессу в момент его создания и остается постоянным в течение всего времени – статический приоритет (static priority). Такой приоритет, как правило, определяется разработчиком на основе информации, предоставленной пользователем.
Планирование на основе статических приоритетов может привести к непредвиденным ситуациям. Процесс с наивысшим приоритетом, если он не находится в режиме ожидания, будет всегда выбираться для исполнения и практически полностью занимать процессор. Нетривиальным является также выбор между процессами с одинаковым приоритетом. Для исключения подобной ситуации применяются алгоритмы динамического назначения приоритетов (dynamic priority allocation). Например, планировщик снижает приоритет исполняемого процесса на фиксированную величину. В результате его приоритет будет ниже, чем у другого готового процесса, который затем и выбирается для исполнения. Таким образом обеспечивается выполнение всех процессов. Через некоторое время ожидающим процессам возвращаются их номинальные значения приоритетов. Этот метод обеспечивает исполнение процессов даже с низким приоритетом и гарантирует, что процесс с высоким приоритетом не будет непрерывно занимать процессор.
Разница в первоначально назначенных приоритетах приводит к тому, что процессы с более высокими приоритетами будут получать управление чаще, чем другие. Процессы, обращение к которым происходит более интенсивно и/или время реакции которых ограничено, получают в начальный момент более высокие приоритеты. Менее важным процессам, для которых допустима отложенная реакция, присваиваются низкие приоритеты.
Планирование процессов, основанное на приоритетах, работает хорошо, только если разные процессы имеют неодинаковые приоритеты. Присвоение наивысших приоритетов всем процессам не повышает скорость исполнения, так как это не увеличивает быстродействие процессора, – каждый процесс будет ждать в очереди до тех пор, пока все остальные не будут выполнены. Система, в которой всем процессам присвоены одинаковые приоритеты, работает по циклическому принципу. Наилучшие результаты достигаются в системе реального времени, если относительные приоритеты тщательно выбраны и сбалансированы.