Buses y Periféricos 99/00 Entrada/Salida Sistema de entrada/salida Un computador se compone de tres elementos básicos: el procesador, el sistema de memoria y el sistema de entrada/salida. El sistema de entrada/salida es la parte del computador que interactúa con el medio externo. Lo hace a través de una variedad de dispositivos cuyo objetivo básico es la transmisión de datos. El cometido de un dispositivo de entrada salida es el de traducción de un lenguaje externo y variado a un código más próximo al computador ( y a la inversa). 1.- Características de diseño. Así como en el diseño del procesador el objetivo principal (además del coste) es el rendimiento, en el diseño del sistema de entrada/salida se han de tener en cuentas otras y tan importantes consideraciones: Expansión. Dada la variedad de entornos en los que se puede insertar, un computador se encontrará ante una amplia variedad de lenguajes, lo que le exigirá incorporar nuevos dispositivos. Recuperación ante problemas. La comunicación entre el computador y el dispositivo externo no siempre va a ser fiable, dependiendo del medio en el que este se ubique; el sistema de entrada/salida debe ser capaz de recuperarse ante errores de comunicación y de cualquier otra clase de carácter impredecible; lo que significa que deben poder restablecerse conexiones cortadas, determinar situaciones de error... En cuanto al rendimiento. Dado que su principal objetivo es la transmisión de datos, el rendimiento de un dispositivo se determina por dos parámetros relacionados con ello. Latencia: o tiempo de respuesta de un dispositivo Potencia: o capacidad del dispositivo para transmitir datos por unidad de tiempo. La valoración de estos dos parámetros no dependen completamente del dispositivo, sino también de su interrelación con el computador: Características del dispositivo. Interacción con el procesador. Interacción con el sistema operativo. influyen de una manera u otra en la determinación del rendimiento del sistema de entrada/salida. Medidas de rendimiento. Para evaluar el rendimiento de un dispositivo se utiliza principalmente la medida de ancho de banda. Sin embargo esta medida puede tener varias interpretaciones: a) Cuanta cantidad de datos es capaz de transmitir el dispositivo por unidad de tiempo. b) Cuantos accesos es capaz de admitir el dispositivo por unidad de tiempo. En ambos casos se trata de transmisión de datos, pero ambas interpretaciones se diferencian en matices. a) pide al dispositivo capacidad de transmisión de datos, esto es, potencia, mientras que b) le pide capacidad de atención, esto es, baja latencia. Según el medio en el que se vaya a emplear el computador y el tipo de problemas a que se vaya a enfrentar se favorecerá una definición u otra. La primera definición favorece a problemas en los que prime la transferencia de grandes flujos de datos, mientras que la segunda definición favorece a problemas en los que sea importante el uso compartido de ese recurso. 1 Buses y Periféricos 99/00 Entrada/Salida 2.- Clasificación de dispositivos. Previo al diseño de un sistema de entrada/salida, es importante determinar el tipo de dispositivos que se prevé van a ser conectados. Esto permitirá dar una orientación al sistema hacia determinados entornos o favorecer una disposición genérica. Por ejemplo determinará qué tipo de bus es más conveniente utilizar o en qué niveles de una jerarquía de buses sería más conveniente situar cada dispositivo. A ello ayudaría una taxonomía de los diversos tipos de dispositivos de entrada/salida que nos podemos encontrar. Por el comportamiento en cuanto a su uso: - lectura escritura lectura/escritura En este caso el punto de referencia es el procesador. Los dispositivos de lectura son aquellos de los cuales, exclusivamente, el procesador puede obtener datos (aparte dejamos el hecho de que el procesador pueda programarlos de alguna manera escribiendo en sus registros). Los de escritura, aquellos en los que el procesador solo puede depositar datos (salvo posibilidad de leer registros de estado). Los últimos son dispositivos de almacenamiento o de comunicación principalmente. Por el tipo de comunicante (siendo uno el procesador) - De interacción con humanos De interacción con máquinas De comunicación Los primeros se caracterizan por ser relativamente lentos en comparación con las velocidades a que los procesadores ejecutan instrucciones. Los dispositivos de comunicación pueden alcanzar velocidades de transmisión próximas a las del procesador. En cuanto a la interacción con máquinas hay una amplia variedad dependiendo de qué tipo de máquinas sean. Por la tasa de transferencia de datos. El dispositivo se caracteriza sencillamente por una medida de su capacidad de transmitir datos por unidad de tiempo. En última instancia esta es la medida que más interesa en el momento del diseño. 3.- Controladores Los dispositivos no se conectan directamente al computador sino que lo hacen a través de una interfaces llamadas controladores. Esto favorece características del sistema de entrada/salida tales como la expansión. Los controladores proporcionan, entre otras cosas, una homogeneización de las conexiones, además de ofrecer también un traducción entre el protocolo empleado por el dispositivo y el exigido por el procesador. Algunas de sus labores son las siguientes 1. 2. 3. 4. 5. Establecimiento, Control y Temporización de las comunicaciones. Comunicación con la CPU. Comunicación con dispositivos. Almacenamiento temporal de datos. Detección de errores. Elemento muy importante para lograr una comunicación eficaz es el protocolo. Un controlador se enfrenta a dos protocolos diferentes de comunicación, el que emplea con el procesador y el que emplea con el dispositivo. El Controlador es la interfaz entre ambos, encargándose no solo de comunicarlos sino también de transmisor/ejecutor/generador de órdenes e información de estado sobre el dispositivo o el estado de las transacciones . Así mismo el controlador puede servir al procesador disfrazando las particularidades del dispositivo ante el procesador, a este respecto la posibilidad de almacenamiento temporal de datos o la ejecución de órdenes procedentes de éste que el controlador traduce en acciones sobre el dispositivo. 2 Buses y Periféricos 99/00 Entrada/Salida Estructura de un controlador. Un controlador es un circuito de dos caras. Por un lado se enfrenta al procesador, posiblemente conectado a un bus, y por ello debe incorporar todas las señales que se le exigen: líneas de datos, líneas de direcciones y líneas de control -básicamente de selección, lectura y escritura. Para almacenar datos intermedios o información de estado, el controlador posee varios registros, algunos accesibles desde el procesador y otros de uso exclusivo. Pese a ser un único dispositivo físico, el controlador puede acaparar más de una dirección de entrada salida que utilizará el procesador según la tarea que vaya a realizar sobre el controlador. Por el lado del dispositivo el controlador intercambiará con éste las líneas que sean necesario según la clase. Exigirán generalmente un conjunto de líneas de datos para transmitir la información y un conjunto de líneas de control para regular el protocolo de esa transacción. Por el número de líneas de datos se pueden distinguir dos tipos de controladores: - Comunicación serie: Existe una única línea de transmisión y la información la atraviesa bit a bit. Es una interfaz de baja velocidad y bajo coste que puede ser adecuada para dispositivos lentos. - Comunicación paralela: El paquete de datos se envía en conjunto disponiendo de una línea por cada bit a transmitir. Proporciona mayor velocidad de transmisión y también menor complejidad a un mayor coste. Comunicación CPU-Controlador El procesador se comunica con el controlador para establecer contacto a su través con el dispositivo. Con su intercesión, el procesador enviará al dispositivo órdenes de control y recibirá de él información de estado, además de datos. Por lo tanto los tipos de transacciones son estas cuatro: - Control Estado Lectura Escritura Las transacciones de control son aquellas en las que el procesador envía órdenes de actuación al controlador. Algunas de estas órdenes modificarán el comportamiento del controlador, y otras son reenviadas, adecuadamente traducidas, al dispositivo para programar su conducta. El dispositivo y el propio controlador pueden responder con información de estado que dará a conocer su situación al procesador. 4.- Instrucciones de entrada/salida Desde dentro del procesador la asociación controlador-dispositivo de entrada salida es vista como un conjunto de direcciones de entrada/salida. El procesador envía comandos y datos a tales direcciones y recibe información de estado y también datos procedentes de ellas. Estas direcciones componen lo que se denomina el espacio de direcciones de entrada/ salida del procesador. Es una cuestión de diseño el decidir cómo se va a organizar este conjunto de direcciones en relación con el espacio de direcciones de memoria. Según esto hay dos opciones para el espacio de direcciones de entrada/salida - Mapeado en memoria: Existe un único conjunto de direcciones en el sistema computador, una parte de este conjunto de direcciones pertenece al sistema de entrada/salida, y el resto son direcciones de memoria. En el circuito esto significa que únicamente las líneas de dirección son utilizadas para 3 Buses y Periféricos 99/00 Entrada/Salida seleccionar a los controladores conectados al bus. Dentro, el procesador no utiliza instrucciones especiales para distinguir entre un acceso a memoria y un acceso a entrada salida. - Mapeado en e/s: Esto significa que existen dos espacios de direcciones, el de memoria y el de entrada/salida. Lo que distingue a una dirección situada en el bus de pertenecer a uno u otro espacio de direcciones es una línea de control (IO/M en 8086). Esto quiere decir que además del conjunto de líneas de dirección, los controladores deben comprobar el estado de esta otra línea antes de sentirse aludidos. Ahora existen instrucciones específicas para memoria o para entrada/salida. Estas últimas son las que activarían aquella línea de control cada vez que son ejecutadas. 5.- Esquemas de comunicación Procesador-entrada/salida. Ya estamos en la acción misma. El procesador - un conjunto de instrucciones ejecutándose en él- tiene que atravesar tres fases para cumplir una transacción de entrada/salida. La primera es la programación del controlador y del dispositivo para prepararlos para la transacción. El controlador puede ser programado para el tipo de datos que va trasegar o la cantidad de ellos. El dispositivo para comportarse de una de varias maneras posibles de hacerlo en la captura o emisión de información. La segunda fase es la transmisión de datos que puede conllevar una serie de comprobaciones del estado del controlador y/o dispositivo. Por último podrá ser necesaria una finalización con un nuevo acceso de control. 1. 2. 3. Programación transmisión/comprobación de estado finalización. No es necesario puntualizar el grado de implicación que tiene el procesador en una transacción de entrada salida. Éstas, sin embargo, consisten generalmente en un trasiego de datos entre un dispositivo y el sistema de memoria. Posteriormente, el procesador accederá a memoria en busca de esos datos si le son necesarios. Queremos con esto demostrar que el papel del procesador en una transacción de entrada salida es secundario. Sin embargo necesario porque es el elemento inteligente que pone en marcha, controla y da por finalizado el proceso. Si se consiguiera reducir la relevancia de la actuación del procesador en tales transacciones, conseguiríamos mejorar el rendimiento del sistema, ya que éste dispondría de ese tiempo para ejecutar instrucciones. Este es el objetivo de los diferentes esquemas de comunicación entre el procesador y el sistema de entrada/salida. Esquema programado. Este es el esquema básico que sigue las tres fases descritas al pié de la letra. El procesador debe dedicarse por entero a cada transacción de entrada salida. Durante la fase de transmisión, el procesador entra en un bucle de lecturas y escrituras entre dispositivo y memoria en el cual su única función es la de trasegador. Este es un tiempo de computación considerado no útil porque no se realiza ningún tipo de transformación sobre los datos. Uso de interrupciones. La utilidad de las interrupciones es principalmente que liberan al procesador de una espera inútil, aprovechando ese tiempo en realizar una computación más provechosa, si la hay. En relación con los sistema de entrada/salida estas esperas se producen principalmente debido a la menor velocidad de respuesta de los dispositivos en comparación con la del procesador ( en términos de ejecución de instrucciones). En el esquema anterior el procesador debería engolfarse en un bucle comprobando constantemente el estado del dispositivo hasta que este culmine su actuación, para pasar a la siguiente transmisión. Ahora el procesador indica al dispositivo que le avise cuando tal suceso ocurra y no entra nunca en aquel bucle, sino que se ocupa de la ejecución de otro conjunto de instrucciones no relacionadas con el tema. Cuando el dispositivo activa la señal, el procesador vuelve a atenderle y prepararlo para una nueva transacción. La primera consideración a tener en cuenta es que los controladores deben incorporar esta capacidad de interrumpir al procesador. Por tanto es otra de las posibles funcionalidades de un controlador. En segundo lugar no todo tipo de transacciones pueden ser adecuadas para este esquema. Con esto quiérese decir que la asunción de un esquema de interrupciones no implica el 4 Buses y Periféricos 99/00 Entrada/Salida abandono del esquema programado. Obsérvese que en ambos casos las fases por las que pasa una transmisión de entrada salida son las mismas, programación, transmisión/comprobación de estado, finalización. La diferencia estaría en la fase de transmisión, durante la cual el procesador no espera activamente, interrogando al controlador, sino que espera pasivamente al que el controlador le avise. Una vez lo ha hecho la tarea del procesador seguirá siendo recoger el dato que se le ofrece y depositarlo en la correspondiente celda de memoria o viceversa. Por lo tanto este esquema es más bien un complemento del anterior más que una alternativa. Implantación. El esquema de interrupciones exige un apoyo en el hardware. Tanto en el lado del procesador como en el lado de los dispositivos. Estos deben tener capacidad para enviar una señal al procesador y aquel debe tenerla para recibir esa señal y responder al dispositivo que la originó. La respuesta del procesador es la ejecución de una serie de instrucciones (Rutina de atención a la interrupción) encargadas de atender a las tareas relacionadas con el dispositivo. Por cada uno de los dispositivos que pueden interrumpir al procesador debe existir un conjunto separados de instrucciones (una rutina de atención diferente). Una de las tareas del procesador al responder a una interrupción es identificar el dispositivo que la originó. Se han planteado dos esquemas: - - Método vectorizado: es, de alguna manera, el propio dispositivo el que se identifica ante el procesador. Generalmente lo hace enviándole un índice dentro de una lista de rutinas de atención (vector de interrupciones), que apunta a la rutina que sirve para atender a este dispositivo. Método de consulta: el procesador determina, preguntando a cada uno de los dispositivos, cual es el que generó la interrupción. Puede ocurrir que varios controladores generen al mismo tiempo una interrupción, entonces el procesador se ve obligado a seleccionar uno de ellos. Algunos esquemas que resuelven este problema son: - - Múltiples líneas de interrupción: por lo tanto cada controlador está plenamente identificado y priorizado por la línea por la que avisan al procesador. Consulta software: como todos los dispositivos utilizan la misma línea de interrupción, el procesador, al recibir un aviso debe acceder dispositivo por dispositivo inquiriendo cual ha sido el autor de la señal, el órden en que realiza las consultas establece la prioridad. Consulta hardware: Los propios dispositivos se auto seleccionan conforme a un esquema de prioridades ya previsto (ejemplo daisy chain) Arbitraje de bus: Igualmente son los propios dispositivos los que se autorregulan, en este caso compitiendo por el acceso al bus para proporcionarle al procesador el índice en el vector de interrupciones. Esquemas de interrupción. Cuando queremos que un controlador tenga capacidad de disparar una interrupción en el procesador, los elementos de que debemos disponer son los siguientes Procesador Controlador ruti na Int Intrq 5 Buses y Periféricos 99/00 Entrada/Salida El procesador debe tener una entrada de interrupción, consistente en una entrada que cuando se activa el contador de programa salta a una dirección determinada de memoria y comienza a ejecutar código. El controlador debe tener una salida de petición de interrupción que se activará cuando el controlador esté dispuesto a interactuar con el procesador. La rutina de atención a la interrupción es la que se debe ejecutar cuando se activa la interrupción y debe estar situada en la dirección asociada con la interrupción. ¿Qué pasa cuando hay más de un controlador con capacidad para interrumpir? Pues que hay más de una rutina esperando ser disparada cuando el controlador correspondiente genere su interrupción. Por lo tanto el procesador debe tener un medio para identificar al controlador que generó la interrupción. Una forma de resolverlo es teniendo más de una entrada de interrupción. 1 PROCESADOR I1 INT1 INT2 INT3 I2 2 I3 3 Naturalmente este esquema está limitado al número de entradas de interrupción de que disponga el procesador. Un esquema más genérico intentaría que los dispositivos se identificaran a sí mismos cuando generan la interrupción (vectorial) o en su defecto que el procesador procediera, después de haber recibido la interrupción a identificar al dispositivo que la generó (consulta). Así el número de dispositivos que pueden invocar una acción en el procesador no se ve limitado por el hardware. Esquema vectorial En el esquema vectorial el dispositivo se identifica a sí mismo. El proceso de activar una interrupción ocurre en dos fases: generar la interrupción, reconocimiento de la interrupción Ack PROCE SADOR 1 INT I1 I2 2 3 I3 Una vez generada la inerrupción, el procesador inicia un ciclo de reconocimiento. Durante este ciclo el dispositivo con mayor prioridad de los que han pedido simultáneamente una interrupción se identifica ante el procesador y este utiliza esta información para invocar a la rutina correspondiente. 6 Buses y Periféricos 99/00 Entrada/Salida El concepto de prioridad en cualquier esquema de interrupción es muy importante, en primer lugar porque hay que tomar una decisión cuando varios dispositivos realizan una petición simultáneamente y en segundo lugar porque hay dispositivos que requieren una atención inmediata mientras que otros pueden verse postergados sin perjuicio relevante. Una forma de resolver este problema es el daisy chain. Durante el ciclo de reconocimiento el procesador genera el reconocimiento y el primer dispositivo que lo detecte es el que se identifica colocando su identificador en el bus que el procesador leera a continuación. Procesador BUS 1 Ack 2 3 INT Otro esquema es el utilizado por el 8086 en el que la tarea de identificar al dispositivo que generó la interrupción es realizada por un controlador. Bus PROCE SADOR INT Contro lador de interru pcione s 1 2 3 El esquema por consulta obliga al procesador, durante el ciclo de reconocimiento a explorar uno por uno los dispositivos hasta dar con el que generó la interrupción. Para ello va leyendo uno por uno el estado de cada dispositivo en el que figurará si el dispositivo ha solicitado la interrupción Procesador BUS 1 1 2 2 3 Int ack INT 3 Cuando recibe la petición de interrupción, el procesador activa una rutina de atención genérica que se encarga de preguntar a cada controlador su estado. Como los explorará secuencialemente el controlador que tenga la dirección más baja será el de mayor prioridad. Cuando haya detectado el controlador de mayor prioridad de los que hayan solicitado la interrupción invocará a su rutina correspondiente. Acceso directo a memoria. DMA. Este es el tercer esquema que igualmente es complementario y no antagonista con los mencionados antes. Considerando que el papel de procesador en una transacción de entrada/salida es meramente de trasladador de datos, el esquema DMA propone 7 Buses y Periféricos 99/00 Entrada/Salida que exista otro controlador con cierto grado de inteligencia que realice estas labores en lugar del procesador. Este esquema por lo tanto exige que exista un controlador que pueda leer datos de memoria o un dispositivo y posteriormente escribirlos en un dispositivo o memoria sin la ayuda del procesador. De manera que para un procesador una transacción e/s consistiría en programar tal controlador de DMA para indicarle: - Dónde están los datos de origen. Dónde están los datos de destino. Cuánta cantidad de datos es. y posteriormente liberarle para que actuase por su cuenta. Al final de la transacción el controlador de DMA avisaría al procesador, por medio de una interrupción, y este comprobaría que la transacción completa se ha realizado satisfactoriamente, frotándose la manos. Una de las funcionalidades que ha de tener este controlador, entonces, es la de tener capacidad de interrumpir al procesador para que éste no se tenga que ver obligado a quedarse esperando en un bucle de consulta al controlador, lo que eliminaría toda la operatividad del asunto. Acceso al bus. Un controlador de DMA es un maestro de bus. Quiérese decir que debe tener capacidad de iniciar una transacción. Para ello ha de robarle el bus al procesador, impidiéndole su uso a este durante el cumplimiento de su labor. Esto puede perjudicar al procesador si el número de transacciones es muy alto por lo que dichos controladores operan siguiendo una política de robo de ciclos. Consiste esta política en esperar a que el procesador haya liberado el bus, al final de un ciclo de acceso, obtener el bus entonces, realizar una única transacción y devolverlo, para esperar a la siguiente oportunidad. Mientras el procesador no usa el bus, el controlador de DMA lo aprovecha para realizar sus transacciones, pero nunca le disputaría el bus al procesador cuando este tratase de utilizarlo. 8 Buses y Periféricos 99/00 Entrada/Salida Ejemplo de evolución del sistema de entrada/salida a partir de un teclado Un teclado es una matriz de líneas eléctricas. La pulsación de una tecla comunica una fila con una columna. La identificación de la fila y la columna correspondientes nos proporciona un código de tecla pulsada. A continuación el procesador debe traducir ese código a un código reconocible, sea ASCII, (consultando unas tablas que asocian códigos de tecla pulsada con código ASCII). La interfaz de un procesador con un dispositivo de este tipo es en el ejemplo un puerto de 4 líneas de salida y otro puerto de 4 líneas de entrada. Y las tareas que tiene que realizar el procesador son, suponiendo que en medio de el código de usuario que está ejecutando necesite leer un carácter de teclado Estructura de un teclado 5V o u tp u t 5V 1 0 Pro Ce Sa Dor 1 1 1 0 1 in p u t 1 Código de usuario Explorar el teclado (implica esperar hasta que haya una tecla pulsada) Convertir código de tecla pulsada a código ascii Código de usuario El siguiente paso es facilitarle la tarea al procesador. Para ello trasladamos la acción de explorar el teclado a un dispositivo fuera del procesador, el controlador. Cada vez que lo desee el procesador se limitará a leer del controlador la tecla pulsada. Si no hay tecla pulsada (código FF) el procesador esperará hasta que se pulse una (lo que implica lecturas sucesivas de la salida del controlador). La interfaz del procesador con el controlador se ha simplificado, únicamente ocho bits de entrada. Ahora el código se reduce a: Código de usuario Leer del controlador (esperar hasta que haya tecla pulsada) Convertir código de tecla pulsada a código ascii Código de usuario El controlador puede muy bien hacer la conversión, aunque esto le resta flexibilidad al procesador Pro Ce Sa Dor Controlador Código de usuario Leer del controlador código ascii (esperar) Código de usuario A continuación introducimos las interrupciones. Preferimos que el código de usuario no espere por la tecla pulsada, sino que pueda continuar su ejecución si no se ha pulsado ninguna tecla. Para ello el código de ususario lee la tecla de un buffer. Puede decidir, en el caso de que el buffer esté vacío, esperar o continuar la ejecución en la confianza de que si se pulsa una tecla esta será almacenada hasta su uso. 9 Buses y Periféricos 99/00 Entrada/Salida Pro Ce Sa Dor INT Controlador memo ria Código de usuario Consultar el buffer de teclado Código de usuario Interrupción (Cada vez que el teclado genera una interrupción) Leer código ascii de la tecla pulsada Escribir en la memoria (buffer) Ahora lo que ocurre es que cada vez que se pulsa una tecla, el código de usuario se ve desplazado del procesador para que el código de interrupción lea el valor de la tecla del controlador y lo escriba en memoria. El código de interrupción no elabora el valor leído sino que se limita a trasladarlo desde el controlador a su localización de memoria. Introducción de DMA El mecanismo de DMA intercepta la interrupción del controlador de teclado, lee la tecla que le proporciona y la escribe en su localización de memoria. En todo el proceso el procesador no se ve interrrumpido y permanece ejecutando código de usuario. Al final de la realización, el controlador DMA puede avisar al procesador de que la tarea ha sido realizada. Pro Ce Sa Dor INT DMA Drq memo ria 10 Controlador Buses y Periféricos 99/00 Entrada/Salida BIBLIOGRAFÍA: Organización y arquitectura de computadores. Diseño para optimizar prestaciones William Stallings Prentice Hall 4ª edición 1997 Computer, organization and Design. The hardware/software interface David A. Patterson. John L. Hennessy Morgan Kaupfman. 1998 11