Надежность и производительность ОС Linux
Операционная система Linux не является ОС реального времени. В Linux реализован механизм планирования процессов, который называется режимом равноправия и который предназначен для систем с разделением времени. Других, более подходящих для поддержки режима реального времени механизмов (таких как вытеснение на основе приоритетов и др.), в Linux нет. Но это еще не самая серьезная проблема. Для пользовательских процессов Linux-ядро не является ни вытесняемым, ни повторно входимым. Если какой-либо из процессов обратится к функции ядра, никакие другие процессы не смогут выполняться до тех пор, пока первый не завершится или не перейдет в режим ожидания. Отсюда следует, что максимальная задержка отклика любой работающей под управлением ядра Linux задачи реального времени превышает не поддающееся оценке время, которое требуется для исполнения самой длинной кодовой последовательности ядра до перехода в режим ожидания. Кроме того, на быстроту реакции системы влияют обслуживание прерываний и операции прямого доступа в память. В ОС Linux отсутствуют ограничения на захват процессора процедурами обслуживания прерываний; при этом приоритет таких процедур превышает приоритет любой пользовательской задачи. Иными словами, даже в чрезвычайно быстрых системах с мощными процессорами класса Pentium время отклика пользовательских процессов в условиях перегрузки может достигать сотен миллисекунд и даже секунд.
К существующей в Linux проблеме режима реального времени можно подойти несколькими различными способами: игнорировать ее, запускать приложения реального времени в ОСРВ, в которой сама Linux исполняется в качестве отдельной задачи (как это, например, имеет место в случае RT-Linux), или использовать вместо ядра Linux ядро какой-либо совместимой с Linux операционной системы реального времени. Наиболее распространенный подход это первый. Как правило, определение real-time-требований на ранних стадиях реализации проекта является довольно трудной задачей (такое определение может оказаться простым делом лишь в том случае, когда приложение предъявляет к режиму реального времени весьма слабые требования). Если в ходе соответствующих исследований будет обнаружено, что с точки зрения реального времени применение Linux является нецелесообразным, разработчики смогут воспользоваться другими методами.
Операционная система RT-Linux
ОС RT-Linux это система, в которой Linux-ядро является отдельной задачей, выполняемой под управлением небольшой управляющей программы-диспетчера, работающей в реальном времени. Приложения реального времени исполняются под управлением этой программы, остальные под управлением ядра Linux. Данный подход отнюдь не нов. Много лет назад он был опробован для коммерческой ОС UNIX; в качестве более свежих примеров можно назвать попытки организации исполнения задач реального времени в компьютерах с операционной системой Windows NT. Одним из преимуществ этого метода является то, что программа-диспетчер реального времени может иметь достаточно малые размеры и простую структуру, что облегчает проверку соответствия системы требованиям реального времени. Кроме того, та Linux, что исполняет обычные (не real-time) задачи, является в данном случае самой обыкновенной Linux, совместимой с другими версиями этой операционной системы и допускающей быстрое осуществление различных модификаций/модернизаций. Такое решение сочетает в себе открытость с поддержкой приложений жесткого реального времени, в которых времена реакции на события обязаны выдерживаться в абсолютном числе случаев.
Нет никаких сомнений, что метод, предлагаемый RT-Linux, может быть использован для целого класса приложений реального времени. Контрольно-измерительные системы, а также системы управления оборудованием и технологическими процессами, в которых программные средства реального времени являются лишь небольшой частью всего прикладного ПО, будут прекрасно себя чувствовать под управлением ОС RT-Linux. Во всяком случае, это решение гораздо лучше, чем простое игнорирование требований к работе в реальном времени.
Однако в некоторых случаях модель RT-Linux будет не самым лучшим вариантом. В качестве примеров можно упомянуть накопление данных в устройствах массовой памяти, установление телефонных соединений и прочие приложения, предполагающие работу с базами данных реального времени, а также системы, в которых программы реального времени составляют значительную часть ПО и/или трудно отделимы от обычных Linux-программ. Проблема заключается в том, что задачи, исполняющиеся под управлением ядра реального времени, не могут воспользоваться сервисами ОС Linux, ее драйверами и т.д., в то время как работающие в среде Linux и имеющие доступ к соответствующим функциям задачи с реальным временем никак не связаны. Попытка реализовать модель RT-Linux приводит в таких случаях к значительному увеличению размеров ядра реального времени. Последнее при этом может не только чрезмерно раздуться и усложниться, но и начать выполнять многие несвойственные ему функции, в связи с чем в определенный момент может возникнуть вопрос об оправданности существования обычного Linux-ядра.
Совместимое с Linux ядро реального времени
Еще одним решением проблемы запуска real-time-приложений в среде Linux является замена ядра Linux совместимым с ним ядром, обладающим характеристиками жесткого реального времени. Фактически, уже в случае RT-Linux мы имеем дело ни с чем иным, как с отказом от попыток исполнения задач реального времени под управлением обычного Linux-ядра. Кроме того, после появления Стандартной Базы Linux (LSB Linux Standard Base), представляющей собой стандарт двоичного интерфейса для операционной системы Linux, последняя превращается из просто технологии в полноценную платформу исполнения приложений. Любая ОС, удовлетворяющая требованиям этого стандарта, в состоянии поддерживать исполнение Linux-приложений. Ядро это лишь небольшая часть всей операционной системы. Если модернизируется только ядро Linux, библиотеки же, утилиты и файловая структура остаются без изменений, обеспечить соответствие этому стандарту и совместимость с другими Linux-версиями становится еще проще. Ядро реального времени обязано лишь поддерживать все функции ядра Linux, оставаясь при этом полностью вытесняемым и повторно входимым. Оно должно иметь планировщик процессов реального времени и гарантировать не превышающую некоторого фиксированного предела длительность задержек, связанных с обработкой прерываний.
Преимущество данного подхода заключается в отсутствии каких бы то ни было ограничений на размеры и сложность прикладных real-time-программ. Задачи реального времени в этом случае имеют возможность запускать обычные , не рассчитанные на использование в жестком оперативном режиме задачи. Программисты, имеющие опыт разработки ПО для операционной системы Linux, автоматически становятся специалистами и в области программирования реального времени, поскольку с их точки зрения программные интерфейсы остаются без изменений.
Другие проблемы, связанные с использованием встраиваемой ОС Linux
Несмотря на весьма веские причины выбора Linux в качестве ОС для встраиваемой системы или встраиваемого устройства, в области лицензирования ей свойственны определенные проблемы. Операционная система Linux это не общедоступное ПО; ее лицензирование осуществляется согласно требованиям лицензии GPL (GNU Public License), устанавливающей строгий набор правил пользования.
Юридические вопросы
Использование Linux подчиняется принципам GPL общедоступной лицензии. Исходный текст любого регулируемого данной лицензией программного средства распространяется бесплатно. Исполняемые модули, генерируемые на основе подпадающих под действие GPL исходных текстов, также распространяются бесплатно. Любые модификации лицензированного с помощью GPL программного обеспечения автоматически подпадают под действие этой лицензии. Продавать исполняемые модули, на которые распространяется действие GPL-лицензии, разрешается по цене, не превышающей в совокупности стоимости носителя программного обеспечения и стоимости распространения. В случае распространения исполняемых модулей их исходные тексты должен стать общедоступными.
Что значит лицензия GPL для разработчика встраиваемых систем, имеющего дело с ОС Linux? Если разработчик каким-либо образом модифицирует Linux-ядро или утилиту, перенесет их на другую платформу или расширит набор их функциональных возможностей, он будет обязан опубликовать эти изменения в сети Интернет и предоставлять их бесплатно каждому, кто их запросит. При не вполне аккуратном поведении можно запросто лишиться прав на собственные программные средства, и потому по всем вопросам, касающимся охраны авторства в области открытых исходных текстов, имеет смысл советоваться с опытным юристом.
Включать операционную систему Linux в состав продаваемой аппаратуры считается вполне нормальным. В случае каких-либо модификаций ядра, библиотек или утилит Linux соответствующие исходные тексты должны стать общедоступными и распространяться бесплатно. Исполняющиеся в среде Linux прикладные программы могут при этом оставаться запатентованными; необходимо следить лишь за тем, чтобы в состав этих программ не входил никакой подпадающий под действие лицензии GPL (а равно и любой другой лицензии) код. Драйверы тоже могут быть запатентованными; при этом они должны быть явно отделены от ядра Linux. Одним из простейших способов является написание драйвера как загружаемого модуля ядра. Если же драйвер компонуется как часть базового ядра, вопрос о распространении на эту часть действия GPL-лицензии является весьма непростым, и лучшим решением здесь будет проконсультироваться с грамотным юристом, занимающимся вопросами охраны интеллектуальной собственности.
Заключение
Несмотря на то, что изначально ОС Linux не была рассчитана на использование во встраиваемых устройствах, продуманное конфигурирование и разработки некоторых поставщиков, предлагающих ее встраиваемые версии, делают эту операционную систему вполне применимой и в данном круге задач. Постепенно ОС Linux перерастает рамки просто технологии и превращается в мощную платформу для встраиваемых приложений. Использование этой операционной системы пока еще связано с определенными трудностями в таких областях, как лицензирование, ограничения на объемы занимаемой памяти, разработка программных средств, функционирование в безоператорном режиме и в бездисковых системах, поддержка встраиваемых процессоров и режим реального времени. ОС Linux не является общедоступным программным обеспечением и лицензируется в соответствии с требованиями лицензии GPL (GNU Public License), представляющей собой строгий набор правил пользования. При этом не вызывает сомнений, что популярность Linux будет стимулировать все более широкое применение во встраиваемых системах различных ее версий. С точки зрения используемых при выборе операционной системы основных критериев, таких как наличие аппаратных средств и готового программного обеспечения, Linux следует признать одним из главных кандидатов на роль ОС для встраиваемых приложений.