Drivers, los intermediarios entre el hardware y el sistema operativo

En publicaciones anteriores se han descrito los elementos, tanto internos como externos de un computador; pero como todo sistema, se necesita que todos los componentes desempeñen el trabajo para lo que fueron creados. El usuario brinda la información y las aplicaciones envían dicha información hacia el sistema operativo, el SO envía la información al procesador, para que este le de la orden al dispositivo sobre qué hay que hacer y cómo hacerlo. Pero los dispositivos tienen que especificar la forma de trabajo del dispositivo, y que información manejan; entra en escena un pequeño software que es intermediario entre el sistema operativo y el hardware de la PC llamado driver o controlador del dispositivo.

Básicamente, todo PC se compone de hardware y software como componentes principales. El software es el SO y los programas, mientras que el hardware lo componen los dispositivos internos y externos del computador. El software es, lógicamente, genérico, de manera que cualquier software funcione en cualquier hardware (o casi cualquiera), pero para que esto funcione, hace falta que haya un elemento intermediario para que el software sea capaz de entender al hardware y viceversa.

Los drivers son el elemento necesario para traducir las instrucciones del hardware, de manera que el uno se entienda con el otro. Por decirlo así, si el software está en castellano pero el hardware en inglés, si no hubiera un traductor de por medio, no se entenderían.

Se puede decir que los controladores o drivers son como traductores entre un dispositivo y un programa que de alguna manera quiera hacer uso de dicho dispositivo. El software y el hardware han sido creados por diferentes personas y compañías, y hablan dos idioma totalmente diferente, por lo cual un traductor (el controlador) ler permite la comunicación mutua. Se explica así, para que se entienda como funciona un driver.

En otras palabras, un programa puede brindar información a un controlador para así enviar ordenes a un hardware, información que el controlador del dispositivo comprende y que puede ser consumada con el hardware.

Un comprador cuando adquiere un PC, debe recibir los manuales y programas básicos para hacerlo funcionar. Los «programas básicos» son el sistema operativo y los controladores. En un PC de escritorio, por lo regular se instala una versión del sistema operativo Windows (aunque también los hay Linux). La otra parte inprescindible, la constituyen los controladores o drivers. Estos se graban en un CD por los fabricantes del motherboard y los otros fabricantes de los otros dispositivos.

¿Qué es un driver?

En informática, un controlador de dispositivo es un programa de ordenador que opera o controla un tipo particular de dispositivo que está conectado a un ordenador. Un controlador proporciona una interfaz de software para dispositivos de hardware, permitiendo a los sistemas operativos y otros programas de ordenador, acceder a funciones de hardware sin necesidad de conocer detalles precisos sobre el hardware que se utiliza.

Un controlador se comunica con el dispositivo a través de un subsistema de bus de ordenador o de comunicaciones al que se conecta el hardware. Cuando un programa de llamada invoca una rutina en el controlador, el comando del controlador los envía al dispositivo. Una vez que el dispositivo envía datos al conductor, el conductor puede invocar rutinas en el programa de llamada inicial. El sistema operativo tiene un papel fundamental en el manejo del tráfico entre las aplicaciones y los dispositvos. Los conductores son dependiente del hardware y del SO específico. Por lo general, proporcionan la interrupción de manejo requerido para cualquier interfaz de hardware dependiente del tiempo asíncrono necesario.

Propósito de los drivers

El objetivo principal de los controladores de dispositivos es proporcionar abstracción, al actuar como un traductor entre un dispositivo de hardware y las aplicaciones o la operación de sistemas que lo utilizan. Los programadores pueden escribir el código de la aplicación de nivel superior de forma independiente de cualquier hardware específico que el usuario final está utilizando.

Por ejemplo, una aplicación de alto nivel para interactuar como un puerto serie puede simplemente tener dos funciones, «enviar datos» y «recibir datos». En un nivel inferior, una implementación de controlador de dispositivo de estas funciones se comunicaría al controlador de puerto serie especial instalado en el ordenador de un usuario. Los comandos necesarios para controlar un UART 16550 son muy diferentes de los comandos necesarios para controlar un convertidor FTGI de puerto en serie, pero cada controlador de dispositivo de hardware específico resume estos detalles en la misma (o similar) de la interfaz de software.

