Общесистемное программное обеспечение компьютерных систем управления реального времени

Операционной системой реального времени называется такая система, которая может быть использована для построения систем жесткого реального времени.

Напомним, что системой «жесткого» реального времени называется система, где неспособность обеспечить реакцию на какие-либо события в заданное время является отказом и ведет к невозможности решения поставленной задачи.

Одно из коренных внешних отличий ОС реального времени от ОС общего назначения — четкое разграничение систем разработки и систем исполнения.

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

Система исполнения ОСРВ и компьютер, на котором она выполняется, называют целевой системой.

Система разработки – этонабор средств, обеспечивающих создание и отладку приложения реального времени.

Большинство современных ведущих ОСРВ поддерживают целый спектр аппаратных архитектур, на которых работают системы исполнения (Intel, Motorola, PowerPC, RISC, MIPS и другие).

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

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

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

Требования к ОС РВ (минимальные):

- в операционной системе должно существовать понятие потока (нити);

- операционная система должна поддерживать многопоточность (многопроцессность) и вытеснение задач по приоритетам;

- операционная система должна поддерживать механизм синхронизации потоков с предсказуемыми характеристиками;

- должен иметь механизм наследования приоритетов;

- поведение операционной системы должно быть известным и предсказуемым (внутренние задержки прерываний, переключения задач, драйверов и т.д.).

Рассмотрим каждое из данных требований.

1. Понятие потока (нити)

Потоком называется непрерывная последовательность команд, которые выполняются непосредственно процессором (CPU).

Таким образом, любая программа, исполняемая процессором в текущее время, является потоком.

Введение понятие потока в операционную систему означает возможность параллельного выполнения нескольких программ.

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

В POCIX – совместимых системах (к ним относятся большинство ОС РВ) для создания потоков используется функция pthread_create() в которую передается в качестве аргумента имя подпрограммы-потока.

Подпрограмма, вызываемая данной функцией, создается внутри текущего процесса.

Поток может создаваться также как отдельный процесс.

Процессом называется окружение (среда выполнения) программы вместе с ее выполняемым кодом.

Окружением или средой выполнения задачи относятся ресурсы памяти, возможности доступа к устройствам ввода/вывода и различным системным ресурсом, которые операционная система создает для выполнения программы при ее вызове.

Программа включает главный поток процесса, т.е. тот, с которого начинается его выполнение. Он оформляется как функция main, а остальные потоки – как функции с параметром – указателем типа void и возвращаемым результатом – указателем типа void которые, компонуются в единый исполнимый модуль. Данный модуль содержит коды как главного потока (функции main()) так и остальных потоков.

Процесс всегда включает в себя как минимум один поток.

Для создания процесса в POCIX – совместимых системах используются следующие основные функции system() – запускает процесс с использованием механизма командного интерпретатора для запуска программы, spawn() – при использовании данной функции ОС создает для процесса окружение (выделяет адресное пространство и т.д.) и загружает в него программу, указанную в аргументах функции, ехес() – закрывает текущий процесс и в его окружение загружает программу указанную в аргументах функции, fork() – создает для процесса окружение (выделяет адресное пространство и т.д.) и загружает в него копию программы, вызвавшей данную функцию. Выполнение копии программы начинается с команды, следующей за вызовом функции fork() процесса-родителя

2. Многопоточность (многопроцессность) и вытеснение задач по приоритетам.

Многопоточность (многопроцессность) подразумевает одновременное (параллельное) выполнение нескольких потоков.

Операционная система должна обеспечивать переключение процессора с выполнения одного потока на выполнение другого потока.

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

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

Требование к вытеснению задач по приоритетам означает, что ОС из всех потоков, готовых к выполнению, ставит на выполнение всегда поток, имеющий более высокий приоритет.

Приоритет потока задается при его создании (вызове).

Готовность потока к выполнению определяется находится ли он в ожидании доступа к каким либо системным ресурсам, ресурсам ввода/вывода, данным формируемым другими процессами и т.д. или нет.

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

К таким механизмам относятся семафоры, мъютексы (мутексы), сообщения, импульсы, сигналы и, конечно, прерывания.

Семафоры и мутексы представляют из себя системные переменные, которые доступны потокам разных процессов. Они предназначены для синхронизации доступа потоков к общим ресурсам и данных.

Семафоры позволяют разрешать доступ к ресурсам одновременно нескольким потокам, после чего доступ блокируется до освобождения семафора каким либо из потоков. Количество потоков, которым одновременно разрешен доступ (значение счетчика), указывается при открытии потока (функция sem_open()).

Мутекс (mutex) это семафор, который разрешает доступ к ресурсам только одному потоку.

Сообщения (Msg) предназначены для обмена данными между потоками (клиент-сервер). При этом поток-клиент запрашивает сообщение у потока-сервера и блокируется до получения данного сообщения. Импульс является разновидностью сообщения и имеет фиксированную длину.

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

4. Механизм наследования приоритетов

Механизм наследования приоритетов предназначен для исключения ситуации инверсии приоритетов.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: