Introducción al sistema operativo Android

El sistema operativo Android es un sistema de código abierto. Mucha gente dice que es Linux, pero eso no es del todo cierto. Aunque Android tiene núcleos que son similares a los de Linux, eso es lo único que es similar. Hoy, analizaremos en profundidad el interior del sistema operativo Android, que son los procesos, el marco y otras estructuras similares. Entonces, comencemos desde lo más básico y echemos un vistazo hasta la raíz interna del sistema operativo Android.

Después del lanzamiento de iPhone y Windows Lumia Series, es decir, los teléfonos relacionados con Microsoft Windows, Google quería hacer lo mismo. Pero querían algo que pudiera ser de código abierto. La razón principal detrás de esto fue para que cualquiera pudiera depurarlo, modificarlo cualquier cambio que quisiera. Luego surgió la idea de Linux. Linux es un sistema operativo totalmente de código abierto y es ampliamente aceptado por la comunidad en todo el mundo. Es uno de esos sistemas operativos que se usa incluso más que Windows o Mac OSX. Además, Linux tiene la capacidad de ejecutar casi cualquier otra cosa que pueda ejecutarse en Mac o Windows. Por lo tanto, Google decidió desarrollar un sistema operativo para un teléfono celular con el mismo shell interno básico que el de Linux, de modo que sea compatible con casi todo y el shell externo se desarrolle como, cuándo y cómo se requiere.

Sistema operativo Android como un proyecto de código abierto (AOSP)

Android tiene la capacidad de modificar, inventar e implementar libremente nuestros propios controladores y características del dispositivo. Ahora para hablar, hay cinco capas diferentes de un sistema operativo Android. Va de la siguiente manera:

Como puede ver en la imagen de arriba, la primera capa es el Marco de aplicación, la segunda es la Proxy IPC de Binder, la tercera consiste en los Servicios del sistema Android, la cuarta es la HAL o la forma completa es la Capa de abstracción de hardware, y la última siendo el kernel de Linux. Ahora, como dije anteriormente, puede ver que la única parte de Linux en la que consiste un sistema operativo Android es el kernel de Linux. Ahora echemos un vistazo a todos ellos uno por uno.

Marco de aplicaciones de Android

Los desarrolladores de aplicaciones de Android usan este Framework de aplicaciones. Esta parte de Android tiene al menos algo que hacer con la capa de hardware. Las aplicaciones de Android están programadas en lenguaje Java. Después de programar una aplicación, las herramientas del SDK de Android ayudan a compilar los datos y los archivos de recursos, como los archivos XML, los archivos jar, los archivos de manifiesto y otras imágenes y otras cosas en un solo paquete de archivo con una extensión '.apk'. Este archivo apk se puede utilizar para instalar la aplicación con solo un clic en los dispositivos Android. Ahora, dado que el sistema operativo Android se comporta como un entorno Linux, el comportamiento de la aplicación también es el mismo aquí. Cada aplicación se considera un usuario separado de la otra y se ejecuta en su propia máquina virtual. Esto hace que el código programado de la aplicación esté aislado y también evita que se infecte con otros a menos que se indique explícitamente. Cada otra aplicación tiene su propia ID de usuario y cada otro proceso tiene su propia máquina virtual.

El Marco de aplicaciones de Android funciona según el Principio de menor privilegio. El Principio de Privilegio Mínimo significa que cada vez que se necesita ejecutar una nueva aplicación, pero no hay memoria disponible, el sistema Android cerrará automáticamente la aplicación anterior que no es necesario ejecutar en segundo plano. Esta es una de las mejores partes de la seguridad del sistema operativo Android. Este principio hace posible que cada aplicación tenga solo ese acceso que se requiere para hacer su trabajo. Por lo tanto, una aplicación no puede obtener permiso para lo que no está destinado a hacer. Esto, a su vez, crea un entorno muy seguro dentro del propio sistema operativo Android.