Desarrollo de drivers

Escribir un driver o controlador de dispositivo requiere un conocimiento profundo de cómo el hardware y el software funciona para una determinada plataforma en función. Debido a que los conduntores requieren acceso de bajo nivel a las funciones de hardware con el fin de operar, los conductores suelen operar en un entorno o medio ambiente altamente privielgiado y pueden causar problemas de funcionamiento del sistema si algo va mal. En contraste, la mayoría de software a nivel de usuario en modernos sistemas operativos puede ser detenido sin afectar en gran medida el resto del sistema. Incluso los conductores que se ejecutan en modo de usuario pueden chocar un sistema si el dispositivo está programado erróneamente. Estos factores hacen que sea más difícil y peligroso para diagnosticar problemas.

La tarea de escribir los conductores de este modo por lo general cae a los ingenieros de software o ingenieros informáticos que trabajan para empresas de hardware de desarrollo. Esto es porque tienen mejor información que la mayoría de los demás sobre el diseño de su hardware. Por otra parte, se ha considerado tradicionalmente en el interés del hardware del fabricante el garantizar que sus clientes puedan utilizar su hardware de una manera óptima. Típicamente, el controlador de dispositivo lógico (LLD) está escrito por el proveedor del sistema operativo, mientras que el controlador de dispositivo físico (PDD) es implementado por el proveedor del dispositivo. Pero en los últimos años no han escrito numerosos vendedores de controladores de dispositivos, principalmente para su uso con sistemas operativos de código libre y abierto. En tales casos, es importante que el fabricante del hardware proporcione información sobre cómo se comunica el dispositivo. Aunque esta información en su lugar puede ser aprendido por ingeniería inversa, esto es mucho más difícil con el hardware de lo que es con el software.

Apple tiene un marco de código abierto para el desarrollo de controladores en macOS llamada el kit de E / S.

Microsoft ha tratado de reducir la inestabilidad del sistema debido a los controladores de dispositivos escritos mal mediante la creación de un nuevo marco para el desarrollo de controladores, llamado controlador de Windows fundation (WDF). Esto incluye el Marco controlador de modo de usuario (UMDF) que estimula el desarrollo de ciertos tipos de conductores -principalmente aquellos que implementan un protocolo basado en mensaje para comunicarse con sus dispositivos- como controladores de modo de usuario. Si estos conductores están con mal funcionamiento, que no causen la inestabilidad del sistema. El modelo Marco de modo de núcleo conductor (KMDF) continúa para permitir el desarrollo de controladores de dispositivo en modo de núcleo, pero los intentos de proporcionar implementaciones estándar de funciones que se sabe que causan problemas, incluyendo la cancelación de las operaciones de E / S, la administración de energía, el enchufe y el el ejecutar el soporte de dispositivos.

En los entornos Linux, los programadores pueden contruir controladores de dispositivo como parte del núcleo, por separado como módulos cargables, o como controladores en modo de usuario (para ciertos tipos de dispositivos en los que existen interfaces de núcleo, tales como para dispositivos USB). Makedev incluye una lista de dispositivos en Linux: ttyS (terminal), LP (puertos paralelos), HD (disco), lazo, sonido (estos incluyen mezclador, secuenciador, DSP y audio).

En Microsoft archivos.sys y Linux módulos .ko contiene controladores de dispositivos que se pueden cargar. La ventaja de los controladores de dispositivos que se pueden cargar, es que se pueden cargar sólo cuando sea necesario y luego descargarlos, con el siguiente ahorro de memoria de núcleo.

Modo de núcleo vs. modo de usuario

Los controladores de dispositivos especialmente en plataformas modernas de Microsoft Windows, se pueden ejecutar en modo núcleo (anillo 0 en CPU x86) o en modo de usuario (anillo 3 en las CPU x86). El principal beneficio de la ejecución de un controlador en modo de usuario se ha mejorado la estabilidad, ya que un controlador de dispositivo en modo de usuario mal escrito no puede bloquear el sistema al sobreescribir la memoria del núcleo. Por otra parte, las transiciones / kernel en modo de usuario, por lo general, imponen una considerable sobrecarga de rendimiento, prohibiendo así controladores en modo de usuario para baja latencia y requisitos de alto rendimiento.

Al espacio del núcleo se puede acceder por el módulo de usuario sólo a través del uso de las llamadas al sistema. Programas de usuario final como el shell de UNIX o de otras aplicaciones basadas en GUI son parte del espacio de usuario. Estas aplicaciones interactúan con el hardware a través de las funciones del núcleo compatible.

Aplicaciones

Debido a la diversidad de hardware y sistemas operativos modernos, los conductores operan en muchos entornos diferentes. Los conductores pueden interactuar con:

  • Impresoras.
  • Adaptadores de vídeo.
  • Tarjetas de red.
  • Las tarjetas de sonido.
  • Autobuses locales de varias clases, en particular, para el bus mastering en sistemas modernos.
  • Bajo buses de ancho de banda de E / S de varias clases (para los dispositivos señaladores como ratones, teclados, USB, etc.).
  • Almacenamiento informático, dispositivos como disco duro, CD-ROM y de disquetes autobuses (ATA, SATA, SCSI).
  • Implementar la compatibilidad con diferentes sistemas de archivos.
  • Escáneres de imágenes.
  • Cámaras digitales.

Los niveles comunes de abstracción para los controladores de dispositivos incluyen:

PARA HARDWARE

  • La interconexión directa.
  • La escritura o lectura de un registro de control de dispositivo.
  • El uso de algunas interfaces de nivel superior (por ejemplo vídeo, BIOS)
  • El uso de otro controlador de dispositivo de bajo nivel (por ejemplo, los controladores del sistema de archivos que utilizan los controladores de disco).
  • Simulando el trabajo con el hardware, mientras que hace algo completamente diferente.

PARA EL SOFTWARE

  • Permitiendo que el sistema operativo de acceso directo a los recursos de hardware.
  • Las implementaciones sólo primitivas.
  • La implementación de una interfaz para el software de no conductor (por ejemplo TWAIN).
  • La implementación de un idioma, a veces muy alto nivel (por ejemplo, PostScript).

Así que la elección y la instalación de los controladores de dispositivo correctos para el hardware dada es a menudo un componente clave de la configuración del sistema informático.

Controladores de dispositivos virtuales

Controladores de dispositivo virtual representan una variante particular de controladores de dispositivos. Se utilizan para emular un dispositivo de hardware, particularmente en virtualización de entornos, poe ejemplo cuando un programa DOS se ejecuta en un ordenador Microsoft Windows o cuando un sistema operativo invitado se ejecuta, por ejemplo, un anfitrión Xen. En lugar de permitir que el sistema operativo invitado a dialogar con el hardware, controladores de dispositivos virtuales toman el papel opuesto y emula una pieza de hardware, por lo que el sistema operativo huésped y sus conductores se ejecutan dentro de una máquina virtual, puede tener una ilusión de acceder a hardware real. Los intentos del sistema operativo invitado a acceder al hardware se enrutan al controlador de dispositivo virtual en el sistema operativo huésped como por ejemplo, las llamadas a funciones. El controlador de dispositivo virtual también puede enviar eventos de nivel de procesador simulados como interruptores en la máquina virtual.

Los dispositivos virtuales también pueden operar en un entorno no virtualizado. Por ejemplo, un Portal adaptador de red se utiliza con una red privada virtual, mientras que un dispositivo virtual de disco se utiliza con iSCI. Un buen ejemplo para los controladores de dispositivo virtual puede ser Daemon Tools.

Hay varias variantes de los controladores de dispositivos virtuales, como vxd, VLM y VDDs.

Conductores abiertos

  • Impresoras: CPUS.
  • RAID: ccis (interfaz de comandos de Compaq para Apoyo SCSI-3).
  • Escáneres: SANE.
  • Vídeo: Vidix, Direct Rendering Infrastructure.

