Interfaz (electrónica)

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

En electrónica, telecomunicaciones y hardware, una interfaz es el puerto (circuito físico) a través del que se envían o reciben señales desde un sistema o subsistemas hacia otros. No existe una interfaz universal, sino que existen diferentes estándares (Interfaz USB, interfaz SCSI, etc.) que establecen especificaciones técnicas concretas (características comunes), con lo que la interconexión sólo es posible utilizando la misma interfaz en origen y destino. Así también, una interfaz puede ser definida como un intérprete de condiciones externas al sistema, a través de transductores y otros dispositivos, que permite una comunicación con actores externos, como personas u otros sistemas, a través de un protocolo común a ambos. Una interfaz es una Conexión física y funcional entre dos aparatos o sistemas independientes.


Objetivos de los dispositivos E/S[editar]

La computación de entrada salida, o E/S, se refiere a la comunicación entre un sistema de procesamiento de información (como un computador), y los agentes humanos u otro sistema de procesamiento de información. Las entradas son las señales o datos recibidos por el sistema, y salidas son las señales enviadas por este.

Un dispositivo de E/S es un componente electrónico que permite la transmisión y/o recepción de información de/hacia el ordenador. Como ejemplo el ratón y el teclado son dispositivos de entrada, y el monitor y la impresora son dispositivos de salida. Los dispositivos para comunicación entre computadores son típicamente dispositivos de entrada y de salida.

En la arquitectura de computadores la combinación entre la CPU y la memoria principal está considerada el cerebro de la computadora y desde este punto de vista cualquier transferencia de información desde el computador es considerada entrada, y hacia el computador es considerada Salida.

El objetivo principal es interconectar la mayor cantidad de dispositivos a un computador pero hay que atender a las distintas características que presentan cada uno de ellos y que a menudo suelen diferir de las propias del procesador, podemos destacar:


  • Tienen, normalmente, menor velocidad que el procesador
  • La longitud de palabra
  • Los códigos que cada uno de ellos emplean para la representación de datos


Interfaz[editar]

La interfaz de E/S es requerida cuando los dispositivos son ejecutados por el procesador. La interfaz debe ser necesariamente lógica para interpretar la dirección de los dispositivos generados por el procesador. El Handshaking deberá ser implementado por la interfaz usando los comandos adecuados (BUSY, READY, WAIT…), y el procesador puede comunicarse con el dispositivo de E/S a través de la interfaz. Si se intercambian diferentes formatos de datos, la interfaz debe ser capaz de convertir datos en serie a paralelo y viceversa. Los dispositivos de E/S se comunican por interrupciones con el procesador, si una interrupción es recibida, el procesador la atenderá con la rutina de interrupción correspondiente a dicha interrupción.

Un ordenador que usa E/S mapeados en memoria por lectura y escritura accede al hardware a través de la posición de memoria especifica, usando el mismo lenguaje ensamblador que el procesador usa para el acceso a memoria.

Implementación de interfaces a alto nivel[editar]

Los sistemas operativos y lenguajes de programación de alto nivel facilitan el uso separado de más conceptos y primitivas abstractas de E/S. Por Ejemplo: la mayoría de sistemas operativos proporcionan aplicaciones con el concepto de fichero. Los lenguajes de programación C y C++, y los sistemas operativos de la familia unix, tradicionalmente abstraen ficheros y dispositivos como streams, los cuales pueden ser leídos o escritos, o ambas cosas. La librería estándar de C proporciona funciones para la manipulación de streams para E/S.

Controlador de periférico[editar]

Actualmente se usan multitud de interfaces o controladores para las conexiones entre el procesador y los distintos periféricos (cada uno de estos últimos suele tener su propio controlador). En ocasiones se puede interconectar los periféricos con la memoria principal directamente sin pasar por el procesador para lo cual se utilizan dispositivos más avanzados como los DMA que son procesadores dedicados a dichas transferencias.

