Contiki es un sistema operativo para sistemas en red con limitaciones de memoria, enfocado en dispositivos inalámbricos de Internet de las cosas (IoT) de bajo consumo. Contiki se utiliza para sistemas de alumbrado público , monitoreo de sonido para ciudades inteligentes , monitoreo de radiación y alarmas. [1] Es un software de código abierto publicado bajo la licencia BSD-3-Clause .
Contiki fue creado por Adam Dunkels en 2002 [2] y ha sido desarrollado por un equipo mundial de desarrolladores de Texas Instruments, Atmel, Cisco, ENEA , ETH Zurich , Redwire, RWTH Aachen University , Oxford University, SAP, Sensinode, Swedish Institute of Computer Science , ST Microelectronics, Zolertia y muchos otros. [3] Contiki ganó popularidad debido a su pila TCP/IP incorporada y programación preventiva liviana sobre kernel impulsado por eventos [4] que es una característica muy motivadora para IoT. El nombre Contiki proviene de la famosa balsa Kon-Tiki de Thor Heyerdahl .
Contiki ofrece multitarea y un conjunto de protocolos de Internet (pila TCP/IP) integrado , pero sólo necesita unos 10 kilobytes de memoria de acceso aleatorio (RAM) y 30 kilobytes de memoria de sólo lectura (ROM). [1] Un sistema completo, incluida una interfaz gráfica de usuario , necesita unos 30 kilobytes de RAM. [5]
Recientemente se ha creado una nueva rama, conocida como Contiki-NG: El sistema operativo para dispositivos IoT de próxima generación
Hardware
Contiki está diseñado para funcionar en tipos de dispositivos de hardware que tienen limitaciones severas en memoria , potencia , capacidad de procesamiento y ancho de banda de comunicación . Un sistema Contiki típico tiene una memoria del orden de kilobytes, un presupuesto de energía del orden de milivatios, una velocidad de procesamiento medida en megahercios y un ancho de banda de comunicación del orden de cientos de kilobits por segundo. Dichos sistemas incluyen muchos tipos de sistemas integrados y computadoras antiguas de 8 bits .
Redes
Contiki proporciona tres mecanismos de red: la pila TCP/IP uIP [6] , que proporciona redes IPv4 , la pila uIPv6 [7] , que proporciona redes IPv6 , y la pila Rime, que es un conjunto de protocolos de red ligeros personalizados diseñados para redes inalámbricas de bajo consumo. La pila IPv6 fue aportada por Cisco y, cuando se lanzó, fue la pila IPv6 más pequeña en recibir la certificación IPv6 Ready [8] . La pila IPv6 también contiene el protocolo de enrutamiento para redes de bajo consumo y con pérdida (RPL) para redes IPv6 con bajo consumo y con pérdida y la capa de adaptación y compresión de encabezado 6LoWPAN para enlaces IEEE 802.15.4 .
Rime es una pila de red alternativa que se utiliza cuando la sobrecarga de las pilas IPv4 o IPv6 es prohibitiva. La pila Rime proporciona un conjunto de primitivas de comunicación para sistemas inalámbricos de bajo consumo. Las primitivas predeterminadas son unidifusión de un solo salto, difusión de un solo salto, unidifusión de múltiples saltos, inundación de red y recopilación de datos sin dirección. Las primitivas se pueden utilizar solas o combinadas para formar protocolos y mecanismos más complejos. [9]
Operación de bajo consumo
Muchos sistemas Contiki tienen limitaciones de potencia severas. Los sensores inalámbricos que funcionan con baterías pueden necesitar años de funcionamiento sin supervisión y con pocos medios para recargar o reemplazar las baterías. Contiki proporciona un conjunto de mecanismos para reducir el consumo de energía de los sistemas en los que se ejecuta. El mecanismo predeterminado para lograr un funcionamiento de bajo consumo de la radio se denomina ContikiMAC. [10] Con ContikiMAC, los nodos pueden funcionar en modo de bajo consumo y aún así poder recibir y transmitir mensajes de radio.
Simulación
El sistema Contiki incluye un simulador de sensores llamado Cooja, que simula los nodos Contiki. [11] Los nodos pertenecen a una de las tres clases siguientes: a) nodos Cooja emulados, b) código Contiki compilado y ejecutado en el host de simulación, o c) nodos Java, donde el comportamiento del nodo debe reimplementarse como una clase Java. Una simulación Cooja puede contener una mezcla de nodos de sensores de cualquiera de las tres clases. Los nodos emulados también se pueden utilizar para incluir nodos que no sean Contiki en una red simulada.
En Contiki 2.6, se pueden emular plataformas con los microcontroladores TI MSP430 y Atmel AVR .
Modelo de programación
Para ejecutarse de manera eficiente en sistemas con poca memoria, el modelo de programación Contiki se basa en protothreads . [12] [13] Un protothread es una abstracción de programación que hace un uso eficiente de la memoria y que comparte características tanto de la programación multithread como de la programación basada en eventos para lograr una sobrecarga de memoria baja de cada protothread. El núcleo invoca el protothread de un proceso en respuesta a un evento interno o externo. Algunos ejemplos de eventos internos son los temporizadores que se activan o los mensajes que se envían desde otros procesos. Algunos ejemplos de eventos externos son los sensores que activan o los paquetes entrantes de un vecino de radio.
Los protothreads se programan de forma cooperativa. Por lo tanto, un proceso Contiki siempre debe ceder explícitamente el control al núcleo a intervalos regulares. Los procesos Contiki pueden utilizar una construcción especial de protothread para bloquear la espera de eventos mientras ceden el control al núcleo entre cada invocación de evento.
Características

