Disponible la versión 6 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Tecnología del PC

[Home]  [Inicio]  [Índice]


2.1  Entradas/Salidas

§1  Sinopsis

Si consideramos que el núcleo del ordenador está constituido por la placa-base y los elementos montados en ella (los elementos que podemos llamar "internos"), y que el resto de los dispositivos conectados son "externos", entonces podemos considerarlas dos tipos de comunicaciones o transferencias de información [1]:

  • Transferencias externas o de entrada/salida (E/S);  ocurren entre los elementos exteriores y la placa-base.  Básicamente son transferencias entre dispositivos exteriores (periféricos) y el procesador, o entre periféricos y memoria.
  • Transferencias Internas; ocurren entre los elementos internos.  Mayoritariamente se trata de transferencias entre el procesador y la memoria, o entre las diversas posiciones de memoria.  Pero también (y esto es importante) existen transferencias entre los anteriores y otros dispositivos hardware que conectan directamente con el bus.  Considere que al fin y al cabo, incluso los dispositivos considerados "externos" o periféricos, conectan con algún dispositivo (por ejemplo, un adaptador) que está a su vez conectado al bus de la placa base.

Debemos recordar aquí que las operaciones E/S en las que interviene la memoria, son abrumadoramente más importantes y frecuentes que las del resto, por lo que el PC les da un tratamiento especial;  disponen de un subsistema específico en el bus, y el tratamiento software también es especial (el procesador dispone de un montón de instrucciones específicas para controlar las operaciones con la memoria).  Nosotros le hemos dedicado un capítulo específico ( H2.3).  En consecuencia, aquí nos referiremos principalmente a las E/S con otros dispositivos hardware.

§2  Tipos de comunicación E/S

En general los procesos de E/S pueden ser de tres tipos según la forma en que se inician y controlan:

§2.1  E/S programadas

También denominadas de interrogación o encuesta ("Polling").  El programa decide cuando y con que dispositivos se establecerá la comunicación de E/S.  Es un método adecuado en determinadas circunstancias (periféricos lentos), pero resulta ineficiente si deben atenderse periféricos rápidos o gran cantidad de ellos. Sobre todo si la comunicación se origina del lado de los dispositivos (es el periférico el que solicita la comunicación), porque el procesador debe interrogar periódicamente al periférico, lo que supone un tiempo extra.

§2.2  E/S solicitada mediante interrupción

Este método es utilizado intensivamente en la programación actual, y es la base del funcionamiento de los procesadores modernos, por lo que le dedicamos un capítulo ( H2d).  La esencia del método consiste en que el periférico que desea establecer comunicación, dispone de un canal especial ("casi" siempre abierto) para solicitarla al procesador.  Cuando el procesador recibe esta señal, que se denomina petición de interrupción, termina la instrucción que esté en ejecución y atiende al periférico.  Es el sistema más eficiente para atender a periféricos de velocidad media, o cuando hay que atender a gran número de ellos.

§2.3  E/S gobernada por controlador de bus

Los sistemas anteriores tienen el inconveniente de que cualquiera que sea el procedimiento por el que se inicia la E/S, es el procesador el que debe atenderla.  Sin embargo, hay ocasiones, en especial cuando se trata de transferencias de datos entre periféricos rápidos y memoria (por ejemplo discos), en que se alcanza una mayor eficacia dejando al procesador al margen del proceso (la cuestión tiene cierta lógica pues al fin y al cabo, el asunto no va con él).  Estos procesos se conocen como acceso directo a memoria DMA ("Direct Memory Access"), y exigen dos requisitos:

I-   El procesador debe ser capaz de dejar libre el bus de datos para que otro dispositivo tome su control, limitándose mientras tanto a esperar.

II-  Otro dispositivo debe tomar el control del bus ("bus mastering"), para controlar él mismo el proceso.

En el PC se cumplen ambas condiciones.  Al tratar la arquitectura de los procesadores 8088 y siguientes, veremos que disponen de tres patillas específicas para atender al primer punto ( H3b1).  Además hemos señalado que la placa base dispone de un chip específico, el controlador de acceso directo a memoria DMAC ("DMA Controller"), así como ciertas líneas dedicadas en el propio bus de control.  En el capítulo correspondiente ( H2.3) se expone con más detalle el funcionamiento de esta modalidad muy utilizada e importante en la arquitectura de sistemas actual.

§3  Controlar las E/S

