Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Что такое функционирование в «Реальном масштабе времени»Стр 1 из 5Следующая ⇒
Что такое время реакции системы Время реакции системы – это время от получения внешнего события до начала выполнения первой программы обработчика этого события. Временная задержка от получения входного сигнала до выдачи выходного сигнала должна быть небольшой, чтобы обеспечить приемлемое время реакции. Время реакции является системной характеристикой: при управлении ракетой требуется реакция в течение нескольких миллисекунд, тогда как для диспетчерского управления движением пароходов требуется время реакции, измеряемое днями. Системы обычно считаются системами реального времени, если время их реакции имеет порядок миллисекунд; диалоговыми считаются системы с временем реакции порядка нескольких секунд, а в системах пакетной обработки время реакции измеряется часами или днями. При этом исходные требования к времени реакции системы и другим временным параметрам определяются или техническим заданием на систему, или просто логикой ее функционирования. Например, шахматная программа, думающая над каждым ходом более года, работает явно не в реальном времени. Однако точное определение «приемлемого времени реакции» не всегда является простой задачей, а в системах, где одним из звеньев служит человек, подвержено влиянию субъективных факторов. Что такое «жесткое» и «мягкое» реальное время. Принято различать системы «жесткого» и «мягкого» реального времени. Эти различия не связаны с органолептическими свойствами систем. 1. Системой «жесткого» реального времени называется система, где неспособность обеспечить реакцию на какие-либо события в заданное время является отказом и ведет к невозможности решения поставленной задачи. Последствия таких отказов могут быть разные, от пролива драгоценной влаги на линии по розливу алкогольных напитков до более крупных неприятностей, если, например, вовремя не сработала система аварийных блокировок атомного реактора. Время реакции в системах «жесткого» реального времени должно быть все-таки минимальным. Разумеется, однозначного мнения о том, какое время реакции свойственно «жестким» системам, нет. Более того, с увеличением быстродействия микропроцессоров это время имеет тенденцию к уменьшению, и если раньше в качестве границы называлось значение 1 мс, то сейчас, как правило, называется время порядка 100 мкс. 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) не всегда оптимально соотв-т поставл.задаче. В нек-рых ОС РВ предусматривается такая возм-ть, когда сообщ-е от высокоприоритетной задачи обраб-ся в первую очередь (говорят, что сообщ-е наследует приоритет пославшей его задачи). Иногда полезным оказывается непосредств.управление приоритетом сообщений. Представим, что задача послала серверу (драйверу) принтера несколько сообщений, содержащих данные для печати. Если теперь задача хочет отменить всю печать, ей надо послать соотв.сообщ-е с более высоким приоритетом, чтобы оно встало в очередь впереди всех посланных ранее заданий на печать. Сообщение может содержать как сами данные, предназначенные для передачи, так и указатель на такие данные. В последнем случае обмен может; производиться с помощью разделяемых областей памяти, разделяемых файлов и т. п. Синхронизация во времени Как правило, в ОС РВ задается эталонный интервал (квант) времени, который иногда называют тиком (Tick) и который используется в качестве базовой единицы измерения времени. Размерность этой единицы для разных ОС рв может быть разной, как, впрочем, разными могут быть набор функций и механизмы взаимодействия с таймером. Функции по работе с таймером используют для приостановки выполнения задачи на какое-то время, для запуска задачи в определенное время, для относительной синхронизации нескольких задач по времени и т.п. Если в программе для ОС РВ вы увидите операнд delay (50), то, скорее всего, это обозначает, что в этом месте задача должна прерваться (блокироваться), а через 50 мс возобновить свое выполнение, а точнее, перейти в состояние готовности. Все это время процессор не простаивает, а решает другие задачи, если таковые имеются. Множество задач одновременно могут запросить сервис таймера, поэтому если для каждого такого запроса используется элемент в таблице временных интервалов, то накладные расходы системы по обработке прерываний от аппаратного таймера растут пропорционально размерности этой таблицы и могут стать недопустимыми. Для решения этой проблемы можно вместо таблицы использовать связный список и алгоритм так называемого дифференциального таймера, когда во время каждого тика уменьшается только один счетчик интервала времени. Для точной синхронизации таймера вычислительной системы с астрономическим временем могут применяться специальные часы с подстройкой по радиосигналам точного времени или навигационные приемники GPS, которые позволяют воспользоваться атомными часами на борту орбитальных космических аппаратов, запущенных по программе Navstar. 20. Linux реального времени. Для задач реального времени сообщество разработчиков Linux активно применяет специальные расширения – RTLinux, KURT и UTIME, позволяющие получить устойчивую среду реального времени. RTLinux представляет собой систему «жесткого» реального времени, а KURT (KU Real Time Linux) относится к системам «мягкого» реального времени. Linux-расширение UTIME, входящее в состав KURT, позволяет добиться увеличения частоты системных часов, что приводит к более быстрому переключению контекста задач. Проект KURT характеризуется минимальными изменениями ядра Linux и предусматривает два режима работы – нормальный (normal mode) и режим реального времени (real-time mode). Процесс, использующий библиотеку API-интерфейсов KURT, в любые моменты времени может переключаться между этими двумя режимами. Программный пакет KURT оформлен в виде отдельного системного модуля Linux – RTMod, который становится дополнительным планировщиком реального времени. Данный планировщик доступен в нескольких вариантах и может тактироваться от любого системного таймера или от прерываний стандартного параллельного порта. Программист может переключаться из одного режима в другой по событиям, либо в определенных местах программы. При переключении в режим РВ все процессы в системе «засыпают» до момента освобождения ветви процесса реального времени. Это довольно удобно при реализации задач с большим объемом вычислений, по своей сути требующих механизмов реального времени, например в задачах обработки аудио- и видеоинфо. Стандартно такты планировщика RTMod задаются от системного таймера – время переключения контекста задач реального времени (time slice) равно 10 мс. Используя же KURT совместно с UTIME, можно довести время переключения контекста задач до 1 мс. Прерывания обрабатываются стандартным для ОС Linux образом – через механизм драйверов. API-интерфейс KURT разделяется на две части – прикладную и системную. Прикладная часть позволяет программисту управлять поведением процессов, а системный API-интерфейс предназначен для манипулирования пользоват.процессами и программирования собственных планировщиков. Простота использования KURT позволяет с максимальным комфортом программировать задачи, требующие как функций реального времени, так и всего многообразия API-интерфейса Unix. Использ-е «мягкого» РВ обычно подходит для реализации мультимедийных задач, а также при обработке разного рода потоков инфо, где критично время получения результата. Совершенно другой подход применен при реализации в Linux «жесткого» РВ. 20. Linux реального времени. [2]
RTLinux – это дополнение к ядру Linux, реализующее режим «жесткого» реального времени, которое позволяет управлять различными чувствительными ко времени реакции системы процессами. По сути дела, RTLinux – это операционная система, в которой маленькое ядро реального времени сосуществует со стандартным POSIX-ядром Linux. Разработчики RTLinux пошли по пути запуска из ядра реального времени Linux-ядра как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, а в случае отсутствия обработчика реального времени — передаются Linux-ядру. Фактически Linux-ядро является простаивающей (idle) задачей операционной системы реального времени, запускаемой только в том случае, если никакая задача реального времени не исполняется. При этом на Linux-задачу накладываются определенные ограничения, которые, впрочем, для программиста прозрачны. Для обмена данными между операционными системами реального времени и Linux могут использоваться следующие механизмы: разделяемые области памяти; псевдоустройства, предоставляющие возможность обмена данными с приложениями реального времени. Ключевой принцип построения RTLinux – как можно больше использовать Linux и как можно меньше собственно RTLinux. Действительно, именно Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. «На плечи» RTLinux ложится только планирование задач реального времени и обработка прерываний. Многие разработчики уже приняли Linux и внедряют ее в своих коммерческих проектах как основную операционную систему для серверов приложений. Однако до сих пор при реализации вертикальных проектов на нижнем уровне применялись специализированные ОС реального времени. Ситуация может существенно измениться благодаря использованию расширений реального времени для Linux. Теперь не надо тратить средства на изучение и покупку специализированной ОС, а весь проект можно реализовать в рамках одной системы и без чрезмерных затрат. 21. Операционные системы реального времени и Windows Сегодня становится широко распространенным желание потребителей использовать Windows NT в СРВ. Для этого имеется ряд весомых, на первый взгляд, причин: Win32 API считается стандартом, а на его базе разработано огромное количество программ; графический интерфейс стал сегодня очень популярным; для NT имеется немало готовых решений для коммерческих применений; в среду NT включены многие виды средств разработки. NT – многонитевая ОС, она позволяет вытеснение, что удовлетворяет одному из требований к ОСРВ. 2-ое требование к ОСРВ связано с тем, что диспетчеризация должна осуществляться по приоритетам. В Windows NT имеются два класса приоритетов: класс реального времени и динамический класс. Процессы в классе реального времени имеют фиксированный приоритет, менять который может лишь само приложение, тогда как приоритет процессов динамического класса может меняться диспетчером. Процесс имеет базовый уровень приоритета. Нить в процессе может иметь приоритет в диапазоне плюс/минус 2 около баз.ур-ня или один из двух крайних ур-ней класса (16 или 31 для реального времени). Очевидно, что гарантировать предсказуемость системы можно только при использ-и процессов первого класса. Казалось бы, 2-е требование также удовлетворено. Но малое число возможных уровней препятствует реализации СРВ на базе NT. Больш-во соврем. ОС РВ позволяет иметь по крайней мере 256 различных ур-ней. Чем больше имеется ур-ней, тем более предсказуемо поведение системы. В Windows NT имеется только 7 различных ур-ней для нити в данном процессе. В рез-те многие нити будут выполняться с одинаковыми приоритетами и, как следствие, предсказуемость поведения системы будет посредственной. В ОС РВ вызовы системы синхронизации (семафоры или критические секции) должны уметь управлять наследованием приоритетов. В Windows NT это невозможно, поэтому это требование к ОСРВ не удовлетворяется. Таким образом, малое число приоритетов и невозможность решить проблему инверсии делают Windows NT пригодной только для очень простых СРВ. Т.о. даже поверхностный анализ Windows NT показывает, что эта система не годится для построения систем жесткого РВ (система непредсказуема - время выполнения системных вызовов и время реакции на прерывания сильно зависит от загрузки системы; система велика; нет механизмов защиты от зависаний и пр.). Поэтому даже в системах мягкого РВ Windows NT м.б. использована только при выполнении ряда рекомендаций и ограничений. 21. Операционные системы реального времени и Windows [2] Разработчики расширений пошли двумя путями: – использовали ядра классических операционных систем реального времени в качестве дополнения к ядру Windows NT. Таковы решения фирм "LP Eleknroniks" и "Radisys". В первом случае параллельно с Windows NT (на одном компьютере!) работает операционная система VxWorks, во-втором случае - InTime. Кроме того, предоставляется набор функций для связи приложений реального времени и приложений Windows NT. Технология использования двух систем на одном компьютере понятна - работу с объектом выполняет приложение реального времени, передавая затем результаты приложениям Windows NT для обработки, передачи в сеть, архивирования и пр. – вариант расширений реального времени фирмы VenturCom выглядит иначе: здесь сделана попытка "интегрировать" реальное время в Windows NT путем исследования причин задержек и зависаний и устранения этих причин с помощью подсистемы реального времени. Предложения VenturCom характерны еще и тем, что они предоставляют совершенно экзотическую для NT возможность, а именно - возможность конфигурирования Windows NT и создания встроенных конфигураций (без дисков, клавиатуры и монитора). Область применения расширений реального времени - большие системы реального времени, где требуется визуализация, работа с базами данных, доступ в интернет и пр. 22. Операционная система QNX. ОС QNX была создана программистами компании QNX Software System Ltd. в 1981 году и с этого момента она заняла лидирующее место среди СРВ, существующих на тот момент на рынке. ОС QNX смогла занять лидирующее положение благодаря многим особенностям, присущим только ей. QNX – это первая коммерческая ОС, построенная на принципах микроядра и обмена сообщениями. Система реализована в виде совокупности независимых (но взаимодействующих через обмен сообщениями) процессов различного уровня (менеджеры и драйверы), каждый из которых реализует определенный вид сервиса. Эти идеи обеспечили ряд важнейших преимуществ. Предсказуемость, означающую ее применимость к задачам жесткого реального времени. Ни одна версия Unix не может достичь подобного качества, поскольку нереентерабельный код ядра слишком велик. Любой системный вызов в Unix может привести к непредсказуемой задержке. То же самое относится к Windows NT, где реальное время заканчивается между ISR (первичный обработчик прерывания) и DPC (вызов отложенной процедуры). Масштабируемость и эффективность, достигаемую оптимальным использованием ресурсов и означающую ее применимость для встроенных (embedded) систем. В каталоге /dev нет огромной кучи файлов, соответствующих ненужным драйверам. Драйверы и менеджеры можно запускать просто из командной строки. И удалять (кроме файловой системы J) динамически. Можно иметь только тот сервис или те модули, к-рые реально нужны, причем это не требует серьезных усилий и не порождает проблемы. Расширяемость и надежность одновременно, поскольку написанный вами драйвер не нужно компилировать в ядро, рискуя вызвать нестабильность системы. Менеджеры ресурсов (сервис логического уровня) работают в кольце 3, при этом можно добавлять свои, не опасаясь за систему. Драйверы работают в кольце 1 и могут вызвать проблемы, но не фатального характера. Кроме того, их достаточно просто писать и отлаживать. Например, постоянная головная боль разработчиков драйверов для Linux – получение физически непрерывного блока памяти для DMA-устройств – устраняется просто и элегантно, через функцию mmap(). Быстрый сетевой протокол FLEET, прозрачный для обмена сообщениями, автоматически обеспечивающий отказоустойчивость, балансирование нагрузки и маршрутизацию между альтернативными путями доступа. Он не так универсален, как TCP/IP, но гораздо проще в использовании и эффективнее. 22. Операционная система QNX. [2] Богатый выбор графических подсистем, включающий QNX Windows, X11R5 и Photon, что позволяет разработчикам выбирать ту, которая лучше подходит для их целей. Для типичных областей применения QNX традиционная система X11 слишком тяжеловесна, но система Photon, построенная на тех же принципах модульности, что и сама QNX, позволяет получить полнофункциональный GUI (типа Motif 2.0), работающий вместе с POSIX-совместимой ОС всего в 4 Мбайт памяти. Недостатки: – нет поддержки SMP; – нет своппинга виртуальной памяти на диск; – неэффективная и нестандартная поддержка нитей (threads); – нет поддержки Java (как следствие предыдущего пункта); – нет поддержки отображения файлов в память; – многочисленные ограничения файловой системы; – нет поддержки Unix - domain sockets; – слабые средства разграничения и контроля доступа пользователей; – отсутствие средств безопасности в рамках собственного сетевого протокола. Стандарт POSIX. Стандарт POSIX. POSIX (Portable Operating System Interface Standard – стандарт переносимого интерфейса операционной системы) – это стандарт разработки программного обеспечения операционных систем, принятый IEEE. Обычно его называют POSIX 1003. POSIX основан на операционной системе UNIX – наиболее распространенной переносимой ОС. POSIX 1003.1 определяет базовые сервисы операционной системы, POSIX 1003. b – расширения для режима реального времени, а POSIX 1003.1с – расширения для параллельной обработки. Как следует из названия, POSIX - это стандарт на сопряжение (интерфейс) между операционной системой и прикладной программой. В тексте POSIX неоднократно подчеркивается, что стандарт не выдвигает никаких требований к деталям реализации операционной системы; его можно рассматривать как совокупность договоренностей между прикладными программистами и разработчиками операционных систем. Одним из важнейших свойств стандарта POSIX является то, что он определяет "стандартизованный программный интерфейс", которого должны придерживаться разработчики сложных программно-аппаратных систем. Стандарт POSIX 1003.1 задает библиотечные функции, которые должна поддерживать любая POSIX-совместимая система UNIX, например open , read и fork. POSIX 1003.1b определяет стандартный интерфейс операционной системы реального времени: системные вызовы, списки параметров и информацию о состоянии, возвращаемую каждым вызовом.
В стандарте POSIX 1003.1b указаны следующие сервисы: 1. Сервисы для управления параллельными задачами. Следующие три сервиса предоставляют средства для обмена информацией между задачами и для синхронизации: – двоичные семафоры; – сигналы реального времени; – передача сообщений. Этот сервис позволяет задаче с наивысшим приоритетом получать процессор по первому запросу, а значит, гарантирует быструю реакцию для наиболее критичных по времени задач; – вытесняющее планирование с приоритетами; 2. Сервисы времени. Следующий сервис важен для реализации событий таймера с высоким разрешением и выполнения измерений в системах реального времени: – часы и таймеры реального времени; 24. Стандарт POSIX. [2]
3. Сервисы управления памятью: – захват памяти задачей (см. следующий раздел); – файлы, проецируемые на память, и разделяемая память; 4. сервисы ввода/вывода: – синхронный ввод/вывод; – асинхронный ввод/вывод. Этот сервис необходим для реализации перекрытия между процессорными вычислениями и вводом/выводом. Стандарт POSIX 1003.1с добавляет к POSIX спецификацию параллельных потоков, которые позволяют программе запускать несколько экземпляров процедуры, выполняемых в раздельных потоках управления (задачах). Исполняемая программа представляет собой тяжеловесный процесс, имеющий собственное адресное пространство. Поток внутри него – это облегченный процесс. В терминологии POSIX тяжеловесные процессы называются просто процессами, а облегченные процессы – потоками (thread). Все потоки внутри данного процесса функционируют в одном и том же адресном пространстве. Системы реального времени 1. Что такое функционирование в «Реальном масштабе времени» 2. Приведите примеры функционирования в реальном масштабе времени. 3. Что такое время реакции системы. 4. Что такое «жесткое» и «мягкое» реальное время. 5. Классификация операционных систем реального времени. 6. Требования к операционной системе реального времени. 7. Задачи, процессы, потоки 8. Основные свойства задач 9. Планирование циклических задач, кооперативная многозадачность. 10. Планирование в режиме разделения времени. 11. Алгоритм планирования – приоритетная многозадачность с вытеснением. 12. Виды синхронизации задач 14. Синхронизация доступа задач к общему ресурсу. 15. Семафоры. 16. Критические секции, мутексы. 17. Смертельный захват, инверсия приоритетов. 18. Синхронизация задач с внешними событиями. 19. Синхронизация по времени. 20. Linux реального времени 21. Операционные системы реального времени и Windows 22. Операционная система QNX . 23. Контекстное переключение задач. 24. Стандарт POSIX.
Вопросы по алфавиту: Linux реального времени (20. ) Алгоритм планирования – приоритетная многозадачность с вытеснением. (11.) Виды синхронизации задач (12. ) Задачи, процессы, потоки (7. ) Классификация операционных систем реального времени. (5.) Контекстное переключение задач. (23. ) Критические секции, мутексы. (16. ) Операционная система QNX. (22. ) Операц-е с-мы реального времени и Windows (21) Основные свойства задач (8. ) Планирование в режиме разделения времени. (10. ) Планирование циклических задач, кооперативная многозадачность. (9. ) Приведите примеры функционирования в реальном масштабе времени. (2. ) Семафоры. (15. ) Синхронизация доступа задач к общему ресурсу (14. ) Синхронизация задач с внешними событиями. (18. ) Синхронизация по времени. (19. ) Смертельный захват, инверсия приоритетов. (17. ) Стандарт POSIX. (24. ) Требования к операционной СРВ (6. ) Что такое «жесткое» и «мягкое» реальное время. (4. ) Что такое время реакции системы. (3. ) Что такое функционирование в «Реальном масштабе времени» (1. )
Что такое функционирование в «Реальном масштабе времени» Существует множество определений СРВ. Толковый словарь по вычислительным системам дает такое определение: СРВ – любая система, в которой существенную роль играет время генерации выходного сигнала. Это обычно связано с тем, что входной сигнал соответствует каким-то изменениям в физическом процессе, и выходной сигнал должен быть связан с этими же изменениями. Временная задержка от получения входного сигнала до выдачи выходного сигнала должна быть небольшой, чтобы обеспечить приемлемое время реакции. Время реакции является системной характеристикой: при управлении ракетой требуется реакция в течении нескольких миллисекунд, тогда как для диспетчерского управления движением пароходов требуется время реакции, измеряемое днями. Системы обычно считаются системами реального времени, если время их реакции имеет порядок миллисекунд; диалоговыми считаются системы со временем реакции порядка нескольких секунд, а в системах пакетной обработки время реакции измеряется часами или днями. Примерами систем реального времени являются системы управления физическими процессами с применением вычислительных машин, системы торговых автоматов, автоматизированные системы контроля и автоматизированные испытательные комплексы. В толковом словаре по информатике дается такое определение: Режим реального времени - режим обработки данных, при котором обеспечивается взаимодействие вычислительной системы с внешними по отношению к ней процессами в темпе, соизмеримом со скоростью протекания этих процессов. Каноническое определение системы реального времени дано Дональдом Гиллиесом и выглядит так: «Системой реального времени является такая система, корректность функционирования которой определяется не только корректностью выполнения вычислений, но и временем, в которое получен требуемый результат. Если требования по времени не выполняются, то считается, что произошел отказ системы». Другие добавляют: «Поэтому необходимо, чтобы было гарантировано [аппаратными и программными средствами и алгоритмами обработки] выполнение требований по времени. Гарантия выполнения требований по времени необходима, чтобы поведение системы было предсказуемо. Также желательно, чтобы система обеспечивала высокую степень использования ресурсов, чтобы удовлетворять требованиям по времени [с минимальными затратами]». Термин «система реального времени» не означает, что система дает ответ на воздействие мгновенно – задержка может достигать секунд и более – но означает тот факт, что гарантируется некоторая максимально возможная величина задержки ответа, что позволяет системе решать поставленную задачу. Термин «система реального времени» в настоящее время может быть записан так: “Системой реального времени является такая система, корректность функционирования которой определяется не только корректностью выполнения вычислений, но и временем, в которое получен требуемый результат. Если требования по времени не выполняются, то считается, что произошел отказ системы”. 2. Приведите примеры функционирования в реальном масштабе времени Примерами систем реального времени являются системы управления физическими процессами с применением вычислительных машин, системы торговых автоматов, автоматизированные системы контроля и автоматизированные испытательные комплексы. Хорошим примером является робот, который должен брать что-либо с ленты конвейера. Объекты на конвейере движутся, и робот имеет некоторый небольшой интервал времени для того, чтобы схватить объект. Если робот опоздает, то объекта уже не будет на месте, и поэтому работа будет неверной, даже если робот переместил захват в правильное положение. Если робот поспешит, то объекта там еще не будет, более того, робот может заблокировать движение объектов. Другой пример – цикл управления самолетом, летящим на автопилоте. Датчики самолета должны постоянно передавать измеренные данные в управляющий компьютер. Если данные измерений теряются, то качество управления самолетом падает, возможно вместе с самолетом. Отметим следующую особенность: в примере с роботом мы имеем настоящий, «жесткий» режим реального времени, и если робот опоздает, то это приведет к полностью ошибочной операции. Однако это мог бы быть режим «квазиреального» времени, если бы опоздание робота приводило бы только к потере производительности. Многое из того, что сделано в области программирования в реальном времени, в действительности работает в режиме «квазиреального» времени. Грамотно разработанные системы, как правило, имеют уровень безопасности/коррекции поведения даже для случая, когда вычисления не закончились в необходимый момент, так что если компьютер чуть-чуть не успевает, то это может быть скомпенсировано. |
Последнее изменение этой страницы: 2019-04-21; Просмотров: 185; Нарушение авторского права страницы