1.-B) Arquitectura del sistema Linux LPIC-1

Hal: Es la capa de abstracción del hardware y es un demonio o programa que esta ejecutandose en todo momento y suministra información sobre el hardware disponible a los demás programas del espacio de usuario.
Hace de intermediario entre el hardware y sofware, lo mismo que en Windows.
Las HAL permiten que las aplicaciones sean independientes del hardware en el que se ejecutan, ya que hacen abstracciones de tales sistemas como los buses, cache, interrupciones, etc.
Las HAL, a diferencia de las API, interactuan directamente con el hardware, en lugar de con el kernel, por lo que requieren menos tiempo de procesamiento.
HAL posee propiedades persistentes, es decir que las propiedades de un dispositivo se guardan y restauran cuando éste se vuelve a conectar.
DeviceKit es una nueva capa de abstracción diseñada para reemplazar a HAL. DeviceKit ya ha sido parcialmente implementado en distribuciones modernas como Fedora 11 y Ubuntu 9.10.

D-Bus proviene de Desktop Bus, algo así como bus de escritorio. Es un sistema de comunicación entre procesos.
D-Bus se divide en tres capas:

libdbus: Biblioteca que permite a dos aplicaciones comunicarse e intercambiar mensajes.
Un daemon que funciona como bus de mensajes, construído sobre libdbus al cual pueden conectarse varias aplicaciones.
Bibliotecas adaptadas (wrappers) para su uso en marcos (frameworks) concretos.
Los principales usos de D-Bus son:

Comunicación entre aplicaciones de escritorio en la misma sesión.
Comunicación entre el sistema operativo y la sesión de escritorio.
También es un demonio y como ejemplo podemos decir que notifica eventos, por ejemplo la disponibilidad de un nuevo dispositivo USB.

udev: udev es el gestor de dispositivos a partir del kernel 2.6. Es el encargado de manejar los archivos especiales de dispositivos de /dev. Es el sucesor de devfs y hotplug.

Problemas previos
En un sistema Linux sin udev ni devfs, el directorio /dev está poblado nodos de dispositivos o archivos de dispositivos. Cada archivo representa un dispositivo, exista éste o no físicamente en el sistema. Es un conjunto estático de ficheros, ya que los nodos no cambian.

En este modelo, la forma de acceder a los dispositivos puede que no sea siempre la misma. Por ejemplo, si se tienen dos dispositivos del mismo tipo, se llamarán dispositivo1 y dispositivo2 respectivamente. Pero si se desconectara el primero, el dispositivo2 pasaría a ser el dispositivo1 ya que hay sólo uno conectado al sistema.
Otros problemas derivados de este comportamiento:

El directorio /dev es muy grande ya que contiene archivos de dispositivos que ni siquiera se encuentran físicamente en el equipo.
Los programas deben poder detectar cuándo se ha conectado o desconectado un dispositivo, y cuál es su referencia en /dev.

udev: la solución
udev resuelve los problemas anteriores y otros más de la siguiente manera:

udev mantiene en /dev sólo las referencias a dispositivos conectados al sistema.
Permite asignar nombres fijos a dispositivos, sin importar qué otros dispositivos haya conectados o no. 
Realiza notificaciones mediante D-bus para que cualquier programa del espacio de usuarios pueda saber cuándo se conecta o desconecta un dispositivo.
Trabaja completamente en el espacio de usuario, haciendo posible que cualquier programa pueda decidir el nombre a asignarse a un dispositivo.
Respeta la forma de nombrar los dispositivos aceptada por la Linux Standard Base (LSB).

Implementación
udev se ejecuta mediante un daemon: udevd, que se encarga de detectar cuando un dispositivo se conecta o desconecta del sistema.
Cuando ocurre alguno de estos dos eventos, udevd recopila información del contexto y del propio dispositivo utilizando la entrada correspondiente en /sys para el mismo.
Las reglas definidas en /etc/udev/rules.d/ indican qué acción tomar a partir de los datos obtenidos. Generalmente lo que se hará es dar un nombre al dispositivo, crear el archivo de dispositivos apropiado y ejecutar el programa que se haya definido para que el nuevo dispositivo quede funcional.
En resumen udev es un sistema de ficheros virtual montado en /dev, que crea ficheros de dispositivos dinámicos conforme se cargan y descargan los drivers. Se puede configurar udev a través de los ficheros de /etc/udev pero no se suele tocar.