Descripciones de los controladores de dispositivos de uso común Solaris:

  • fas: Fast controlador SCSI / amplia.
  • HME: Rápido (10/100 Mbps) Ethernet.
  • Controladores SCSI diferenciales y la tarjeta SunSwift: isp.
  • MLG: controladores (Gigabaud Link Module) UltraSCSI.
  • SCSI: Interfaz de serie de dispositivos de equipos pequeños (SCSI).
  • SF: SOC + o Fibre Channel sociales bucle arbitrado (FCAL).
  • soc: controladores de matriz SPARC Storage (SSA) y el dispositivo de control.
  • sociales: controladores ópticos serie para FCAL (SOC+).

API

  • De Windows Display Driver Model (WDDM) – la arquitectura de controlador de pantalla gráfica para Windows Vista, 7, 8 y 10.
  • Fundación del controlador de Windows (WDF).
  • Modelo de controlador de Windows (WDM).
  • Controlador de red especificación de interfaz (NDIS) – un estándar de API de controlador de tarjeta de red.
  • Advanced Linux Sound Architecture (ALSA) – a partir de 2009 la interfaz de controlador de sonido estándar de Linux.
  • Ahora escáner acceso fácil (SANE) – una interfaz de dominio público de escáner imagen de trama en hardware.
  • I / O Kit – un marco de código abierto de Apple para el desarrollo de controladores de dispositivos MacOS.
  • Sistema de archivos instalables (IFS) – una API del sistema de archivos para IBM OS/2 y Microsoft Windows NT.
  • Datos no-link interface (ODI) – una API de tarjetas de red similar a NDIS.
  • Uniforme Driver Interface (UDI) – un proyecto de interfaz de controlador de plataforma cruzada.
  • Marco Dynax Driver (dxd) – C de marco de código abierto conductor multiplataforma ++ para KMDF y IOKit.

Identificadores

Un dispositivo en el bus PCI o USB se identifica mediante dos IDs que constan de 4 números hexadecimales cada uno. El ID de proveedor identifica el proveedor del dispositivo. El ID del dispositivo identifica un dispositivo específico de el fabricante / vendedor.

Un dispositivo PCI tiene a menudo un par de ID para el chip principal del dispositivo, y también un par de ID de subsistema que identifica el proveedor, que puede ser diferente del fabricante del chip.

Controlador del NIC (controlador de interfaz de red)

Como cualquier tarjeta, la NIC necesita un software de controlador que permite la comunicación entre el NIC y el sistema operativo. De este modo las aplicaciones, a través del sistema operativo, tienen controlados los accesos de red. Actualmente los dispositivos son Plug & Play de tal forma que una vez que insertemos el NIC y arranquemos el equipo, este nos avisará del nuevo hardware encontrado e intentará instalar los controladores apropiados para hacer funcionar correctamente la tarjeta de red. Si la tarjeta es más reciente que el SO este no reconoce la NIC En este caso el fabricante proporciona el software controlador para los SO más comunes.

Los controladores de interfaz de red se llevaron a cabo, a principios, en las tarjetas de expansión que se enchufan en un bus de ordenador. El bajo costo y la ubicuidad del estándar Ethernet significa que la mayoría de los equipos más nuevos tienen una interfaz de red integrada en la placa base.

Los controladores de interfaz de red modernos ofrecen características avanzadas tales como interfaces de interrupción y DMA para los procesadores host, soporte para transmitir y recibir las múltiples colas, la partición en múltiples interfaces lógicas, y el procesamiento de tráfico de red en-controlador tales como el motor de descarga de TCP.

Propósito

El controlador de red implementa la cirtuitería electrónica necesaria para comunicarse utilizando un estándar específico de capa física y de enlace de datos tal como Ethernet o Wi-Fi. Esto proporciona una base para una pila de protocolos de red completa, lo que permite la comunicación entre equipos de la misma red de área local (LAN) y la red de comunicaciones a gran escala a través de protocolos direccionables, tales como el Protocolo de Internet (IP).

