Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Классификация операционных систем реального времени.



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

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

Все ОС РВ являются многозадачны­ми операционными системами. Зада­чи делят между собой ресурсы вы­числительной системы, в том числе и процессорное время.

По своей внутренней архитектуре ОС РВ можно условно разделить на монолитные ОС, ОС на основе микроядра и объектно-ориентированные ОС. Графически различия в этих подходах иллюстрируются рисунками 2.1, 2.2, 2.3.

 

 

Рис. 2.1. ОС РВ с монолитной архитектурой   Рис.2.2. ОС РВ на основе микроядра

 


5. Классификация операционных систем реального времени. [ 2]

 



Рис. 2.3. Объектно-ориентированная ОС РВ

 

Кроме того, возможна следующая классификация ОСРВ:

1. Ядро РВ (ядро ОС, спроектированное специально для задач РВ). Этот тип ОС обычно не приспособлен для разработки ПО. Конфигурирование ОС этого типа осуществляется с помощью инструм. ОС.

2. Unix, адаптированный для задач РВ. Внутренняя структура Unix близка к СРВ и он доступен в исходных кодах.

3.Расширение ОС для задач РВ. Берется Windows NT или Linux и поверх его устанавливается специальный расширитель РВ.



Требования к ОСРВ

Большинство систем реального времени поддер­живают ядро или микроядро. Рассмотрим требования к операционной системе реального времени. Итак, операционная система реального времени должна:

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

2. реализовывать вытесняющее планирование с приоритетами. Это означает, в частности, что у каждой задачи должен быть свой приоритет;  

3. предоставлять механизмы синхронизации и обмена информацией между задачами;

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

5. включать механизм наследования приоритета. Когда задача А входит в кри­тическую секцию, ее приоритет должен быть повышен. В про­тивном случае задача А может быть вытеснена другой высокоприоритетной задачей, которая не сумеет войти в эту же критическую секцию, поскольку она занята задачей А. Таким образом, высокоприоритетная задача окажется навечно заблокированной;

6. иметь предсказуемое поведение (например, при выполнении контекстного переключения, синхронизации задач и обработке прерываний). Это означа­ет, что максимальное время отклика должно быть прогнозируемо при лю­бой ожидаемой нагрузке на систему. Т.е. разработчики ОС должны специфицировать такие временные характеристики, как "задержка обработки прерывания" (interrupt latency), максимальное время маскировки прерываний, а также максимальное время исполнения всех системных вызовов. ОС должна обеспечивать предсказуемые механизмы для синхронизации между нитями и взаимодействия процессов, разрешающие проблему "инверсии приоритетов". Это означает, что как при передаче данных, так и при синхронизации нитей должно обеспечиваться "наследование приоритетов" (или эквивалентный механизм).

7. поддерживать вытесняющую многопоточность (preemptive multi-threading) и мультипроцессорные архитектуры.

8. Аппаратная арх-ра должна поддерживать несколько уровней прерываний (interrupt levels), а ОС должна обеспечивать вытеснение (preemption) обработчиков прерываний.

9. Способность работать в огранич.ресурсах, особенно это касается оперативной памяти.

10. Стоимость системы при массовых тиражах должна быть достаточно низкой.

11. обеспечивать API и "нижележащий" сервис, соответствующий по структуре и реализации требованиям систем реального времени.



Задачи, процессы, потоки

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

Преимущества потоков.

1. Так как множество потоков способ­но размещаться внутри одного EXE-модуля, это позволяет экономить ре­сурсы как внешней, так и внутрен­ней памяти. 2. Использование потоками общей об­ласти памяти позволяет эффективно организовать межзадачный обмен сообщениями (достаточно передать указатель на сообщение). Процессы не имеют общей области памяти. По­этому ОС должна либо целиком скопировать сообщение из области па­мяти одной задачи в область памяти другой (что для больших сообщений весьма накладно), либо предусмот­реть специальные механизмы, кото­рые позволили бы одной задаче по­лучить доступ к сообщению из об­ласти памяти другой задачи.

3. Как правило, контекст потоков меньше, чем контекст проц-в, а значит, время переключ-я м/у задачами-потоками меньше, чем м/у задачами-проц-ми. 4. Так как все потоки, а иногда и само ядро РВ размещаются в одном ЕХЕ-модуле, значительно упрощается ис­пользование программ-отладчиков (debugger).

Недостатки потоков.

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

2. То, что потоки имеют доступ к областям данных друг друга, может при­вести к ситуации, когда некорректно работающий поток способен испор­тить данные другого потока. В отли­чие от этого процессы защищены от взаимного влияния, а попытка запи­си в «не свою» память приводит, как правило, к возникновению специ­ального прерывания по обработке «исключительных ситуаций».

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



Основные свойства задач.

Как правило, вся важная, с точки зре­ния операционной системы, информа­ция о задаче хранится в унифициро­ванной структуре данных – управляющем блоке (Task Control Block , TCB). В блоке хранятся такие параметры, как имя и номер задачи, верхняя и нижняя границы стека, ссылка на очередь сооб­щений, статус задачи, приоритет и т. п.

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

Контекст задачи – это набор дан­ных, содержащий всю необходимую информацию для возобновления вы­полнения задачи с того места, где она была ранее прервана. Часто контекст хранится в TCB и включает в себя такие данные, как счетчик команд, указатель стека, регистры CPU и FPU и т. п. Плани­ровщик задач в случае необходимости сохраняет контекст текущей активной задачи и восстанавливает контекст за­дачи, назначенной к исполнению. Та­кое переключение контекстов и явля­ется, по сути, основным механизмом ОС РВ при переходе от выполнения од­ной задачи к выполнению другой.

Состояние (статус) задачи. С точ­ки зрения операционной системы, за­дача может находиться в нескольких состояниях. Число и название этих со­стояний различаются от одной ОС к другой. По-видимому, наибольшее чис­ло состояний задачи определено в язы­ке Ada. Тем не менее, практически в лю­бой ОС РВ загруженная на выполнение задача может находиться, по крайней мере, в трех состояниях.

1. Активная задача – это задача, выпол­няемая системой в текущий момент времени.

2. Готовая задача – это задача, готовая к выполнению и ожидающая у плани­ровщика своей «очереди».

3. Блокированная задача – это задача, выполнение которой приостановле­но до наступления определенных со­бытий. Такими событиями могут быть освобождение необходимого задаче ресурса, поступление ожидае­мого сообщения, завершение интер­вала ожидания и т. п.

8. Основные свойства задач. [ 2 ]

Пустая задача (Idle Task) – это зада­ча, запускаемая самой операционной системой в момент инициализации и выполняемая только тогда, когда в сис­теме нег других готовых для выполнения задач. Пустая задача запускается с самым низким приоритетом и, как пра­вило, представляет собой бесконечный цикл «ничего не делать». Наличие пус­той задачи предоставляет операцион­ной системе удобный механизм отра­ботки ситуаций, когда нет ни одной го­товой к выполнению задачи.

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

Реентерабельность (повторная входимость) означает возможность без негативных последствий временно пре­рвать выполнение какой-либо функции или подпрограммы, а затем вызвать эту функцию или подпрограмму снова. Частным проявлением реентерабельности является рекурсия, когда тело подпрограммы содержит вызов самой себя. Классическим примером нереентерабельной системы является DOS, a типичной причиной нереентерабель­ности служит использование глобаль­ных переменных.

Дальше идет пример, его, думаю, можно не писать:

Предположим, что у нас есть функция, реализующая низкоу­ровневую запись на диск, и пусть она использует глобальную переменную write_sector, которая устанавливается в соответствии с параметром, передавае­мым этой функции при вызове. Пред­положим теперь, что Задача А вызывает эту функцию с параметром 3, то есть хо­чет записать данные в сектор номер 3. Допустим, что когда переменная write_sector уже равна 3, но сама запись еще не произведена, выполнение Зада­чи А прерывается и начинает выпол­няться Задача В, которая взывает ту же функцию, но с аргументом 10. После то­го как запись в сектор номер 10 будет произведена, управление рано или поздно вернется к Задаче А, которая продолжит работу с того же места. Од­нако, так как переменная write_sector имеет теперь значение 10, данные Зада­чи А, предназначавшиеся для сектора номер 3, будут вместо этого записаны в сектор номер 10. Из приведенного при­мера видно, что ошибки, связанные с нереентерабельностью, трудно обнару­жить, а последствия они могут вызвать самые катастрофические.



Планирование циклических задач, кооперативная многозадачность

Важной частью любой ОС РВ являет­ся планировщик задач. Несмотря на то, что в разных источниках он может на­зываться по-разному (диспетчер задач, супервизор и т. п.), его функции оста­ются теми же: определить, какая из за­дач должна выполняться в системе в каждый конкретный момент времени. Самым простым методом планирова­ния, не требующим никакого специ­ального ПО и планировщика как тако­вого, является использование цикли­ческого алгоритма стиле round robin .

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

1. Подпрограммы не должны содер­жать циклов ожидания

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

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

Можно отметить следующие преиму­щества циклического алгоритма.