Estos dispositivos tratan de permitir la transferencias de datos hacia/desde el periférico determinado. Entre sus principales características podemos destacar:

  • Tienen diversos puertos asociados. Entendemos por puerto algo que puede ser referenciado y accedido a través de una dirección (no tiene por qué ser un hardware específico de almacenamiento aunque en la mayoría de los casos suelen ser registros).
  • Poseen circuitería específica para la adaptación del formato de señales y de velocidades entre el procesador y los dispositivos de E/S.
  • Proporcionan las transferencias de datos, como especificamos anteriormente, usando el bus de datos.
  • Requieren programas software para el proceso de transferencia, que será ejecutado por el procesador cada vez que se requiera usar al periférico involucrado.
  • En computadores de alta gama se pueden emplear controladores más sofisticados que son en realidad procesadores específicos que solo tienen funciones para la E/S, son los llamados canales o IOP.


Funciones básicas de un sistema de E/S[editar]

Un sistema de E/S debe poder, como mínimo, direccionar los diferentes periféricos con los que puede establecer comunicación, establecer un sistema de comunicación entre el procesador y los controladores, y sincronizar los dispositivos de manera que no se produzcan inconsistencias o errores. Además, debería ser capaz de convertir los datos entre diferentes formatos, controlar el estado de los periféricos, llevar la cuenta de las transmisiones y tener un sistema de detección de errores.


Direccionamiento o selección de periférico[editar]

A la hora de comunicarse con un dispositivo, el procesador sitúa su dirección asociada en el bus de direcciones. De esta forma, selecciona el dispositivo con el que quiere iniciar una transferencia de datos. La forma de identificar cada periférico es el llamado direccionamiento.

Tiene las siguientes características:

  • Es necesario prevenir que varios dispositivos puedan acceder simultáneamente al mismo bus, ya que se pueden producir cortocircuitos (en el caso de una arquitectura de bus compartido).
  • Cada dirección no tiene por qué referirse a un solo puerto, pero es necesario que ésta se pueda identificar unívocamente y no produzca incoherencias o ambigüedades con el resto del sistema.
  • Los controladores suelen tener varios puertos asociados.

Bus de direcciones[editar]

El bus de direcciones comunica el procesador con los periféricos, seleccionando aquel con el que se desea interaccionar. Éste puede ser:

  • Mapeado: El mapa de periféricos pertenece al mismo que el de memoria, es decir, el procesador no distingue entre accesos a memoria y accesos a los dispositivos de E/S, por tanto no hay instrucciones específicas de E/S que no sean las propias de acceso a memoria, sino que se utilizan LOAD, STORE o MOVE. La ventaja de usar una E/S mapeada es que hay menor complejidad a la hora de diseñar el procesador.
  • Independiente: El mapa de periféricos es independiente (y valga la redundancia) al mapa de memoria ya que usa la plantilla IO/M# del procesador, por tanto existen instrucciones dedicadas a las transferencias con periféricos distintos a la memoria principal (nemotécnicos más comunes: IN, OUT, TESTI/O, CONTROLI/O). Las ventajas de usar E/S independiente es que, facilita la protección de E/S y los programas son más rápidos al tener una decodificación más sencilla y tener un tamaño menor las instrucciones de E/S. Al contrario que la E/S mapeada, el diseño del procesador es más complejo.

Técnicas de direccionamiento para controladores[editar]

En función del tipo de sistema E/S, podemos encontrar diferentes formas de direccionamiento:

  • Direccionamiento por selección lineal: Consiste en asignar un bit del bus de direcciones a cada puerto. Si tenemos n "líneas" para direccionar periféricos podemos especificar, a lo sumo, n periféricos distintos. Este tipo de direccionamiento no se suele utilizar ya que tiene importantes restricciones tales como que solo un periférico puede estar activo a la vez.
  • Direccionamiento por selección por decodificación: La dirección del periférico está codificada y se requiere un decodificador para activar el periférico deseado. Dentro de este tipo de direccionamiento se hayan dos posibilidades:
    • Centralizado: Se emplea un decodificador para todos los puertos.
    • Distribuido: Cada puerto "reconoce" su propia dirección.


Comunicación física entre el controlador y el procesador[editar]

Existen distintas formas de interconexión que se pueden dar entre controlador y procesador. Las más destacadas son las basadas en buffer tri-estado y en las MUX/DEMUX indicando sus ventajas/incovenientes.

