Contiki — это операционная система для сетевых систем с ограниченной памятью, ориентированная на маломощные беспроводные устройства Интернета вещей (IoT). Contiki используется для систем уличного освещения , звукового мониторинга для умных городов , радиационного мониторинга и сигнализации. [1] Это программное обеспечение с открытым исходным кодом, выпущенное под лицензией BSD-3-Clause .
Contiki был создан Адамом Данкельсом в 2002 году [2] и в дальнейшем развивался международной командой разработчиков из Texas Instruments, Atmel, Cisco, ENEA , ETH Zurich , Redwire, RWTH Aachen University , Oxford University, SAP, Sensinode, Swedish Institute of Computer Science , ST Microelectronics, Zolertia и многих других. [3] Contiki приобрел популярность благодаря встроенному стеку TCP/IP и легковесному упреждающему планированию через событийно-управляемое ядро [4], что является очень мотивирующей функцией для IoT. Название Contiki происходит от знаменитого плота Тура Хейердала «Кон-Тики» .
Contiki обеспечивает многозадачность и встроенный набор протоколов Интернета (стек TCP/IP), при этом требует всего около 10 килобайт оперативной памяти ( ОЗУ) и 30 килобайт постоянной памяти (ПЗУ). [1] Полная система, включая графический интерфейс пользователя , требует около 30 килобайт оперативной памяти. [5]
Недавно была создана новая ветка, известная как Contiki-NG: ОС для устройств Интернета вещей следующего поколения.
Contiki разработан для работы на типах аппаратных устройств, которые сильно ограничены в памяти , мощности , вычислительной мощности и пропускной способности связи . Типичная система Contiki имеет память порядка килобайт, бюджет мощности порядка милливатт, скорость обработки измеряется в мегагерцах, а пропускная способность связи порядка сотен килобит/секунду. Такие системы включают в себя множество типов встроенных систем и старые 8-битные компьютеры.
Contiki предоставляет три сетевых механизма: стек uIP TCP/IP, [6] который обеспечивает сетевое взаимодействие IPv4 , стек uIPv6, [7] который обеспечивает сетевое взаимодействие IPv6 , и стек Rime, который представляет собой набор пользовательских облегченных сетевых протоколов, разработанных для беспроводных сетей с низким энергопотреблением. Стек IPv6 был предоставлен Cisco и на момент выпуска был самым маленьким стеком IPv6, получившим сертификацию IPv6 Ready . [8] Стек IPv6 также содержит протокол маршрутизации Routing Protocol for Low power and Lossy Networks (RPL) для сетей IPv6 с низким энергопотреблением и потерями и уровень сжатия и адаптации заголовков 6LoWPAN для соединений IEEE 802.15.4 .
Rime — это альтернативный сетевой стек, используемый в случаях, когда накладные расходы стеков IPv4 или IPv6 являются непомерными. Стек Rime предоставляет набор примитивов связи для маломощных беспроводных систем. Примитивами по умолчанию являются одноадресная одноадресная передача, одноадресная широковещательная передача, многоадресная одноадресная передача, сетевая лавинная передача и сбор данных без адреса. Примитивы могут использоваться по отдельности или в сочетании для формирования более сложных протоколов и механизмов. [9]
Многие системы Contiki имеют серьезные ограничения по мощности. Беспроводным датчикам на батарейном питании может потребоваться обеспечить годы автономной работы с небольшими средствами для подзарядки или замены батарей. Contiki предоставляет набор механизмов для снижения энергопотребления систем, на которых он работает. Механизм по умолчанию для достижения маломощной работы радиостанции называется ContikiMAC. [10] С ContikiMAC узлы могут работать в режиме маломощной работы и по-прежнему иметь возможность принимать и ретранслировать радиосообщения.
Система Contiki включает в себя симулятор датчиков под названием Cooja, который имитирует узлы Contiki. [11] Узлы принадлежат к одному из трех следующих классов: a) эмулированные узлы Cooja, b) код Contiki, скомпилированный и выполненный на хосте симуляции, или c) узлы Java, где поведение узла должно быть переопределено как класс Java. Одна симуляция Cooja может содержать смесь узлов датчиков из любого из трех классов. Эмулированные узлы также могут использоваться для включения не-Contiki узлов в имитируемую сеть.
В Contiki 2.6 возможна эмуляция платформ с микроконтроллерами TI MSP430 и Atmel AVR .
Для эффективной работы в системах с небольшим объемом памяти модель программирования Contiki основана на протопотоках . [12] [13] Протопоток — это абстракция программирования с эффективным использованием памяти, которая разделяет возможности как многопоточности , так и программирования, управляемого событиями, для достижения низких накладных расходов памяти каждого протопотока. Ядро вызывает протопоток процесса в ответ на внутреннее или внешнее событие. Примерами внутренних событий являются срабатывающие таймеры или сообщения, отправляемые другими процессами. Примерами внешних событий являются срабатывающие датчики или входящие пакеты от соседа по радио.
Protothreads кооперативно планируются. Таким образом, процесс Contiki всегда должен явно возвращать управление ядру через регулярные интервалы. Процессы Contiki могут использовать специальную конструкцию protothread для блокировки ожидания событий, одновременно передавая управление ядру между вызовами каждого события.
Contiki поддерживает опциональную вытесняющую многопоточность для каждого процесса, межпроцессное взаимодействие с использованием передачи сообщений через события, а также опциональную подсистему графического пользовательского интерфейса (GUI) с прямой графической поддержкой локально подключенных терминалов или сетевого виртуального дисплея с помощью Virtual Network Computing (VNC) или через Telnet.
Полная установка Contiki включает в себя следующие функции:
Contiki поддерживается популярными библиотеками SSL/TLS , такими как wolfSSL , которая включает порт в своей версии 3.15.5. [14]
{{citation}}
: CS1 maint: location missing publisher (link){{citation}}
: CS1 maint: location missing publisher (link).{{citation}}
: CS1 maint: location missing publisher (link) Данкельс, А.; Шмидт, О.; Фойгт, Т.; Али, М. (2006). "Protothreads". Труды 4-й международной конференции по встраиваемым сетевым сенсорным системам - Sen Sys '06 . стр. 29. doi :10.1145/1182807.1182811. ISBN 1595933433. S2CID 983128.(PDF, слайды презентации).