1. Простота использования и прозрач­ность для понимания.

2. Если исключить из рассмотрения прерывания, система полностью де­терминирована. Задачи всегда вызы­ваются в одной и той же последова­тельности, что позволяет достаточно просто произвести анализ «наихуд­шего случая» и вычислить макси­мальную задержку.

3. Минимальные размеры кода и дан­ных. Кроме того, в отличие от алго­ритмов с вытеснением, для всех задач необходим только один стек.

4. Отсутствуют ошибки, обусловлен­ные «гонками».

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

Кооперативная многозадачность – это еще один алгоритм переключе­ния задач, с которым широкие массы компьютерной общественности знакомы по oперационной системе Windows .. Задача, получившая управление, выполняется до тех пор, пока она сама по своей инициативе не передаст уп­равление другой задаче. По сути это продолжение идеологии round robin, и в чистом виде мало применяется в системах реального времени.



Планирование в режиме разделения времени

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

Существуют различные реализации в рамках этого алгоритма, и некоторые западные специалисты даже различают такие, в общем-то идентичные для нас понятия, как time - slicing (нарезание времени) и time - sharing (разделение времени). Как правило, алго­ритм реализуется следующим образом: каждой задаче отводится определен­ное количество квантов времени (обычно кратно 1 мс), в течение кото­рых задача может монопольно зани­мать процессорное время. После того как заданный интервал времени исте­кает, управление передается следую­щей готовой к выполнению задаче, имеющей наивысший приоритет. Та, в свою очередь, выполняется в течение отведенного для нее промежутка вре­мени, после чего все повторяется в сти­ле round robin. Легко заметить, что та­кой алгоритм работы может привести к определенным проблемам. Предста­вим, что в системе работают 7 задач, 3 из которых имеют высокий приоритет, а 4 – низкий. Низкоприоритетные за­дачи могут никогда не получить управ­ление, так как три высокоприоритет­ные задачи будут делить все процес­сорное время между собой. Единственную возможность для низкоприоритетных задач получить управление предоставляет ситуация, когда все высокоприоритетные задачи находятся в блокированном состоянии.

Для решения этой проблемы применяется прием, получивший название равнодоступность (fairness). При этом реализуется принцип адаптивной приоритетности, когда приоритет за­дачи, которая выполняется слишком долго, постепенно уменьшается, позво­ляя менее приоритетным задачам по­лучить свою долю процессорного времени. Равнодоступность применяется главным образом в многопользовательских системах и редко применяется в системах реального времени.


11. Алгоритм планирования – приоритетная задача с вытеснением

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




Виды синхронизации задач

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

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

2. Необходимо упорядочить доступ не­скольких задач к разделяемому ре­сурсу.

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

4. Необходима синхронизация задачи по времени. Диапазон различ.ва­риантов в этом случае достаточно широк, от привязки момента выдачи какого-л. воздействия к точному астрономич.времени до про­стой задержки выполнения задачи на опред.интервал времени. Для решения этих вопросов использ-ся спец.аппарат.средства - таймеры.

Связанные задачи. Взаимное согласование задач с по­мощью сообщ-й является одним из важнейших принципов ОС РВ. Способы реализации межзадач.обмена от­лич-ся большим разнообразием.

Объем инфо, передаваемой в сообщ-ях, может меняться от 1 бита до всей свободной емкости памяти системы. Во многих ОС РВ компо­ненты ОС, так же как и пользоват.задачи, способ­ны принимать и передавать сообщ-я. Сообщения м.б. асинхронными (до­ставка сообщений задаче производится после того, как она в плановом порядке получит управление) и синхронными (циркуляция сообщений оказывает не­посредственное влияние на планирова­ние задач). Н-р, задача, пославшая сообщение, немедленно блокируется, если для продолжения ра­боты ей необходимо дождаться ответа, или если низкоприоритетная задача шлет высокоприор.задаче со­общ-е, к-рого последняя ожидает, то высокоприор.задача, если используется приоритетная многозадачность с вытеснением, не­медленно получит управление.

Иногда сообщения передаются через отведенный для этого буфер опред.размера («почтовый ящик»). При этом новое сообще­ние затирает старое, даже если послед­нее не было обработано.

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

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

Сообщение может содержать как са­ми данные, предназначенные для пере­дачи, так и указатель на такие данные. В последнем случае обмен может; производиться с помощью разделяемых облас­тей памяти, разделяемых файлов и т. п.


Поделиться:



Последнее изменение этой страницы: 2019-04-21; Просмотров: 302; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.032 с.)
Главная | Случайная страница | Обратная связь