Se suele usar más la alternativa basada en buffer tri-estado pues permite un mejor aprovechamiento de los dispositivos de E/S y la mejora de los mismos al dedicar mayor área de éstos en la mejora de prestaciones y no en el interconexionado.

Basados en buffer tri-estado[editar]

Se implementan usando un bus compartido y buffer tri-estado para cada puerto y evitar así el "volcado" de información por parte de dos o más periféricos en el bus. Las características principales de este tipo de interconexión son:

  • Facilidad en la expansión por medio de tarjetas o circuitería específica
  • Permite conectar en paralelo muchos periféricos

Basados en MUX/DEMUX[editar]

Se emplean MUX y DEMUX para seleccionar el periférico que podrá usar el bus compartido en un momento dado, impidiendo al resto de dispositivos acceder a este último. Las características principales de este tipo de interconexión son:

  • Escasa posibilidad de expansión
  • Mucha circuitería: Suelen dedicar gran parte del área del dispositivo en el cableado del mismo.


Sincronización[editar]

La sincronización con el procesador o la memoria de los dispositivos de E/S consiste en la acomodación de velocidades de ambos, ya que los periféricos suelen ser más lentos. A fin de que no se imponga el ritmo del dispositivo más lento se establecen mecanismos para saber cuándo se deben enviar/recibir datos y es común que los controladores dispongan de buffers de almacenamiento temporal de palabras y permitan aceptar señales de control de conformidad que reflejan el estado del periférico en un momento dado (listo, petición, reconocimiento, ocupado, etc).

Tipos de temporización[editar]

La temporización de las operaciones de E/S puede ser de dos tipos:

  • Síncrona: Aquella en la que los dispositivos que se conectan poseen velocidades similares, por lo que ninguno de ellos debe esperar al otro.
  • Asíncrona: Aquella en los que los dispositivos tienen velocidades dispares, lo cual provoca que uno deba esperar al otro para que no se produzcan errores/inconsistencias en los datos.

Existe otra definición de los términos Sincrono/Asincrono que se puede encontrar en diferentes textos/escritos de diferentes autores dichos términos refiriéndose a las distintas definiciones:

  • Síncronos: Se dice de los dispositivos que comparten una señal de reloj común.
  • Asíncronos: Aquellos que no comparten la misma señal de reloj. Debido a que no tienen la misma señal de reloj, pueden acomodar una amplia variedad de dispositivos, y el bus puede alargarse sin preocuparse por los problemas de sincronización. Para coordinar la transmisión de datos entre emisor y receptor, utilizan un protocolo de presentación (handshaking protocol). Éste protocolo consta de una serie de pasos en los cuales emisor y receptor proceden al siguiente paso solamente cuando ambas partes están de acuerdo. Para implementar éste protocolo se requiere de un conjunto adicional de líneas de control, entre ellas:
  1. ReadReq o RD: Se utiliza para indicar una petición de lectura de memoria. La dirección se pone en la línea de datos al mismo tiempo.
  2. WriteReq o WR: Se utiliza para indicar una petición de escritura en memoria.
  3. Data: Se utiliza para indicar que la palabra de datos está preparada en las líneas de datos (datos estables).
  4. Ack: Se utiliza para conocer la señal de ReadReq o Data, es decir, esta señal de aceptación se necesita para que el controlador del periférico conteste a la petición de transferencia generada por el procesador.
Temporización síncrona[editar]

En la temporización síncrona, la aparición de un evento está determinada por el reloj. El bus incluye una línea de reloj que es común a todos los dispositivos, y se suelen sincronizar durante el flanco de subida. Casi todos los eventos duran un único ciclo de reloj.

Este tipo de temporización sólo funciona si el dispositivo de E/S es suficientemente rápido para responder a la espera que le brinda el procesador, en caso contrario se producirán errores en la escritura de los puertos y se leerán datos no válidos del bus, por lo que las operaciones de E/S no serían correctas. Otro tema importante es que, si no se incorporan rutinas para detectar hardware inexistente, el programa podría fallar por tratar de direccionar un dispositivo que o bien no existe o bien ha sido "desconectado" del equipo.

