Ivn Guardia Hernndez. 1.- Introduccin La comunicacin entre el ser humano y el sistema se realiza a travs de los dispositivos de entrada/salida. stos forman la interfaz externa y permiten al usuario interaccionar con l intercambiando informacin. Sin embargo, debe existir una interfaz interna entre los diferentes dispositivos de entrada/salida y el resto del sistema, compuesto, bsicamente, por el procesador y la memoria principal. Para interconectar los dispositivos de una forma eficaz y con un coste aceptable, es necesario utilizar un medio o lnea compartida por la que circule la informacin. De otro modo, tendramos que incorporar varias lneas dedicadas para cada dispositivo, incrementando el coste e impidiendo la posibilidad de aadir nuevos dispositivos de entrada/salida. A este medio o lnea compartida se le llama bus. Los dispositivos conectados a l se comunican a travs de transacciones, es decir, mediante lecturas y escrituras de unos a otros. La gran variedad de dispositivos que se pueden interconectar a travs de un bus origina toda una serie de problemas. Por un lado, se complica el estudio de los buses, ya que, de hecho, un bus puede ser casi cualquier medio que sea capaz de interconectar dispositivos. Por otro lado, el hecho de que el bus sea compartido y que los dispositivos tengan distintas prioridades y velocidades, requiere un control del mismo. Se ha de decidir como se ocupa el bus durante una transaccin, en qu forma debern acceder los distintos dispositivos para no ocasionar conflictos elctricos, se ha de especificar el modo de que unos dispositivos dirigen a otros durante una operacin, se ha de arbitrar quin puede acceder al bus (atendiendo a las prioridades) en cada momento y se ha de sincronizar a los dispositivos que interaccionan durante una transaccin. La gran diversidad de buses y de dispositivos de entrada/salida que existen en el mercado origina la aparicin de problemas en el diseo de diferentes buses y dispositivos que sean compatibles. Adems de los aspectos de interconexin, debemos tener en cuenta la forma en que el procesador dialoga y se comunica con los dispositivos de entrada/salida. Cuando un proceso (programa en ejecucin), a travs de una o varias transacciones, realiza una transferencia de salida o entrada de datos con un dispositivo, se dice que realiza una operacin de entrada/salida. Se debe encontrar una manera para que el procesador pueda direccionar los distintos dispositivos e intercambie datos e informacin de control con ellos. Sin embargo, la responsabilidad que recae sobre el procesador y los dispositivos a la hora de dirigir las operaciones de entrada/salida influye de forma distinta en el rendimiento del sistema. Por otro lado, el sistema operativo se encuentra con una serie de dificultades para gestionar las operaciones de entrada/salida. stas estn relacionadas con el uso de memoria cache y de memoria virtual, ya que provocan la aparicin de datos obsoletos, as como de conflictos en los direccionamientos utilizados para realizar las transferencias. Comenzaremos describiendo el sistema de buses clasificndolo desde diversos criterios, explicando las diferentes tcnicas para controlarlos y estudiando algunos estndares. Despus, haremos una descripcin de los distintos mtodos que se han utilizado y se utilizan para establecer una interfaz entre el procesador y el sistema operativo con los dispositivos de entrada/salida. 2.- Buses El bus es el medio de interconexin entre los diferentes subsistemas de un sistema. El procesador y la memoria principal se han de comunicar con los dispositivos de entrada/salida, adems de estar interconectados entre s. En definitiva, el bus nos permite tener todos los subsistemas conectados sin la necesidad de tener lneas dedicadas para cada uno de ellos. El bus est compuesto por diversas lneas en paralelo que conectan los diferentes dispositivos. Esta organizacin permite un bajo coste y versatilidad. Por otro lado, ofrece una configuracin flexible, ya que se pueden ir incorporando nuevos dispositivos sin la obligacin de reestructurar el sistema segn las nuevas necesidades. Debido a que por el bus pasa toda la informacin que ha viajar entre los dispositivos, ste se puede convertir en un serio cuello de botella del sistema. Por esta razn, el diseo de buses es una pieza clave para aumentar el rendimiento del mismo. Principalmente, las mayores dificultades de diseo son de carcter fsico, es decir, la longitud del bus y el nmero de dispositivos interconectados. 2.1.- Clasificacin Debido a la gran cantidad de tipos de dispositivos y a las diferentes funcionalidades que se pueden presentar, a lo largo de la historia, han ido apareciendo muchas clases de buses que han ido cubriendo las distintas necesidades. Por ello, para catalogarlos es necesario establecer algn tipo de clasificacin. Los buses se pueden clasificar segn su organizacin, construccin o temporizacin. 2.1.1.-Organizacin Existen muchas formas de organizar los buses y los dispositivos dentro del sistema. Bsicamente, esas organizaciones se ajustan a los siguientes tipos: 1) Bus de sistema: Hay un nico bus compartido que interconecta tanto al procesador y a la memoria principal como a todos los dispositivos de entrada/salida. A este bus se le conoce con el nombre de bus de sistema . Es el ms fcil de implementar, pero puede presentar serios cuellos de botella. 2) Bus de sistema y buses de entrada/salida: Las transacciones entre el procesador y la memoria principal se realizan a travs del bus del sistema. Los dispositivos de entrada/salida se comunican entre s a travs de un bus dedicado que recibe el nombre de bus de entrada/salida. Como los dispositivos de entrada/salida requieren estar conectados con la memoria principal, se habilita un acceso a sta desde el bus de entrada/salida mediante un dispositivo llamado adaptador de bus. Esta organizacin libera trfico entre el procesador y la memoria, separando las transacciones de entrada/salida. 2.1.2.- Construccin Existen tres formas para implementar las interconexiones de los diferentes dispositivos del sistema a los buses: 1) Motherboard: El bus se implementa sobre una placa donde se encuentran unos zcalos especficos para conectar tanto el procesador como la memoria principal. Adems, la placa posee un conjunto de ranuras (slots de expansin), para incorporar nuevos dispositivos. Esta construccin no permite modificaciones. Al saber de antemano como estarn colocados todos los dispositivos, se puede conseguir una implementacin mucho ms eficiente. Hoy en da prcticamente todos los ordenadores personales presentan este tipo de construccin. Una foto de motherboard se muestra en la figura 1. 2) Backplane: La interconexin de los dispositivos de entrada/salida, el procesador y la memoria principal se realiza en una caja donde no hay ninguna ranura de conexin ms relevante que las dems. Simplemente, los diferentes componentes estn implementados sobre unas tarjetas que se van insertando en la caja, quedando, as, interconectados. Esta construccin es muy flexible, ya que permite muchas organizaciones diferentes y ofrece posibilidades de ampliacin. 3) Entrada/Salida: Son cables que conectan dispositivos entre s. Por ejemplo, el cable de una impresora o el cable de red. Se suelen usar para cubrir distancias largas y, por limitaciones fsicas, no suelen ser muy rpidos. FIGURA 1 Motherboard del Intel 0.286. 2.1.3.- Temporizacin Cuando un dispositivo consigue tomar el control del bus, debe sincronizarse con ste y los dispositivos con los que va a interactuar para realizar la transferencia o transaccin de los datos. Segn la forma en que se realiza esta sincronizacin, los buses se clasifican en: 1) Sncronos: Todos los dispositivos se rigen por una seal de clock comn. Se da un nmero de ciclos de reloj fijo para cada transaccin. Todas las transacciones tardan lo mismo en llevarse a cabo. 2) Asncronos: La duracin de las transacciones es variable. El comienzo y la finalizacin se da a conocer a travs de seales de control. 2.2.- Las operaciones bsicas del bus, las transacciones A travs de un bus bsicamente se llevaran a cabo transacciones, es decir, lecturas o escrituras de un determinado dispositivo a memoria principal. En una lectura, el dispositivo usa inicialmente el bus para especificar la direccin de memoria requerida. Tras un determinado tiempo de bsqueda del dato, el bus se vuelve a utilizar parar recuperar la informacin. En caso de una escritura, es suficiente mandar la direccin y los datos de golpe, haciendo uso del bus una sola vez. Existen dos tipos de transacciones segn sea la ocupacin del bus: 1) Ciclo continuo: El bus est ocupado durante toda la transaccin, es decir, desde que se realiza la peticin mandando la direccin hasta que se recuperan los datos. 2) Ciclo dividido: El dispositivo ocupa el bus slo los ciclos necesarios para enviar las direcciones y los datos. Cuando se realiza una lectura, el dispositivo enva la direccin y libera al bus hasta que el dato est listo a la salida de la memoria. Despus, vuelve a ocupar el bus para leer el dato que haba solicitado. De esta manera, aumentamos el ancho de banda (nmero de palabras que se transmiten por unidad de tiempo) del bus, ya que mientras un dispositivo espera la respuesta de una lectura, en el bus se puede iniciar otra transaccin. Sin embargo, disminuye el tiempo de respuesta, ya que cuando el dato solicitado est disponible, el bus puede estar ocupado atendiendo otra transaccin. Otro enfoque se basa en usar dos buses, uno para datos y otro para direcciones. De esta manera, se libera considerablemente la carga que debe soportar cada bus, equilibrndolas. 2.3.- Cmo funciona el bus Debido a que el bus es un hilo compartido por muchos dispositivos, se hace indispensable un mnimo de organizacin que permita el buen funcionamiento. Primero, se debe tener en cuenta la forma y la prioridad en que cada uno de los dispositivos puede acceder al bus. Luego, se debe determinar quin inicia y finaliza las transacciones, as como la sincronizacin que debe existir entre ellos. En definitiva, se debe especificar de forma exhaustiva el protocolo del bus. 2.3.1.- Peticin de bus Como los hilos de los que est formado el bus han de ser compartidos, hay que evitar los conflictos elctricos derivados del uso comn. Se debe asegurar que slo un dispositivo estar usando el bus en un momento determinado. Cuando un dispositivo requiere la utilizacin de ste, utiliza un hilo del mismo para indicar que desea realizar una transaccin. Los dispositivos hacen uso, bsicamente, de dos tcnicas para utilizar los hilos del bus sin conflictos. La eleccin de una tcnica u otra estar condicionada por la particularidades elctricas del bus en concreto. 1) Driver tristate: En la salida del dispositivo hacia el bus hay un elemento electrnico, llamado tristate. Este dispositivo puede hallarse en tres estados distintos: especificando un cero lgico a la salida, especificando un uno lgico o en estado de alta impedancia (desconectado). As, cuando un dispositivo accede al bus, simplemente habilita el tristate. El hecho de que slo el triestate de uno de los dispositivos est habilitado, asegura que no habr conflictos. Un esquema que ilustra el funcionamiento de esta tcnica se ubica en la figura 1. 2) Driver Open Collector: En la salida del dispositivo hay un interruptor que lo conecta con el hilo del bus. Cuando el dispositivo no desea acceder a ste, mantiene el interruptor abierto para ser ignorado. En el momento en que el dispositivo cierra el interruptor, el hilo del bus se deriva a masa y se accede a l. El hecho de que varios de estos interruptores estn cerrados en un mismo instante de tiempo no provoca conflicto elctrico alguno en el hilo, ya que, en conjunto, implementan una funcin lgica sobre ste. Ver figura 2. 2.3.2.- Master y slave Cada transaccin tiene asociado un dispositivo que desempea un papel activo en la operacin y es el encargado de iniciarla, este dispositivo recibe el nombre de master. A su vez, para cada transaccin habr uno o ms dispositivos llamados slave que harn lo que el master ordene. Puede haber dispositivos que slo hagan el papel de master, otros de slave e incluso algunos de master y slave, segn las circunstancias. Un ejemplo tpico se da cuando el procesador quiere escribir en memoria principal, actuando el procesador como master y la memoria como slave. El master inicia la transaccin enviando al bus una seal que indica la direccin del slave destino. Cada slave mira si la seal del bus le corresponde. Una vez que quede claro cuales son los dispositivos origen y destino de la operacin, ambos se sincronizan y llevan a cabo la operacin en s. Es posible habilitar varios slave a la vez para un mismo master, en dicho caso la direccin que ir a cada uno de ellos se llama direccin broadcast. Disp Disp 5 v. Bus Bus Disp Disp FIGURA 2 Driver tristate y Driver open collector 2.3.3.- Arbitraje En el caso de haber ms de un master, tiene que existir algn tipo de control sobre quin tiene derecho a tomar el control del bus y qu prioridades tiene cada dispositivo. Para solucionar el problema, se incorpora un controlador o rbitro de bus. Se pueden implementar tres estrategias diferentes para el arbitraje del bus. 1) Daisy-chain: Hay dos lneas comunes del tipo open collector: busy y request. Los dispositivos estn conectados en serie por la lnea grant. Cuando alguien quiere usar el bus, pone a uno la lnea request. A continuacin, el controlador del bus se da cuenta de que alguien pidi el control y espera a que la lnea busy este a cero para enviar por la lnea grant un uno. Este uno ir saltando de dispositivo en dispositivo, segn estn colocados, hasta encontrar alguno que est solicitando el bus. ste pondr a uno la lnea busy y podr empezar la transaccin. Una vez haya acabado, pondr de nuevo a cero la lnea busy. Con este esquema, la electrnica del controlador del bus es muy sencilla. Pero la colocacin de los dispositivos a lo largo de la lnea grant marca las prioridades de acceso. Ver figura 3. 2) Polling: Hay dos lneas comunes del tipo open collector: busy y request. Adems hay k lneas (donde k es el logaritmo en base dos del nmero de dispositivos) llamadas lneas de escrutinio. Mientras la lnea busy est a cero, el controlador va enviando por las lneas de escrutinio el nmero del dispositivo (codificado en binario) que opta ha tener el control del bus. Si un dispositivo reconoce su nmero y tiene que coger el bus, pone a uno la lnea busy y realiza la transaccin. Una vez ha acabado, pone a cero la lnea busy. Esta configuracin permite programar las prioridades. Ver figura 4. CONTROLADOR DEL BUS D1 D2 D3 Dn grant reques t busy FIGURA 3 Daisy-chain 3) Independece request: Cada dispositivo tiene dos lneas individuales (busy, grant) que van hasta el controlador del bus. Cuando alguien quiere el bus, pone a uno la lnea request. Por su parte, el controlador del bus analizar todas la peticiones individuales y decidir que dispositivo coger el bus. Esto lo indicar a cada uno en concreto a travs de las lneas grant. Esta estrategia permite prioridades fcilmente programables y es la ms rpida. Por el contrario, es la ms costosa debido al elevado nmero de lneas que requiere para su funcionamiento. Ver figura 5. CONTROLADOR DEL BUS D1 D2 D3 Dn reques t busy escrutinio FIGURA 4 Polling D1 D2 Dn grant reques t grant grant reques t reques t CONTROLADOR DEL BUS FIGURA 5 Independece request 2.3.4.- Sincronizacin Como hemos mencionado anteriormente, para que dos dispositivos sepan en cada momento en que estado se encuentra una transaccin y puedan, as, iniciarla y finalizarla correctamente, es necesario algn tipo de sincronizacin. Se puede conseguir de tres formas diferentes: 1) Buses Sncronos: Existe una seal de reloj comn. Hay un nmero de ciclos fijos asignados a cualquier transaccin. De esta manera, todas las transacciones tardan lo mismo independientemente del dispositivo. La velocidad del bus ser la de aquella transaccin ms lenta. Por ello, para asegurar un buen funcionamiento, hay que conectar al bus dispositivos ms rpidos que el ms lento que haya. Esta organizacin es rpida y barata, pero las lneas no pueden ser largas. Tpicamente son los buses que interconecta el procesador con la memoria principal. 2) Buses asncronos: Son autotemporizados, es decir, en cada transaccin el master y el slave se van avisando el uno al otro del comienzo y la finalizacin de la transaccin a travs de unas seales de control. De esta manera, se puede conectar cualquier tipo de dispositivo al bus independientemente del tiempo que tarde en llevar a cabo sus transacciones. 3) Buses semisncronos: Viene a ser como un bus sncrono, pero en el que los dispositivos lentos son capaces de implementar una seal wait que los dems interpretan como la espera de un nmero determinado de ciclos. Los buses de los PC actuales son semisncronos. 2.5.- Estandarizacin A lo largo del tiempo, cada fabricante disea sus dispositivos de entrada/salida segn las necesidades del mercado. Como el bus es el lugar donde todos estos dispositivos van a ir conectados, es importante que haya algn tipo de interfaz estndar entre ste y los dispositivos de entrada/salida que permita, tanto al diseador de sistemas como al diseador de dispositivos, trabajar independientemente en nuevos modelos con la seguridad de que funcionarn juntos. La estandarizacin de un bus en concreto puede ser debida al uso del mismo en muchas mquinas populares. Esto obliga a los fabricantes a adaptarse a este diseo para poder conectar sus dispositivos. Otras veces, un estndar aparece como un convenio entre los diseadores de sistemas y los diseadores de dispositivos de entrada/salida. Algunos de los buses estndares se muestran en la tabla de la figura 5. Los tres primeros buses fueron definidos como buses procesador-memoria principal, mientras que los dos ltimos fueron buses de entrada/salida. El ancho de banda de los buses procesador-memoria principal suponen que ste trabaja completamente cargado, que se transmiten palabras simples y bloques de longitud ilimitada, que se ignora la latencia de memoria y que el tiempo de acceso a la misma es de 150 ns. Los datos de los buses procesador-memoria principal estn extrados de un estudio realizado por Borril en 1986. El ancho de banda de los buses de entrada/salida estn dados suponiendo la mxima frecuencia de transmisin. Por ltimo, el estndar SCSI ofrece tanto entrada/salida asncrona (1.5 MB/s) como sncrona (5 MB/s). VME Bus Future Bus Multibus II IPI SCSI Anchura de bus 128 96 96 16 8 Direcciones/datos multiplexados No multiplexado Multiplexado Multiplexado N/A N/A Anchura de datos 16 a 32 bits 32 bits 32 bits 16 bits 8 bits Tamao de transferencia Simple o mltiple Simple o mltiple Simple o mltiple Simple o mltiple Simple o mltiple Nmero de amos del bus Mltiple Mltiple Mltiple Simple Mltiple Divisin de transacciones No Opcional Opcional Opcional Opcional Reloj Asncrono Asncrono Asncrono Asncrono Cualquiera Ancho de banda, palabra simple, 0 ns. Acceso a memoria 25 MB/s 37 MB/s 20 MB/s 25 MB/s 5 15 MB/s Ancho de banda, palabra simple, 150 ns. acceso a memoria 12`9 MB/s 155 MB/s 10 MB/s 25 MB/s 5 15 MB/s Ancho de banda, palabras mltiples, 0 ns. acceso a memoria 279 MB/s 952 MB/s 40 MB/s 25 MB/s 5 15 MB/s Ancho de banda, palabras mltiples, 150 ns. Acceso a memoria 136 MB/s 208 MB/s 133 MB/s 25 MB/s 5 15 MB/s Mximo nmero de dispositivos 21 20 21 8 7 Longitud mxima de bus 05 metros 05 metros 05 metros 50 metros 25 metros Estndar IEEE 1014 IEEE 896.1 ANSI/IEEE 1296 ANSI X3.129 ANSI X3.131 FIGURA 5 Informacin sobre cinco buses estndares. 3.- Interfaz entre la procesador y los dispositivos de entrada/salida En la mayora de los programas que se ejecutan en un sistema se producen operaciones de entrada/salida. Ya hemos visto que el procesador se comunica con los dispositivos a travs del sistema de buses, pero Cmo dialoga con ellos? Qu parte del trabajo de entrada/salida es responsabilidad del procesador y qu parte es de los dispositivos de entrada/salida? Respondiendo a la primera pregunta, podemos decir que se puede elegir entre dos alternativas para que el procesador direccione a un dispositivo de entrada/salida. La primera de ellas y la ms comn se conoce como entrada/salida mapeada en memoria. Consiste en reservar una parte del espacio de direcciones de memoria principal para asignrsela a los distintos dispositivos. De esta forma, las rdenes que se mandan hacia ellos son accesos a direcciones mapeadas en la memoria. En la otra alternativa, el procesador utiliza cdigos de operacin de entrada/salida especficos para transmitir las rdenes de entrada/salida. Tanto si se utiliza un esquema como otro, el procesador dialoga con los dispositivos mediante escrituras y lecturas en registros de control y estado que stos poseen para tal fin. Contestar a la segunda pregunta es ms complicado, ya que a lo largo del tiempo se han ido sucediendo varias tcnicas que delegan diferentes responsabilidades a las distintas partes del sistema. A medida que los sistemas han ido evolucionando, las tcnicas dotaban de ms capacidad de proceso a los componentes individuales, aliviando cada vez ms al procesador de tener que hacerse cargo de las operaciones de entrada/salida y mejorando el rendimiento. A continuacin y para clarificar este punto, describiremos las distintas tcnicas o esquemas que se han ido empleando, aunque haremos ms hincapi en las que se han desarrollado recientemente. 3.1.- Entrada/salida programada sin interrupciones En un principio, los sistemas eran tan simples que el procesador controlaba las operaciones de entrada/salida directamente. Es decir, se encargaba de especificar cada orden a los dispositivos de entrada/salida para realizar la operacin. Este tipo de control directo se sigue empleando en pequeos dispositivos controlados por microcontroladores. Cuando los sistemas se hicieron ms complejos, se aadi un mdulo o controlador de entrada/salida para cada tipo de dispositivo. Los controladores de entrada/salida poseen una serie de registros de estado, de control y de datos que permiten al procesador determinar cul es el estado de la operacin de entrada/salida y actuar en consecuencia. Los controladores se encargan de realizar las operaciones de entrada/salida relacionadas directamente con el dispositivo (por ejemplo, posicionar el brazo en el sector adecuado de un disco), liberando, as, al procesador de las operaciones ms cercanas al hardware. Cuando el procesador encuentra una instruccin de entrada/salida, enva al controlador adecuado una orden especfica. Cuando el controlador completa la accin requerida, cambia sus registros de estado para informar de que ya ha terminado. Sin embargo, no avisa al procesador de este cambio, sino que ste tiene que revisar peridicamente los registros de estado del controlador para determinar si la operacin de entrada/salida a concluido. Por otro lado, es importante destacar que con este esquema el procesador es el responsable de transferir los datos entre la memoria principal y los dispositivos. Para ello, su repertorio de instrucciones de entrada/salida debe abarcar los siguientes aspectos: 1) Control: Debe poseer instrucciones que se empleen para activar a un dispositivo de entrada/salida y especificarle qu operaciones debe realizar. 2) Comprobacin: Ha de ofrecer instrucciones que se empleen para realizar las comprobaciones necesarias de los bits de los registros de estado asociados a cada dispositivo. 3) Lectura y escritura: Debe disponer de instrucciones que se utilicen para realizar las transferencias de datos entre la memoria y los dispositivos. 3.2.- Entrada/salida programada con interrupciones El problema que presenta el esquema anterior es que pierde mucho tiempo de procesador. Mientras ste espera a que se completen las operaciones de entrada/salida, no realiza otra tarea, degradando, as, el rendimiento del sistema. La alternativa consiste en que el procesador enve la orden de entrada/salida al controlador del dispositivo en concreto y que ste se encargue de completarlas, mientras l realiza otras tareas. Cuando el dispositivo termina su trabajo, el controlador avisa al procesador para intercambiar los datos. Este esquema se hace imprescindible para los sistemas que soportan multiprogramacin, es decir, aquellos sistemas en los que se pueden estar ejecutando varios procesos a la vez. Mientras un proceso ha de esperar a que se terminen las operaciones de entrada/salida que haba solicitado, el sistema operativo puede suspenderlo, guardando su contexto (contador de programa, registros del procesador...) y ejecutar otro distinto para mantener ocupado al procesador. Para entender mejor este esquema supongamos que se quiere realizar una operacin de lectura en un disco. Desde el punto de vista del controlador, el procesador le enva una orden de lectura. El controlador se encarga, entonces, de leer los datos requeridos y de ubicarlos en sus registros de datos. Cuando ha terminado, avisa al procesador de que ya ha concluido la lectura y queda esperando a que ste se los solicite. Cuando el procesador lo requiera, le enviar una orden para que ponga los datos en el bus de datos y el controlador quedar listo para otra operacin de entrada/salida. Desde el punto de vista del procesador, ste manda una orden de lectura al controlador de un dispositivo en concreto. Tras mandar la orden, salva el contexto del proceso que estaba ejecutando y se dedica a ejecutar otro distinto. Cuando se recibe una interrupcin desde un controlador de entrada/salida, el procesador deja de ejecutar el proceso en curso (salvando su contexto) y atiende a la rutina de tratamiento de la interrupcin, leyendo los datos de los registros de datos del controlador y transfirindolos a memoria principal. Una vez atendida la interrupcin, se puede seguir ejecutando el proceso que requiri esa operacin de entrada/salida u otro proceso diferente. Por ltimo, es importante destacar que en un sistema suelen haber varios dispositivos de entrada/salida, cada uno de los cuales con posibilidad de interrumpir al procesador. Por tanto, ste debe ser capaz de distinguir cul de ellos fue el responsable de una interrupcin determinada. Existen distintas tcnicas para conseguir este objetivo. Por ejemplo, en algunos sistemas hay una lnea de interrupcin diferente y con una prioridad determinada para cada dispositivo, mientras que otros poseen una nica lnea de interrupcin, si bien poseen otras seales adicionales que permiten determinar cul fue el dispositivo responsable y con qu prioridad debe atenderse a su interrupcin. 3.3.- Acceso directo a memoria DMA A pesar de que la entrada/salida dirigida por interrupciones resuelve, en gran parte, el problema que supone tener desocupado al procesador mientras se espera a que terminen las operaciones de entrada/salida en los dispositivos, no libra al mismo del trabajo que supone transferir los datos entre la memoria principal y los controladores de los dispositivos. Adems, el hecho de que sea el procesador quien transfiera los datos hace que ste deba ejecutar una serie de instrucciones en cada transferencia, desperdicindose todava parte de su capacidad para ejecutar otras tareas no relacionadas con la entrada/salida. Este problema es mucho ms grave cuando se han de mover grandes volmenes de datos entre los dispositivos y la memoria, ya que la velocidad de transferencia se ve limitada por la capacidad que tiene el procesador de comprobar y dar servicio a un dispositivo. Un esquema que soluciona este problema es el acceso directo a memoria (DMA, Direct Memory Acces). Cuando el procesador quiere leer o escribir un bloque de datos, manda una orden al mdulo de DMA para que sea ste quien realice la transferencia. Esta orden especifica si se trata de una lectura o una escritura, la direccin del dispositivo de entrada/salida involucrado, la direccin inicial de memoria desde la que se va a realizar la lectura o la escritura y el nmero de palabras que se han de leer o escribir. Los datos son transferidos palabra por palabra directamente entre la memoria y el DMA sin tener que pasar por el procesador. Una vez que la operacin ha concluido, el DMA enva una interrupcin a ste para informarle de que ha terminado. De esta forma, el procesador slo se ve involucrado en la operacin de entrada/salida al principio y al final de la misma, dedicando el tiempo que dure la operacin en ejecutar otros procesos. El DMA se conecta al bus del sistema para poder transferir los datos entre los dispositivos de entrada/salida y la memoria principal. Por esta razn, debe compartirlo con el procesador, siendo capaz de robarle a ste ciclos de bus. El DMA obliga al procesador a que suspenda temporalmente lo que est haciendo justo antes de que ste precise el bus del sistema. La figura 7 muestra en qu momentos el DMA puede suspender al procesador durante el ciclo de una instruccin. Una vez que el procesador est suspendido, el DMA utiliza el ciclo de bus robado para transferir una palabra, devolviendo inmediatamente el control al procesador. Es importante sealar que el procesador no se ve interrumpido, ya que no debe guardar el contexto del proceso que est ejecutando, simplemente se ve inactivo durante el ciclo de bus que el DMA realiza la transferencia. Aunque la actividad del procesador se ralentiza, este esquema es mucho ms eficiente que todos los anteriores. Sin embargo, el rendimiento del DMA depende de su configuracin dentro del propio sistema. Existen distintas alternativas de diseo, el esquema de las cuales se puede apreciar en las figuras 8, 9 y 10. A continuacin describiremos en qu consisten bsicamente estas configuraciones: 1) DMA independiente de bus sencillo: El DMA se conecta al bus del sistema como un mdulo independiente, supliendo al procesador en las tareas de entrada/salida. El DMA acta como puente entre la memoria principal y los dispositivos de entrada/salida, de forma que tanto los datos que viajan entre el DMA y la memoria, como los que viajan entre el DMA y los dispositivos lo hacen a travs del bus del sistema. Este esquema es el ms barato, pero tambin el ms ineficiente, ya que cada palabra necesita dos ciclos de bus para poder ser transferida (como en la entrada/salida programada). Ciclo de Instruccin Ciclo de Procesador Ciclo del Procesador r Ciclo del Procesador r Ciclo del Procesador r Ciclo del Procesador r Ciclo del Procesador r Leer Instruccin. Decodificar Instruccin Leer Operando Ejecutar Instruccin. Guardar Resultado Interrupcin del proceso Puntos de ruptura por DMA Puntos de ruptura por Interrupcin FIGURA 7 Puntos de ruptura por DMA e interrupciones en un ciclo de instruccin. 2) Integracin DMA-Entrada/salida de bus sencillo: Este esquema establece un camino entre el DMA y los dispositivos de entrada/salida independiente del bus del sistema. La lgica del DMA puede estar integrada dentro de los propios mdulos de entrada/salida, o bien puede constituir un mdulo propio que interconecte varios dispositivos. De esta forma, cada palabra que sea transferida slo consumir un ciclo de bus de sistema. Procesador Mdulo DMA Entrada /Salida Memoria FIGURA 8 DMA independiente de bus sencillo Bus de sistema. Procesador Mdulo DMA Memoria Entrada /Salida Mdulo DMA Entrada /Salida Entrada /Salida FIGURA 9 Integracin DMA-Entrada/Salida de bus sencillo Bus de sistema 3) DMA con bus de entrada/salida: Al igual que en el caso anterior, se establece entre los dispositivos y el DMA un camino que no pasa por el bus del sistema. Para ello, se dota al DMA de su propio bus de entrada/salida, conectndo los dispositivos que sta controla al mismo. Esta configuracin permite mayor flexibilidad a la hora de incorporar nuevos dispositivos al sistema. Tanto en este caso como en el anterior, el bus del sistema slo se utiliza para transmitir los datos entre el DMA y la memoria principal y para intercambiar seales de control con el procesador. 3.4.- Canales y procesadores de entrada/salida Siguiendo con la tendencia de independizar al procesador de las operaciones de entrada/salida, se libera a ste de tener que ejecutar instrucciones relacionadas con las mismas. Es decir, las instrucciones de entrada/salida que pueda contener un programa son ejecutadas por un subsistema denominado canal de entrada/salida. Para iniciar una transferencia, el procesador simplemente especifica al canal en qu lugar de la memoria se encuentra el programa de entrada/salida. El programa contiene la informacin necesaria sobre cuales son los dispositivos involucrados en la transferencia, as como las zonas de memoria para el almacenamiento, la prioridad y las acciones a llevar a cabo bajo las posibles condiciones de error. Una vez que el canal ha terminado de dirigir toda la transferencia, informa al procesador del cumplimiento de la operacin. Procesador Mdulo DMA Memoria Entrada /Salida Entrada /Salida Entrada /Salida FIGURA 10 Bus de Entrada/Salida Bus de sistema Bus de entrada/salida Veamos ahora cmo es la arquitectura bsica de un canal. ste posee un procesador especializado en la ejecucin de instrucciones de entrada/salida, un canal de datos y direcciones con la memoria principal, una va de seales de control con el procesador y un bus independiente al que se conectan distintos dispositivos con sus controladores. Segn la forma en que el canal da servicio a los distintos dispositivos, podemos clasificarlo en distintas clases. 1) Canal selector: Un canal selector controla varios dispositivos de alta velocidad, dedicndose a la transferencia de uno cada vez. El procesador del canal opera con los controladores de los dispositivos conectados al bus del propio canal de entrada/salida. Ver figura 11. 2) Canal multiplexor: Un canal multiplexor puede manejar varios dispositivos a la vez. Si los dispositivos son de baja velocidad se utiliza un multiplexor de bytes, mientras que si su velocidad es elevada, se utiliza uno de bloques. Cada controlador de dispositivos se conecta al canal multiplexor por una va diferente. Un ejemplo ilustrativo se da en la figura 12. Canal Selector Canal de datos y direcciones con la memoria principal Va de Seales de control a la procesador Controlador de entrada/salida Controlador de entrada/salida FIGURA 11 Canal Selector A parte de estas arquitecturas, existe una variante de los canales de entrada/salida que independiza ms al procesador. Cuando un canal posee su propia memoria local y forma, de hecho, un sistema separado, podemos hablar de un procesador de entrada/salida. De esta manera, se puede dar servicio a un conjunto elevado de dispositivos con una participacin mnima del procesador. Este tipo de arquitectura tiene un uso muy extendido en el control de las comunicaciones con terminales interactivos. Canal Multiplexor Al procesador Controlador de entrada/salida A la memoria principal Controlador de entrada/salida Controlador de entrada/salida Controlador de entrada/salida FIGURA 12 Canal multiplexor 4.- Interfaz entre el sistema operativo y los dispositivos de entrada/salida Existen, bsicamente, dos grandes problemas que un sistema operativo debe solucionar para conseguir una transferencia correcta de datos entre la memoria principal y los dispositivos de entrada/salida. Uno de ellos se da cuando un sistema utiliza memoria cache. Esta memoria es mucho ms rpida y pequea que la memoria principal y contiene copias de los bloques de datos o instrucciones ms utilizados. El procesador accede directamente a la cache y no a memoria principal. Si el dato que buscaba el procesador no est ubicado en la cache, se dice que se ha producido un fallo de cache. Cuando ocurre esto, se sustituye un bloque de la misma por el bloque de memoria principal que contena el dato. Esta duplicidad de datos ocasionada por la cache puede dar lugar a problemas de datos obsoletos. Por ejemplo, si se producen actualizaciones en bloques de datos en la memoria cache y no en la principal y un dispositivo de entrada/salida lee parte de esos bloques de memoria principal, se producir una lectura errnea. El otro problema est relacionado con la memoria virtual en los sistemas multitarea que utilizan entrada/salida programada por interrupciones o DMA. En los sistemas multitarea con memoria virtual, el espacio de direcciones de los procesos y de la memoria principal se subdivide en fragmentos, de forma que el sistema operativo gestiona qu fragmentos de cada proceso se encuentran en cada uno de los fragmentos de la memoria principal. El sistema operativo suspende los procesos pendientes de la finalizacin de una operacin de entrada/salida, descargando sus fragmentos en el disco y cargando los fragmentos de otro proceso. Esta operacin se conoce como intercambio y es la base de la memoria virtual. Ms tarde, cuando la operacin de entrada/salida ha finalizado y el proceso es activado de nuevo, los fragmentos del mismo son reubicados en zonas de memoria principal que no tienen porque ser las que ocupaba inicialmente . Esto ocasiona la aparicin de errores de lectura y escritura por parte de los dispositivos de entrada/salida. A continuacin expondremos estos problemas ms detalladamente, as como las distintas soluciones que utilizan los sistemas operativos para solventarlos. 4.1.- Cmo solucionar el problema de los datos obsoletos Como hemos visto, existe duplicidad de los datos ubicados en la memoria cache, de forma que se pueden producir lecturas y escrituras errneas de los mismos por parte de el procesador y de los dispositivos de entrada/salida. Bsicamente, el problema de los datos obsoletos se subdivide en dos tipos. 1) Los dispositivos de entrada/salida leen datos obsoletos de memoria principal porque stos no estn actualizados. 2) El procesador lee datos incorrectos de la cache porque los dispositivos de entrada/salida han actualizado la memoria principal, pero no la cache. Una primera solucin que permite resolver estos dos problemas consiste en conectar el bus de entrada/salida a la cache. Tanto el procesador como los dispositivos de entrada/salida leen y escriben directamente en la cache, utilizando los datos correctos. Sin embargo, este enfoque provoca una perdida de rendimiento de la cache y el procesador por dos motivos. En primer lugar, debe existir un esquema de arbitraje para que tanto el procesador como el bus de entrada/salida puedan acceder a la cache. En segundo lugar, como todos los datos utilizados en las operaciones de entrada/salida han de pasar por la cache, sta contendr bloques de datos que realmente no son frecuentemente utilizados, aumentando la probabilidad de que se produzca un fallo de cache. Para poder estudiar mejor como solucionar los dos problema de datos obsoletos, trataremos a cada uno de ellos por separado. En primer lugar veamos como asegurar que los datos ledos por parte de los dispositivos de entrada/salida desde memoria principal sean los correctos. Una solucin es utilizar caches de escritura directa. Cuando se modifica un bloque en este tipo de caches, dicho bloque es tambin actualizado en memoria principal. De esta manera, cualquier actualizacin en la cache tambin se da en la memoria principal y los dispositivos de entrada/salida leern los datos correctos. Si no se utilizan caches de escritura directa, los bloques que el procesador actualiza en la cache no son actualizados en memoria principal hasta que son descargados como consecuencia de un fallo de cache. Para solucionar el problema el sistema operativo debe descargar los bloques involucrados en la operacin de entrada/salida desde la cache hacia la memoria principal. Cada bloque de la cache tiene asociada una etiqueta, cuyo valor depende de las direcciones de los datos que contenga. El sistema operativo comprueba secuencialmente estas etiquetas y descarga los bloques adecuados. Sin embargo, este esquema malgasta tiempo en hacer comprobaciones de direcciones, incluso, cuando los datos no estn en la cache. Por esta razn el hardware puede comprobar las etiquetas de la cache durante la operacin de salida e interactuar con la misma en lugar de con la memoria principal si los datos estn ubicados en la cache. Para solucionar el problema que surge cuando el procesador lee datos de la cache que no son actualizados tras una operacin de entrada en la memoria principal, el sistema operativo ha de garantizar que el rea de entrada de datos no se encuentra ubicada en la cache. Con este fin, el sistema operativo comprueba las etiquetas de la cache y elimina de ella los bloques que contienen las direcciones de entrada, descargndolos en la memoria principal. La perdida de tiempo que supone la comprobacin secuencial de las etiquetas lleva, de nuevo, a incorporar hardware extra que invalide los datos de entrada si las direcciones se encuentran en la cache. 4.2.- Buffering La reubicacin de los fragmentos en los que se subdivide el espacio de direcciones de los procesos provoca, como hemos mencionado, la aparicin de problemas durante las operaciones de entrada/salida. Para ver mejor cul es el problema, imaginemos un sistema que permita la ejecucin de varios procesos a la vez (sistema multitarea) y que use memoria virtual. Un proceso determinado se est ejecutando y requiere leer numerosos bloques de un disco. Los datos sern ledos en un fragmento del espacio de direcciones del proceso ubicado entre las direcciones 1000 a 1256 de la memoria principal. Para que el procesador no permanezca inactivo, esperando a que finalice la operacin de entrada/salida, suspende al proceso y elimina de la memoria principal sus fragmentos, incluido el que ocupaba las direcciones comprendidas entre la 1000 y la 1256. Cuando se escriban los datos solicitados en esas direcciones, se producir un error y se perdern. Una solucin sera suspender la operacin de lectura hasta que el proceso no vuelva a ser activado y reubicado, pero entonces se producira un interbloqueo entre la operacin de entrada/salida y el proceso que fue suspendido hasta que se finalizase la transferencia solicitada. La situacin es anloga en el caso de operaciones de escritura desde la memoria principal hacia un dispositivo de entrada/salida. Una solucin consiste en realizar las transferencias de entrada por adelantado a las peticiones y hacer las transferencias de salida un tiempo despus de que se hallan solicitado. Esta tcnica, que se basa en el almacenamiento intermedio de los datos que se van a transferir, se conoce con el nombre de buffering. Para entenderla, debemos recordar que el sistema operativo ocupa una parte protegida de la memoria principal a la que ningn otro proceso tiene acceso. Una parte de la memoria reservada para el sistema operativo se utilizar para aplicar esta tcnica. Cuando un proceso realiza una peticin de entrada/salida, el sistema operativo le asigna un buffer situado en una zona de memoria principal reservada al sistema operativo. En el caso de una lectura, los datos son ledos desde el dispositivo de entrada/salida hacia el buffer de entrada. El proceso lee los datos de ste y los procesa, mientras nuevos datos procedentes del dispositivo son ledos de nuevo dentro del buffer. Como la lectura se realiza por adelantado, suponiendo que el bloque ledo se va a necesitar, se efectuar una transferencia innecesaria al final de la secuencia de procesamiento. Por su parte, el sistema operativo podr suspender al proceso y reubicarlo en otro sitio distinto, debido a que la operacin se realiza sobre el buffer, solventando, de esta manera, el problema de lecturas hacia regiones incorrectas de memoria principal. El caso de la escritura es similar al de la lectura. El proceso realiza la operacin sobre el buffer y mientras los datos son transferidos desde ste al dispositivo, el proceso puede ser suspendido o realizar otras tareas. Para reducir el tiempo que un proceso debe esperar hasta que la operacin de entrada/salida que haba solicitado finalice, se pueden asignar dos buffers a cada una de ellas. A esta variante se la conoce con el nombre de buffer doble. Mientras el proceso transfiere datos hacia (o desde) un buffer, el sistema vaca (o rellena) el otro. Pero si el proceso realiza rpidas rfagas de entrada/salida, el buffer doble es insuficiente para obtener un buen rendimiento. En este caso, se puede emplear otra forma de buffering conocida como buffer circular. Para ello, se utilizan ms de dos buffers y el proceso los va utilizando a medida que puede disponer de ellos. Generalmente, el mtodo de buffering supone para el sistema un mayor rendimiento que el obtenido sin la utilizacin de almacenamiento intermedio, an cuando se realicen lecturas innecesarias desde los dispositivos de entrada/salida. Esta tcnica soluciona no slo los problemas derivados de la reubicacin, sino tambin los problemas de espera en horas punta de entrada/salida. Se consigue una mejora sustancial en la eficiencia del sistema operativo y en el rendimiento de los procesos individuales, aunque no existe ningn tamao de los buffers que elimine la espera en las operaciones de entrada/salida. Sin embargo, implica un aumento de la complejidad del sistema operativo. Por un lado, ste debe guardar constancia de las asignaciones de los buffers del sistema para cada proceso de usuario. Por otro lado, la lgica de intercambio tambin se ve afectada. Supongamos, por ejemplo, que un proceso requiere realizar una escritura sobre el mismo disco que se utiliza para guardar los fragmentos de su espacio de direcciones. El sistema operativo encolar la peticin de esta escritura y tambin encolar las escrituras necesarias para descargar al proceso (suspendido) al disco. Sin embargo, como el proceso seguramente debe ser activado tras completarse su peticin de escritura, puede no ser ya apropiada la expulsin del mismo. 5.- Conclusin Los dispositivos de entrada/salida son la interfaz a travs de la cual los seres humanos se comunican con el sistema. Pero esta interfaz es slo una interfaz externa. Dentro del propio sistema o sistema informtico, existe una interfaz interna que permite a los dispositivos de entrada/salida comunicarse entre s y con el resto del sistema. La comunicacin entre los distintos dispositivos del sistema se realiza a travs de transacciones, es decir, lecturas y escrituras de datos (ya sean de control o no). stos se transfieren por un medio electrnico compartido denominado bus. Debido a la gran variedad de dispositivos que se han de interconectar, existen muchos tipos de buses. Las distintas clases de buses se diferencian tanto en su implementacin como en su control. La definicin de diversos estndares permite el diseo independiente de buses y dispositivos. La creciente complejidad de los sistemas ha ocasionado una evolucin de los buses y dispositivos de entrada/salida hacia diseos ms sofisticados. Este hecho es muy importante, ya que de nada sirve tener un sistema de altas prestaciones si no se posee un bus y unos dispositivos de entrada/salida que permitan hacer un uso eficiente del mismo. La evolucin de los buses y de los dispositivos de entrada/salida est orientada a independizar al propio sistema de los trabajos propios de la interfaz externa. Aparecen procesadores y buses especializados en las operaciones de entrada/salida que liberan al procesador de la carga que supone gestionar esas operaciones. Por su parte, los sistemas operativos tambin se hacen ms complejos a medida que las prestaciones del sistema se incrementan. Se disean nuevas tcnicas de gestin de las operaciones de la entrada/salida para hacer frente a los problemas que surgen al interaccionar los dispositivos de entrada/salida con la memoria principal del sistema.