Introducción al SO de los móviles

De Training B Wiki
Salta a la navegació Salta a la cerca


El SO de Android

Android se desarrollo en 2003 por Android Inc, el objetivo era desarrollar un sistema operativo para cámaras. La idea inicial no era crear un SO de móviles, sino más bien crear un SO para dispositivos electrónicos de carácter más general. En 2003, Andy Rubin, Rich Miner, Nick Sear y Chris White empezaron a desarrollar un sistema operativo avanzado y escalable para diversos operativos.

Pero a medida que avanzo el proyecto, fueron conscienctes del potencial que tenía su tecnologia y decidieron expandir su enfoque hacia los dispositivos móviles, que por aquel entonces, solo había alguna versión de Windows mobile, o las propias BlackBerrys. Así que en 2004, cambió la dirección del proyecto y se entregaron por completo a los móviles. En 2005, Google adquirió la empresa y basó el núcleo del sistema en Linux.

La migración a Linux fué un paso crucial y estratégico en el desarrollod e Android:

  • Código abierto y licencia GPL: Asumiendo Linux como el núcleo de Android, se asumía la política de código fuente accesible y disponible para cualquier persona, ya que Linux es GPL y obliga a todos sus derivados a ser también de código libre.
  • Estabilidad y Rendimiento: Android heredó la estabilidad y rendimiento de Linux, era la base sólia sobre la que se construiria todo el sistema operativo.
  • Compabilitat de Hardware: Asumiendo el núcleo de Linux, Android mejoraba su compatibilidad con los hardwares del mercado, y eso ayudó a los fabricantes a generar nuevos modelos usando como base a Android.
  • Comunidad de desarrolladores: La comunidad de desarrolladores que podía contribuir al proyecto aumento exponencialmente.
  • Comandos y aplicacions de Linux: Android ahora podía disponer de un conjunto de scripts, herramientas y utilidades ya existentes en Linux.

Para competir con Apple, en 2007 Google fundó la Open Handset Alliance, una alianza de varios fabricantes de hardware para promover Android como un sistema operativo de código abierto, permitiendo el soporte de aplicaciones de terceros. El primer teléfono móvil lanzado con este sistema fue el T-Mobile G1, que salió al mercado un año después del primer iPhone, en octubre de 2008. No fue hasta 2012 que todos los fabricantes combinados lograron convertir a Android en el sistema operativo móvil con más dispositivos.

Como resultado, la filosofía de Android, aunque comparte ciertas similitudes con iOS, es estructuralmente diferente. Android está concebido como un sistema abierto, brindando gran libertad a los integradores y a las compañías que lo utilizan para ofrecer servicios de manera más flexible a los usuarios.

Este último punto es, al mismo tiempo, una ventaja crucial, ya que existe una amplia diversidad de dispositivos y sistemas que utilizan el sistema operativo. Esto evita el "Vendor Lock-in" presente en Apple. Sin embargo, al mismo tiempo, cada fabricante tiene sus diferencias, lo que hace más difícil uniformizar el sistema de manera general.

Estructura interna y por capas del sistema operativo Android

Android, como sistema operativo, está diseñado con una arquitectura de capas que permite una organización modular y eficiente de sus componentes. La estructura interna de Android se puede entender mediante sus capas, que van desde el hardware hasta las aplicaciones de usuario. A continuación, se describen las capas principales del sistema operativo Android:

