TEMA 2 - ARQUITECTURA DE DISPOSITIVOS DE COMUNICACIONES EN EL PC 1
INTRODUCCIÓN
En una visión simplificada de la estructura de un ordenador, diferenciamos tres bloques funcionales (CPU, Memoria y Periferia) interconectados por tres buses (direcciones, datos y control).
MEMORIA
Según esta disposición simplificada, la información viajaría entre los tres bloques por el bus de datos, de manera que la CPU determinaría en qué posición de la memoria o en qué dirección de la
CPU
PERIFERIA
BUS DE CONTROL BUS DE DIRECCIONES BUS DE DATOS periferia se escribiría/leería gracias al bus de direcciones. Todo ello estaría manipulado en el tiempo a través del bus de control. Para aclarar este proceso vamos a poner un ejemplo genérico de transacción de datos: Deseamos enviar el carácter ‘ñ’, existente en la memoria, a una impresora. Para llevar a cabo este proceso, el sistema debe ejecutar una instrucción. Al menos se cumplirán estos pasos: -
la CPU coloca en el bus de direcciones la posición donde se encuentra la instrucción la CPU activa la línea de lectura de memoria (bus de control) Por el bus de datos llega a la CPU la información de la instrucción y el valor del carácter ‘ñ’ que queremos enviar. La CPU pone ahora en el bus de direcciones la posición de E/S donde se halle la impresora. Activa la línea de control de escritura sobre el dispositivo de E/S (un registro de la impresora) Envía por el bus de datos el valor del carácter ‘ñ’ y la impresora lo gestiona según su protocolo.
Todo este proceso es mucho más complejo en la realidad pero conceptualmente se realiza así y de forma sincronizada por el reloj del sistema.
Arquitectura de E/S de comunicaciones de red 1
2
Puertos Entrada/Salida
Cualquier dispositivo (distinto de la memoria RAM) que intercambie datos con el sistema lo hace a través de un "puerto", por esto se denominan también puertos de E/S ("I/O ports"). Desde el punto de vista del software, un puerto es una interfaz con ciertas características; se trata por tanto de una abstracción (no nos referimos al enchufe con el que se conecta físicamente un dispositivo al sistema), aunque desde el punto de vista del hardware, esta abstracción se corresponde con un dispositivo físico capaz de intercambiar información (E/S) con el bus. Como los dispositivos E/S tienen algún tipo de conexión con el bus externo, deben tener una dirección (o conjunto de ellas) que los identifique. Los podemos comparar con un teléfono, un dispositivo con el que se puede enviar/recibir información mediante una dirección. Hablar de un puerto E/S es casi siempre sinónimo de una dirección, y es costumbre informática referirse a estas direcciones en hexadecimal. De modo que, por ejemplo, un puerto puede ser 0x21 en un fichero fuente o 21h en un texto informático.
2.1
Direcciones de puertos
El modo de direccionamiento del PC ha adoptado dos modelos, según la naturaleza del dispositivo a conectar: Direccionamiento dedicado para dispositivos de media/baja velocidad. Por ejemplo, puertos serie y paralelo (impresora), teclado, etc. y direccionamiento mapeado en memoria para dispositivos rápidos (típicamente los adaptadores gráficos).
2.1.1 Direccionamiento dedicado Respecto a los dispositivos de direccionamiento dedicado, desde la introducción del IBM-PC, es costumbre que determinados dispositivos muy comunes se conecten mediante puertos de direcciones determinadas. EGA (Enhanced Graphic Adapter)
2B0-2BF
Dirección
EGA
2C0-2CF
000-00F
EGA
2D0-2DF
Controlador de interrupciones PIC#1 8259A
020-021
GPIB Adaptador 0 (AT)
2E0-2E7
Temporizador programable PIT 8253 y 8254
040-043
Puerto serie 8250 (COM4)
2E8-2EF
Controlador periféricos PPI 8255 (XT)
060-063
Puerto serie 8250 (COM2)
2F8-2FF
Controlador 8742 (AT)
060-064
Tarjetas específicas (prototipos)
300-30F
Altavoz del sistema
061-061
Tarjetas específicas (prototipos)
310-31F
CMOS RAM & NMI Mask Reg (AT)
070-071
Controlador disco duro (XT)
320-32F
Registros de página DMA
081-08F
Tarjeta de red
360-363
Controlador de interrupciones PIC#2 (AT)
0A0-0A1
Tarjeta de red
368-36B
NMI Mask register (XT)
0A2-0AF
Puerto paralelo (LPT1)
378-37F
Controlador DMAC#2 secundario (AT)
0C0-0DF
SDLC Puerto 2
380-38F
Clear / Reset del coprocesador matemático
0F0-0F1
SDLC Puerto 1
3A0-3AF
Coprocesador matemático 80287
0F8-0FF
MDA (Monochrome Display Adapter)
3B0-3BB
Controlador de disco duro (AT)
1F0-1FF
Puerto paralelo (LPT3)
3BC-3BF
Puerto de juegos
200-20F
EGA
3C0-3CF
Unidad de expansión (XT)
210-21F
CGA
3D0-3DF
Ratón (conectado al bus)
238-23B
Puerto serie 8250 (COM3)
3E8-3EF
Ratón de bus alternativo
23C-23F
Controlador de disquete
3F0-3F7
Puerto paralelo (LPT2)
278-27F
Puerto serie 8250 (COM1)
3F8-3FF
Algunas direcciones (hex) de puertos en el PC XT/AT Dispositivo Controlador DMAC#1 primario 8237A
Arquitectura de E/S de comunicaciones de red 2
En la tabla adjunta se muestran algunas de estas direcciones típicas para dispositivos de E/S. Las referencias a los chips se refieren a los utilizados en los primeros PCs. Actualmente han sido sustituidos por uno o dos integrados (Chipset) que realizan todas las funciones. Puede observarse que para un mismo periférico se tienen varias direcciones (un "rango"). La razón es que estos dispositivos tienen varios registros y/o son programables, para lo que disponen de registros especiales (cada registro de un Byte tiene una dirección, y estas son correlativas). Por ejemplo, el controlador de puerto serie de los primeros PCs era un circuito integrado 8250 de National Semiconductor; que dispone de 8 registros, aunque los datos se reciben y transmiten por uno de ellos, el resto sirve para programar y controlar el funcionamiento del chip. Respecto a las asignaciones "Estándar" de algunos puertos, es pertinente hacer algunas observaciones: En realidad IBM definió de forma distinta las direcciones de puerto de las interfaces de impresora en los PC monocromo y en los de color. Las asignaciones fueron las siguientes: Puerto Monocromo
Color
LPT1
3BC-3BFh 378-37Fh
LPT2
378-37Fh
278-27Fh
LPT3
278-27Fh
---
En lo referente a los puertos serie, durante la secuencia inicial de identificación del hardware, la BIOS realiza una búsqueda de dispositivos de E/S por direcciones en un orden determinado, y les asigna un nombre lógico según el orden de aparición. En el caso de los puertos serie el orden suele ser el siguiente: Puerto Dirección COM1 3F8-3FFh COM2 2F8-2FFh COM3 3E8-3EFh COM4 2E8-2EFh
Podemos conocer las direcciones de E/S asignadas a los distintos dispositivos periféricos en un determinado sistema. En el caso de tener un sistema operativo Windows bastará con acceder a las propiedades del dispositivo hardware que nos interese conocer. Obtendremos una pantalla similar a la de la figura
Los usuarios de Linux pueden consultarse en el fichero /proc/ioports mediante el comando cat /proc/ioports
Arquitectura de E/S de comunicaciones de red 3
2.1.2 Direcciones mapeadas en memoria Las direcciones mapeadas en memoria se eligieron para algunos dispositivos como los adaptadores gráficos, que requerían mover grandes cantidades de datos muy rápidamente. Con objeto de no causar conflictos con la RAM general, algunas de estas direcciones fueron mapeadas desde el principio por los diseñadores de IBM, fuera de la denominada memoria convencional. Es decir, fuera del espacio de los 640 KB que podían utilizarse en los primeros PC's para Sistema y programas de aplicación. Por ejemplo, el adaptador de video utiliza un área de memoria de 128 KB mapeada entre las direcciones A0000-BFFFFh. Sin embargo, los decodificadores de direcciones de periféricos de los primitivos PC's solo podían utilizar direcciones de 10 bits para tales accesos, por lo que las direcciones de puertos estaban constreñidas a 210 (1 KB 0000-0400h). En realidad el espacio era aún más pequeño, puesto que los primeros 256 Bytes estaban copados por algunos dispositivos de la placa-base, resultando que los dispositivos E/S debían ser mapeados en 768 Bytes. Generalmente se utilizaron fragmentos de 256 Bytes en la forma xxF0-xxFFh, organizados de forma bastante desordenada. La introducción del AT amplió estas direcciones a 16. Sin embargo, incluso los 64 KB resultantes eran un espacio pequeño y de organización caótica, dado que los nuevos dispositivos se construían de forma que fueran compatibles con las antiguas placas ISA que solo reconocían direcciones de 10 bits. Incluso las placas para buses posteriores que fueron desarrollados pensando en 64 KB porque debían ser compatibles hacia atrás con las antiguas placas ISA (que coexistían en las nuevas). El resultado de todo esto es que, incluso los sistemas actuales con muchos MB. de RAM, deben seguir lidiando con los puertos a través de pequeñas ventanas de memoria con localizaciones absurdas. Comunicar con los puertos Nos detendremos brevemente en analizar los aspectos involucrados en las operaciones E/S con los puertos desde una doble vertiente: Lógica y física; esta última relativa a los mecanismos involucrados en el intercambio.
2.1.3 Aspectos lógicos El software utilizado depende de la modalidad de direccionamiento (dedicado o mapeado) que se elija. En el segundo caso, se dispone un amplio repertorio de recursos para mover datos entre los registros y la memoria (la mayoría de las instrucciones del procesador operan de esta forma), así como de los mecanismos auxiliares de transferencia, como el acceso directo a memoria DMA. El panorama es distinto cuando se trata de puertos de direccionamiento dedicado. En este caso, para realizar las operaciones E/S en los procesadores 8088 y descendientes, solo se dispone de dos instrucciones específicas: IN y OUT. La primera lee un byte del registro de salida del puerto y lo sitúa en un registro del procesador; la segunda escribe el contenido de un registro del procesador en un registro del puerto. Por supuesto, cualquier programa que quiera utilizar puertos deberá emplear directa o indirectamente estas dos instrucciones ensamblador, aunque en muchos casos no es imprescindible enredarse en demasiados detalles. Los usuarios de DOS pueden utilizar servicios del Sistema; concretamente la interrupción 21h que realiza operaciones de E/S con puertos (utilizando IN y OUT por supuesto). Por ejemplo, las instrucciones: MOV DL,7 MOV AH,2 INT 21
provocan un pitido en el sistema bajo DOS. La explicación es la siguiente: La última instrucción invoca una interrupción software número 33 (21h) que, como hemos indicado, corresponde a los servicios del DOS. Cuando esto ocurre, se comprueba el contenido del registro AH, que en este
Arquitectura de E/S de comunicaciones de red 4
caso es 2 (valor previamente establecido en la segunda instrucción), lo que indica que debe escribirse un carácter en pantalla (un dispositivo de salida); en este caso, el carácter que se envía al puerto es el contenido del registro DL, que previamente se ha establecido en el valor 7 con la primera instrucción. El 7 es el valor BELL ASCII; cuando se intenta mostrar este carácter, se produce un pitido en el altavoz del sistema. Los demás Sistemas disponen de utilidades análogas. Por ejemplo, los sistemas Windows disponen de una DLL específica para este tipo de servicios.
2.1.4 Aspectos físicos El procedimiento que se sigue el procesador para las E/S hacia puertos, es siempre el mismo: poner el dato en el bus de datos y la dirección en el de direcciones. Como indicamos a continuación, el sistema sabe que se trata de una dirección de memoria (real o de puerto mapeado) o de un puerto de dirección dedicada, y cual es la acción esperada (lectura o escritura) porque se dispone de 4 líneas específicas en el bus de control: IOR: Orden de lectura para dispositivo E/S conectado al bus, que debe colocar un dato en el bus de datos. IOW: Orden de escritura para dispositivo E/S, que debe leer el dato situado en el bus. MEMR: Esta señal indica a los dispositivos colocar un dato en el bus de datos.
de
memoria
que
deben
MEMW: Señal que indica a los dispositivos almacenar el dato colocado en el bus de datos.
de
memoria
que
deben
Una cuestión adicional es que cuando la comunicación debe establecerse desde el lado del puerto (es el puerto el que desea establecer comunicación con el sistema), primero debe anunciarlo al procesador, para lo que se utiliza un sistema de interrupciones. La consecuencia es que la mayoría de los puertos disponen de líneas IRQ asignadas para este menester.
3
TÉCNICAS DE ENTRADA Y SALIDA (E/S)
Los periféricos agrupan a una enorme cantidad de dispositivos de muy distintas naturaleza aunque todos ellos se caracterizan por dar un enlace con el mundo exterior al ordenador. Sin ellos la máquina sería un elemento cerrado inservible pues no podríamos introducir ni sacar ninguna información. Si la CPU tuviera que conectarse directamente con todos los periféricos, el sistema tendría un rendimiento muy bajo, por eso se utilizan las interfaces, de manera que la CPU les envía la información y son éstas las que se encargan de conectarse con los periféricos. Esto tiene el inconveniente de que la CPU debe estar en constante conexión con las interfaces de entrada/salida con la consiguiente pérdida de ciclos de CPU. La solución a este problema ha sido crear dispositivos, cada vez más sofisticados, que se encargan de conectarse con las interfaces. Junto con la CPU y la memoria, el tercer elemento clave en un sistema computador son los módulos de entrada/salida. Los módulos de entrada/salida se conectan directamente al bus de sistema y su misión es controlar uno o más periféricos, es decir son los encargados de llevar el peso de la transferencia. Para poder llevar a cabo su misión deben contener la lógica necesaria para permitir la comunicación entre el periférico y el bus. Las funciones asignadas al módulo de entrada/salida son: -
Control y temporización de la transmisión de información
-
Comunicación con la CPU
Arquitectura de E/S de comunicaciones de red 5
-
Comunicación con los dispositivos periféricos
-
Almacenamiento temporal de datos (función de buffer)
-
Detección y corrección de errores.
Llamamos técnicas de entrada/salida a las que utiliza el módulo de E/S para comunicarse con el procesador. Existen tres técnicas: Programada, Interrupciones, Acceso Directo a Memoria.
3.1
E/S PROGRAMADA (POLLING, SONDEO, ESCRUTINEO)
Al proceso de comprobar periódicamente los bits de estado de los periféricos para ver si es el momento de realizar la siguiente operación de entrada/salida se le llama escrutinio, sondeo, encuesta (polling). Es la forma más simple de que un dispositivo de entrada/salida se comunique con el procesador. El periférico pone la información en el registro de estado del módulo de entrada/salida y el procesador debe venir y recoger la información, por lo tanto el procesador tiene el control y hace todo el trabajo. La principal característica de esta técnica es que la CPU permanece en un ciclo hasta que el periférico modifica el registro de estado del módulo para informar que está disponible para una nueva operación. El computador adapta su velocidad de trabajo a la del periférico (qué esta marcada por los circuitos electromecánicos), y además en muchas ocasiones pierde ciclos de trabajo efectivo debido a la espera. Esta forma de trabajo tiene algunos inconvenientes, como son: -
Pérdida de tiempo, puesto que durante la espera la CPU no hace trabajo útil. Con periféricos lentos el bucle de espera puede repetirse miles de veces.
-
Esta técnica es difícil de aplicar cuando se quiere para atender a varios periféricos
-
Existen tareas que no pueden esperar a que acabe el ciclo de espera.
-
Una solución parcial es la limitación del tiempo de espera del bucle.
Solo se usa para periféricos lentos. Por ejemplo, la frecuencia del ratón es de 0,02Kbytesps, muy baja comparada con la de discos 2000Kbps o del disco óptico de 500kbps. Existe otra modalidad de entrada salida programada llamada sin espera de respuesta. En esta modalidad se supone que cuando el procesador lee el dato, este ya se encuentra preparado. Elimina el bucle de espera pero es muy propensa a errores.
Arquitectura de E/S de comunicaciones de red 6
3.2
LAS INTERRUPCIONES
Una interrupción es una bifurcación externa al programa en ejecución provocada por una señal que viene del exterior de la CPU. Esta señal llega a través de una línea llamada de petición de interrupción. Las interrupciones también pueden ser internas a la CPU en este caso se llaman excepciones. -
La CPU indica al módulo de E/S el periférico al que quiere acceder y la operación que quiere realizar
-
A continuación se desentiende de la operación y se pone a trabajar en algún otro proceso
-
Cuando el módulo de entrada/salida acaba la operación, interrumpe a la CPU para indicarle que ya está lista para intercambiar información con ella.
-
La CPU realiza la transferencia de información tras lo cual continua con el trabajo interrumpido
Una de las características más importantes de esta técnica es que debe realizarse una interrupción a la CPU por cada byte que se intercambia. Esto como veremos más adelante será una de las causas que provocan la aparición de otras técnicas de Entrada/Salida. Además una interrupción es asíncrona, es decir se produce independientemente de la señal de reloj que sincroniza el sistema. Su principal ventaja es que eliminan el ciclo de espera del procesador entre cada entrada de byte. Se llama rutina de servicio de interrupción a la rutina que se ejecuta en respuesta a una solicitud de interrupción. Su forma de actuar es similar a la de una subrutina, debido a que rompe la secuencia de ejecución del programa, aunque es diferente porque el programador no sabe de antemano cuando se llevará a cabo.
Arquitectura de E/S de comunicaciones de red 7
3.3
EL ACCESO DIRECTO A MEMORIA (DMA)
Las técnicas de escrutinio y de interrupciones sólo son útiles para transferencias de pequeño ancho de banda. En estos casos, el peso de la transacción la sigue llevando la CPU. Pero cuando hay que realizar grandes intercambios de información entre un dispositivo de alta velocidad y la CPU, su utilización puede degradar enormemente el rendimiento del sistema. Este es el caso de los discos duros en los que el ancho de banda es grande (grandes bloque de información que pueden contener cientos o miles de bytes). Este es el motivo por el que los diseñadores de computadores inventaron un mecanismo para descargar al procesador de trabajo y lograr que el controlador del dispositivo transfiriese datos directamente a/desde la memoria, sin involucrar al procesador. A este mecanismo se le denomina Acceso Directo a Memoria (DMA). En esta nueva técnica todavía se utilizan las interrupciones para comunicarle al procesador que ha acabado la transferencia o para comunicarle un error. El ADM se implementa con un controlador especializado que transfiere datos entre un dispositivo de entrada/salida y la memoria independientemente del procesador. 1. Cuando la CPU desea leer o escribir un bloque de datos, envía un comando al controlador de DMA comunicándole la siguiente información: - Tipo de operación (si es entrada o salida) - Dirección del módulo de Entrada/Salida - Primera posición de la memoria a la que se desea acceder - Nº de palabras a leer o escribir 2. A continuación la CPU reanuda su trabajo, y es el controlador de DMA el encargado de manejar la E/S. 3. Cuando la transferencia ha terminado el controlador de DMA envía una señal de interrupción a la CPU. Como se puede ver la CPU solo interviene al principio y al final de la operación PERIFÉRICOS DE COMUNICACIONES DE RED Hasta ahora hemos analizado los dispositivos E/S de forma genérica. En las siguientes imágenes observamos el aspecto que nos ofrecen algunos dispositivos comerciales orientados a las comunicaciones de red. Diferenciamos los dispositivos internos que precisan una instalación física en el interior del PC (normalmente en la ranura PCI) y otros denominados externos, cuyo enlace con el ordenador se llevará a cabo a través de conexiones USB, RS-232, etc. Conviene recordar que todos ellos actúan según se ha explicado en las páginas anteriores. Todos ellos cuentan con registros de control, registros de datos, etc que permiten su configuración, conocimiento de su estado y su transmisión/recepción de datos.
Arquitectura de E/S de comunicaciones de red 8
Arquitectura de E/S de comunicaciones de red 9