/dev /dev: Archivos de dispositivos (device files)
En los sistemas de tipo unix, existen archivos de dispositivos o archivos especiales que actúan como interfaz para un dispositivo, apareciendo en el sistema de archivos como si fuera un archivo normal.

Los archivos de dispositivos (nodos) pueden representar dispositivos propiamente dichos (un disco rígido), pero también propiedades de los mismos (particiones del disco).

Existen dos tipos de archivos de dispositivos, los character special files, y los device special files. Se diferencian en la forma en la que los datos se escriben en ellos y es leída de ellos.

Character devices
Los character devices son aquellos que transmiten o reciben los datos un caracter a la vez. Ejemplos de character devices son: teclado, mouse, modems seriales, y otros dispositivos que por lo general no soportan acceso aleatorio (random access) a los datos.

Block devices
Son los dispositivos que mueven los datos en bloques. Los discos rígidos, CD-ROMs y memorias son dispositivos de bloque. Los dispositivos de bloque soportan random access y búsqueda (seeking), y generalmente usan rutinas de entrada y salido con buffer.
Cuando un programa solicita una transferencia de información, los caracteres se van guardando en un buffer. Cuando se llena se ejecuta la acción correspondiente (transferencia de datos) y luego se vacía el buffer.

Pseudo dispositivos
Los nodos de dispositivos no necesariamente tienen que corresponderse con dispositivos físicos. Estos nodos forman el grupo de pseudo dispositivos (pseudo devices) y proveen varias funciones que que son manejadas por el sistema operativo. Algunos de los pseudo dispositivos más comunes son:

/dev/null  Recibe y descarta toda entrada y no devuelve ninguna salida.
/dev/zero  Devuelve un flujo contínuo de bits de valor NUL (cero).
/dev/loop Hace accesibe un archivo como si fuera un block device.
/dev/random  Devuelve un flujo de números aleatoreos o pseudo aleatoreos de tamaño variable.
/dev/urandom  Devuelve un flujo de números pseudo aleatoreos de tamaño variable

Creación de nodos
Los nodos se crean con la llamada de sistema mknod. Existe un comando para dicho fin con el mismo nombre. Los nodos pueden moverse o borrarse con las llamadas de sistema rename y unlink, o con los comandos mv y rm.
Algunas distribuciones de linux tienen un script llamado makedev que crea todos los dispositivos necesarios en el directorio /dev.

Convenciones de nomenclatura
Los sistemas basados en el kernel de Linux utilizan los siguientes prefijos para nombrar los dispositivos y pseudo dispositivos del directorio /dev.

fb: Frame buffer
fd: Diskette (Floppy disk)
hd: Disco rígido ATA/IDE
 hda: Dispositivo master del primer canal ATA/IDE.
 hdb: Dispositivo slave del primer canal ATA/IDE.
 hdc: Dispositivo master del segundo canal ATA/IDE.
 hdd: Dispositivo slave del segundo canal ATA/IDE.
lp: Impresoras (line printers)
parport: Puerto paralelo (Parallel port)
pt: Pseudo terminales
sd: Driver SCSI, también usado por PATA/SATA, USB, Firewire, etc.
sda: Primer dispositivo registrado.
ttyS: Terminales virtuales

Para la mayoría de estos dispositivos, a este prefijo sigue un número que identifica cada dispositivo en particular. Para los discos rígidos, se utiliza el prefijo para identificar el dispositivo y el número para identificar las particiones.

Publicado el noviembre 21, 2011 en Linux y etiquetado en , . Guarda el enlace permanente. Deja un comentario.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: