<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>2227-1899</journal-id>
<journal-title><![CDATA[Revista Cubana de Ciencias Informáticas]]></journal-title>
<abbrev-journal-title><![CDATA[Rev cuba cienc informat]]></abbrev-journal-title>
<issn>2227-1899</issn>
<publisher>
<publisher-name><![CDATA[Editorial Ediciones Futuro]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S2227-18992016000600001</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[XEOS para el desarrollo de software base de sistemas]]></article-title>
<article-title xml:lang="en"><![CDATA[XEOS for base software development on embedded systems]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Millo-Sánchez]]></surname>
<given-names><![CDATA[Reinier]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Paz-Rodríguez]]></surname>
<given-names><![CDATA[Waldo]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Gallardo-Segura]]></surname>
<given-names><![CDATA[Alexy]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[López-León]]></surname>
<given-names><![CDATA[Humberto]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Central Marta Abreu de Las Villas  ]]></institution>
<addr-line><![CDATA[Santa Clara ]]></addr-line>
<country>Cuba</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Empresa de Tecnologías de la Información para la Defensa  ]]></institution>
<addr-line><![CDATA[ La Habana]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>00</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>00</month>
<year>2016</year>
</pub-date>
<volume>10</volume>
<fpage>01</fpage>
<lpage>14</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S2227-18992016000600001&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S2227-18992016000600001&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S2227-18992016000600001&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[RESUMEN El empleo de sistemas embebidos se ha convertido en un fenómeno común de nuestros días. Podemos encontrar dispositivos embebidos desde las fábricas automatizadas hasta en nuestro hogar. Aunque el funcionamiento de los sistemas embebidos es predeterminado por la funcionalidad para la cual se van a emplear, es necesario tener un sistema operativo que controle el dispositivo. El desarrollo de sistemas operativos para controlar estos sistemas embebidos tiene nuevos retos con el auge de nuevas plataformas de hardware y nuevos requisitos de sistema. Dos de los enfoques más empleados para el desarrollo de kernels o núcleo de sistema son el monolítico y el microkernel. El enfoque basado en microkernel tiene un enfoque minimalista y parece ser una mejor alternativa para el desarrollo de sistemas embebidos. En este trabajo se comparan los enfoques de kernel monolítico y microkernel, resaltando las ventajas que ofrece el enfoque basado en microkernel. Se propone XEOS, una combinación del microkernel Fiasco.OC con el framework de desarrollo GenodeOS, para el desarrollo de un software base para ser empleado en sistemas embebidos.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[ABSTRACT Use of embedded systems has become a common phenomenon today. We can find embedded devices from automated factories to even our home. Although the functioning of embedded systems is predefined by the functionality for which is to be used, it needs an operating system to control the device. The development of operating systems to control this embedded systems has new challenges with the apparition of new hardware platforms and new system requirements. Two of the most used approaches to develop system kernels are monolithic and microkernel. The microkernel-based approach takes a minimalist approach and seems to be a better alternative for the development of embedded systems. This paper compare approaches microkernel and monolithic kernel, highlighting the advantages of the microkernel-based approach. It propose XEOS, a combination of Fiasco.OC microkernel with GenodeOS development framework for developing a base software to be used in embedded systems.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[microkernel]]></kwd>
<kwd lng="es"><![CDATA[sistemas embebidos]]></kwd>
<kwd lng="es"><![CDATA[XEOS]]></kwd>
<kwd lng="es"><![CDATA[Fiasco.OC]]></kwd>
<kwd lng="es"><![CDATA[GenodeOS]]></kwd>
<kwd lng="en"><![CDATA[microkernel]]></kwd>
<kwd lng="en"><![CDATA[embbeded systems]]></kwd>
<kwd lng="en"><![CDATA[XEOS]]></kwd>
<kwd lng="en"><![CDATA[Fiasco.OC]]></kwd>
<kwd lng="en"><![CDATA[GenodeOS]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><B>ART&Iacute;CULO  ORIGINAL</B></font></p>     <p>&nbsp;</p>     <p><font size="4"><strong><font face="Verdana, Arial, Helvetica, sans-serif">XEOS para el desarrollo de software base de sistemas</font></strong></font></p>     <p>&nbsp;</p>     <p><font size="3"><strong><em><font face="Verdana, Arial, Helvetica, sans-serif">XEOS for base software development on embedded systems</font></em></strong></font></p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <P><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Reinier Millo-S&aacute;nchez<strong><sup>1*</sup></strong>, Waldo Paz-Rodr&iacute;guez<strong><sup>1</sup></strong>, Alexy Gallardo-Segura</font></strong><font face="Verdana, Arial, Helvetica, sans-serif"><strong><sup>2</sup></strong></font></font><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">, Humberto L&oacute;pez-Le&oacute;n</font></strong><font face="Verdana, Arial, Helvetica, sans-serif"><strong><sup>2</sup></strong></font></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><sup>1</sup>Universidad Central &ldquo;Marta  Abreu&rdquo; de Las Villas, Santa Clara, Cuba</font> <font size="2" face="Verdana, Arial, Helvetica, sans-serif">    <br>     <sup>2</sup>Empresa de Tecnolog&iacute;as de la  Informaci&oacute;n para la Defensa, La Habana, Cuba    ]]></body>
<body><![CDATA[<br>     </font></p>     <P><font face="Verdana, Arial, Helvetica, sans-serif"><span class="class"><font size="2">*Autor para la correspondencia: </font></span></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <a href="mailto:agarcia@uci.cu">rmillo@uclv.cu</a><a href="mailto:jova@uci.cu"></a></font><font face="Verdana, Arial, Helvetica, sans-serif"><a href="mailto:losorio@ismm.edu.cu"></a> </font>     <p>&nbsp;</p>     <p>&nbsp;</p> <hr>     <P><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN</b> </font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El empleo de sistemas embebidos se ha convertido en un fen&oacute;meno com&uacute;n de  nuestros d&iacute;as. Podemos encontrar dispositivos embebidos desde las f&aacute;bricas  automatizadas hasta en nuestro hogar. Aunque el funcionamiento de los sistemas  embebidos es predeterminado por la funcionalidad para la cual se van a emplear,  es necesario tener un sistema operativo que controle el dispositivo. El  desarrollo de sistemas operativos para controlar estos sistemas embebidos tiene  nuevos retos con el auge de nuevas plataformas de <em>hardware </em>y nuevos requisitos de sistema. Dos de los enfoques m&aacute;s  empleados para el desarrollo de <em>kernels </em>o  n&uacute;cleo de sistema son el monol&iacute;tico y el <em>microkernel</em>.  El enfoque basado en <em>microkernel </em>tiene  un enfoque minimalista y parece ser una mejor alternativa para el desarrollo de  sistemas embebidos. En este trabajo se comparan los enfoques de <em>kernel </em>monol&iacute;tico y <em>microkernel</em>, resaltando las ventajas que ofrece el enfoque basado  en <em>microkernel</em>. Se propone XEOS, una  combinaci&oacute;n del <em>microkernel </em>Fiasco.OC  con el <em>framework </em>de desarrollo  GenodeOS, para el desarrollo de un <em>software </em>base para ser empleado en sistemas embebidos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>Palabras clave:</span></b></font> <font size="2" face="Verdana, Arial, Helvetica, sans-serif">microkernel, sistemas embebidos, XEOS, Fiasco.OC, GenodeOS</font></p> <hr>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>ABSTRACT</span></b> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Use of embedded systems has become a common phenomenon today. We can  find embedded devices from automated factories to even our home. Although the  functioning of embedded systems is predefined by the functionality for which is  to be used, it needs an operating system to control the device. The development  of operating systems to control this embedded systems has new challenges with  the apparition of new hardware platforms and new system requirements. Two of  the most used approaches to develop system kernels are monolithic and  microkernel. The microkernel-based approach takes a minimalist approach and  seems to be a better alternative for the development of embedded systems. This  paper compare approaches microkernel and monolithic kernel, highlighting the  advantages of the microkernel-based approach. It propose XEOS, a combination of  Fiasco.OC microkernel with GenodeOS development framework for developing a base  software to be used in embedded systems.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><span lang=EN-GB>Key words: </span></b>microkernel, embbeded systems, XEOS, Fiasco.OC, GenodeOS</font></p> <hr>     ]]></body>
<body><![CDATA[<p>&nbsp;</p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>INTRODUCCI&Oacute;N</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El empleo de dispositivos embebidos  ha tenido un auge en los &uacute;ltimos a&ntilde;os. Su empleo en el control autom&aacute;tico de  procesos de producci&oacute;n en f&aacute;bricas se ha ido extendiendo hasta ser un elemento  com&uacute;n en nuestros hogares. Estos dispositivos embebidos o empotrados, como  tambi&eacute;n se les conoce, es com&uacute;n observarlos ya presentes en lavadoras de  control autom&aacute;tico, en sistemas decodificadores para la televisi&oacute;n, en hornos,  ventiladores, sistemas de alumbrado autom&aacute;tico, reproductores DVD, entre otros  muchos dispositivos del hogar.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los sistemas embebidos no son m&aacute;s que un sistema de  computaci&oacute;n cuyo <em>hardware </em>y <em>software </em>est&aacute;n espec&iacute;ficamente dise&ntilde;ados  y optimizados para resolver un problema concreto de forma eficiente. El t&eacute;rmino  embebido o empotrado hace referencia al hecho que la electr&oacute;nica o el sistema  electr&oacute;nico de control es una parte fundamental del sistema donde se emplea. La  caracter&iacute;stica principal que diferencia a los embebidos de los dem&aacute;s sistemas  electr&oacute;nicos, es que, por estar insertados dentro del dispositivo que  controlan, est&aacute;n sujetos en mayor medida a cumplir requisitos de tama&ntilde;o,  fiabilidad, consumo y coste, y su existencia puede no ser aparente (Tanenbaum, 2009; Silberschatz et al., 2013).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos sistemas son empleados tambi&eacute;n en aplicaciones donde  es necesario la respuesta en tiempo real ante ciertos eventos, como es el caso  de equipos m&eacute;dicos en los hospitales y sistemas de radares tanto mar&iacute;timos como  a&eacute;reos. Varios han sido los enfoques empleados para el desarrollo de sistemas  operativos para el control de los sistemas embebidos (Tanenbaum,  2009).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la actualidad existen varios  sistemas operativos de prop&oacute;sito general, centrados principalmente en dos  grandes familias: Microsoft Windows y GNU/Linux. Estos sistemas en su mayor&iacute;a  est&aacute;n formados por un n&uacute;cleo o <em>kernel </em>monol&iacute;tico,  el cual concentra todas las funcionalidades b&aacute;sicas del sistema operativo:  gesti&oacute;n de los procesos, manipulaci&oacute;n del sistema de archivos, control de los  dispositivos de <em>hardware</em>, gesti&oacute;n de  memoria, entre otras.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por otro lado, existen otros  tipos de <em>kernel </em>llamados <em>microkernel </em>que tienen una concepci&oacute;n  minimalista. Como plantea Liedtke (1995) el <em>microkernel </em>s&oacute;lo debe implementar los elementos b&aacute;sicos o primitivas para el  funcionamiento del sistema, el resto de los elementos deben ser implementados a  nivel de aplicaciones de usuarios. Esta concepci&oacute;n permite tener un sistema m&aacute;s  flexible, modular y tolerable a fallos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El <em>kernel </em>del sistema es la capa inferior de un sistema operativo y es  el que interact&uacute;a directamente con el <em>hardware</em>,  proveyendo interfaces de trabajo hacia las capas superiores. Actualmente todo  el proceso de desarrollo no se realiza de forma manual, para ello se han  desarrollado un conjunto de marcos de trabajo o <em>frameworks </em>que permiten agilizar el proceso de desarrollo.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos se centran principalmente  en las etapas de desarrollo, compilaci&oacute;n y prueba. En su mayor&iacute;a tienen una  estructura bien definida lo que muchas veces facilita crear aplicaciones muy  espec&iacute;ficas, modulares y escalables. Adem&aacute;s cuentan con un conjunto de  bibliotecas que facilitan el desarrollo de nuevas aplicaciones e incluso  reutilizar las existentes como base, logrando agilizar el proceso de desarrollo  de estos sistemas.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En este trabajo se hace un estudio sobre los enfoques de  desarrollo del <em>kernel </em>del sistema y  se propone un conjunto de tecnolog&iacute;as, <em>kernel </em>y <em>framework </em>de desarrollo, para  el desarrollo de <em>software </em>base de  sistemas embebidos.</font></p>     <p><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Enfoques de desarrollo de <em>kernel </em>del sistema operativo</font></strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Como se  explic&oacute; anteriormente el <em>kernel </em>es el  elemento principal para el funcionamiento del sistema operativo, por lo que hay  tener cuidado durante todo el proceso de desarrollo. Las tendencias o enfoques  empleados para el desarrollo del <em>kernel </em>han  ido variando con el desarrollo de la propia tecnolog&iacute;a. Actualmente existen  cuatro grandes enfoques bien marcados para su desarrollo: <em>kernel </em>monol&iacute;tico, <em>microkernel</em>, <em>kernel </em>h&iacute;brido y <em>exokernel</em>. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos enfoques difieren entre s&iacute; por la forma en que se organizan y  estructuran las funcionalidades b&aacute;sicas del sistema, tanto dentro como fuera  del <em>kernel</em>. Esta organizaci&oacute;n se refleja  directamente en el tama&ntilde;o del <em>kernel </em>(en  l&iacute;neas de c&oacute;digo) en cada uno de los enfoques y por tanto en el TCB (<em>Trusted Computing Base</em>) del sistema. Los  enfoques de <em>microkernel </em>y <em>exokernel </em>reducen el TCB de sistema por  su tama&ntilde;o reducido, como se muestra en la<a href="/img/revistas/rcci/v10s2/f0101516.jpg" target="_blank"> figura 1</a>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los <em>kernels </em>monol&iacute;ticos y los <em>microkernels </em>han sido los dos enfoques m&aacute;s empleados en el desarrollo de <em>kernel </em>para sistemas embebidos (Tanenbaum, 2009). A  partir de estos dos enfoques, ha tomado auge el desarrollo de <em>kernels </em>h&iacute;bridos, tratando de aprovechar  las ventajas de los enfoques anteriores. Los <em>exokernels </em>por su caracter&iacute;sticas solo han sido empleado en  aplicaciones muy espec&iacute;ficas.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><em><strong>Kernel </strong></em><strong>monol&iacute;tico</strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Un <em>kernel </em>monol&iacute;tico es definido por (Tanenbaum, 2009; Silberschatz  et al., 2013) como  una colecci&oacute;n de procedimientos enlazados entre s&iacute; en un &uacute;nico programa  binario. Hasta ahora el enfoque monol&iacute;tico para el dise&ntilde;o de <em>kernel </em>se considera como el m&aacute;s  utilizado en la construcci&oacute;n de los mismos. En este enfoque todas las  funcionalidades b&aacute;sicas del sistema se ejecutan como un solo programa en modo <em>kernel</em>. Con esta t&eacute;cnica cada  procedimiento del sistema puede llamar a cualquier otro y solicitar alg&uacute;n  servicio de forma directa. Como el sistema tiene miles de procedimientos y  estos se pueden llamar entre s&iacute; sin restricciones esto puede hacer que el  sistema sea dif&iacute;cil de comprender (Tanenbaum, 2009). </font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/rcci/v10s2/f0201516.jpg" alt="f02" width="508" height="231"><a name="f02"></a></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A pesar de esto, el dise&ntilde;o de los <em>kernels </em>monol&iacute;ticos es m&aacute;s sencillo  que el de los <em>microkernels </em>y los  otros enfoques (Tanenbaum, 2009). Los <em>kernels </em>monol&iacute;ticos se implementan en su totalidad como un &uacute;nico proceso que se  ejecuta en un solo espacio de direcciones. Por lo general en el disco se pueden  ver como un &uacute;nico binario est&aacute;tico. En la <a href="#f02">figura 2</a> se  pueden observar los diferentes servicios o abstracciones de <em>hardware </em>que brinda este enfoque y los  cuales se ejecutan en el gran espacio de direcciones del <em>kernel </em>(Love, 2010).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La comunicaci&oacute;n dentro del <em>kernel </em>es trivial, como todos los  servicios se ejecutan en modo <em>kernel </em>y  dentro del mismo espacio de direcciones: el <em>kernel </em>puede invocar funciones directamente sin necesidad de realizar un cambio de  contexto. Los defensores de este modelo citan la simplicidad y rendimiento del  enfoque monol&iacute;tico. La mayor&iacute;a de los sistemas Unix tienen un dise&ntilde;o monol&iacute;tico.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A diferencia de otros enfoques de  desarrollo de <em>kernel </em>del sistema, los <em>kernels </em>monol&iacute;ticos son m&aacute;s f&aacute;ciles  de dise&ntilde;ar correctamente y el c&oacute;digo para el control del sistema es mucho m&aacute;s  sencillo ya que todos los elementos se encuentran en un mismo espacio de  direcciones, el espacio de direcciones del <em>kernel</em>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La implementaci&oacute;n m&aacute;s conocida de <em>kernel </em>monol&iacute;tico es el <em>kernel </em>de Linux. Este desde sus inicios es un <em>kernel </em>monol&iacute;tico que ha ido evolucionando y actualmente aunque es modular, o sea,  extensible mediante m&oacute;dulos cargables en tiempo de ejecuci&oacute;n, continu&aacute; siendo  un <em>kernel </em>monol&iacute;tico (Bovet and Cesati, 2000).  Todos los elementos cargados en tiempo de ejecuci&oacute;n a trav&eacute;s de m&oacute;dulos, as&iacute;  como los controladores de dispositivos siguen ejecutando en el modo  privilegiado, lo cual no permite garantizar la integridad completa del sistema.  A pesar de ello, ha sido muy empleado en sistemas embebidos (Suppiah and Abbas, 2014)  y sistemas de tiempo real (Dozio and Mantegazza,  2003). Varios han sido los estudios y trabajos  realizados con el objetivo de mejorar la seguridad en estos, en algunos casos  haciendo empleo de la virtualizaci&oacute;n (Govindharajan,  2013).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Microkernel</strong></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A  diferencia de los <em>kernels </em>monol&iacute;ticos,  los <em>microkernels </em>tienen un enfoque de  desarrollo minimalista, donde se debe implementar a nivel de <em>kernel </em>solo los elementos principales  que son nombrados conceptos o primitivas. En Liedtke (1995) se  definen cuatro primitivas necesarias y suficientes para el correcto desarrollo  de un <em>microkernel</em>: espacio de  direcciones, abstracci&oacute;n de procesos, mecanismo de comunicaci&oacute;n e  identificadores &uacute;nicos, como se muestra en la <a href="#f03">figura 3</a>. Este  enfoque busca establecer una separaci&oacute;n entre los mecanismos y las pol&iacute;ticas  del sistema operativo. </font></p>     <p align="center"><img src="/img/revistas/rcci/v10s2/f0301516.jpg" alt="f03" width="400" height="272"><a name="f03"></a></p>     <p align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El autor plantea que la definici&oacute;n de las primitivas est&aacute;  dada por la funcionalidad y no por el rendimiento del sistema. Liedtke  considera una primitiva aquel elemento que implementado correctamente fuera del <em>kernel </em>no permite la implementaci&oacute;n  de las funcionalidades requeridas del sistema.</font></p>     <p align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Actualmente la pol&iacute;tica de  planificaci&oacute;n de la CPU es la &uacute;nica pol&iacute;tica que a&uacute;n se implementa a nivel de <em>microkernel</em>, buscando garantizar la  seguridad del sistema, aunque existen algunos trabajos en los cuales se ha  incursionado en la planificaci&oacute;n a nivel de usuario (Zoor  and Nagibin, 2014). Las pol&iacute;ticas para  el manejo de la memoria son implementadas en servidores a nivel de usuario,  permitiendo la existencia de varios servidores para la manipulaci&oacute;n de la  memoria sin que estos entren en conflicto entre s&iacute; (Klimiankou,  2014). De igual forma los controladores de  dispositivos son implementados a nivel de usuario, implement&aacute;ndose a nivel de <em>microkernel </em>solo los elementos m&iacute;nimos e  indispensables para multiplexar los recursos de forma segura.</font></p>     <p align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Adicionalmente a las primitivas,  el desarrollo de un <em>microkernel </em>se  rige por dos principios b&aacute;sicos, como se plantea en Liedtke  (1995), el &ldquo;principio de independencia&rdquo;  y el &ldquo;principio de integridad&rdquo;, este &uacute;ltimo nombrado tambi&eacute;n &ldquo;principio b&aacute;sico  de la comunicaci&oacute;n&rdquo;. El principio de independencia expresa que debe ser posible  implementar un subsistema o aplicaci&oacute;n <em>A</em>1  arbitrario de forma tal que este no pueda ser perturbado o corrompido por  otro subsistema <em>A</em>2. Este  principio debe dar garant&iacute;a de independencia de <em>A</em>1 respecto a cualquier otro subsistema <em>A</em>2.</font></p>     <p align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Varios son los <em>kernel </em>de sistema que se han dise&ntilde;ado siguiendo este enfoque de <em>microkernel </em>desde sus or&iacute;genes en los a&ntilde;os  80, entre los que podemos encontrar: Mach (Accetta et  al., 1986), FreeRTOS (Goyette, 2007), QNX (Hildebrand, 1992),  GNU/Hurd (Le Mignot, 2005),  Minix (Woodhull and Tanenbaum, 1997), Fiasco.OC (PartheymA&tilde; <u>1</u>4ller et al., 2012), OKL4 (Heiser and  Leslie, 2010), seL4 (Klein et al., 2010).  Este &uacute;ltimo siendo el primer <em>kernel </em>de  sistema al cual se le realiza una verificaci&oacute;n formal de su especificaci&oacute;n.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Kernel monol&iacute;tico vs. microkernel</strong></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El <em>kernel </em>monol&iacute;tico libre m&aacute;s empleado hoy en d&iacute;a es el <em>kernel </em>de Linux. Su arquitectura  modular, portabilidad y soporte para gran variedad de dispositivos de <em>hardware </em>han permitido su empleo desde  sistema de prop&oacute;sito general hasta sistemas embebidos (Raghavan  et al., 2006), como es el caso m&aacute;s  conocido en el sistema operativo Android (Faruki et  al., 2015).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A  diferencia del <em>kernel </em>de Linux, los <em>microkernels </em>en su enfoque minimalista  disminuyen el tama&ntilde;o en LOC (<em>Lines of  Code</em>) del TCB, como se muestra en la <a href="#f04">figura 4</a>. A partir de la versi&oacute;n 3.0 el <em>kernel </em>de Linux alcanza un aproximado de 2.5 millones de LOC (Wheeler, 2004) sin  incluir los controladores de dispositivos de <em>hardware</em>, mientras que los <em>microkernels </em>est&aacute;n en el orden de los miles de LOC, por ejemplo Fiasco.OC est&aacute; en  aproximadamente 35 mil LOC (Wheeler, 2004), lo  cual es una diferencia significativa si se tiene en cuenta que cada mil LOC es  posible encontrar al menos un error o vulnerabilidad (Vemuri  and Al-Hamdani, 2011). Como  se puede ver en la figura, muchos de los elementos que se encontraban a nivel  de <em>kernel </em>en el enfoque monol&iacute;tico,  ahora en el <em>microkernel </em>se encuentran  a nivel de usuario, con lo cual se logra reducir dr&aacute;sticamente el tama&ntilde;o del <em>kernel </em>y por tanto el tama&ntilde;o del TCB. </font></p>     <p align="center"><img src="/img/revistas/rcci/v10s2/f0401516.jpg" alt="f04" width="545" height="341"><a name="f04"></a></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una de las principales ventajas  de los <em>microkernels </em>sobre los <em>kernels </em>monol&iacute;ticos es la extensibilidad  del sistema. En un sistema que emplea un <em>microkernel </em>se pueden agregar nuevas funcionalidades de sistema sin afectar el  funcionamiento del mismo y sin necesidad de ser modificado y recompilado,  presto que las funcionalidades son implementadas como aplicaciones a nivel de  usuario y se interactu&aacute; con ellas a trav&eacute;s del mecanismo de comunicaci&oacute;n. Por  otra parte en los sistemas de <em>kernel </em>monol&iacute;tico,  agregar nuevas funcionalidades de sistema puede poner en riesgo el  funcionamiento del sistema y es necesario la modificaci&oacute;n del algunos  subsistemas, as&iacute; como la recompilaci&oacute;n del <em>kernel </em>del sistema para el empleo de la nueva funcionalidad.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Otra de las principales diferencias entre estos dos  enfoques de dise&ntilde;o de <em>kernel </em>es la  recuperaci&oacute;n r&aacute;pida ante fallos, fundamentalmente en los controladores de  dispositivos de <em>hardware</em>. En el <em>kernel </em>monol&iacute;tico la mayor&iacute;a de los  controladores funcionan a nivel de <em>kernel</em>,  y un controlador defectuoso puede hacer fallar el sistema en su totalidad. A  diferencia de lo anterior, los <em>microkernels </em>implementan los controladores a nivel de usuario, por lo que un controlador  defectuoso no afecta el funcionamiento del sistema.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos dos  enfoques tambi&eacute;n difieren en la forma en que las aplicaciones de modo usuario  interactu&aacute;n con las funcionalidades implementadas a nivel de <em>kernel</em>. En el enfoque monol&iacute;tico, esta  interacci&oacute;n se realiza a trav&eacute;s de las llamadas al sistema, proceso en el cual  se cambia el modo de ejecuci&oacute;n del modo usuario al modo <em>kernel</em>. A diferencia de este, en el enfoque de <em>microkernel</em>, esta interacci&oacute;n se realiza a trav&eacute;s del mecanismo de  comunicaci&oacute;n enviando mensajes al <em>microkernel</em>.  Por ejemplo, en la <a href="#f05">figura 5</a> se muestra una aplicaci&oacute;n haciendo una llamada a un controlador de un  dispositivo de <em>hardware</em>. Como se  puede ver en el caso del <em>microkernel </em>es  necesario realizar dos cambios de contexto o modo de ejecuci&oacute;n, mientras en el <em>kernel </em>monol&iacute;tico es suficiente con un s&oacute;lo  cambio.</font> </p>     <p align="center"><img src="/img/revistas/rcci/v10s2/f0501516.jpg" alt="f05" width="463" height="250"><a name="f05"></a></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este ha sido un aspecto cr&iacute;tico  en el desarrollo de los <em>microkernels</em>,  pero Liedtke (1995,  1996) demostr&oacute; que esto no era m&aacute;s que el  resultado de un mal dise&ntilde;o y una mala implementaci&oacute;n, lo cual no afecta  considerablemente el rendimiento del sistema.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ambos  enfoques de dise&ntilde;o de <em>kernel </em>han sido  empleados para el desarrollo de sistemas embebidos, pero el enfoque basado en <em>microkernel </em>brinda un mejor  aprovechamiento del <em>hardware</em>. A  diferencia de los <em>kernels </em>monol&iacute;ticos,  los <em>microkernels </em>no proveen una capa  de abstracci&oacute;n para la interacci&oacute;n con el <em>hardware</em>,  como el caso de la CPU, estos son implementados de forma espec&iacute;fica y  optimizada para explotar al m&aacute;ximo todas las funcionalidades del <em>hardware </em>y alcanzar altos niveles de  rendimiento. </font></p>     <p><font size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">XEOS para el desarrollo de <em>software </em>base de sistemas embebidos</font></strong></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Teniendo en cuenta las caracter&iacute;sticas  del enfoque de <em>microkernel </em>y la  necesidad de dominar una tecnolog&iacute;a de <em>software </em>base en su totalidad, para garantizar una soberan&iacute;a tecnol&oacute;gica, se propone  XEOS (<em>XETID Embedded Operating System</em>)  como <em>software </em>base empleando tecnolog&iacute;a  basada en <em>microkernel</em>. Se propone el  empleo del <em>microkernel </em>Fiasco.OC y <em>framework </em>de desarrollo GenodeOS, por  las caracter&iacute;sticas de estas dos tecnolog&iacute;as que se exponen a continuaci&oacute;n.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El <em>microkernel </em>Fiasco.OC fue desarrollado en la Universidad de Dresden  y est&aacute; liberado bajo la licencia GNU/GPL v2. Pertenece a la tercera generaci&oacute;n  de <em>microkernels </em>y est&aacute; basado en el <em>microkernel </em>Fiasco de la familia L4, al  cual a&ntilde;ade un dise&ntilde;o basado en capacidades de objetos. La mayor parte del c&oacute;digo  fuente est&aacute; desarrollada en C/C++ con un dialecto de preprocesamiento. Adem&aacute;s,  cuenta con una lista de distribuci&oacute;n que permite la interacci&oacute;n con una  comunidad activa de desarrolladores, lo cual beneficia el intercambio cient&iacute;fico  y a la vez sirve como sistema de consulta, para reportar y conocer la  existencia de <em>bugs </em>o errores, as&iacute;  como sus posibles soluciones, entre otros.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Fiasco.OC utiliza sincronizaci&oacute;n  no bloqueante para la comunicaci&oacute;n entre los objetos del <em>kernel</em>. Es un <em>kernel </em>multitarea  con soporte para m&uacute;ltiples procesadores. Ha sido portado para la arquitectura  x86 y ARM en varias versiones y plataformas de <em>hardware</em>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este <em>microkernel </em>puede ser empleado para la virtualizaci&oacute;n (H&uml;artig et al., 2008)  asistida por <em>hardware </em>en AMD SVM e  Intel VT. Tambi&eacute;n provee soporte para la virtualizaci&oacute;n. Adem&aacute;s, Fiasco.OC  tiene soporte para la planificaci&oacute;n de tareas e hilos de ejecuci&oacute;n en tiempo  real, con un soporte de prioridades, lo cual permite que pueda ser empleado en  sistemas de tiempo real.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">De forma general el <em>microkernel </em>implementa las abstracciones  y mecanismos propuestos en Liedtke (1995), centrados en el manejo de la memoria, la  planificaci&oacute;n de las tareas y la comunicaci&oacute;n entre los procesos y servicios  del sistema. En Fiasco.OC todo es considerado un objeto, dividiendo las  abstracciones implementadas en siete objetos, tambi&eacute;n llamados objetos de <em>kernel</em>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para el desarrollo de sistema embebidos empleando Fiasco.OC  como <em>microkernel </em>existen dos <em>frameworks </em>de desarrollo, L4Re (<em>L4 Runtime Environment</em>) (TU-DresdenOSGroup, 2015)  y GenodeOS (Feske, 2014).  L4Re provee a Fiasco.OC de un conjunto de bibliotecas y servidores para el  desarrollo de nuevas aplicaciones. Provee un paginador inicial (Sigma0) y un  cargador de aplicaciones (Moe).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos dos elementos permiten la  ejecuci&oacute;n de las aplicaciones desarrolladas sobre Fiasco.OC. Inicialmente L4Re  surgi&oacute; como un proyecto para la validaci&oacute;n de Fiasco.OC y se ha ido  consolidando como <em>framework </em>para el  desarrollo de aplicaciones. Actualmente posee soporte para la biblioteca est&aacute;ndar  de C/C++, compresi&oacute;n Zlib, bibliotecas para el trabajo con aplicaciones de  interfaces de usuario, soporte para las bibliotecas OpenMP, PThread y SDL,  entre otros.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">GenodeOS es un <em>framework </em>que posee un conjunto de  herramientas para la construcci&oacute;n y personalizaci&oacute;n de sistemas operativos de  prop&oacute;sitos espec&iacute;ficos, aunque el proyecto pretende convertirse en una  herramienta para el desarrollo de sistemas operativos de prop&oacute;sito general (Feske, 2014). El <em>framework </em>brinda un conjunto de  componentes tales como controladores de dispositivos, protocolos, aplicaciones  de terceros y soporte para varios <em>kernels </em>de sistema.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A diferencia de otros <em>frameworks </em>de desarrollo que se integran  de forma espec&iacute;fica a un <em>kernel</em>, como  es el caso del L4Re, GenodeOS tiene soporte para un conjunto diverso de <em>kernels</em>, entre ellos el <em>kernel </em>de Linux y una variedad de <em>microkernels</em>. El empleo de GenodeOS como <em>framework </em>de desarrollo permite a los  desarrolladores abstraerse por completo del <em>kernel </em>del sistema que se est&eacute; empleando. Esto permite que una aplicaci&oacute;n  desarrollada sobre GenodeOS pueda ser ejecutada sobre varios <em>kernels </em>del sistema sin necesidad de ser  modificada.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Actualmente  GenodeOS tiene soporte para ocho <em>kernels </em>diferentes:  OKL4, L4/Fiasco, L4ka::Pistachio, NOVA, Fiasco.OC, Codezero, Linux y m&aacute;s  reciente el seL4. Adem&aacute;s de estos <em>kernels </em>GenodeOS tiene su propio <em>kernel </em>(<em>bare-metal</em>) (Feske, 2014). Esta  independencia del <em>kernel </em>le ha  permitido al <em>framework </em>adquirir  ciertas caracter&iacute;sticas de otros <em>kernels </em>como  es el soporte para virtualizaci&oacute;n de sistemas como L4Linux y OKLinux de  Fiasco.OC y OKL4, respectivamente. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El dise&ntilde;o de GenodeOS se rige por varios principios  arquitect&oacute;nicos que permiten darle al sistema una estructura modular, flexible  y escalable:</font></p> <ul>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Principio de la computaci&oacute;n segura: este  principio se basa en reducir el n&uacute;mero de dependencias a bajo nivel cuando se  ejecuta determinada aplicaci&oacute;n, de forma que, si dicha aplicaci&oacute;n falla, no  haga colapsar el sistema. Se debe garantizar que cada proceso debe funcionar lo  m&aacute;s aislado posible del resto de los procesos.</font></p>   </li>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Principio de privilegios m&iacute;nimos: este  principio se basa en la comunicaci&oacute;n segura entre procesos y grupos de proceso  como se plantea en Liedtke (1992, 1995). Para  ello los procesos se agrupan siguiendo la estructura en forma de &aacute;rbol, y la  comunicaci&oacute;n es gestionada y controlada por los nodos padres. Este principio  tambi&eacute;n es aplicado a la gesti&oacute;n de recursos y memoria.</font></p>   </li>     </ul>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para garantizar la seguridad y estabilidad del sistema GenodeOS  tiene una estructura jer&aacute;rquica en forma de &aacute;rbol. Cada nodo del &aacute;rbol  representa un proceso en ejecuci&oacute;n. Cuando un proceso es creado se le asignan  una serie de recursos que puede manejar. Estos recursos asignados son recursos  que pertenecen a su nodo padre. De igual forma los procesos hijos de este nodo,  s&oacute;lo podr&aacute;n ser creados con los recursos que le fueron asignados al nodo. El  proceso inicial del sistema tiene acceso a todos los recursos del sistema, y a  partir de ese nodo se comienza la ramificaci&oacute;n de los procesos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Esta estructura jer&aacute;rquica  permite un control seguro sobre la comunicaci&oacute;n entre los procesos y el acceso  a los servicios que proveen cada uno de los sistemas. De esta forma GenodeOS  logra disminuir el TCB de una aplicaci&oacute;n, reduci&eacute;ndolo solamente a los nodos  que componen la rama que va desde el nodo de la aplicaci&oacute;n hasta la ra&iacute;z del &aacute;rbol.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">XEOS  propone una estructura como se muestra en la <a href="#f06">figura 6</a>, donde  se empleen las tecnolog&iacute;as base (Fiasco.OC+GenodeOS) con soporte para diferentes  plataformas de <em>hardware</em>. Se propone  continuar extendiendo el <em>framework </em>de  desarrollo para agregarle nuevas funcionalidades que representen requisitos  para los diferentes escenarios en que se emplee XEOS, as&iacute; como mecanismos de  seguridad y APIs de programaci&oacute;n que permitan el desarrollo de aplicaciones  sobre la tecnolog&iacute;a base. </font></p>     <p align="center"><img src="/img/revistas/rcci/v10s2/f0601516.jpg" alt="f06" width="333" height="364"><a name="f06"></a></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">XEOS ha sido portado y probado con &eacute;xito en las plataformas  de <em>hardware </em>RaspberryPI y Odroid-X2.  Este soporte ha sido incorporado a la distribuci&oacute;n oficial de ambas tecnolog&iacute;as  a trav&eacute;s de las comunidades de desarrollo. Actualmente se trabaja en el soporte  para controladores de dispositivos de <em>hardware </em>y el soporte para QT 5.4.0.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Bajo el precepto de soberan&iacute;a  tecnol&oacute;gica y las caracter&iacute;sticas de las tecnolog&iacute;as que componen a XEOS, se  pretende que este sea empleado por el pa&iacute;s para el desarrollo de sistemas  embebidos. Actualmente se trabaja en probar XEOS en un recolector de datos  industriales que est&aacute; siendo desarrollado en conjunto por la XETID y la empresa  Serconi. Tambi&eacute;n puede ser empleado para el desarrollo industrial del pa&iacute;s y el  desarrollo de la rob&oacute;tica en general.</font></p>     <p>&nbsp;</p>     <p><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><B>CONCLUSIONES</B></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En este trabajo se describieron los enfoques m&aacute;s empleados  en la actualidad para el desarrollo de <em>kernels </em>de sistemas operativos: <em>kernel </em>monol&iacute;tico  y <em>microkernel</em>. Estos enfoques  difieren en cuanto a la organizaci&oacute;n interna de las funcionalidades del  sistema. Se realiz&oacute; una comparaci&oacute;n entre el enfoque de desarrollo monol&iacute;tico y <em>microkernel</em>, donde los <em>microkernels</em>:</font></p> <ul>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tiene  un tama&ntilde;o reducido del TCB del sistema (en el orden de los miles de l&iacute;neas de c&oacute;digo).</font></p>   </li>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tiene un alto grado de extensibilidad, ya que se pueden  agregar nuevas funcionalidades de sistema sin afectar el funcionamiento del  mismo y sin necesidad de ser modificado y recompilado, a diferencia del enfoque  monol&iacute;tico.</font></p>   </li>       <li>         ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tiene mayor estabilidad y posibilidades de  recuperaci&oacute;n ante fallos, solo las primitivas son implementadas a nivel de <em>kernel</em>, el resto de los componentes se  implementan como aplicaciones a nivel de usuario, por lo que una aplicaci&oacute;n con  un mal funcionamiento no compromete la integridad del sistema.</font></p>   </li>       <li>         <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Hacen un uso m&aacute;s eficiente del <em>hardware </em>subyacente.</font></p>   </li>     </ul>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Se propone XEOS como un conjunto de tecnolog&iacute;as para el  desarrollo de <em>software </em>base de  sistemas embebidos. XEOS basado en el <em>microkernel </em>Fiasco.OC y el <em>framework </em>de  desarrollo GenodeOS ha sido portado a varias plataformas de <em>hardware</em>. Este soporte ha sido validado  y aceptado por la comunidad de desarrollo internacional de estas tecnolog&iacute;as.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Se deben  continuar implementando componentes de seguridad sobre las tecnolog&iacute;as y  realizar pruebas de rendimiento sobre el sistema para determinar los tiempos de  respuesta del mismo. Tambi&eacute;n se debe trabajar en funci&oacute;n de implementar algunas  pruebas que permitan medir la capacidad de <em>RealTime</em>,  as&iacute; como implementar algoritmos de planificaci&oacute;n <em>RealTime</em>. </font></p>     <p>&nbsp;</p>     <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><B>REFERENCIAS    BIBLIOGR&Aacute;FICAS</B></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">M. J. Accetta, R. V. Baron, W. Bolosky, D. B. Golub, R. F. Rashid, A.  Tevanian, and M. W. Young. Mach: A new kernel foundation for unix development.  In <em>Proceedings Usenix Summer&rsquo;86  Conference</em>, pages 93&ndash;113, Atlanta, Georgia, 1986.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Daniel P. Bovet and Marco Cesati. <em>Understanding the Linux Kernel</em>.  O&rsquo;Reilly, 1ed edition, 2000.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lorenzo Dozio and Paolo Mantegazza. Linux real time application  interface (rtai) in low cost high performance motion control. <em>Motion Control</em>, 2003(1):1&ndash;15, 2003.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">P. Faruki, A. Bharmal, V. Laxmi, V. Ganmoor, M.S. Gaur, M. Conti, and M.  Rajarajan. Android security: A survey of issues, malware penetration, and  defenses. <em>IEEE Communications Surveys  &amp; Tutorials</em>, 17(2): 998&ndash;1022, May 2015.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Norman Feske. Genode as general-purpose os - progress report and  demonstration. In <em>Free and Open Source  Software Developers European Meeting</em>, 2014.    </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Hariprasad Govindharajan. Porting linux to a hypervisor based embedded  system. Technical report, Institutionen f&uml;or informationsteknologi, Department  of Information Technology, Uppsala Universitet, 2013.    </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Rich Goyette. An analysis and description of the inner workings of the  freertos kernel. <em>Operating System Methods  for Real-Time Applications</em>, 2007.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Hermann H&uml;artig, Michael Roitzsch, Adam Lackorzynski, B&uml;orn D&uml;obel, and  Alexander B&uml;ottcher. L4virtualization and beyond. In <em>Korean Information Science Society Review</em>, 2008.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Gernot Heiser and Ben Leslie. The okl4 microvisor: Convergence point of  microkernels and hypervisors. In <em>Proceedings  of the First ACM Asia-Pacific Workshop on Systems</em>, pages 19&ndash;23, New Delhi,  India, August 2010. ACM.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Dan Hildebrand. An architectural overview of qnx. In <em>USENIX Workshop on Microkernels and Other  Kernel Architectures</em>, pages 113&ndash;126, 1992.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Gerwin Klein, June Andronick, Kevin Elphinstone, Gernot Heiser, David  Cock,. sel4: formal verification of an operatingsystem kernel. <em>Communications of the ACM</em>,  53(6):107&ndash;115, June 2010. The original version of this paper was published in  the Proceedings of the 22nd ACM SIGOPS Symposium on Operating Systems  Principles, Oct. 2009.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Yauhen Klimiankou. An enhanced multi-pager environment support for  second generation microkernels. <em>International  Journal of Computer Science and Information Security</em>, 12(1), 2014.    </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ga&uml;el Le Mignot. The gnu hurd. In <em>Extended  Abstract of Talk at Libre Software Meeting, Dijon, France</em>, 2005.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Jochen Liedtke. Clans &amp; chiefs.  In <em>Proceedings 12th GI/ITG Fachtagung  Architektur von Rechensystemen</em>, pages 294&ndash;305, Kiel, 1992. Springer-Verlag.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Jochen Liedtke. On <em>&micro;</em>-kernel  construction. In <em>15th ACM Symposium on  Operating System Principles (SOSP)</em>, pages 237&ndash;250, December 1995.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Jochen Liedtke. Towards real  microkernels. <em>Comunications of the ACM</em>,  39(9):70&ndash;77, 1996.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Robert Love. <em>Linux Kernel  Development</em>. Addison-Wesley, 3ed edition, 2010.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">M. PartheymA&tilde; 4<u>1</u>ller,  J. Stecklina, and B. D&uml;obel. Fiasco.oc on the scc. In <em>Proceedings of the 4th Many-Core Applications Research Community  Symposium</em>, pages 79&ndash;82, 2012.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">P. Raghavan, Amol Lad, and Sriram Neelakandan. <em>Embedded Linux System Design and Development</em>. Auerbach  Publications, 2006.    </font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Abraham Silberschatz, Peter B. Galvin, and Greg Gagne. <em>Operating System Concepts</em>. John Wiley  &amp; Sons, 2013.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">R. Suppiah and M.F. Bin Abbas. Introducing embedded systems development  on a robotics-based platform. In <em>International  Conference on Teaching, Assessment and Learning</em>, pages 103&ndash;108, Wellington,  Dec. 2014.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Andrews S.  Tanenbaum. <em>Sistemas Operativos Modernos</em>.  Prentice-Hall, 2009.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Durga Vemuri and Wasim Al-Hamdani. Measures to improve security in a microkernel  operating system. In <em>Proceedings of the  Information Security Curriculum Development Conference</em>, pages 25&ndash;33. ACM,  2011.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">David A. Wheeler. Sloccount (version  2.26). <em>(En: </em><a href="http://www.dwheeler.com/sloccount."><em>http://www.dwheeler.com/sloccount.)</em></a>, 2004.</font></p>     <!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Andrew S Woodhull and Andrew S Tanenbaum. <em>Operating Systems Design and Implementation</em>. Prentice-Hall, 1997.    </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Andreas  Zoor and Nikolai Nagibin. User-level scheduling mechanisms. In Robert Kaiser,  editor, <em>First Wiesbaden Workshop on  Advanced Microkernel Operating Systems</em>, pages 25&ndash;28. ACM,  Februrary 2014.</font> </p>     <p name="_ENREF_1">&nbsp;</p>     <p name="_ENREF_1">&nbsp;</p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Recibido: 15/04/2016    <br> Aceptado: 05/05/2016</font></p>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Accetta]]></surname>
<given-names><![CDATA[M. J]]></given-names>
</name>
<name>
<surname><![CDATA[Baron]]></surname>
<given-names><![CDATA[R. V]]></given-names>
</name>
<name>
<surname><![CDATA[Bolosky]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Golub]]></surname>
<given-names><![CDATA[D. B]]></given-names>
</name>
<name>
<surname><![CDATA[Rashid]]></surname>
<given-names><![CDATA[R. F]]></given-names>
</name>
<name>
<surname><![CDATA[Tevanian]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Young]]></surname>
<given-names><![CDATA[M. W]]></given-names>
</name>
</person-group>
<source><![CDATA[Mach: A new kernel foundation for unix development]]></source>
<year>1986</year>
<page-range>93-113</page-range><publisher-loc><![CDATA[Atlanta^eGeorgia Georgia]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Daniel]]></surname>
<given-names><![CDATA[P. Bovet]]></given-names>
</name>
<name>
<surname><![CDATA[Marco]]></surname>
<given-names><![CDATA[Cesati]]></given-names>
</name>
</person-group>
<source><![CDATA[Understanding the Linux Kernel.]]></source>
<year>2000</year>
<edition>1ed edition</edition>
</nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Dozio]]></surname>
<given-names><![CDATA[Lorenzo]]></given-names>
</name>
<name>
<surname><![CDATA[Mantegazza]]></surname>
<given-names><![CDATA[Paolo]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Linux real time application interface (rtai) in low cost high performance motion control.]]></article-title>
<source><![CDATA[]]></source>
<year>2003</year>
<volume>1</volume>
<numero>1-15</numero>
<issue>1-15</issue>
</nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Faruki]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Bharmal]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Laxmi]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
<name>
<surname><![CDATA[Rajarajan]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Android security: A survey of issues, malware penetration, and defenses]]></article-title>
<source><![CDATA[]]></source>
<year>May </year>
<month>20</month>
<day>15</day>
<volume>17</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>998-1022</page-range></nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Norman]]></surname>
<given-names><![CDATA[Feske]]></given-names>
</name>
</person-group>
<source><![CDATA[Genode as general-purpose os - progress report and demonstration]]></source>
<year>2014</year>
</nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Govindharajan]]></surname>
<given-names><![CDATA[Hariprasad]]></given-names>
</name>
</person-group>
<source><![CDATA[Porting linux to a hypervisor based embedded system]]></source>
<year>2013</year>
<publisher-name><![CDATA[Uppsala Universitet]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Goyette]]></surname>
<given-names><![CDATA[Rich]]></given-names>
</name>
</person-group>
<source><![CDATA[An analysis and description of the inner workings of the freertos kernel]]></source>
<year>2007</year>
</nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hermann]]></surname>
<given-names><![CDATA[H¨artig]]></given-names>
</name>
<name>
<surname><![CDATA[Roitzsch]]></surname>
<given-names><![CDATA[Michael]]></given-names>
</name>
<name>
<surname><![CDATA[Lackorzynski]]></surname>
<given-names><![CDATA[Adam]]></given-names>
</name>
</person-group>
<source><![CDATA[L4virtualization and beyond.]]></source>
<year>2008</year>
</nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Heiser]]></surname>
<given-names><![CDATA[Gernot]]></given-names>
</name>
<name>
<surname><![CDATA[Leslie]]></surname>
<given-names><![CDATA[Ben]]></given-names>
</name>
</person-group>
<source><![CDATA[The okl4 microvisor: Convergence point of microkernels and hypervisors.]]></source>
<year>Augu</year>
<month>st</month>
<day> 2</day>
<page-range>19-23</page-range><publisher-loc><![CDATA[^eNew Delhi New Delhi]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B10">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hildebrand]]></surname>
<given-names><![CDATA[Dan]]></given-names>
</name>
</person-group>
<source><![CDATA[An architectural overview of qnx.]]></source>
<year>1992</year>
<page-range>113-126</page-range></nlm-citation>
</ref>
<ref id="B11">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gerwin]]></surname>
<given-names><![CDATA[Klein]]></given-names>
</name>
<name>
<surname><![CDATA[Andronick]]></surname>
<given-names><![CDATA[June]]></given-names>
</name>
<name>
<surname><![CDATA[Elphinstone]]></surname>
<given-names><![CDATA[Kevin]]></given-names>
</name>
<name>
<surname><![CDATA[Heiser]]></surname>
<given-names><![CDATA[Gernot]]></given-names>
</name>
<name>
<surname><![CDATA[David]]></surname>
<given-names><![CDATA[Cock]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[sel4: formal verification of an operatingsystem kernel.]]></article-title>
<source><![CDATA[]]></source>
<year>Oct.</year>
<month> 2</month>
<day>00</day>
<volume>53</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>107-115</page-range></nlm-citation>
</ref>
<ref id="B12">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Klimiankou]]></surname>
<given-names><![CDATA[Yauhen]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An enhanced multi-pager environment support for second generation microkernels]]></article-title>
<source><![CDATA[]]></source>
<year>2014</year>
<volume>12</volume>
<numero>1</numero>
<issue>1</issue>
</nlm-citation>
</ref>
<ref id="B13">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Le Mignot]]></surname>
<given-names><![CDATA[Ga¨el]]></given-names>
</name>
</person-group>
<source><![CDATA[The gnu hurd]]></source>
<year>2005</year>
<publisher-loc><![CDATA[^eDijon Dijon]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B14">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Liedtke]]></surname>
<given-names><![CDATA[Jochen]]></given-names>
</name>
</person-group>
<source><![CDATA[Clans & chiefs.]]></source>
<year>1992</year>
<page-range>294-305</page-range><publisher-name><![CDATA[Springer-Verlag]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Liedtke]]></surname>
<given-names><![CDATA[Jochen]]></given-names>
</name>
</person-group>
<source><![CDATA[On µ-kernel construction]]></source>
<year>Dece</year>
<month>mb</month>
<day>er</day>
<page-range>237-250</page-range></nlm-citation>
</ref>
<ref id="B16">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Liedtke]]></surname>
<given-names><![CDATA[Jochen]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Towards real microkernels]]></article-title>
<source><![CDATA[]]></source>
<year>1996</year>
<volume>39</volume>
<numero>9</numero>
<issue>9</issue>
<page-range>70-77</page-range></nlm-citation>
</ref>
<ref id="B17">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Love]]></surname>
<given-names><![CDATA[Robert]]></given-names>
</name>
</person-group>
<source><![CDATA[Linux Kernel Development]]></source>
<year>2010</year>
<edition>3ed edition</edition>
<publisher-name><![CDATA[Addison-Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B18">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[M]]></surname>
<given-names><![CDATA[PartheymA41ller]]></given-names>
</name>
<name>
<surname><![CDATA[Stecklina]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[D¨obel]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
</person-group>
<source><![CDATA[Fiasco.oc on the scc]]></source>
<year>2012</year>
<page-range>79-82</page-range></nlm-citation>
</ref>
<ref id="B19">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Raghavan]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Lad]]></surname>
<given-names><![CDATA[Amol]]></given-names>
</name>
<name>
<surname><![CDATA[Neelakandan]]></surname>
<given-names><![CDATA[Sriram]]></given-names>
</name>
</person-group>
<source><![CDATA[Embedded Linux System Design and Development]]></source>
<year>2006</year>
<publisher-name><![CDATA[Auerbach Publications]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Silberschatz]]></surname>
<given-names><![CDATA[Abraham]]></given-names>
</name>
<name>
<surname><![CDATA[Peter]]></surname>
<given-names><![CDATA[B Galvin]]></given-names>
</name>
<name>
<surname><![CDATA[Gagne]]></surname>
<given-names><![CDATA[Greg]]></given-names>
</name>
</person-group>
<source><![CDATA[Operating System Concepts]]></source>
<year>2013</year>
<publisher-name><![CDATA[John Wiley & Sons]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B21">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Suppiah]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Bin Abbas]]></surname>
<given-names><![CDATA[M.F.]]></given-names>
</name>
</person-group>
<source><![CDATA[Introducing embedded systems development on a robotics-based platform.]]></source>
<year>Dec.</year>
<month> 2</month>
<day>01</day>
<page-range>103-108</page-range><publisher-name><![CDATA[Wellington]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B22">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Andrews]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Sistemas Operativos Moderno]]></source>
<year>2009</year>
<publisher-name><![CDATA[Prentice-Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B23">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Vemuri]]></surname>
<given-names><![CDATA[Durga]]></given-names>
</name>
<name>
<surname><![CDATA[Wasim]]></surname>
<given-names><![CDATA[Al-Hamdani]]></given-names>
</name>
</person-group>
<source><![CDATA[Measures to improve security in a microkernel operating system.]]></source>
<year>2011</year>
<page-range>25-33</page-range><publisher-name><![CDATA[ACM]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B24">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[David]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<source><![CDATA[Wheeler. Sloccount]]></source>
<year>2004</year>
</nlm-citation>
</ref>
<ref id="B25">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[S Woodhull]]></surname>
<given-names><![CDATA[Andrew]]></given-names>
</name>
<name>
<surname><![CDATA[Tanenbaum]]></surname>
<given-names><![CDATA[Andrew S]]></given-names>
</name>
</person-group>
<source><![CDATA[Operating Systems Design and Implementation]]></source>
<year>1997</year>
<publisher-name><![CDATA[Prentice-Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B26">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Andreas]]></surname>
<given-names><![CDATA[Zoor]]></given-names>
</name>
<name>
<surname><![CDATA[Nagibin]]></surname>
<given-names><![CDATA[Nikolai]]></given-names>
</name>
</person-group>
<source><![CDATA[User-level scheduling mechanisms]]></source>
<year>Febr</year>
<month>ur</month>
<day>ar</day>
<page-range>25-28</page-range><publisher-name><![CDATA[ACM]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