Hemos visto que, incluso en el caso de dispositivos externos o periféricos, al final las transferencias de datos suponen siempre el paso de estos por el bus del sistema.  En este sentido el bus es una línea a la que se conectan cierto número de dispositivos y todos pueden "ver" o escuchar los datos que pasan.  Adicionalmente también casi todos ellos pueden "escribir" o depositar datos en esta línea.  Por supuesto este canal no es un galimatías o un patio de vecinos en el que todos hablan cuando les parece.  Las transmisiones están sincronizadas por el tic-tac del reloj del sistema ( H2).  Además existe siempre un árbitro, generalmente el procesador, que actúa como el director de un debate, concediendo la palabra al dispositivo adecuado [4].

§3.1  Puertos E/S

La organización y control del tráfico es posible porque los dispositivos conectados al bus se construyen de forma que, aunque están a la escucha de los datos que circulan por él, solo reaccionan cuando la dirección existente en ese momento en el bus de direcciones tiene un valor concreto.  Esta "dirección" puede ser un valor único (raramente) o cualquiera dentro de un rango de valores contiguos.  En estas circunstancias, y dependiendo de la dirección y del estado de otras líneas, el dispositivo puede escribir un dato en el bus de datos, o leer el que exista en ese momento en el bus.  En el resto de casos, el dispositivo sencillamente ignora lo que sucede en el bus.  Por ejemplo, la interfaz del teclado solo reacciona cuando el bus contiene direcciones entre 60h y 6Fh inclusive.

Cada una de estas direcciones es lo que se conoce como un puerto E/S ("I/O port") y viene a ser como la "dirección" del dispositivo.  El principio de funcionamiento es que cuando el dispositivo ve que el dato en el bus de direcciones se refiere a él, realiza una acción determinada.  Por ejemplo, poner o leer un dato en el bus de datos.  Como veremos a continuación, cuando un dispositivo responde a un rango de direcciones, cada dirección tiene distinto uso.

Nota:  Aunque la verdadera "tarjeta de presentación" de cualquier dispositivo es la identificación de su "puerto" (mediante la dirección/es correspondiente/s), es costumbre referirse a algunos dispositivos mediante una etiqueta como indicativo del puerto en lugar de su dirección [5].  Son los denominados dispositivos lógicos ("Lógical devices").  Entre los más conocidos están los puertos de comunicación serie COM1 a COM4, los de impresora LPT1 a LPT3 y los de discos; A:; B:; C:; Etc.  En realidad estos identificadores deben ser traducidos internamente a números de puerto, aunque para usarlos sea más cómodo referirse a ellos mediante sus etiquetas.

Como puede verse, referirse a un puerto E/S equivale a referirse a un dispositivo concreto y los intercambios de información con los dispositivos de E/S, se realizan como en el resto de los casos utilizando direcciones. De modo que cuando el sistema necesita dirigirse a un "puerto", utiliza una dirección.  En este sentido, el procedimiento es análogo al utilizado para intercambios de datos entre el procesador y la memoria o entre direcciones de memoria, aunque en este último caso, el procesador dispone de un amplio abanico de instrucciones que permiten mover y operar directamente entre registros y direcciones de memoria, frente a solo dos (las instrucciones IN y OUT) cuando estas operaciones se realizan entre registros y direcciones de puertos [2].

Tanto si la transferencia es con una posición de memoria como con un puerto, la forma de operar es siempre la misma;  poner el dato en el bus de datos y la dirección en el de direcciones.  El sistema sabe que se trata de una dirección de memoria o de puerto y cual es la acción esperada (lectura o escritura) porque se dispone señales adecuadas en las patillas del procesador, que tienen su prolongación en el bus de control ( H3.2.1).  Aunque las direcciones de periféricos son coincidentes (en valor) con las de memoria, no hay posibilidad de confusión porque los elementos conectados al bus (memoria y periféricos) saben cuando un dato se dirige a unas u otros por el estado de las mencionadas líneas.

§3.1  Direccionamiento dedicado

El sistema de direccionamiento de dispositivos anteriormente descrito, se conoce como de direcciones independientes o dedicadas.   La dirección del puerto debe ser establecida por el fabricante del periférico, pero el 8088, y por consiguiente el PC, disponían de pocas de estas direcciones "independientes" para asignar a periféricos, por lo que tradicionalmente cada dispositivo montaba varias direcciones alternativas que debían ser seleccionadas mediante puentes o interruptores [3].  Esta disposición permite que si una dirección está ocupada por otro dispositivo pueda ser cambiada, de forma que se adapte a una dirección libre, aunque la solución resultaba engorrosa y complicada a la hora de instalar el hardware.