Las operaciones de lectura y escritura funcionan de la siguiente manera:

  • Escritura: El procesador activa la señal WR#, que es la de escritura, y espera un tiempo, que es determinado por el procesador (no es una espera al otro dispositivo), y una vez transcurrido ese periodo de tiempo desactiva la señal de escritura, por lo que si el dispositivo de E/S no es suficientemente rápido la escritura no se realizará correctamente. Cabe destacar que en este tipo de temporización no se produce ninguna espera por parte del procesador ni por parte del periférico.
  • Lectura: El procesador activa la señal RD# que es la de lectura y espera un tiempo determinado por el mismo (como ocurría en el caso de la Escritura) y acto seguido lee del bus de datos la información, sin comprobar si esta contiene los datos válidos suministrados por el periférico.
Temporización asíncrona o con "handshaking"[editar]

La traducción de "handshaking" es "apretón de manos" y viene a significar que el procesador y los periféricos intercambian señales de control que les permiten sincronizar sus acciones y "colaborar" conjuntamente en la transferencia de información. Generalmente se suele considerar que existe sólo una señal de sincronización llamada ACK (aunque puede haber tantas señales de sincronización como se necesiten y esto depende del hardware del dispositivo en cuestión).

Con este procedimiento mejoramos el rendimiento de las operaciones de E/S y impedimos que se produzcan los fallos en la escritura/lectura que podían suceder con la temporización síncrona para un dispositivo existente. Sin embargo al igual que en el caso sincrono se han de incorporar rutinas que determinen si se intenta acceder a un dispositivo inexistente o "desconectado" puesto que esto si provocaría errores (entraría en un bucle infinito esperando a ACK). La solución que generalmente se adopta es que el procesador da un tiempo límite de espera por encima del cual se genera una excepción y se aborta la operación E/S.

El funcionamiento de las operaciones de lectura y escritura es el siguiente:

  • Escritura: El procesador activa la señal de escritura, WR# y espera hasta que el periférico activa su línea de sincronización ACK, cuando esto sucede el procesador deshabilita la señal de escritura y se produce la escritura (y valga la redundancia) de los datos en el puerto del periférico correspondiente. Finalmente el periférico desactiva ACK.
  • Lectura: El procesador habilita la señal de lectura, RD# y espera hasta que el dispositivo le "indique" mediante ACK que los datos están listos para su lectura. Una vez que ACK esta activa el procesador lee los datos del bus de datos y desactiva la señal RD#. Finalmente el periférico reconoce la deshabilitación de RD# y este desactiva la señal de sincronización, ACK.

Otras funciones importantes[editar]

Además de las funciones principales, existen otras tareas de las que un sistema de E/S debe hacerse cargo. Éstas son las más importantes:

  • Conversión de datos: Acomodación de las características físicas y lógicas de las señales de datos empleadas por el dispositivo de E/S y por el bus del sistema. Permite "compatibilizar" los datos del bus de datos y los datos que acepta el periférico en cuestión, es decir, realiza conversiones entre distintos formatos de datos, por ejemplo:
    • Conversión de códigos (BCD, ASCII, UNICODE, ANSI, etc).
    • Conversión serie/paralelo.
    • Conversión de niveles lógicos para representar 0 y 1 (necesario para compatibilizar distintas tecnologías lógicas como la CMOS y la TTL).
    • Conversiones A/D y D/A.
  • Control de periféricos: Permite conocer el estado en el que se encuentra el dispositivo y modificarlo, pudiendo además enviar otras señales de control para afectar su funcionalidad actual.
  • Control de los "paquetes" transferidos: Se debe encargar de determinar qué cantidad de información se envía en cada operación de E/S (lo llamaremos "paquete") y contar la cantidad de paquetes que se llevan enviados para poder determinar cuándo se termina la transferencia de datos.
  • Detección de errores: Pueden ser errores propios del funcionamiento del hardware del periférico o bien de los datos (pueden haber sido corrompidos intencionadamente o accidentalmente) y en caso de ser necesario "relanzar" la operación de E/S correspondiente.

Bibliografía[editar]

Véase también[editar]