Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тема 42 Программирование систем реального времени

Работа добавлена на сайт samzan.net:


Лекция 9

Тема 4.2    Программирование систем реального времени. Методы программирования: параллельное программирование, мультипрограммирование и многозадачность. Приоритеты процессов и производительность системы. Управление ресурсами. Обмен информацией между процессами.

Последовательное программирование и программирование задач реального времени

Программа представляет собой описание объектов — констант и переменных — и операций, совершаемых над ними. Таким образом, программа — это чистая информация. Ее можно записать на какой-либо носитель, например на бумагу или на дискету.

Программы можно создавать и анализировать на нескольких уровнях абстракции (детализации) с помощью соответствующих приемов формального описания переменных и операций, выполняемых на каждом уровне. На самом нижнем уровне используется непосредственное описание — для каждой переменной указывается ее размер и адрес в памяти. На более высоких уровнях переменные имеют абстрактные имена, а операции сгруппированы в функции или процедуры. Программист, работающий на высоком уровне абстракции, не должен думать о том, по каким реальным адресам памяти хранятся переменные, и о машинных командах, генерируемых компилятором.

Последовательное программирование является наиболее распространенным способом написания программ. Понятие "последовательное" подразумевает, что операторы программы выполняются в известной последовательности один за другим. Целью последовательной программы является преобразование входных данных, заданных в определенной форме, в выходные данные, имеющие другую форму, в соответствии с некоторым алгоритмом — методом решения

Таким образом, последовательная программа работает как фильтр для исходных данных. Ее результат и характеристики полностью определяются входными данными и алгоритмом их обработки, при этом временные показатели играют, как правило, второстепенную роль. На результат не влияют ни инструментальные (язык программирования), ни аппаратные (быстродействие ЦП) средства: от первых зависят усилия и время, затраченные на разработку и характеристики исполняемого кода, а от вторых — скорость выполнения программы, но в любом случае выходные данные будут одинаковыми.

Программирование в реальном времени отличается от последовательного программирования — разработчик программы должен постоянно иметь в виду среду, в которой работает программа, будь то контроллер микроволновой печи или устройство управления манипулятором робота. В системах реального времени внешние сигналы, как правило, требуют немедленной реакции процессора. В сущности, одной из наиболее важных особенностей систем реального времени является время реакции на входные сигналы, которое должно удовлетворять заданным ограничениям.

В большинстве случаев применение обычных приемов последовательного программирования не позволяет построить систему реального времени. В таких системах независимые программные модули или задачи должны быть активными одновременно, т. е. работать параллельно, при этом каждая задача выполняет свои специфические функции. Такая техника известна под названием параллельного программирования. В названии делается упор на взаимодействие между отдельными программными модулями. Параллельное исполнение может осуществляться на одной или нескольких ЭВМ, связанных распределенной сетью. В этой главе будут рассмотрены принципиальные вопросы, относящиеся к обоим случаям.

Программы и процессы

Основным объектом в системах реального времени является процесс или задача. Между программами и процессами имеется существенное различие. Программы представляют собой информацию о том, как обрабатывать и преобразовывать исходные данные, а процессы суть программы, исполняемые процессором. Процесс состоит из кода, т. е. инструкций программы — области кода, области данных, в которой хранятся переменные и константы, свободной динамически распределяемой рабочей области памяти — кучи и стека (рис. 10.2). Два последних механизма зависят от конкретной реализации. Область стека примыкает к куче и расширяется за ее счет. Программа, написанная на одном и том же языке высокого уровня, а затем откомпилированная и исполняемая на разных ЭВМ, порождает различные процессы, каждый из которых имеет собственные области команд и данных, кучу и стек.

Частным типом процессов являются потоки. Они представляют собой часть программы, которая может независимо исполняться на том же сам или другом процессоре. Потоки порождаются процессом и выполняются параллельно, т. е. поток — это дочерний процесс. В отличие от процессов, потоки используют общую область данных, т. е. переменные породившего их процесса.

