Actualizado a: 19 de enero de 2024
El bus es uno de los elementos más despreciados en muchos casos, pero es imprescindible, puesto que sin él los demás elementos como la CPU, GPU, RAM, E/S, etc., no podrían funcionar como lo hacen, ya que no habría manera de comunicarlos entre sí. Por esto, voy a dedicar este artículo a tratar los temas relacionados con el bus para que comprendas qué es, sus tipos, funcionamiento, etc.
¿Qué es un bus?
Como bien sabes, la comunicación es imprescindible para los seres vivos, pero también para los sistemas informáticos. Por eso son tan necesarios elementos como el bus que enlaza varios dispositivos, ya sea en un mismo equipo o en equipos distantes.
Para que las comunicaciones sean posibles, se necesita un medio físico por el cual viajen las señales eléctricas u ópticas (se puede entender también las señales electromagnéticas que viajan por el aire como un «bus», o incluso podemos tener buses implementados por software, como muchos protocolos existentes). Ese medio es el bus al que nos referimos. De esa forma, se permite que la información viaje de un punto a otro.
Los primeros buses que aparecieron para equipos informáticos eran de tipo paralelo, dando lugar después a los de serie.
La capacidad de transmisión de información de un bus viene dada por la frecuencia a la que transmiten y el ancho de datos (cantidad de bits que transmiten de una sola vez). Esto es lo que nos da el ancho de banda. Es decir, lo que nos marcará el rendimiento. Por ejemplo, si imaginas una autovía con vehículos circulando por ella, se puede mejorar el tráfico de dos formas posibles. Una de ellas sería permitir más carriles para que más cantidad de vehículos puedan circular en paralelo. Otra manera sería aumentando el límite de velocidad para que los vehículos circulen más rápido.
Hay que decir también que mientras más alta sea la frecuencia de un bus, por lo general, va a tener un ancho de datos más bajo. Y esto se debe a que de lo contrario se produciría un fenómeno denominado crosstalk o de interferencia entre las señales, generando errores. Además, mientras mayor es la frecuencia, más difícil será la sincronización.
También es importante señalar que generalmente, en un ordenador, el sistema de bus está jerarquizado, con distintos buses y velocidades que se adecuarán mediante divisores o multiplicadores de frecuencia, como si fuesen carriles de aceleración y desaceleración de una autovía para incorporarse de un tipo de vía a otra. Por ejemplo, mientras una CPU trabaja a una velocidad de 3000 Mhz, el bus que comunica con la memoria puede hacerlo a 1333 Mhz, para que este sistema funcione, hay que adecuar las velocidades y evitar «colisiones».
Siguiendo con el símil entre una autovía y un bus, cuando la autovía está congestionada de tráfico se generan atascos (cuello de botella). Esto se puede evitar mediante la frecuencia, el ancho de datos para alterar el ancho de banda, o también se pueden agregar más líneas de comunicación para cada sentido. Además, se deberá emplear un sistema de señalización como los semáforos, algo que también está presente en los buses, que disponen de señales que arbitran las transmisiones cuando diferentes dispositivos están compartiendo un mismo bus.
Las velocidades de un bus se suelen medir en múltiplos del Byte por segundo (KB/s, MB/s, GB/s,…), o también en múltiplos de Bits por segundo o baudios (Kbps, Mbps, Gbps,…).
Ahora ya sabes qué es un bus y para qué sirve. Vamos a seguir profundizando más en el tema…
Medidas
La velocidad o rendimiento de un bus se puede medir de varias maneras, y la elección de la medida depende en gran medida de la arquitectura y especificaciones del sistema en el que se encuentra el bus. A continuación, se presentan algunas de las medidas más comunes para evaluar la velocidad de un bus de datos:
- Ancho de banda del bus: el ancho de banda se refiere a la cantidad de datos que pueden transmitirse a través del bus en un período de tiempo determinado. Como ya he mencionado anteriormente, se puede medir con varias unidades o múltiplos de éstas. La fórmula para calcular el ancho de banda del bus es:
Ancho de banda = Frecuencia del bus x Ancho de datos
donde la frecuencia del bus es la velocidad a la que el bus transmite información, medida en Hz, y el ancho de datos se refiere al número de bits que pueden ser transmitidos simultáneamente por el bus.
- Latencia del bus: se refiere al tiempo que tarda un dato en viajar a través del bus. Se mide en unidades de tiempo, como segundos, milisegundos, microsegundos o nanosegundos. La fórmula para calcular la latencia del bus es:
Latencia = 1 / Frecuencia del bus
donde la frecuencia del bus es la velocidad a la que el bus transmite información, medida en Hz.
- Throughput del bus: se refiere a la cantidad de datos que pueden ser transmitidos a través del bus en un período de tiempo determinado, después de tener en cuenta la latencia del bus. Se mide en unidades de datos por segundo, como Bps o megabytes por segundo (MBps). Esto puede ser muy confuso y parece igual que el ancho de banda, pero mientras el ancho de banda está más orientado a la capacidad del bus, el throughput se refiere más a cuánta cantidad de datos se puede transmitir en un tiempo determinado, considerando la latencia o retrasos. La fórmula para calcular el throughput del bus es:
Throughput = Ancho de banda / (Latencia + Tiempo de transmisión)
donde el tiempo de transmisión se refiere al tiempo que tarda un dato en ser transmitido a través del bus.
Es importante tener en cuenta que la velocidad de un bus de datos no es el único factor que influye en el rendimiento general del sistema. También influye la velocidad de los elementos conectados al bus, como puede ser los chips de memoria, la CPU, etc.
Tipos de bus
Los buses se pueden clasificar según las estructuras, además del uso, los protocolos, o tecnologías empleadas. En este caso, tenemos que destacar varios tipos claves para entender mejor el funcionamiento de estos sistemas:
Según el uso
Bus dedicado
Se llama bus dedicado a aquel que separa cada uno de los elementos que componen un sistema basado en microprocesador, dedicando una línea o un conjunto de líneas de comunicación a cada elemento. Este sistema permite generar varios ciclos de bus simultáneamente. Sin embargo, es más complejo que otros sistemas, al necesitar muchas líneas. Por ejemplo, un sistema con CPU de 8-bit podría necesitar 160 líneas en el bus.
El elevado número de líneas, como su propio nombre indica, se debe a que habrá unas dedicadas a direcciones de memoria, otras a instrucciones de memoria, otra para datos, otras para el control del sistema de E/S, para los datos de E/S, etc. Por este motivo, no es una buena solución para sistemas modulares actuales. Solo se usaron en algunos casos donde el precio no era un problema y se necesitaba mayor rendimiento.
Bus compartido
También existe el caso contrario, que se denomina bus compartido. En este caso evitamos los problemas de complejidad por el elevado número de líneas y, como su nombre indica, puede ser compartido para dispositivos. Tendrá solo líneas de bus separadas para el control, los datos y las direcciones, y se pueden multiplexar.
Por otro lado, otra gran ventaja de este bus es que unifica el espacio de memoria y de programa, por lo que la CPU podrá trabajar de forma más simple sin tener que saber si una dirección se refiere a memoria de instrucciones, o de datos. Un ejemplo de este tipo de bus es el bus del sistema, o el FSB que han venido usando muchos equipos, o las implementaciones más nuevas de las que ya te hablamos.
También puede interesante conocer qué es el FSB o bus del sistema.
Sin embargo, en este tipo de bus no se podrán hacer varios ciclos al mismo tiempo como en el caso anterior, y necesitarán más líneas de control para controlar los tiempos de transferencia y gestionar los tornos para los diferentes dispositivos compartidos.
Según las direcciones
Unidireccional o simplex
También tenemos lo que se denomina bus simplex o bus unidireccional, es decir, aquel que solo permite transmisión en un solo sentido o dirección. Por ejemplo, se puede emplear como bus de direcciones en un sistema de CPU simple, ya que solo saldrán direcciones hacia la memoria. Otro caso de uso podría ser para algunas señales de control, que solo deben viajar en un sentido.
Bidireccional o half-duplex
Seguramente que has escuchado en multitud de ocasiones el término half-duplex o semi-duplex para un bus. Pues bien, en este caso se trata de un bus que permite la transmisión de datos en uno u otro sentido, pero no en los dos a la vez. Por ejemplo, puede haber un bus entre la CPU y la memoria RAM para poder acceder a datos, ya sea para leerlos o para escribirlos, lo que necesita transferencias en ambas direcciones.
Para que este sistema funcione, se necesitarán algunas señales de control adicionales y una señal que indique el sentido de la transmisión a modo de semáforo para controlar el tráfico o como sistema de arbitraje. Además, solo podrá realizar un ciclo de lectura o escritura a la vez. Una vez finalizada la transferencia, el bus estará libre para poder realizar otra.
Como ventaja tiene que es simple de implementar físicamente, y su coste es bajo, aunque su rendimiento no es aceptable para sistemas de alto rendimiento.
Full-duplex
Existen otros buses más avanzados y de mayor rendimiento que los anteriores, y son los full-duples o duplex completo. Es decir, pueden transmitir en ambos sentidos o direcciones de forma simultánea.
Muchos sistemas basados en microprocesadores suelen implementar este tipo de buses para mejorar el rendimiento y evitar cuellos de botella. Para que estas transmisiones simultáneas se puedan dar, se necesitan varias vías separadas, cada una de las cuales transmitirá en una dirección a la vez.
Según la forma de compartirse el bus
Bus directo
Se denomina bus directo a aquel que permite transmitir un tipo de información, como es el bus de datos, el bus de direcciones o el bus de control, que serían ejemplos de este tipo. Sin embargo, no podrían transferir otro tipo de información diferente, solo están creados para una cosa específica, lo que los simplifica mucho.
Multiplexado
Se trata del caso contrario al anterior. Un bus multiplexado permite transmitir varios tipos de información o desde varias fuentes hasta varios destinos. Tan solo tendrá unas líneas de control del tipo de datos. Por ejemplo, algunos sistemas basados en CPU tienen un bus multiplexado de forma temporal para enviar una dirección a la memoria a la que acceder y luego esperar a que se devuelva el dato almacenado en dicha dirección por ese mismo bus.
Las formas de multiplexar (DMA o Division Multiple Access) un bus pueden ser varias, como los FDMA multiplexados en frecuencia, los TDMA en tiempo, los CDMA en código, etc.
Según la forma de transmitir la información
Paralelo
Un bus paralelo es aquel que permite transmitir todos los bits de forma simultánea. Para ello, tendrá que tener varias líneas de transmisión. Por ejemplo, si se quiere crear un bus paralelo para transmitir datos de 8 bits, se necesitarían 8 líneas, cada una responsable de transportar un bit. Algunos ejemplos de este bus pueden ser el puerto LPT para antiguas impresoras, el IEEE 1284, etc.
Por supuesto, puede haber buses que pertenezcan a varias categorías a la vez. Por ejemplo, puede haber un bus paralelo que sea bidireccional, o un bus paralelo que sea unidireccional, o tal vez que sea paralelo y directo, o paralelo y multiplexado, etc.
Serie
El bus serie es aquel que transmite la información bit a bit. Por tanto, solo se necesita una sola línea de datos. Actualmente, existen muchos ejemplos de este tipo de buses, como puede ser el empleado para los USB (Universal Serial Bus), ISP, I2C, etc.
Por tanto, para conseguir un gran ancho de banda en este caso, se necesita aumentar la frecuencia de reloj. De esta forma, se podrán enviar muchos bits en cada segundo gracias a los numerosos ciclos de reloj que se producen. Por ejemplo, imagina que tenemos una frecuencia de 1 Hz, y queremos transmitir un dato de 8 bits. En este caso, necesitamos 8 ciclos, uno por cada bit, lo que significa que tardará 8 segundos. Si ampliamos la frecuencia a 2 Hz tardaría 4 segundos, y si subimos la frecuencia a 1 Mhz tan solo tomaría 1 ms.
Según el reloj
Bus asíncrono
Un bus asíncrono es aquel que no usa ningún tipo de temporización o reloj. Esto puede ser interesante para buses que emitan señales solo cada cierto tiempo o para controlar ciertos aspectos. A pesar de lo que pueda parecer, pueden ser algo más complejos, ya que tendrán que tener líneas para señales adicionales para determinar cuándo el dato está siendo enviado, cuando termina y se puede enviar otro, etc.
Bus síncrono
La inmensa mayoría de los buses que se usan actualmente son síncronos, es decir, están temporizados o controlados por una señal de reloj. De esta forma, según el flanco de subida o bajada de la señal de reloj, se podrán realizar las transferencias sin necesidad de esas líneas adicionales de los asíncronos.
No obstante, no todo son ventajas, ya que también pueden ser menos flexibles que los anteriores…
Con o sin paridad
Sin paridad
En un bus sin paridad, cuando se termina de realizar la transferencia de la información, no se comprobará si el dato que ha llegado al destino es igual al del origen, es decir, si no se ha producido ningún error durante la transferencia. Esto hace que sean buses más baratos y sencillos de implementar, pero menos fiables en cuanto a la integridad de los datos.
Con paridad
El bus que comprueba si el dato que ha llegado al origen es correcto puede emplear varios métodos. No solo un bit de paridad, es decir, usa una línea adicional para indicar si el número binario del origen era un valor par o impar. De esta forma, si no se corresponde la paridad en el destino, se sabrá que se ha producido un error en alguno de los bits 0 o 1 que ha cambiado de valor, y se puede volver a realizar la transferencia para no corromper los datos y generar errores mayores.
Actualmente, existen otras muchas formas de comprobar la integridad de los datos transmitidos, y no solo un simple bit de paridad. Por ejemplo, pueden emplear algoritmos más complejos para comprobar si existen errores en las transferencias, e incluso redundancia en algunos casos…
Fisionomía de un bus
Para finalizar, vamos a sumergirnos un poco más en la fisionomía de un bus. Y es que para que cumplas sus funciones, tanto los dispositivos fuente como los dispositivos destino, tienen que adaptarse al propio bus que los va a interconectar.
Para que esto sea posible, se necesitan unos transmisores, receptores y transceptores. Por supuesto, también se necesitará un protocolo de intercambio o handshaking (apretón de manos) para validar las comunicaciones.
Cuando un bus es compartido por varias unidades, éstas deberán tener unos drivers a sus salidas para evitar que la actividad de otros dispositivos las afecten a ellas, creyendo que son datos válidos que llegan a través del bus, cuando realmente son datos que están siendo transmitidos por otras unidades y con otro destino diferente. Además, deben garantizar la compatibilidad eléctrica y ser capaces de conectar y conectar la salida cuando se ordene.
Una forma de implementar un transmisor es mediante un multiplexor digital (con puertas lógicas con salida totem-pole) que multiplexe las diferentes líneas funcionando como un OR lógico, es decir, enviando el estado de solo una de las entradas. Pero este tipo de transmistores no puede ser utilizado para buses bidireccionales por sus características. No obstante es importante saber qué multiplexor se emplea para este fin, ya que determinará en gran medida la cantidad de dispositivos que pueden transmitir usando ese mismo bus.
Como sustituto de transmisor OR lógico se puede implementar un esquema de transmisor OR cableado. Este sistema emplea un multiplexor con puertas lógicas con salida en colector abierto. Este tipo de transmisor irá implementado en cada dispositivo conectado al bus, en vez de ser centralizado como en el OR lógico.
Esto aporta mayor flexibilidad, ya que cada transmisor va implementado en cada dispositivo y estos directamente conectados al bus del sistema. El problema es que solo podrán funcionar a nivel bajo, mientras que el nivel alto debe representarse por medio de una resistencia pull-up. Esta resistencia limitará la velocidad de transmisión en función del valor resistivo y las capacidades parásitas.
En los sistemas más modernos se emplea el transmisor triestado para poder representar los dos estados lógicos conocidos y un tercer estado X o de alta impedancia para cuando esté inactivo. El estado de alta impedancia desconectará eléctricamente el dispositivo o unidad. Con un transmisor triestado se puede implementar un bus bidireccional y resulta mucho más flexible que los dos transmisores anteriores.
Los receptores también deben adaptarse. Cada dispositivo o unidad del sistema debe poder actuar como receptor de información en un momento dado. Los receptores o receivers también son capaces de asegurar la compatibilidad eléctrica con el bus y controlar el flujo de información que llega. Los receptores más simples están implementados con puertas lógicas, mientras que otros más complejos pueden incorporar biestables que actúen como registros o almacenamiento temporal de los datos entrantes.
Por último se necesitan de transceptores o transceivers que son capaces de controlar la salida y la entrada, actuando como receptores y transmisotres a la vez. Estos transceptores pueden catalogarse según su tipo como: unidireccionales, bidireccionales y registrados (con registros para mantener un estado almacenado durante un tiempo):
- Los transceptores unidireccionales permiten actuar como un receptor o como un transmisor, pero no los dos casos a la vez. El modo en el que actúan dependerá de una señal de control. Estos transceptores se pueden emplear en buses bidireccionales half duplex. En cambio, para un bus full duplex se necesita de una tecnología más compleja.
- Esa tecnología es la que corresponde a los transceptores bidireccionales. Incorporan un transmisor y un receptor de bus en su interior como los unidireccionales, pero permiten la transmisión de información en ambos sentidos a la vez. Para ello emplean dos transceptores unidireccionales conectados en oposición y controlados por dos señales que actúan simultáneamente.
- Por último, los transceptores registrados, como su propio nombre indica, son transceptores con registros para almacenar la información entrante o saliente temporalmente. Los transceptores no registrados no son capaces de retener la información que proviene o se envía al bus del sistema. Los transceptores registrados pueden ser de tipo unidireccional o bidireccional, para buses half o full duplex. Una serie de biestables conectados a los drivers de la E/S del dispositivo compondrá un registro en el que se puede almacenar la información.
Espero que ahora tengas un poco más claro el tema de los buses y te resulte más fácil comprender cuando veas estos términos…