Chromium por Juanda


Publicado el jue 22 marzo 2018 por Juanda
Actualizado el sáb 03 noviembre 2018 por Juanda
Categoría: chromium

Etiquetas: javascript v8 web multiplataforma www aplicacion software


Chromium es el proyecto open source en el que se basa el navegador de google Chrome. Desde sus orígenes ha destacado por ser el más rápido en cargar las páginas y aplicaciones web, compitiendo mano a mano e incluso superando al omnipresente Firefox.

La arquitectura a alto nivel de Chromium es similar a la del resto de los navegadores conocidos. Se trata de una arquitectura multi proceso en la que un proceso principal denominado browser crea y controla varios procesos hijos denominados renderer . A su vez cada uno de estos procesos consta de varios hilos con distintas funcionalidades.

La responsabilidad del proceso principal (o browser) es interactuar con el sistema operativo en nombre del usuario que lo utiliza:

  • gestión de cookies,
  • gestión del historial,
  • gestión de passwords,
  • gestión de pestañas,
  • acceso a la red,
  • caché de disco,
  • gestión de descargas,

Son las tareas más relevantes asignadas a este proceso.

Por su parte los procesos renderer, hijos del proceso browser, tienen como función principal interpretar la respuesta que proviene de los web server y renderizarla en las pestañas dentro de las cuales se ejecutan. Aunque Chromium ofrece varios modelos de procesos que pueden seleccionarse mediante opciones del ejecutable, no perdemos generalidad si pensamos en que cada pestaña se corresponde con un proceso renderer.

Las tareas más relevantes realizadas por los procesos renderer son:

  • parsear el HTML,
  • parsear las CSS’s,
  • decodificar imágenes,
  • interpretar Javascript (con V8 por supuesto),
  • crear y ofrecer como web api el DOM (Data Object Model) una estructura de árbol que representa el documento HTML que se va a renderizar,
  • renderizar gráficos SVG,
  • parsear XML y XSLT

El web browser es un programas muy expuesto a problemas de seguridad, ya que los datos ue procesa provienen directamente desde sitios web que no tienen por que ser confiables. Por ellos los procesos renderer se ejecutan en un entorno restringido que evita el acceso a otros procesos renderer y al resto del sistema. Este aislamiento es posible gracias a la arquitectura multi proceso del navegador, pues los sistemas operativos modernos ofrecen técnicas para aislar eficientemente los procesos.

La única forma que tiene un proceso renderer de obtener servicios como solicitar las cookies del dominio, los datos almacenados, acceso a la red, etcétera, es enviando mensajes al proceso browser mediante un sistema de intercomunicación de procesos (IPC). Las diversas técnicas utilizadas para conseguir este aislamiento se conocen como sandboxing, en alusión a las cajas de arena que se utilizan en los parques para que los niños no se maten jugando.

La siguiente imagen representa el modelo de procesos que acabamos de describir:

Y esta otra, extraída de documentación oficial de chromium , representa con más detalle el modelo de procesos utilizado en Chromium.

En este último diagrama es importante observar por un lado como cada uno de los procesos consta de varios hilos, y la existencia de un hilo de entrada/salida (I/O Thread) en el proceso browser que sirve para ofrecer la IPC entre procesos y para ofrecer los servicios de red a los procesos renderer.

En próximas entregas veremos cómo este modelo de procesos con una pequeña modificación, constituye la idea clave sobre la que se sustenta el framework electron