Последовательность преобразования программы в процесс состоит из сохранения исходного текста на компьютерном носителе (магнитная лента или диск), компиляции, связывания, каждый поток имеет собственный контекст, включающий отдельные область кода и стек. Потоки играют важную роль в операционных системах UNIX и Windows NT

загрузки (loading) и исполнения (execution). Эти шаги детально описываются в учебниках по программированию и операционным системам и здесь рассматриваться не будут.

Параллельное программирование, мультипрограммирование и многозадачность

Программирование в реальном времени требует одновременного исполнения нескольких процессов или задач на одной ЭВМ. Эти процессы используют совместно ресурсы системы, но более или менее независимы друг от друга.

Мультипрограммирование (multiprogramming) или многозадачность (multitasking) есть способ одновременного исполнения нескольких процессов. Такого эффекта можно добиться как для одного, так и для нескольких процессоров: процессы исполняются либо на одном, либо на нескольких связанных между собой процессорах. В действительности многие современные вычислительные системы состоят из нескольких процессоров, связанных между собой либо сетью передачи данных, либо общей шиной.

Иногда в технической литературе термин "параллельное программирование" используется как синоним мультипрограммирования. Однако эти понятия несколько различаются по смыслу. Параллельное программирование — это абстрактный процесс разработки программ, которые потенциально могут исполняться параллельно, вне зависимости от программно-аппаратной среды. Иными словами, предполагается, что каждая задача реализуется на собственном виртуальном процессоре. С другой стороны, мультипрограммирование представляет собой практический способ исполнения нескольких программ на одном центральном процессоре или в распределенной вычислительной системе. Параллельное программирование более трудоемко, чем последовательное, поскольку способности человека следить за развитием связанных процессов и исследовать их взаимодействие ограничены.

Программирование в реальном времени основано на параллельном программировании и включает в себя технику повышения эффективности и скорости исполнения программ — управление прерываниями, обработку исключений и непосредственное использование ресурсов операционной системы. Кроме того, программы реального времени требуют специальных методов тестирования.

Управление системными ресурсами. Однопроцессорная и распределенная архитектуры

Из-за снижения стоимости аппаратной части стало экономически целесообразно применять вычислительные системы с несколькими процессорами. Мы будем обсуждать в основном распределенные системы {distributed systems), которые по своей природе больше подходят для управления сложными процессами. К основным преимуществам распределенных систем относятся:

экономичность;

надежность (при отказе нескольких процессоров остальные продолжают работать);

возможность подобрать аппаратные средства в соответствии с конкретными требованиями.

Говоря о распределенной системе, необходимо иметь в виду, каким способом достигается распределение ресурсов. Одна крайность — когда единственным общим ресурсом является сеть, соединяющая ЭВМ, каждая из которых работает независимо и лишь обменивается сообщениями с остальными. Другая крайность — реально распределенная сетевая операционная система, предоставляющая пользователю гомогенную среду, не зависящую от аппаратной платформы. Пользователь может вводить произвольные команды, а операционная система находит наиболее подходящий способ и место их выполнения.

Распределенные системы используются в управлении процессами, поскольку эти приложения являются принципиально распределенными и такая архитектура обеспечивает более полное соответствие между аппаратными и программными средствами и управляемым объектом. Сложный технологический процесс можно разбить на несколько уровней, на каждом из которых собираются и обобщаются (агрегируются) данные, передающиеся на более высокие уровни. Такой тип распределенной системы отвечает сформулированным выше принципам: она более экономична, чем централизованная с одним процессором, выполняющим все функции (если такой процессор можно создать); она надежна в том смысле, что отказ одного из компонентов не нарушает работу других (при условии, что система хорошо структурирована), и ее можно построить таким образом, чтобы она в максимальной степени соответствовала управляемому процессу.

По сравнению с централизованными распределенные системы требуют принципиально иных программных средств, поскольку такие системы тесно связаны с сетью. Сетевая операционная система должна управлять как ресурсами отдельных ЭВМ, так и всей сети. Поэтому функции операционной системы нельзя отделять от функциональных свойств сети, а работа сети оказывает заметное влияние на работу распределенной системы. Фактически сетевые операционные системы имеют многоуровневую структуру, аналогично стеку коммуникационных протоколов.

