Los Sistemas de BUS
Los buses son el mecanismo más común para la comunicación entre los dispositivos del computador. Físicamente son conductores por donde viajan señales eléctricas. Algunos ejemplos de buses se muestran en la figura 4.1.
Figura 4.1. Buses
Los buses son casi todos esos caminos que se ven en las tarjetas madre de las imágenes anteriores.
El
bus es un dispositivo en común entre dos o más dispositivos, si dos
dispositivos transmiten al mismo tiempo señales las señales pueden
distorsionarse y consecuentemente perder información. Por dicho motivo
existe un arbitraje para decidir quién hace uso del bus.
Por
cada línea se pueden trasmitir señales que representan unos y ceros, en
secuencia, de a una señal por unidad de tiempo. Si se desea por ejemplo
transmitir 1 byte, se deberán mandar 8 señales, una detrás de otra, en
consecuencia se tardaría 8 unidades de tiempo. Para poder transmitir 1
byte en 1 sola unidad de tiempo tendríamos que usar 8 líneas al mismo
tiempo.
Existen varios tipos de buses que realizan la tarea de interconexión entre las distintas partes del computador, al bus que comunica al procesador, memoria y E/S se lo denomina bus del sistema.
Existen varios tipos de buses que realizan la tarea de interconexión entre las distintas partes del computador, al bus que comunica al procesador, memoria y E/S se lo denomina bus del sistema.
La
cantidad de líneas del bus a medida que pasa el tiempo se va
incrementando como uno de los métodos para incrementar la velocidad de
transferencia de señales en el computador, y así incrementar el
desempeño. Cada línea tiene un uso específico, y hay una gran
diversidad de implementaciones, pero en general podemos distinguir 3
grandes grupos de buses:
a) Bus de datos: Por
estas líneas se transfieren los datos, pueden ser de 8, 16, 32 o más
líneas, lo cual nos indica cuantos datos podemos transferir al mismo
tiempo, y es muy influyente en el rendimiento del sistema. Por ejemplo
si el bus es de 8 líneas y las instrucciones son de 16 bits, el sistema
va a tener que acceder 2 veces a memoria para poder leer la instrucción,
el doble de tiempo en leer instrucciones comparando con un bus de datos
de 16 líneas.
b) Bus de direcciones:
Por estas líneas se envía la dirección a la cual se requiere hacer
referencia para una lectura o escritura, si el bus es de 8 líneas por
ejemplo, las combinaciones posibles para identificar una dirección irían
del 00000000 al 11111111, son 256 combinaciones posibles, en
consecuencia el ancho del bus de datos nos indica la cantidad de
direcciones de memoria a la que podemos hacer referencia. Dentro de las
direcciones posibles, en general el sistema no usa todas para hacer
referencia a la memoria principal, una parte las usa para hacer
referencia a los puertos de E/S.
c) Bus de control:
Estas líneas son utilizadas para controlar el uso del bus de control y
del bus de datos. Se transmiten órdenes y señales de temporización. Las
órdenes son muy diversas, las más comunes son:
· Escritura en memoria.
· Lectura de memoria.
· Escritura de E/S.
· Lectura de E/S.
· Transferencia reconocida.
· Petición del bus.
· Sesión del bus.
· Petición de interrupción.
· Interrupción reconocida.
· Señal de reloj.
· Inicio..
Las
señales de temporización indican la validez de los datos que están en
el bus en un momento dado. En la siguiente figura 4.1 mostramos el
Esquema de Interconexión de los buses en el sistema.
Figura 4.2 Interconexión de los Buses
Todo
elemento que esté conectado al bus tiene que saber reconocer si la
dirección que está en el bus de datos le corresponde, tiene que
reconocer algunas órdenes transmitidas por el bus de control, y puede
emitir algún tipo de señal por el bus de control (señal de interrupción,
señal de reconocimiento de alguna petición, etc.).
En
general, cuanto más dispositivos conectamos al bus, disminuye el
rendimiento del sistema; las causantes de esto son varias, pero las más
importantes son el tiempo de sincronización que se necesita para
coordinar el uso del bus entre todos los dispositivos, y que el bus
tiene una capacidad máxima, la cual puede llegar a convertirse en un
cuello de botella del sistema. Una de las formas de tratar este
problema es implementando jerarquía de buses.
4.1. Jerarquía de buses:
Para
mejorar el rendimiento del bus, las jerarquías de buses fueron
implementadas cada vez más, una primera aproximación a una jerarquía de
bus básica seria como la que se muestra en la figura 4.2:
Figura 4.2. Esquema de la jerarquía de buses.
Primero
tenemos un bus local, de alta velocidad que conecta el procesador a la
cache, el controlador de la cache también puede acceder al bus del
sistema, con esta implementación, la mayor parte de los datos a los que
va a acceder el procesador, que están en la cache, serán entregados a
una alta velocidad, otro punto a destacar de esta parte es que los
accesos a memoria por parte de la cache no van a interrumpir el flujo de
datos entre procesador y cache. También se ve la posibilidad de
conectar un dispositivo de entrada salida al bus local. Luego tenemos
el bus del sistema, al cual está conectada la memoria y por debajo el
bus de expansión, al cual se pueden conectar una amplia diversidad de
dispositivos, entre el bus del sistema y el bus de expansión se
encuentra una interface, que entre las principales tareas está la de
adaptar las velocidades de transmisión, por ejemplo para un dispositivo
muy lento conectado al bus de expansión la interface podría acumular una
cierta cantidad de datos y luego transmitirla a través del bus del
sistema.
El
hecho de que cada vez mas salgan al mercado dispositivos que requieren
más velocidad de transmisión en los buses, hizo que los fabricantes
implementaran los buses de alta velocidad, el cual está muy
estrechamente ligado al bus local, solo hay un adaptador que los une.
Debajo de este bus tenemos el bus de expansión, más lento conectado
mediante otro adaptador. La figura 4.3 lo muestra detalladamente:
Figura 4.3 Sistema de Bus y Periféricos que se interconectan a él.
Existen varios parámetros y elementos en los buses con los cuales podemos clasificarlos.
4.1.1. Tipos de buses
Una clasificación que podemos hacer es según la funcionalidad de este, los podríamos dividir en dedicados o multiplexados.
Un
ejemplo común de dedicados serian el bus de datos y el bus de
direcciones, cada uno se utiliza solo para una función específica. Esta
situación de bus de datos y de direcciones dedicados es lo más común,
pero podría llegar a implementarse con un solo bus multiplexado el
tiempo. Esto funcionaria a grandes rasgos de la siguiente forma:
Al
comienzo de la transferencia se sitúa en el bus la dirección de donde
se quiere leer o a donde se desea escribir, luego se emite por el bus de
datos una señal indicando que en el bus se encuentra una dirección
valida.
A
partir de ese momento se dispone de una unidad de tiempo para que los
dispositivos identifiquen si es su dirección, luego de esto se pone en
el mismo bus los datos y se realiza la transferencia en el sentido que
lo indique una orden emitida por el bus de control. La Ventaja de este
método es la reducción de la cantidad de líneas, lo cual ahorra espacio y
costos, la desventaja son que para poder implementar la forma de operar
la circuitería en cada modulo tiene que ser más compleja, y que el
rendimiento del sistema será menor por no poder transmitir los datos
simultáneamente, en paralelo (datos y dirección).
Otro
tipo de clarificación podría ser según su dedicación física: Podríamos
poner como ejemplo el bus de E/S, el cual se encarga de conectar solo
los dispositivos de E/S, este bus se conecta al bus principal mediante
algún adaptador, la ventaja está en que al ser dedicado solo a E/S, el
rendimiento de este va a ser mejor, ya que solo van a operar con él los
módulos de E/S, y no va a haber tanta competencia por el bus.
4.2. Método de arbitraje.
Por
la razón de que en un momento dado solo puede usar el bus un solo
dispositivo, debe existir un método para decidir quién hace uso de él.
Todos los métodos que existen en general pueden ser clasificados en 2
grandes grupos:
· Arbitraje centralizado:
Una parte del hardware del sistema denominada controlador del bus se
encarga de decidir el uso del bus en cada momento, este dispositivo
puede ser un modulo separado o puede estar incorporado al procesador.
· Arbitraje distribuido:
En este esquema no existe un controlador centralizado, en su lugar,
cada dispositivo que hace uso del bus tiene que tener incorporada la
lógica necesaria para poder interactuar con los demás dispositivos y
decidir quién hace uso del bus.
En
cualquiera de los dos casos lo que se busca es que se decida quién va a
tener la posesión del bus en un momento dado, procesador, modulo de E/S
o memoria, al cual se lo denomina maestro del bus, el maestro del bus
establecerá una comunicación con otro dispositivo (lectura o escritura)
al cual se lo denominara esclavo.
4.3. Temporización:
La
temporización clasifica al método utilizado para coordinar los eventos
dentro del bus. Según la temporización usada podemos clasificar los
buses en 2 grupos.
Temporización síncrona: Todos
los eventos del bus se rigen a través del reloj del computador. Una de
las líneas del bus transmite continuamente una señal de reloj,
simplemente una secuencia de unos y ceros, la cual puede ser leída por
todos los dispositivos conectados al bus. Al intervalo transcurrido en
la emisión de un uno y un cero se lo llama ciclo de reloj, todos los
eventos ocurridos dentro del bus comienzan el principio del ciclo y
puede durar uno más . En este método de temporización todos van al
ritmo del reloj como mostramos en la figura 4.4.
Figura 4.4 Temporización Síncrona
En
el diagrama anterior podemos apreciar como seria en forma simplificada
una lectura de datos a través del bus. Tener en cuenta que hay
muchísimas más líneas que no se figuran en el gráfico, por ejemplo la
línea del reloj, que sería algo más constante como la figura 4.5.
Figura 4.5. Señal de Reloj
Las
líneas solo pueden tener uno de dos estados, uno o cero. La velocidad
en el ritmo que se alterna de un uno a un cero en la línea del reloj nos
da la velocidad del bus, y como todas las operaciones se van a realizar
al ritmo del reloj, al aumentar la velocidad del ciclo vamos a aumentar
la velocidad del sistema.
Con
referencia al gráfico de un ciclo de lectura de datos, el maestro (el
que tiene permiso para el uso del bus) pone en el bus de direcciones la
dirección de la cual desea leer su contenido, luego de haber puesto la
dirección en las líneas correspondientes, envía por una línea del bus de
control una señal indicando que desea hacer una lectura, el dispositivo
correspondiente a esa dirección reconoce la dirección, y pone en el bus
de datos la información solicitada, tras lo cual, manda otra señal por
una línea del bus de control indicando que se le ha reconocido su
petición (que los datos situados en el bus de datos son validos, son los
datos solicitados)
Todo
con este método de temporización empieza o finaliza rigiéndose de las
señales del reloj, en general la mayoría de los eventos tiene un
duración de un ciclo.
Temporización asincrónica:
Acá
los eventos no se rigen por la línea del reloj, en general todo evento
es disparado por otro evento anterior. Asi como mostramos en la figura
4.6.
Figura 4.6 Temporización Asíncrona.
El
procesador pone en el bus de direcciones la dirección a ser leída y en
el bus de control por la línea correspondiente señal de lectura, luego
de un breve tiempo para que las señales eléctricas se estabilicen, se
manda señal por la línea MSYN (sincronización del maestro) indicando que
hay señales validas en el bus de dirección y de control, el modulo
correspondiente reconocerá su dirección, pone el dato solicitado en el
bus de datos y emite una señal SSYN(sincronización del esclavo) por el
bus de control indicando en las señales del bus de datos que la
información es válida.
La
temporización síncrona es más fácil de implementar y comprobar, pero es
menos flexible que la síncrona. Por ejemplo, en el caso de que hubiesen
varios dispositivos conectados al bus, de distintas velocidades, todos
tienen que funcionar a la velocidad del reloj, si hay uno más rápido,
este tiene que bajar su velocidad: En cambio con el asíncrono, cada uno
funcionaria a su velocidad, en el mismo bus se trabajaría a distintas
velocidades, cada transferencia se haría con la velocidad óptima de sus
dos partes (maestro-esclavo).
Anchura del bus:
La
anchura del bus es simplemente la cantidad de líneas que posee, y está
directamente relacionado con el rendimiento del sistema, cuanto más
ancho el bus de direcciones, mayor va a ser la cantidad de direcciones
posibles utilizadas para direccionar memoria y dispositivos de E/S, y
cuanto más ancho el bus de datos, mayor será la cantidad de bits que se
va a poder transmitir en paralelo.
4.4. Tipo de transferencia de datos:
Todos
los buses permiten la transferencia de datos, ya sea para escritura
como para lectura. La transferencia de dichos datos se muestra en la
figura 4.7.
Figura 4.7. Transferencia de Datos
En
el gráfico tenemos ejemplificado una escritura y una lectura, en este
caso el bus esta multiplexado en el tiempo, primero se utiliza para
transmitir la dirección y luego los datos.
Para
optimizar el rendimiento existen algunas operaciones combinadas en las
cuales se pasa la dirección una sola vez, por ejemplo
"lectura-modificación-escritura", seria la lectura del dato, se le
aplica alguna modificación y luego se escribe nuevamente. Todo esto es
una sola operación, nadie puede acceder al bus en el medio de la
operación, se utiliza para proteger los recursos de memoria compartida
en sistemas con multiprogramación para mantener la integridad de los
datos. Otra instrucción es "lectura después de escritura" que serviría
para comprobar el resultado.
Otra
operación muy común es la transferencia por bloque, se pasa al
principio de la operación la dirección inicial y luego se realiza
lectura o escritura a las siguientes direcciones, la cantidad de
direcciones siguientes también es un parámetro que hay que pasar. Dichas
operaciones se muestran en la figura 4.8.
Figura 4.8. Bloque de Transferencia de Datos











