La capa de abstracción de hardware o HAL (acrónimo del inglés de hardware abstraction layer) es un elemento del sistema operativo que funciona como una interfaz entre el software y el hardware del sistema, proveyendo una plataforma de hardware consistente sobre la cual correr las aplicaciones. Cuando se emplea una HAL, las aplicaciones no acceden directamente al hardware sino que lo hacen a la capa abstracta provista por la HAL. Del mismo modo que las API, las HAL permiten que las aplicaciones sean independientes del hardware porque abstraen información acerca de tales sistemas, como lo son las cachés, los buses de E/S y las interrupciones, y usan estos datos para darle al software una forma de interactuar con los requerimientos específicos del hardware sobre el que deba correr. El sistema operativo NT tiene un HAL que permite la portabilidad del código de modo kernel de Windows NT a una variedad de procesadores con distintas arquitecturas de administración de memoria, y una variedad de sistemas con diferentes arquitecturas de bus E/S. La mayor parte de este código se ejecuta sin cambio en estos sistemas. Sistemas operativos como BSD, Mac OS X, GNU/Linux, CP/M, DOS, Solaris y otros tienen también una HAL, aunque no siempre esté específicamente designada de tal forma. Las HAL son de un nivel incluso inferior en lenguajes de programación que las interfaces de aplicación de programas (API), porque interactúan directamente con el hardware en vez de con el sistema kernel, por lo que requieren menos tiempo de procesamiento que las APIs. Los lenguajes de alto nivel suelen usar HALs o APIs para comunicarse con componentes de menor nivel.
Con HAL, toda la información sobre ciertas clases de hardware es accesible en un único formato. Cuando un nuevo dispositivo es añadido al sistema, una señal asíncrona es situada en el bus del sistema de mensajes detallando el tipo de dispositivo que ha sido añadido. Scripts del sistema pueden configurar el dispositivo, es decir, HAL soporta dispositivos plug and play.
Aunque los sistemas operativos basados en GNU/Linux tienen compatibilidad de hardware para un amplio rango de dispositivos, no siempre funcionaban automáticamente; esto cambió con la introducción del HAL. Tradicionalmente los usuarios tenían que buscar en Internet y escribir líneas de comandos para que su hardware funcionase, lo que resultaba muy tedioso y podía confundir. La capa HAL provee a las aplicaciones de una forma sencilla para reconocer hardware en el sistema. Antes las aplicaciones de escritorio descubrían el hardware “hablando” directamente con el kernel, ya que éste mantiene una lista de dispositivos conectados al sistema. Este proceso no siempre funcionaba correctamente. Con HAL toda la información sobre ciertas clases de hardware es fácilmente accesible en un formato bien definido. Cuando un dispositivo nuevo es conectado al sistema se envía una señal asíncrona al bus de mensajes del sistema detallando qué tipo de dispositivo se ha añadido. Cualquier aplicación de escritorio se puede conectar al bus de mensajes para descubrir hardware. Internamente, el daemon HAL mantiene una lista de objetos directorio que contiene pares de clave/valor bien definidas que describen lo que el objeto representa. Cada dispositivo es identificado por un Identificador Único de Dispositivo (Unique Device Identifier, UDI). Los pares de clave/valor, llamados propiedades del dispositivo, están definidos en la especificación del HAL.
Una vez que el daemon HAL ha recogido toda la información sobre un dispositivo, incluyendo la fusión de información de los archivos de información sobre dispositivos, ya está listo para anunciar la presencia del nuevo objeto dispositivo.
Llamadas o callouts
Justo antes del anuncio de la presencia de un dispositivo pueden ejecutarse programas específicos del SO para configurar el sistema operativo de base. Por ejemplo, para que un usuario sin privilegios monte un sistema de archivos hay que escribir una línea en la tabla de archivos del sistema /etc/fstab. En HAL esto se consigue gracias a una llamada (callout). Cualquier programa en la carpeta /etc/hal/device.d/ es ejecutado cuando un dispositivo es añadido o extraído. Esto es lo mismo que un programa fstab-sync. El objetivo de este programa es el de modificar /etc/fstab cuando un sistema de archivos montable en un dispositivo de almacenamiento es añadido en o extraído del sistema.
Por ejemplo, para un lector Compact Flash fstab-sync añadiría la siguiente línea:
/dev/sda1 /media/CANON_DC vfat pamconsole,noatime,sync,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0
La opción pamconsole especifica que cualquier usuario (sin privilegios) puede montar el sistema. La opción managed especifica que la línea fue añadida por un programa y no por el administrador del sistema. Esta opción es útil si el administrador ya ha añadido una entrada por lo que fstab-sync rehúsa añadir una entrada. Con esto fstab-sync crearía el punto de montaje /media/mi_dispositivo y añadiría la entrada en el archivo /etc/fstab.
Una vez se han completado todas las llamadas el daemon HAL anuncia la presencia del objeto dispositivo en el bus de mensajes del sistema. Programas como el GNOME Volume Manager en Fedora permiten al usuario retocar las especificaciones para los distintos dispositivos.
Una característica interesante del HAL son sus propiedades persistentes, que se aseguran de que las propiedades de un dispositivo se guardan para cuando el dispositivo se vuelve a enchufar.
HAL no frena el acceso al hardware, simplemente es una pieza del software que mantiene una lista de dispositivos con propiedades bien definidas para cada uno. Además, el HAL provee de espacio para las propiedades de aplicación definidas para estos dispositivos.
No hay comentarios:
Publicar un comentario