Главным различием между однопроцессорной и распределенной архитектурами является способ обмена информацией между процессами. Эта процедура наиболее важна при мультипрограммировании и программировании в реальном времени. Она будет рассмотрена более подробно ниже в этой главе. В однопроцессорной конфигурации обмен данными между процессами происходит через общую локальную память, очередность доступа к которой регулируется многозадачной операционной системой.

В отличие от этого, в распределенной системе нет общей памяти как таковой, и процессы обмениваются информацией с помощью сообщений. Если один процесс должен передать информацию другому, то он формирует сообщение и обращается к услугам операционной системы для передачи его по назначению.

Этот принцип взаимодействия лежит в основе одной из наиболее важных концепций распределенных операционных систем — модели "клиент-сервер". В этой модели процесс либо запрашивает услуги — клиент, либо предоставляет их — сервер. Очевидно, что один и тот же процесс может быть как клиентом, так и сервером. "Услуга" — это некоторая законченная (замкнутая) операция, в частности выполнение расчетов, прием внешних данных, операция с устройством, например, вывод изображения на экран. В определенном смысле модель "клиент-сервер" можно рассматривать как расширенный вариант обращения к подпрограмме, при котором сервер играет роль подпрограммы или системной процедуры.

Модель "клиент-сервер" основана на обмене сообщениями между программами. Если клиент и сервер исполняются на разных ЭВМ, а сообщения передаются через сеть, то система является распределенной.