Como se ha señalado, el acceso a puertos de direccionamiento dedicado se realiza exclusivamente mediante dos instrucciones, 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.  Nos referimos a ellas más detenidamente en el epígrafe dedicado a los puertos E/S (H2e)

Desde la introducción del primer IBM PC era costumbre que determinados dispositivos muy comunes se conectasen mediante puertos de direcciones determinadas.  También hay que reseñar que un mismo periférico puede tener varias direcciones (de hecho es rarísimo que tenga menos de dos).  La razón es que estos dispositivos tienen varios registros (cada registro es una dirección de 1 Byte). Normalmente uno o varios son direcciones de lectura/escritura de datos desde/hacia el dispositivo, mientras que otros (que pueden ser de solo escritura), sirven para programar el dispositivo.  Por ejemplo, el controlador de puerto serie, que suele ser un chip 8250, 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 dispositivo (poner el control de paridad, la velocidad de transmisión, el número de bits de datos, número de bits de parada, Etc.)

El sistema de direcciones dedicadas, aunque adecuado para dispositivos de mediana/baja velocidad, y de relativamente pocas direcciones, no resulta adecuado para dispositivos rápidos y/o que utilicen comparativamente muchos registros de programación o control.

§3.2  Direccionamiento mapeado en memoria

Una alternativa al método anterior consiste en construir los dispositivos periféricos de forma que sus registros internos respondan como direcciones de memoria.  Este sistema se denomina de direccionamiento mapeado en memoria, y presenta indudables ventajas. La principal es que se dispone de todo el amplio arsenal de instrucciones para manipular datos entre estas posiciones y los registros del procesador.  Es un método especialmente adecuado para manejo de periféricos rápidos, o que tengan gran cantidad de registros internos.  Un caso paradigmático lo constituyen los controladores de video, que deben almacenar grandes cantidades de información, que además debe ser movida a gran velocidad.

Naturalmente esta solución requiere que los registros del dispositivo se comporten exactamente como lo hace la memoria.  Es decir, deben responder como auténticas direcciones de memoria RAM.  Observe que esto no es lo usual en determinados periféricos.  Por ejemplo; un ratón o un teclado no conservan la información que se pudiera escribir en ellos; además su contenido dependería del movimiento o de las pulsaciones de teclas realizadas por el operador.

Otra condición no menos importante, es que los registros deben ser suficientemente rápidos para que puedan ser equiparadas a la velocidad de acceso de la RAM.  Observe que en este caso, el procesador no distingue realmente entre la dirección de auténtica RAM y las direcciones que corresponden a un periférico.  Por ejemplo, en el caso de un controlador de video el procesador escribe en unas determinadas posiciones de memoria y el resultado es mostrado automáticamente en la pantalla del monitor.

El sistema tiene la ventaja de que los periféricos se manejan de forma unificada dentro del espacio general de direcciones de memoria, y que se dispone de los recursos propios del manejo de la memoria, entre ellos el mecanismo de acceso directo DMA , con lo que determinados movimientos pueden efectuarse casi sin intervención del procesador.  Por ejemplo, intercambios entre la memoria de video y el disco.  Sin embargo, el sistema presenta también evidentes inconvenientes.   El primero y principal es que estas direcciones, denominadas direcciones I/O, quedan excluidas de su posible utilización como auténtica RAM de propósito general.

Nota:  En los sistemas actuales de 32 bits, con varios GBytes de memoria virtual ( H5a) direccionables en un único espacio contiguo, esto no representa un serio inconveniente. Pero en los primeros equipos, con solo unas cuantas KB de RAM, el sistema de periféricos mapeados en memoria representaba una auténtica dificultad.

  Inicio.


[1]  Como casi todas las clasificaciones, esta que proponemos es un tanto artificiosa y representa solo uno de los muchos puntos de vista de la cuestión, sin embargo puede servir para situar al lector en el problema y para facilitarle una imagen de los mecanismos involucrados.

[2]  Nos referimos al procesador 8088 instalado en los primeros PC's.  Los descendientes de esta saga han ampliado considerablemente el abanico de instrucciones que pueden manejar, pero en cualquier caso, la superioridad es abrumadora para las instrucciones registro/memoria frente a las instrucciones registro/puerto.

[3]  Como veremos al tratar de las interrupciones ( H2d), también disponían de varias opciones para seleccionar la línea IRQ que debía usar el periférico.

[4]  Veremos a continuación que el procesador puede ceder momentáneamente el control del bus a otros dispositivos.

[5]  Esta forma de identificación se utiliza principalmente en la interfaz ("Shell") del Sistema Operativo y en los lenguajes script que la manejan.  También en algunos lenguajes de alto nivel.