Contiki admite subprocesamiento múltiple preemptivo opcional por proceso, comunicación entre procesos mediante paso de mensajes a través de eventos, así como un subsistema de interfaz gráfica de usuario (GUI) opcional con soporte gráfico directo para terminales conectados localmente o visualización virtual en red con Virtual Network Computing (VNC) o mediante Telnet.
Una instalación completa de Contiki incluye las siguientes características:
- Kernel multitarea
- Subprocesamiento múltiple preventivo por aplicación opcional
- Protohilos
- Redes del conjunto de protocolos de Internet (TCP/IP) , incluido IPv6
- Sistema de ventanas y GUI
- Visualización remota en red mediante computación en red virtual
- Un navegador web (que se dice es el más pequeño del mundo)
- Servidor web personal
- Cliente Telnet simple
- Protector de pantalla
Contiki es compatible con bibliotecas SSL/TLS populares como wolfSSL , que incluye un puerto en su versión 3.15.5. [14]
Puertos

Microcontroladores
- Atmel – ARM , AVR
- Semiconductores NXP : LPC1768, [15] LPC2103, MC13224
- Microchip – dsPIC, PIC32 (PIC32MX795F512L)
- Texas Instruments – MSP430 , CC2430, CC2538, CC2630, CC2650, CC2538: cctv, Firefly, Zoul (incluye el CC2538 y el CC1200 en un formato de módulo único)
- STMicroelectronics – STM32W
Computadoras
- Manzana II [a]
- Computadoras Atari de 8 bits [a]
- Atari ST
- Cartera de Atari
- Visor de bolsillo
- Comodoro PET [a]
- VIC-20 , [a]
- Comodoro 64 , [a] Comodoro 128 [a]
- Orico [a]
- PC-6001 de NEC
- Mago agudo
- Sistemas tipo Unix basados en x86 , sobre GTK+ , o más directamente utilizando un sistema X Window [16]
Consolas de juegos
- GP32
- Chico de juego
- Juego Boy Advance
- Jaguar
- Sistema de entretenimiento de Nintendo [a]
- TurboGrafx-16 [a]
Véase también
- BeRTOS
- Empresa ERIKA
- Nano-RK
- DISTURBIO
- Símbolos
- Sistema operativo Tiny
- Comparación de sistemas operativos en tiempo real
Notas
- ^ abcdefghi desarrollo basado en cc65
Referencias
- ^ desde Contiki OS.
- ^ Contiki: Incorporando IP a las redes de sensores
- ^ "Comunidad", Contiki OS.
- ^ Dunkels, Adam (2004), "Contiki: un sistema operativo ligero y flexible para pequeños sensores en red", Actas de la 29.ª Conferencia internacional anual IEEE sobre redes informáticas locales , pp. 455–462.
- ^ Al descubierto: el sistema operativo de código abierto poco conocido que domina la Internet de las cosas
- ^ Dunkels, Adam (mayo de 2003), "TCP/IP completo para arquitecturas de 8 bits", Actas de la primera conferencia internacional ACM/Usenix sobre sistemas, aplicaciones y servicios móviles (MobiSys) , San Francisco
{{citation}}: CS1 maint: location missing publisher (link) - ^ Durvy, Mathilde; Abeillé, Julien; Wetterwald, Patrick; O'Flynn, Colin; Leverett, Blake; Gnoske, Eric; Vidales, Michael; Mulligan, Geoff; Tsiftes, Nicolas; Finne, Niclas; Dunkels, Adam (noviembre de 2008), "Making sensor networks IPv6 ready", Actas de la Sexta Conferencia de la ACM sobre Sistemas de sensores integrados en red (SenSys) (sesión de pósteres), Raleigh, Carolina del Norte , EE. UU .: ACM
- ^ Sala de prensa, Cisco, 2008.
- ^ Dunkels, Adam; Österlind, Fredrik; He, Zhitao (noviembre de 2007), "Una arquitectura de comunicación adaptativa para redes de sensores inalámbricos", Actas de la quinta conferencia de la ACM sobre sistemas de sensores integrados en red (SenSys) , Sydney, Australia
{{citation}}: CS1 maint: location missing publisher (link). - ^ Dunkels, Adam, Protocolo de ciclo de servicio de radio ContikiMAC (PDF).
- ^ "Inicio", Contiki OS.
- ^ Dunkels, Adam; Schmidt, Oliver; Voigt, Thiemo; Ali, Muneeb (noviembre de 2006), "Protothreads: Simplificación de la programación basada en eventos de sistemas integrados con restricciones de memoria", Actas de la Cuarta Conferencia de la ACM sobre sistemas de sensores integrados en red (SenSys) , Boulder, CO , EE. UU.
{{citation}}: CS1 maint: location missing publisher (link) Dunkels, A.; Schmidt, O.; Voigt, T.; Ali, M. (2006). "Protothreads". Actas de la 4.ª conferencia internacional sobre sistemas de sensores integrados en red - Sen Sys '06 . pág. 29. doi :10.1145/1182807.1182811. ISBN 1595933433.S2CID 983128 .(PDF, Diapositivas de la presentación). - ^ "Protothread", Código.
- ^ "wolfSSL CONTIKI OS port - wolfSSL". 18-12-2018 . Consultado el 9-01-2019 .
- ^ "El sistema operativo Contiki / [Contiki-developers] Puerto Contiki para el procesador ARM LPC1768". 19 de diciembre de 2020.
- ^ Stein, H, Ejecución de Contiki en Windows, Trix, archivado desde el original el 9 de diciembre de 2003.
- "Herramientas Contiki", Hitmen, AT : C02:sitio web no oficial para puertos históricos de la versión 1.x.
- "Sistema operativo Contiki mínimo para LPC2103", Manishshakya, NP, archivado desde el original el 4 de junio de 2014.
- Generador de archivos de configuración e imágenes de disco de Contiki 2.5, sistemas retro A2.
- Portación de Contiki en PIC32 (placa Seed-Eye), IT : SSSUP, archivado desde el original el 2013-03-18 , consultado el 2013-01-31.
Enlaces externos
- Sitio web oficial