El NIC permite que los ordenadores se comuniquen a través de una red informática. La NIC es tanto un dispositivo de capa física y de enlace de datos, ya que proporciona acceso físico a un medio de creación de redes y, por IEEE 802 y redes similares, proporciona un bajo nivel de sistema de direccionamiento a través del uso de direcciones MAC que asignadas a las interfaces de red.

Los controladores de red se implementaron originalmente como tarjetas de expansión conectados a un bus de ordenador. El bajo costo y la ubicuidad del estándar Ethernet significa que la mayoría de los nuevos ordenadores tienen una tarjeta de red integrada en la placa base. Las nuevas placas base de servidores pueden tener varias interfaces de red incorporada. Las capacidades de Ethernet están bien integradas en el chip de placa base o se implementan a través de un chip dedicado Ethernet de bajo costo. Una tendencia general en el hardware del equipo es hacia la integración de los diversos componentes de los sistemas en un chip, y esto también se aplica a tarjetas de red.

Un controlador de red Ethernet tienen típicamente un socket 8P8C donde está conectado el cable de red. NIC mayores también suministran conexiones BNC o AUI. Los controladores de red Ethernet típicamente soportan variedad de Ethernet de 10 Mbps, 100 Mbps y 1000 Mbps. Tales controladores se denominan como 10/100/1000, lo que significa que pueden soportar velocidades o capacidad de transmisión de datos de 10, 100, 1000 Mbps. Los NIC 10 Gigabit Ethernet están disponibles, y a partir de noviembre de 2014, empezaron a estar disponibles en las placas de los ordenadores.

Los diseños modulares como SFP y SFP+ son especialmente populares, especialmente para las comunicaciones de fibra óptica. Estos definen un receptáculo estándar para transceptores dependientes de los medios, por lo que los usuarios pueden fácilmente adaptar la interfaz de red a sus necesidades.

Las NIC pueden utilizar una o más de las siguientes técnicas para indicar la disponibilidad de paquetes para transferir:

  • Polling – es donde el CPU examina el estado de los periféricos bajo control de programa.
  • Interrumpir impulsada I / O – es donde el CPU por medio de alertas de periféricos indica que está listo para transferir datos.

La NIC puede utilizar una o más de las siguientes técnicas para transferir datos por paquetes:

  • Programada de entrada y salida – es donde el CPU mueve los datos hacia o desde la NIC a la memoria.
  • Acceso directo a memoria (DMA) – es donde algún otro dispositivo que no sea el del CPU asume el control del bus del sistema para mover los datos hacia o desde la tarjeta a la memoria. Esto elimina la carga del CPU, pero requiere más lógica en la tarjeta. Además, un buffer de paquetes en la NIC puede no ser necesaria y la latencia puede reducirse.

Rendimiento y funcionalidad avanzada

Multiqueue NIC (NIC multi-cola) proporciona la capacidad de asimilar múltiples colas de transmisión y recepción, lo que permite paquetes recibidos por la NIC para ser asignado a uno de sus receptores de colas. Cada cola de recepción está asignado a una separada de interrupción; mediante el enrutamiento de cada una de estas interrupciones a diferentes núcleos de CPU, el procesamiento de las solicitudes de interrupción provocada por el tráfico de red recibido por una sola NIC se puede distribuir entre varios núcleos, por consecuencia hay mejoras de rendimiento adicionales en manejo de interrupciones. Por lo general, una tarjeta de red distribuye el tráfico de entrada entre las colas de recepción utilizando una función de hash, mientras que las interrupciones separadas se pueden dirigir a diferentes núcleos de CPU, ya sea automáticamente por el sistema operativo, o manualmente mediante la configuración de la afinidad IRQ.

La distribución basada en hardware de las interrupciones, descrito anteriormente, se conoce como escala lado de recepción (RSS). Además existen puramente implementaciones de software, tal como el receptor de direcciones de paquetes (RPS) y la recepción de dirección de flujo (RFS). Otras mejoras de rendimiento pueden lograrse mediante el enrutamiento de las peticiones de interrupción a los núcleos del CPU de ejecución de las aplicaciones que en realidad son los destinos finales para los paquetes de red que generan las interrupciones. De esta manera, tomando la aplicación localidad en cuenta, los resultados en un mayor rendimiento global, la latencia y una mejor utilización del hardware reducido, resulta de la mayor utilización de los cachés de CPU y se requieren menos cambios de contexto. Ejemplos de tales implementaciones son las RFS e Intel Flow Director.