Estructura interna de las capas del SO de Android
Estructura interna de las capas del SO de Android


  1. Kernel de Linux: En la capa más baja se encuentra el kernel de Linux. Este proporciona servicios esenciales como gestión de memoria, manejo de procesos, manejo de dispositivos y controladores de hardware. El kernel actúa como interfaz entre el hardware y el resto del sistema operativo.
  2. Abstracción del Hardware (HAL): És la primera capa específica del sistema Android e interacciona con el Hardware propio del dispositivo móvil.
  3. Librerías de Android: Sobre el kernel, se encuentran las librerías de Android, que proporcionan funciones esenciales para el desarrollo de aplicaciones. Estas librerías incluyen la implementación de funciones fundamentales como manipulación de datos, gráficos, acceso a la red y gestión de archivos. Están escritas principalmente en C y C++.
  4. Android Runtime (ART): ART es responsable de la ejecución de las aplicaciones Android. Con la compilación AOT, las aplicaciones se traducen en código nativo durante la instalación, lo que mejora la eficiencia y el rendimiento en comparación con la ejecución JIT (Just-In-Time) utilizada por Dalvik. A más, ART proporciona un entorno de ejecución controlado y un nivel de abstracción entre aplicaciones y hardware.
  5. JAVA API Framework: En esta capa se encuentra el framework de aplicaciones, que proporciona las API y los servicios esenciales para el desarrollo de aplicaciones Android. Esto incluye la gestión de la interfaz de usuario, la administración de recursos, la conectividad de red, la gestión de datos y otros servicios esenciales. El framework está compuesto por módulos como Activity Manager, Content Providers, View System, etc.
  6. Aplicaciones de Sistema y usuario: Este nivel incluye aplicaciones esenciales del sistema que proporcionan funcionalidades básicas, como la aplicación de teléfono, contactos, mensajes, entre otras. Estas aplicaciones son parte integral del sistema y, en algunos casos, son específicas del fabricante. A más, incorpora las aplicaciones que los usuarios instalan desde Google Play u otras fuentes. Estas aplicaciones aprovechan las API proporcionadas por el framework para ofrecer una amplia variedad de funciones y servicios.

La estructura por capas de Android permite una clara separación de responsabilidades y facilita la flexibilidad y la escalabilidad del sistema operativo, así como el desarrollo de aplicaciones de terceros.

El sistema de ficheros de Android

El sistema de ficheros de Android parte también del kernel de Linux. Pero como pasa con Linux, nos podemos encontrar con diferencias entre versiones. Aún así, los principales directorios son:

  1. **Root (/):** Es la raíz del sistema sistema de archivos y se encuentran los directorios principales, como "system", "data", "proc", y otros. La partición raíz generalmente está montada de solo lectura (read-only) para garantizar la integridad del sistema.
  2. **/system:** Este directorio contiene los archivos del sistema operativo Android, incluyendo la interfaz de usuario, bibliotecas compartidas, binarios y otros componentes esenciales. Es una partición de solo lectura para proteger la estabilidad del sistema.
  3. **/data:** Es donde se almacenan los datos de las aplicaciones y los usuarios. Este directorio es de lectura/escritura y contiene subdirectorios como "data/app" (para las aplicaciones instaladas), "data/data" (datos específicos de las aplicaciones), y otros.
  4. **/cache:** Este directorio almacena datos temporales utilizados por el sistema operativo y algunas aplicaciones. Puede contener archivos temporales, cachés de aplicaciones y otros datos que pueden eliminarse sin afectar el funcionamiento general del sistema.
  5. **/sdcard o /mnt/sdcard:** Este directorio (o enlaces simbólicos) suele representar el almacenamiento externo, como una tarjeta SD.. Aquí es donde se almacenan los archivos multimedia, descargas y otros datos del usuario.
  6. **/proc:** Este directorio virtual proporciona información en tiempo real sobre el estado del sistema, procesos en ejecución, o configuración del kernel. Contiene información que el kernel del sistema genera dinámicamente.
  7. **/dev:** Este directorio contiene archivos especiales que representan dispositivos de hardware en el sistema. Por ejemplo, /dev/sda puede representar un disco duro.
  8. **/mnt:** Este directorio se utiliza para montar otros sistemas de archivos, como sistemas de archivos de red o dispositivos de almacenamiento extraíbles.
  9. **/system/vendor:** En algunos dispositivos, este directorio almacena archivos específicos del fabricante o del proveedor de servicios, como controladores y configuraciones personalizadas.
  10. **/system/bin y /system/xbin:** Contienen binarios ejecutables utilizados por el sistema y las aplicaciones.
  11. **/sbin:** Contiene binarios del sistema que son esenciales para el inicio del sistema. Este directorio suele estar reservado para el usuario root.