Все больше и больше микроконтроллеров не являются чем-то подобным — это полноценные машины под управлением Linux. Однако мощного процессора недостаточно, вам также нужна ОС, чтобы вы могли использовать его преимущества в реальном времени.
Если вы разрабатываете код для встраиваемого оборудования, то зачастую операционная система не мешает вам, и вы полностью контролируете процессор. Это просто и часто дешево, но имеет ряд недостатков. Если вы хотите, чтобы ваше устройство подключалось к Интернету вещей IoT, вам обычно нужны сложные службы, такие как Wi-Fi и Bluetooth, не говоря уже о файловой системе.
В результате существует тенденция к замене небольших микроконтроллеров, типичным примером которых является Arduino, полноценными системами на чипе, такими как Raspberry Pi или Intel Edison. Они гораздо более мощные, но для предоставления услуг они используют что-то вроде Linux. Со временем контроллер на базе Linux, вероятно, станет нормой для всех, кроме самых простых требований. Но существует проблема.
Если у вас есть процессор, вы можете определить, что и когда произойдет. При условии, что процессор достаточно быстр, вы можете установить, сколько времени займет процесс, и всегда быть готовым к приему ввода или отправке вывода в реальный мир. Это простейшая обработка в реальном времени. Однако, если между вами и процессором стоит операционная система, такая как Linux, вы не сможете определить, что и когда произойдет. Операционная система может приостановить вашу программу в любое время, когда ей потребуется использовать процессор для чего-то другого. Вы больше не можете гарантировать, сколько времени может занять процесс. Это может быть серьезной проблемой, если, например, ваша программа должна реагировать на аварийное состояние и не работает, потому что системная служба имеет более высокий приоритет.
Следовательно, вам нужна версия Linux, работающая в реальном времени, и это то, над чем многие люди работали в течение некоторого времени.
Разработка Linux в реальном времени была включена в основное ядро Linux в версии 2.6.22 еще в 2006 году. В нем были представлены два алгоритма планирования в реальном времени, которых было почти достаточно, чтобы сделать Linux в реальном времени, но не совсем. Обычно его называют «мягким реальным временем», чтобы провести различие между тем, что он делает, и требованиями системы «жесткого реального времени» с гарантиями времени обслуживания.
Как ни странно, многие программисты не понимают, что это так, и все еще ищут замену Linux, работающую в режиме реального времени. Конечно, есть приложения, для которых программного обеспечения реального времени недостаточно. Чтобы удовлетворить эту потребность, Linux Foundation недавно анонсировала новый совместный проект Linux в реальном времени при поддержке Google, National Instruments, OSADL, Texas Instruments, Altera, ARM, Intel и IBM.
Так что же этот проект добавит к Linux?
Похоже, что ответом является приоритетное прерывание в реальном времени и слой таймера с высоким разрешением. Ключевая идея состоит в том, что задача с наивысшим приоритетом должна выполняться, даже если это означает вытеснение задачи операционной системы. Это нацелено на уменьшение задержки переключения потоков с неограниченного ожидания в миллисекундах до микросекунд.
Это не совсем гарантирует время обслуживания, потому что в системе Linux есть части, которые нельзя вытеснить, и, следовательно, в худшем случае ожидание может быть дольше обещанного. Другими словами, все еще будут люди, называющие его «мягким», а не «жестким» режимом реального времени, потому что он все еще не детерминирован. Однако большинство приложений могут работать с вытеснением в реальном времени, и это делает Linux гораздо более привлекательным для небольших систем.