Con NIC Multiqueue, hay mejoras en el rendimiento adicionales que se pueden lograr mediante la distribución del tráfico de salida entre las diferentes colas de transmisión. Mediante la asingación de diferentes colas de transmisión para diferentes núcleos del CPU, contiendas internas diferentes de sistemas operativos se pueden evitar; este enfoque se refiere generalmente como la dirección de transmisión de paquetes (XPS).

Algunas tarjetas de red transmiten y reciben colas sin el apoyo del Kernel, para ejecutar incluso cuando la funcionalidad del sistema operativo de un sistema crítico se ha comprometido seriamente. Esas tarjetas de red son compatibles con:

  1. Acceder a la memoria local y remota sin la intervención de el CPU remoto.
  2. Acceso a dispositivos de E / S locales y remotas sin la participación del CPU local / remoto. Esta capacidad se apoya en la comunicación de dispositivo a dispositivo en el bus I / O, presente en las interconexiones de E / S conmutados.
  3. El control del acceso a los recursos locales, tales como registros de control y memoria.

Algunos productos ofrecen partición NIC (NPAR, también conocido como puerto de partición) que utiliza SR-IOV para dividir una NIC 10 Gigabit Ethernet en varias NIC virtuales discretos con anchos de banda dedicado, que se presentan al sistema de firmware y operativo como algo separado de las funciones del dispositivo PCI. El motor de carga TCP es una tecnología utilizada en algunas NIC para descargar el procesamiento de todo la pila TCP/IP al controlador de red. Se utiliza sobre todo con las interfaces de red de alta velocidad, tales como Gigabit Ethernet y 10 Gigabit Ethernet, para los cuales la sobrecarga de procesamiento de la pila de red se vuelve significativa.

Algunas tarjetas de red ofrecen integrados matrices de puertas programables de campo (FPGA) para el procesamiento programable por el usuario de tráfico de la red antes de que alcance el ordenador central, lo que permite una reducción de latencia significativa en las cargas de trabajo sensibles al tiempo. Por otra parte, algunas tarjetas de red generan oferta de baja latencia en la pila TCP/IP que se ejecuta en FPGA integrados en combinación con bibliotecas de espacio de usuarios, que interceptan las operaciones de red por lo general realizadas por el núcleo del sistema operativo; en el código abierto en la pila de red solarfire OpenLoad que se ejecuta en Linux es un ejemplo. Este tipo de funcionalidad que normalmente se conoce como la creación de redes a nivel de usuario.

Conclusión

Para que el ordenador tenga un funcionamiento óptimo esperado, es necesario que exista una concordancia entre el hardware, el sistema operativo y las aplicaciones, para que los controladores puedan funcionar como se debe. El sistema operativo reconoce los dispositivos de hardware tanto internos como externos y periféricos por los drivers, ya que estos le dicen al sistema operativo como trabajar, y se encargan del tratamiento de la información, y el adecuado funcionamiento de los dispositivos que le colaboran para el desempeño de su función. Es por esta razón que, si el Driver no concuerda con el sistema operativo, el dispositivo de hardware no funcionará ni será detectado.

Los controladores no se deben actualizar nada más porque si. Igual que como sucede con el software de aplicación, no toda versión actualizada de un driver funcionará con el dispositivo en cuestión. Hay que tener en cuenta que el código de un driver, se crea en concordancia con la electrónica de los cirtuitos y una mala correspondencia entre ambos puede hacer que el dispositivo deje de funcionar.

Si te pareció interesante la información, deja un «me gusta», y si tienes un comentario o una observación, dejala en los comentarios, servirán mucho para el correcto desarrollo de este blog y de la información.

Publicado por juliogarciaav06

Técnico en ingeniería de redes computacionales. Aficionado por la informática y específicamente en redes, sin perder de vista las demás áreas.

Deja un comentario

Diseña un sitio como este con WordPress.com
Comenzar