Binder IPC se conoce como Binder Inter-Process Communication. Esta interfaz permite que un programador cree una aplicación para comunicarse con otras aplicaciones. Más a menudo, no son las aplicaciones las que se comunican, son los procesos. Binder IPC ayuda a ejecutar múltiples procesos al mismo tiempo en un nivel concurrente. Esta implementación de la carpeta se obtiene a través del Kernel del sistema operativo Android. Ahora se han planteado preguntas sobre por qué el aglutinante debe permanecer en el núcleo y por qué no puede ejecutarse desde los mecanismos Linux IPC. La razón principal de esto es porque la carpeta evita el uso de la asignación innecesaria de espacio a diferencia de otros mecanismos de IPC en el sistema Linux. Si has oído hablar del término 'magia en python', entonces eso es lo que un Binder IPC sería para un desarrollador de aplicaciones, ya que está totalmente oculto para ellos y simplemente parece funcionar, a diferencia del marco de alto nivel donde debes hacerlo funcionar explícitamente. Esto realmente permite que el marco de alto nivel se comunique con los servicios del sistema operativo Android.

Servicios del sistema del sistema operativo Android

Un servicio es un código compilado que se ejecuta durante mucho tiempo en el fondo de un sistema operativo Android sin proporcionar ninguna interfaz. Cualquier aplicación, ya sea usuario o sistema, puede iniciar un servicio, pero seguirá ejecutándose en segundo plano, incluso si la aplicación está cerrada. Sin embargo, hay dos tipos de servicios:

Servicios iniciados

Los servicios iniciados generalmente comienzan cuando una aplicación lo solicita. Sin embargo, un tipo de servicio Iniciado generalmente realiza una sola operación y no devuelve nada.

Servicios vinculados

Los servicios limitados ofrecen una interfaz de relación cliente-servidor. El servicio vinculado se ejecuta hasta que se ejecuta la aplicación en primer plano y luego se detiene una vez que se destruye la actividad de la aplicación.

Los servicios del sistema de Android proporcionan la información necesaria a las aplicaciones del usuario para que funcionen correctamente. Y estas comunicaciones entre los servicios del sistema y las aplicaciones del usuario se realizan con la ayuda del Binder IPC del Kernel. Ahora puede sorprender, pero no todas las aplicaciones en un Android están escritas en Java. Algunos de ellos están escritos en C y C ++. Las aplicaciones que necesitan estar en contacto cercano con el hardware están escritas en C y C ++. La razón principal de esto es porque la mayoría de las veces los servicios del sistema necesitan estar en contacto constante con el hardware. Esto hace que sea importante que el código compilado sea extremadamente rápido. Y cuando se trata de aceleración de hardware y alto rendimiento, C es mucho más rápido que Java o cualquier otro lenguaje.

Los servicios de hardware que están en uso constante, por ejemplo: sensores de proximidad, acelerómetro o la pantalla táctil deben escribirse en C. Otro hardware, como la cámara o el sonido, utiliza principalmente las llamadas JNI. Por lo tanto, si alguna vez se da cuenta, las pantallas táctiles siempre serán más rápidas que iniciar una cámara o reproducir una canción a través de un reproductor de música.

Al crear un servicio del sistema, tenga en cuenta que los servicios tienden a ejecutarse en el proceso principal y no crea un proceso separado. En resumen, si su código va a hacer un trabajo intensivo de CPU y GPU, por ejemplo, juegos de alta definición, entonces debería preferir crear nuevos hilos en el mismo servicio; de lo contrario, siempre habrá una alta probabilidad de tener el cuadro de diálogo "La aplicación no responde".

Cursos recomendados

  • Capacitación en certificación de seguridad de TI
  • Curso completo de Ruby on Rails
  • Entrenamiento profesional de CSS
  • Programa en HTML5 y CSS3

Capa de abstracción de hardware

La capa de abstracción de hardware o HAL está diseñada específicamente para proveedores. Los desarrolladores de aplicaciones tienen poco o casi nada que hacer aquí. Esta capa ayuda a insertar la funcionalidad sin tener modificaciones en el sistema. Todos los demás sistemas tienen un HAL de diseño diferente, ya que están hechos para dispositivos específicos. HAL consta de dos estructuras típicas: Módulo y Dispositivo.

La estructura del módulo en HAL se almacena como una biblioteca compartida en formato .so que consta de los metadatos básicos, como el número de versión, el autor que diseñó el módulo y cosas similares. La estructura del dispositivo es el hardware real del producto. Similar a la del módulo, pero la estructura del dispositivo define una versión más completa de la información genérica de hardware que contiene punteros y otras cosas similares que son especiales para cada hardware.

En Linux, las aplicaciones se comunican con el hardware subyacente a través de llamadas al sistema. Pero en un sistema operativo Android, las aplicaciones se comunican con el hardware a través de las API de Java.