Чем больше вычислительные ресурсы процедур клиента и сервера и чем больше сложных функций они могут выполнять независимо, тем меньше число сообщений и, соответственно, нагрузка на сеть. Фактически важным преимуществом распределенных систем является то, что ресурсоемкие вычисления можно выполнять локально и в результате уменьшить объем трафика, поскольку передается только информация, относящаяся к более высокому абстрактному уровню, чем локальные вычисления, т. е. некоторый итог локальных операций. Иными словами, в хорошо спроектированной системе сообщения содержат информацию о цели ("установить опорное значение х = 78.2"), а не о том, какие шаги следует для этого предпринять ("каково значение х в данный момент?", = 63", "увеличить на 16", "каково х сейчас?", "х = 79", "уменьшить на 1", и т. д.). Промежуточные шаги выполняются локально при условии, что программное обеспечение спроектировано соответствующим образом.

 Функции операционных систем в среде реального времени

Операционная система (ОС) — это сложный программный продукт, предназначенный для управления аппаратными и программными ресурсами вычислительной системы. Она предоставляет каждому процессу виртуальную (логическую) среду, включающую в себя время процессора и память. "Виртуальная среда" — это концептуальное понятие. Ее характеристики могут как совпадать, так и не совпадать с параметрами реального оборудования.

Многозадачность сейчас доступна почти на всех типах ЭВМ, и ее поддержка является одной из основных характеристик таких операционных систем, как UNIX и Windows NT. В первую очередь многозадачность должна обеспечивать распределение и защиту ресурсов. Первоначальной целью создания многозадачных систем, или систем разделения времени (time-sharing systems), было желание обеспечить одновременный доступ нескольких пользователей к дорогим вычислительным ресурсам и, соответственно, разделить между ними эксплуатационные расходы, т. е.повысить экономическую эффективность оборудования. В системах реального времени целью многозадачного режима является изоляция друг от друга разных операций и распределение рабочей нагрузки между отдельными программными модулями. Единственным "пользователем" в этом случае является управляемая система.

В распределенной среде операционная система дополнительно выполняет функции сопряжения программ с сетью и управления обменом данными и сообщениями между ЭВМ. В сетевых операционных системах каждая ЭВМ имеет высокую степень автономности. Общесистемные требования к обмену информацией позволяют взаимодействовать процессам, даже если они работают под управлением разных операционных систем, при условии, что каждая из них обладает необходимыми сетевыми возможностями.

 Распределенные операционные системы

Распределенная операционная система — это общий термин, обозначающий решения с различным уровнем функциональности. Распределенная операционная система может представлять собой средство сетевого взаимодействия, сетевую файловую систему с единым интерфейсом или даже совокупность независимых ЭВМ, которую пользователи системы воспринимают как единую ЭВМ.

Различия хорошо видны на примере операции копирования файла, приведенного на рис. 10.4. Предположим, что на станции 3 выдана команда скопировать файл со станции 1 на станцию 2. При такой операции блоки обычно считываются из файла-источника в буфер в памяти станции, выполняющей копирование, а затем копируются в файл-приемник. Если хотя бы один из файлов (либо источник, либо приемник) расположен на станции, с которой была выдана команда копирования, то описанный алгоритм вполне приемлем, однако при работе в сети, когда в операции принимают участие три станции, возможен другой подход. Простейшая сетевая операционная система перенаправляет запросы ввода/вывода не к локальным, а к удаленным устройствам. Данные сначала копируются со станции 1 в промежуточный буфер на станции 3, а затем посылаются на станцию 2. Локальная команда Сору "ничего не знает" о том, что работает с удаленными файлами, поскольку за то, к какому устройству — локальному или удаленному — перенаправить запрос, отвечает сетевая операционная система. Такой механизм порождает явно избыточный трафик в сети.

Распределенная операционная система высокого уровня работает совершенно иначе. Станция 3 лишь инициирует процесс копирования, в котором в дальнейшем участвуют только станции 1 и 2; данные вообще не попадают на станцию 3 — она лишь получает информацию о результате завершения операции. Очевидно, что в этом случае объем трафика и время выполнения операции уменьшаются примерно вдвое.

Этот пример показывает не только, что термин "распределенная операционная система" имеет достаточно расплывчатый смысл и может означать совершенно разные решения, но и то, что при создании систем реального времени внимание следует уделять не только прикладному программированию — раз операционная система обеспечивает механизм перенаправления, то об этом можно не беспокоиться, — но и на способ реализации системных операций, т. е. на результирующую загрузку сети, которая может ухудшить характеристики системы, если не полностью остановить ее работу.

К операционным системам, используемым в распределенных средах, относятся UNIX, OSF/1 и Windows NT, которые будут рассмотрены более подробно в следующих разделах этой главы.

Управление процессором и состояния процесса

Основными объектами в многозадачной среде являются процессы или задачи, описываемые своим контекстом. На одном процессоре в любой момент времени может исполняться только одна задача. Контекст исполняемой задачи всегда можно "заморозить", сохранив содержимое регистров процессора. При остановке текущей задачи процессор продолжает исполнение других задач. Таким образом, процессор есть ограниченный ресурс, который распределяется между всеми задачами.

На одном процессоре для организации многозадачного режима выполнение каждой задачи разбивается на несколько коротких интервалов. Процессор выполняет часть первой задачи, затем второй, третьей и т. д. Временной интервал, выделенный для каждой задачи, составляет, например, 10 миллисекунд.

Внешний эффект разделения процессорного времени между задачами состоит в параллельном выполнении п задач. Когда п задач выполняются в системе параллельно каждая из них в среднем монопольно "располагает" процессором с производительностью 1/n, т. е. работает (развивается) на виртуальном процессоре, производительность которого в п раз меньше, чем у реального физического процессора. Если вместо одного используется несколько процессоров, то это просто другая реализация того же самого логического принципа. В первом случае процессы разделены во времени, во втором в пространстве. Если исключить накладные расходы на планирование и межзадачное взаимодействие, то при выполнении п процессов на k одинаковых процессорах каждому процессу в среднем выделяется виртуальный процессор с производительностью, равной k/n части от производительности одного физического процессора.

Простейшая многозадачная однопроцессорная система состоит из процедуры, сохраняющей контекст текущего процесса в стеке или в определенной области памяти и восстанавливающей контекст другого процесса, исполнение которого возобновляется с того места, где он был прерван. Системная программа, выбирающая один из готовых для исполнения процессов, называется планировщиком. Стратегии выбора достаточно разнообразны и меняются от одной операционной системы к другой, однако чаще всего используется какой-либо механизм на основе приоритетов. Планировщик работает как один из процессов, который автоматически получает управление после каждого прерывания текущего процесса.

Операции по переключению процессов критичны по времени и должны осуществляться с максимальной эффективностью. На процессорах, первоначально не разработанных для многозадачного режима, процедура сохранения и восстановления контекста — переключение процессов — реализуется длинной последовательностью стандартных инструкций процессора. В набор команд процессора, спроектированного для работы в многозадачном режиме, входят специальные инструкции для сохранения и восстановления контекста.

Планировщик вызывается обычно после обработки каждого прерывания. Если используется стратегия переключения процессов на основе квантования времени, необходимо иметь внешний по отношению к процессору интервальный таймер, вырабатывающий прерывания по истечении кванта времени, выделенного процессу. При возникновении прерывания исполнение текущего процесса приостанавливается и проверяется, должен ли быть прерван текущий процесс и загружен новый. Принудительная приостановка текущего процесса для передачи управления другому процессу называется вытеснением.

Продолжительность кванта времени влияет на производительность системы. При коротком кванте улучшается общее время обслуживания коротких процессов. Если величина кванта сопоставима со временем, необходимым для переключения процессов, то большая часть ресурсов процессора будет уходить на планирование и переключение. Если величина кванта слишком большая, увеличивается время ожидания процессов и, соответственно, время реакции.

Процесс исполняется до тех пор, пока не произойдет одно из следующих событий:

истек выделенный ему квант времени;

процесс заблокирован, например, ждет завершения операции ввода/вывода;

процесс завершился;

вытеснен другим процессом, имеющим более высокий приоритет, например
обработчиком прерываний.

В многозадачной среде процесс может находиться в одном из трех состояний (рис. 10.6).

Готов (ready). Процесс может начать исполнение, как только освободится процессор.

Исполнение (running, executing). Процесс исполняется в данный момент, т. е. про
цессор исполняет его код.

Ожидание, заблокирован (waiting, locked). Для продолжения работы процессу не
хватает какого-либо ресурса, за исключением ЦП, либо он ждет наступления
внешнего события.

Стратегии выбора процесса

Существует несколько возможных стратегий выбора готовых процессов из очереди. Для определения той или иной стратегии приходится принимать во внимание несколько противоречащих друг другу факторов — общее время, необходимое для решения задачи, ограничение на время реакции, важность и т. п. Мы рассмотрим две стратегии аналогичные тем, которые применяются при арбитраже шины

Наиболее простой стратегией выбора является циклический метод — процессы выбираются последовательно один за другим в фиксированном порядке и через равные интервалы времени. Основное достоинство метода — простота, однако, поскольку процессам с различными требованиями выделяются равные ресурсы процессора, некоторые из них обслуживаются неадекватно своим потребностям.

Более сложный принцип выбора основан на приоритетах. При каждом переключении планировщик передает управление готовому процессу с наивысшим приоритетом. Приоритет присваивается процессу в момент его создания и остается постоянным в течение всего времени — статический приоритет. Такой приоритет, как правило, определяется на основе информации, предоставленной пользователем.

Планирование на основе статических приоритетов может привести к неприятным ситуациям. Процесс с наивысшим приоритетом, если он не находится в состоянии ожидания, будет всегда выбираться для исполнения и практически полностью занимать процессор. Нетривиальным является также выбор между процессами с одинаковым приоритетом. Для исключения подобной ситуации применяется какой-либо алгоритм динамического назначения приоритетов. Например, планировщик снижает приоритет исполняемого процесса на фиксированную величину. В результате его приоритет будет ниже, чем у другого готового процесса, который затем и выбирается для исполнения. Таким образом, обеспечивается выполнение всех процессов. Через некоторое время ожидающим процессам возвращаются номинальные значения их приоритетов. Этот метод обеспечивает исполнение процессов даже с низким приоритетом и гарантирует, что процесс с высоким начальным приоритетом не будет непрерывно занимать процессор.

Планирование процессов, основанное на приоритетах, работает хорошо, только если разные процессы имеют неодинаковые приоритеты. Присвоение наивысших приоритетов всем процессам не повышает скорость исполнения, так как это не увеличивает быстродействие процессора, — каждый процесс будет ждать в очереди до тех пор, пока все остальные не будут выполнены. Система, в которой всем процессам присвоены одинаковые приоритеты, работает по циклическому принципу. Наилучшие результаты достигаются в системе реального времени, если относительные приоритеты тщательно выбраны и сбалансированы.

Управление оперативной памятью

Наиболее важным ресурсом после процессора является оперативная память. Методы управления, используемые в системах реального времени, обычно проще, чем в многопользовательских системах с разделением времени. В крупных вычислительных системах с множеством пользователей большинство программ и данных хранятся во вторичной (внешней) памяти — жесткий диск — и загружаются в оперативную память только при необходимости. Это приемлемо для систем разделения времени и пакетной обработки, в которых несущественно, начнется задание минутой раньше или позже. Однако в системах реального времени задержек исполнения быть не должно, поэтому все необходимые модули предварительно загружаются в оперативную память. Тем не менее, в системах реального времени может возникнуть необходимость в выгрузке содержимого части оперативной памяти на диск.

Механизм расширения оперативной памяти сверх физически установленного объема за счет временной выгрузки на диск не используемых в данный момент программ и данных называется виртуальной памятью. Работа виртуальной памяти основана на предположении, что объем памяти, требуемый для процессов, превосходит размер доступной оперативной памяти. Устройства массовой памяти, например жесткий диск, используемые для реализации этого механизма, должны обладать как достаточной емкостью, так и значительным быстродействием. Операционная система копирует с диска в оперативную память только те части процесса и области его данных, называемые страницами, которые непосредственно используются в данный момент, оставляя остальную часть во внешней памяти. Для загрузки наиболее часто используемых страниц и для уменьшения числа обращений к диску применяются различные стратегии оптимизации. Механизм виртуальной памяти позволяет процессу иметь адресное пространство больше, чем размер выделенной ему реальной оперативной памяти.

В системах реального времени представляет интерес только быстрая и эффективная виртуальная память. Чтобы быстро реагировать на внешние сигналы, соответствующие служебные процедуры должны постоянно храниться в оперативной памяти. Другим важным соображением, относящимся к использованию вторичной памяти в задачах реального времени, является ее работоспособность в производственной среде — жесткие диски и дискеты нельзя использовать в условиях сильных вибраций, ударов или интенсивных магнитных полей.

PAGE  40




1. вом звуков на письме и огромным колвом звуков из которых складывается речь.html
2. ИО Сентябрь Октябрь 2 9 16 23
3. Особенности дополнительного образования взрослых
4. з курсу Ґрунтознавство Ґрунтознавство як наука
5. Елементи інформаційних технологій в математичному програмуванні.html
6.  Устройство и принцип работыДля начала определимся что такое автомобильная подвеска
7. Цели легирования конструкционных сталей
8.  Налоговая полиция в системе государственных органов России Налоговая полиция Российской Федерации госу
9. Строение вещества
10. Семейный кодекс 1926г
11. Религия и медицина
12. Курсовая работа является комплексной содержащей две главы ~ теоретическую и практическую
13. 2005 Методичні вказівки до організації самостійної роботи з вивчення дисципліни ldquo;Основи права Конст
14. колобков перейти на сказки для детей постарше
15. Роль профессионального суждения бухгалтера в современных условиях
16. Виконання наказу або розпорядження в кримінальному праві
17. Йога Патанджали (16 различных переводов)
18. Статья- Виагра - лучшие эрекции для лучшего секса
19. Гражданскоправовая защита чести достоинства и деловой репутации
20. Реферат- Обстоятельства, смягчающие наказание