Главная » Статьи » Прочее | [ Добавить статью ] |
Определение режимов реального времени и требования к ним Основой для обсуждения архитектур реального времени на основе Linux будет служить приводимое ниже определение режима реального времени. Данное определение предложено Дональдом Джиллесом (Donald Gillies) и приводится в Realtime Computing FAQ (ссылка приводится в разделе Resources): Системой реального времени является такая система, в которой успех вычислений зависит не только от их логической правильности, но также и от времени, когда готовы результаты вычислений. Если не удается обеспечить соответствие временным ограничениям, то считается, что произошла системная ошибка. Другими словами, чтобы гарантировать временное поведение, система должна вести себя детерминированным образом в широком диапазоне нагрузок (от минимальной до самой неблагоприятной, максимальной нагрузки). Заметим, что в определении ничего не говорится о производительности, так как режим реального времени не имеет к этому никакого отношения: здесь речь идет только о предсказуемости. Например, при использовании быстрого современного процессора Linux способен обеспечить типичное время отклика на прерывание 20 мкс, но случайным образом это время может значительно увеличиваться. В этом заключается основная проблема: дело не в том, что Linux не является достаточно быстрым или эффективным, проблема заключается в отсутствии предсказуемого поведения. Приводимые далее примеры показывают сущность данной проблемы. На Рисунке 1 показаны результаты измерения времени отклика на прерывание. При поступлении прерывания (события) работа центрального процессора прерывается и он переходит к обработке прерывания. Некоторое время затрачивается на то, чтобы определить, какое именно событие произошло, затем, проделав некоторую работу, планировщик переключает необходимую задачу на работу с данным событием (переключение контекста - context switch). Время, которое проходит от поступления сигнала прерывания до создания необходимой задачи (предполагается, что эта задача будет иметь наиболее высокий приоритет) определяется как время отклика. Для систем реального времени это время отклика должно быть детерминированным и соответствовать заранее известному наиболее продолжительному времени ожидания.
Рисунок 1. Время задержки и время отклика на прерывание Полезным примером такого процесса является срабатывание стандартной подушки безопасности в совеременных автомобилях. В какой-то момент датчик сообщает о столкновении и отправляет прерывание центральному процессору, и тогда операционная система должна быстро выделить задачу, которая управляет работой подушки безопасности, причем ее выполнению не должны мешать другие задачи, которые не связаны с требованиями реального времени. Если подушка безопасности сработает на секунду позднее, чем это требуется, то лучше совсем отказаться от ее использования. Помимо детерминированности при обработке прерываний, для обработки в режиме реального времени важно обеспечить планирование задач с поддержкой периодических интервалов времени. Рассмотрим рисунок 2, где показано планирование для периодически вызываемых задач. Такое периодическое измерение и обработка необходимы для многих систем управления. Для обеспечения стабильной работы системы необходимо, чтобы определенная задача выполнялась через некоторый период времени (p). Например, рассмотрим работу антиблокировочной системы (АБС) в автомобиле. Эта система опрашивает скорость каждого колеса автомобиля и контролирует давление в тормозном устройстве каждого колеса (для предотвращения его блокировки) с частотой до 20 раз в секунду. Для обеспечения нормальной работы системы опрос датчика и управление должно выполняться через периодические интервалы времени. Это означает, что через определенный период времени выполнение других задач прерывается и выполняется задача, связанная с работой АБС. Рисунок 2. Планирование периодических задач Жесткий режим реального времени и мягкий режим реального времени Операционная система, которая способна поддерживать необходимые временные требования к задачам реального времени (даже при наиболее неблагоприятных нагрузках на процессор) называется системой с поддержкой жесткого режима реального времени. Однако жесткая поддержка реального времени не всегда является необходимой. Если операционная система способна обеспечивать временные требования в среднем, то она называется системой с поддержкой мягкого режима реального времени. Жесткие системы реального времени необходимы там, где неспособность выполнить временные требования может приводить к катастрофическим результатам (например, задержка в включении подушки безопасности или ошибка в управлении тормозным давлением, в результате чего колесо скользит непозволительно долго). Мягкие системы реального времени могут не удовлетворять каким-то временным ограничениям, и это не приводит к системной ошибке (наример, пропуск кадра при воспроизведении видео). Теперь, когда мы имеем представление о требованиях к режиму реального времени, обратимся к архитектурам Linux реального времени и рассмотрим, какой уровень поддержки реального времени они способны обеспечить и каким образом.
Подход на основе тонкого ядра (или микроядра) использует второе ядро для абстрагирования интерфейса между аппаратными устройствами и ядром Linux (см. рисунок 3). То ядро Linux, которое не работает в режиме реального времени, выполняется в фоновом режиме как задача с низким уровнем приоритета для тонкого ядра и на нем выполняются все задачи, не относящиеся к реальному времени. Задачи реального времени выполняются непосредственно в тонком ядре. Рисунок 3. Подход на основе тонкого ядра к жесткому режиму реального времени Основным назначением тонкого ядра (кроме выполнения задач реального времени) является управление прерываниями. Тонкое ядро перехватывает прерывания, благодаря этому гарантируется, что работа тонкого ядра не будет прервана другим ядром, которое не выполняет задачи реального времени. Это позволяет тонкому ядру обеспечить жесткую поддержку режима реального времени. Хотя подход на основе тонкого ядра имеет свои преимущества (жесткая поддержка реального времени вместе со стандартным ядром Linux), он имеет и недостатки. Обычные задачи и задачи реального времени не зависят друг от друга, это может значительно усложнить отладку. Кроме этого, обычные задачи не обеспечивают полную поддержку платформы Linux (именно по этой причине выполнение ядра носит название тонкого). Примерами реализации такого подхода являются RTLinux (теперь закрытая система, принадлежит Wind River Systems), Real-Time Application Interface (RTAI) и Xenomai.
В то время как тонкое ядро использует минимальное ядро, которое включает управление задачами, подход на основе наноядра двигается далее в этом направлении, еще более минимизируя размеры ядра. Такое ядро уже является в меньшей степени ядром, а в большей степени уровнем абстракции аппаратного обеспечения (HAL). Нано-ядро обеспечивает возможность совместного использования аппаратных ресурсов для нескольких операционных систем, которые выполняются на более высоком уровне (см. рисунок 4). Так как нано-ядро позволяет абстрагировать аппаратное обеспечение, то оно способно управлять приоритетами операционных систем, исполняемых на более высоком уровне, и благодаря этому, обеспечивать жесткую поддержку режима реального времени. Рисунок 4. Нано-ядро для поддержки абстрагирования аппаратного обеспечения Отметим схожесть между данным подходом и виртуализацией, которая обеспечивает возможность выполнения нескольких операционных систем. В нашем случае нано-ядро позволяет абстрагировать аппаратные устройства от обычного ядра и ядра реального времени. Это аналогично тому, как гипервизоры абстрагируют голое аппаратное обеспечение от выполняемых операционных систем. Более подробную информацию можно найти в разделе Ресурсы . Примером подхода на основе нано-ядра является Adaptive Domain Environment for Operating Systems (ADEOS). ADEOS обеспечивает возможности одновременного выполнения операционных систем. При возникновении определенного аппаратного события, ADEOS по очереди обращается ко всем операционным системам и определяет, кто из них будет осуществлять обработку события.
Подход на основе ядра ресурсов Еще один вариант архитектуры реального времени - подход на основе ядра ресурсов. В этом подходе к ядру добавляются модули, которые обеспечивают резервирование ресурсов различного типа. Такое резервирование обеспечивает доступ к системным ресурсам с временным разделением (центральный процессор, сеть или доступ к диску). Эти ресурсы имеют несколько параметров резервирования, таких как период повторного доступа, необходимое время обработки (то есть, период времени, необходимый для выполнения обработки), а также временные ограничения. Ядро ресурсов предоставляет набор прикладных интерфейсов программирования (API) которые позволяют задачам запрашивать подобное резервирование (см. рисунок 5). Затем ядро ресурсов объединяет эти запросы с целью, определяя график, который обеспечивает гарантированный доступ с учетом временных ограничений, действующих для конкретных задач (или же возвращается ошибка, если невозможно гарантировать такой доступ). Используя алгоритм планирования, такой как Earliest-Deadline-First (EDF), ядро затем может производить динамическое планирование нагрузки. Рисунок 5. Подход на основе ядра ресурсов обеспечивает резервирование ресурсов Одним из примеров реализации подхода на основе ядра ресурсов является Linux/RK от компании CMU, который интегрирует переносимое ядро ресурсов в Linux в качестве загружаемого модуля. Сегодня данный подход воплощен в коммерческой системе TimeSys Linux/RT.
Поддержка реального времени в стандартном ядре 2.6 Хотя описанные выше решения и представляю интерес с точки зрения архитектуры, все они работают "вокруг" ядра. Возникает вопрос - а возможно ли внести какие-то изменения в стандартное ядро Linux, чтобы обеспечить поддержку режима реального времени? Сегодня от ядра 2.6 можно получить поддержку мягкого режима реального времени
на основе простой конфигурации, которая обеспечивает для ядра полную вытесняемость
(см. рисунок 6). В стандартном ядре 2.6 Linux, когда пользовательский процесс выполняет
обращение к ядру (при помощи системного вызова), этот процесс не может быть вытеснен.
Это означает, что если процесс с низким приоритетом делает системный вызов, то процесс
с высоким приоритетом должен ждать пока системный вызов не будет завершен - только
после этого он сможет получить доступ к центральному процессору. Новая опция конфигурирования
Рисунок 6. Стандартное ядро 2.6 Linux с возможностью вытеснения Однако использование данной опции связано с определенными компромиссами.
Хотя эта опция обеспечивает поддержку мягкого режима реального времени и обеспечивает
более гладкое выполнение операционной системы, все это имеет определенную цену.
Добавленные при помощи
Другой полезной опцией в ядре 2.6 являются таймеры высокого разрешения. Эта новая опция позволяет таймерам работать с разрешением до 1 мкс (если это позволяет используемое аппаратное устройство), а также для повышения производительности реализует управление таймерами на основе красно-черных деревьев. Использование красно-черных деревьев позволяет активировать большое количество таймеров без ущерба для производительности работы подсистемы таймеров (O(log n)). Проделав небольшую дополнительную работу, при помощи патча PREEMPT_RT можно добавить поддержку жесткого режима реального времени. Чтобы добиться этого, патч PREEMPT_RT вносит несколько важных изменений. К ним относятся изменение некоторых используемых в ядре примитивов блокировки с целью сделать их полностью вытесняемыми, реализация наследования приоритета для мьютексов ядра и преобразование обработчиков прерываний в потоки ядра (также с целью обеспечить их полную вытесняемость).
Linux не только является идеальной платформой для экспериментов и оценки алгоритмов реального времени - сегодня поддержка реального времени реализована в стандартном ядре 2.6. Вы можете также обеспечить поддержку мягкого режима реального времени в стандартном ядре или же, приложив немного дополнительных усилий (патч для ядра), вы сможете создавать приложения с поддержкой жесткого режима реального времени. В этой статье приводится краткий обзор методов реализации вычислений в реальном времени для ядра операционной системы Linux. В многочисленных ранних попытках для выделения из стандартного ядра задач реального времени использовался подход на основе тонкого ядра. Затем стали использоваться подходы на основе нано-ядра, которые действовали во многом аналогично гипервизорам, использующимся сегодня в решениях по виртуализации. Наконец, современное ядро Linux обеспечивает собственные средства для поддержки как мягкого, так и жесткого режима реального времени. В данной статье приведен лишь самый общий обзор методов поддержки реального времени в Linux. В разделе Ресурсы содержится дополнительная информация о том, где можно получить материалы и методы по организации режимов реального времени. | |||||||||||||||||||||||||||
Просмотров: 1479 | |
Всего комментариев: 0 | |
Операционные Системы
[61]
ОС Open Source
|
Мобильный Linux [26] |
Сравнение ОС [7] |
Статьи о Linux [16] |
Свободное ПО [10] |
Програмирование [6] |
Не для нубов [5] |
Ядро [13] |
Хранилище данных [9] |
Устройства [1] |
Установка/конфигурирование/планиров [16] |
Файловые системы [3] |
Управление, основанное на политиках [1] |
Управление инфраструктурой [0] |
Серверы [5] |
Биографии [6] |
Прочее [25] |