Kernel de Linux

Compilar un kernel de Linux para un sistema operativo Android es similar a compilarlo para un sistema operativo Linux básico. La única diferencia es que la versión de Android es un poco más avanzada que la de Linux. La razón principal es que el kernel de Android consta de características adicionales como wakelocks, doble toque para desbloquear y otras características similares integradas en el dispositivo operativo móvil. Las características como wakelock son importantes ya que el núcleo funcionará en un dispositivo portátil y debe ser un poco más agresivo en la gestión de la memoria y la batería; a diferencia del Linux básico donde la administración de energía no es un problema. Estos requisitos adicionales se inducen en el núcleo en lugar del sistema, ya que estas cosas no deberían afectar a los controladores integrados.

Cada vez que escuchas a una persona decir 'es Linux', generalmente se refieren al núcleo ya que es la parte más básica y la más importante de cualquier sistema operativo. La razón principal por la que Android se basa en el kernel de Linux es que es de código abierto. Cualquiera puede seguir adelante y modificar el kernel de Linux sin ninguna limitación de hardware o incluso cualquier problema de regalías.

Diferencia entre Linux y Android

Así que ahora finalmente hemos llegado a la etapa más confusa de este blog: Linux vs Android. La gente generalmente considera Android como una distribución de Linux, pero diría que solo tienen un 50% de razón. Cada vez que se inicia el sistema operativo Android, básicamente carga el kernel como cualquier otra distribución de Linux, pero el resto del software es totalmente diferente al de Linux. Las aplicaciones de Linux no se ejecutarán en Android y viceversa, a menos que estén compiladas en un entorno chroot. Las bibliotecas presentes en una distribución típica de Linux y Android son totalmente diferentes entre sí. Básicamente, no puede obtener acceso al terminal raíz en Android como en el caso de Linux. Esta es la razón principal por la cual las personas suelen instalar Busybox, SuperSU y sus binarios después del enraizamiento para que tengan un acceso de línea de comandos más detallado al kernel y al shell. No hay un shell predeterminado en Android, pero puede obtener uno instalando un emulador de terminal de Google Play Store. El emulador de terminal se ve así:

El tiempo de ejecución de Android funciona en una máquina virtual Dalvik. Esta máquina virtual Dalvik es en realidad un intérprete para el lenguaje de programación Java. Todo el tiempo de ejecución de Android está escrito en Java en Android, y dado que todas las aplicaciones de Android están escritas en Java, se vuelve mucho más fácil y fluido para que las aplicaciones se ejecuten en el entorno virtual. Y dado que todas las aplicaciones e incluso el tiempo de ejecución están escritas en Java, resulta mucho más fácil para cualquier desarrollador personalizar cada bit del sistema operativo Android. El androide generalmente fue diseñado para ser un sistema operativo de un solo usuario (a diferencia de la piruleta y el malvavisco, donde puede haber múltiples usuarios). Para simplificar esto, permítanme ponerlo en este formulario. Las aplicaciones de Android no son más que procesos de Linux al final y así es como tienden a funcionar. Y como he dicho anteriormente que cada aplicación tiene su propio proceso, se hace más fácil para el núcleo crear un UID separado para cada proceso y manejar los archivos y la memoria de la aplicación sin ningún esfuerzo adicional.

En realidad, hay más de esto que los conceptos básicos del sistema operativo Android que he mencionado anteriormente. Android tiene un proceso central que se conoce como 'Zygote' y sobresale en lo que hace. Este proceso en realidad comienza con los comandos de inicialización cuando se inicia Android. No voy a entrar en muchos detalles aquí, pero creo que los conceptos básicos del sistema operativo Android son en realidad suficientes para que comiences con Android. Para obtener más información, puede visitar source.android.com y developers.android.com, que es el sitio web oficial de google para cualquier actualización de Android.

Artículos recomendados

Aquí hay algunos artículos que lo ayudarán a obtener más detalles sobre el sistema operativo Android, así que simplemente vaya al enlace.

  1. HTML5 vs Flash: en qué se diferencian
  2. Las 8 mejores aplicaciones útiles de Office Suite para tu Android
  3. Los 5 mejores emuladores de Android gratuitos para PC
  4. Preguntas de la entrevista de Android: las 10 preguntas más útiles
  5. Carreras en el desarrollo de Android
  6. Las 33 principales diferencias entre iPhone y Android