Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Классификация операционных систем реального времени.
Назовем операционной системой реального времени такую систему, которая может быть использована для построения систем жесткого реального времени. Одно из коренных внешних отличий систем реального времени от систем общего назначения — четкое разграничение средств разработки и исполнения. Набор инструментов исполнения в ОСРВ (ядро, драйверы, исполняемые модули) обеспечивает функционирование приложения реального времени. Все ОС РВ являются многозадачными операционными системами. Задачи делят между собой ресурсы вычислительной системы, в том числе и процессорное время. По своей внутренней архитектуре ОС РВ можно условно разделить на монолитные ОС, ОС на основе микроядра и объектно-ориентированные ОС. Графически различия в этих подходах иллюстрируются рисунками 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; Нарушение авторского права страницы