ЖУРНАЛ СТА 3/2011
кирована на семафоре; ISR изменяет значение семафора, что вызывает пере- планирование и разблокирует задачу; поскольку эта задача имеет самый высокий приоритет среди готовых к выполнению, она получает процессор немедленно. Если при этом не включе- но карусельное (round-robin – RR) пла- нирование, то задача будет выполнять- ся, пока либо не заблокируется сама, либо не будет вытеснена более высоко- приоритетной задачей. – Прим. пер. ) Все задержки, связанные с реакцией ОС на прерывание (в случае если в результате прерывания возникает пе- репланирование), показаны на рис. 1. Существует множество способов обеспечить предсказуемость реакции ОС на внешнее событие. ОС реального времени (ОС РВ), такие как VxWorks, были созданы специально, чтобы удов- летворять этому требованию; Linux, с другой стороны, изначально разраба- тывалась как операционная система общего назначения (General Purpose OS – GPOS). К АК ПРЕВРАТИТЬ L INUX В ОС РЕАЛЬНОГО ВРЕМЕНИ ? За последние несколько лет был предпринят ряд усилий по улучшению производительности Linux, чтобы сде- лать её преимущества (например, широкий выбор прикладного ПО с открытым исходным текстом) доступ- ными для приложений реального вре- мени. В этом разделе статьи мы рас- смотрим два базовых подхода к пре- образованию Linux в ОС РВ. PREEMPT_RT и обеспечение вытесняемости ядра При использовании этого подхода ядро Linux модифицируется так, чтобы минимизировать время, проводимое им в невытесняемых секциях кода, когда оно не может реагировать на пре- рывания и соответствующие события перепланирования. Этот подход требу- ет комплексной модификации ядра, чтобы охватить все невытесняемые секции, и поэтому представляет собой итерационный процесс, в потенциале требующий тестирования после внесе- ния каждого изменения. Если обнару- живается код, время невытесняемого выполнения которого превышает уста- новленный лимит, он перерабатывает- ся, чтобы соответствовать заданным временным ограничениям. В реальности процесс поиска слиш- ком длинных невытесняемых секций является сугубо эмпирическим. Вы- числение времени реакции для худше- го случая (worst-case) требует исчерпы- вающего тестирования всех системных вызовов при всевозможных нагрузоч- ных сценариях. На практике это, есте- ственно, нереализуемо, и хотя этот метод и позволяет добиться приемле- мых значений времени реакции, абсо- лютную гарантию их соблюдения дать невозможно. Снижению времени реакции ядра Linux посвящён ряд открытых про- ектов, использующих различные под- ходы к обеспечению вытесняемости. Самый существенный из этих про- ектов – PREEMPT_RT – был начат Инго Молнаром (Ingo Molnar) и посте- пенно включается в основную ветвь кода ядра. Эта функциональность при- сутствует в составе платформ Wind River Linux. Данный подход обладает рядом оче- видных преимуществ; пожалуй, наибо- лее значимое из них то, что проект PREEMPT_RT широко признан как часть «официальной» Linux, поэтому его качество со временем улучшается (в частности, поддержка вытесняемо- сти добавляется в код драйверов уст- ройств). Однако есть и свои ограниче- ния, поскольку архитектурно-зависи- мым участкам кода и драйверам, отно- сящимся к недостаточно популярной аппаратуре, в сообществе может не уделяться необходимого внимания. В результате версии ядра Linux для раз- личных процессорных архитектур и даже для различных плат могут иметь различную производительность. В боль- шинстве случаев драйверы переносятся в модель PREEMPT_RT без измене- ний, но потенциальные проблемы с их производительностью и корректностью совместной работы классических и новых драйверов поднимают вопрос дополнительного тестирования. Wind River Real-Time Core и концепция модуля реального времени (Real-Time Executive) В данном варианте в системе одно- временно присутствуют два ядра: ядро Linux и компактное ядро реального времени. Этот подход используется в Wind River Real-Time Core для Wind River Linux: там ядро Linux выполняет- ся под управлением ядра реального времени как задача самого низкого приоритета и получает прерывания через слой виртуализации. Первичная обработка прерываний полностью лежит на ядре реального времени, и ядро Linux получает их только тогда, когда нет других готовых к выполне- нию задач; задачи же реального време- ни загружаются в пространство ядра и получают прерывания незамедлитель- но, что обеспечивает им скорость реак- ции, сравнимую с аппаратной. Wind River Real-Time Core и пользо- вательские задачи Linux взаимодей- ствуют посредством неблокирующих очередей и разделяемой памяти. С точки зрения прикладного програм- миста очереди выглядят наподобие стандартных для Linux символьных устройств, доступных через POSIX- 16 СТА 3/2011 ОБ ЗОР / П РОГ РАММНОЕ ОБ Е СП Е Ч Е НИЕ www.cta.ru Выполняется задача А Аппаратное время реакции Программное время реакции Время реакции на прерывание Время переключения Прерывание Время выполнения подпрограммы обработки прерывания Время пере планирования Время переключения контекста Передача управления другой задаче Выполняется задача Б Рис. 1. Реакция ОС на прерывание (с перепланированием) © СТА-ПРЕСС
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy