Un bus es un canal de comunicación compartido que utiliza in conjunto de cables para conectar entre sí distintos componentes de un computador
⚖️ Pros y Contras
🟢 Versatilidad y bajo coste
🔴 Cuello de botella en la comunicación
🏎️Velocidad máxima del bus
Este está limitada por la longitud del bus y el número de dispositivos concetados a este
💡 El diseño del bus es complejo ya que hay que a veces hay que conectar dispositivos con velocidades muy diferentes
💡
El ancho de banda de un bus es un parámetro que se mide en bits/s
🔀
Tipos de líneas en un bus
⚠️
Cada línea transporta 1-bit
Líneas de control (bidireccional)
Se usan para coordinar el ordenador con los perifericos a través de diferentes señales como: Petición, Reconocimiento y Activación
Líneas de datos (bidireccional)
Llevan la información desde un punto del bus hasta otro (datos y ordenes). El ancho de este bus suele coincidor con el tamaño de palabra
Líneas de dirección (unidireccional)
Permite comunicar direcciones. El tamaño de este bus limita el número de direcciones accesiblesde la memoria. Solo el procesador puede escribir en este bus
💡
Si no hay un bus de direcciones, entonces estas se envían por el bus de datos. Cuando ocurre esto se dice que el bus de datos está multiplexado
↔️
Transacciones en el bus
Las transacciones en un bus están reguladas siempre por un protocolo de comunicación
Normalmente este proceso consiste en 2 pasos:
Señal de control y dirección: Se publica en el bus una señal de control y una dirección.
Envío o recepción de datos: El dispositivo publica en el bus los dato solicitados, o lee del bus los datos mandados por el procesador
💡
Las operaciones de entrada / salida se nombran según el punto de vista del procesador
🚍 Tipos de buses
Según los dispositivos conectados
🛤️
Bus procesador-memoria
Este es el bus que comunica el procesador con la memoria
Características
Poca longitud (corto)
Alta velocidad (rápido)
Síncrono (requiere reloj)
Adaptado al sistema, así aprovecha al máximo el ancho de banda
Bus propietario 🔒
🛤️
Bus backplane
Este bus está diseñado para la coexistencia del procesador, la memoria y los dispositivos E/S en un único bus. E.G.: PCI, ISA, …
Este es un bus intermedio entre el bus procesador-memoria el bus E/S
💡
Recibe este nombre dado que normalmente los periféricos se situaban en la parte posterior del ordenador
Características
Bajo coste
Asíncrono (no utiliza reloj)
Diseño estandarizado (no propietario)
🛤️
Bus de E/S
Este es un bus que se encarga de coordinar y hacer llegar los mensajes del bus backplane a través de un adaptador
Características
Mayor longitud (largo)
Según el grado de paralelismo
🛤️
Bus paralelo
Los buses en paralelo, transmiten varios bits en un ciclo de reloj. Esto lo hace a través de cables (hilos). El inconveniente principal, es que a altas velociadades, y con longitudes largar, los datos pueden llegar con una diferencia de tiempo entre los diferentes hilos
Este tipo de bus permite mandar n bits en un mismo ciclo de reloj
🛤️
Bus serie
Los buses en serie solo permiten transmitir un bit en cada ciclo de reloj (1 hilo). Estos son muy populares ya que son más sencillos y no tienen problemas con señales descoordinadas
Según el sincronismo
🛤️
Bus síncrono
La comunicación en este tipo de buses utiliza un reloj que es el que sincroniza a todos los dispositivos del bus para que estos operen en los flancos activos de reloj
🔴 Desventajas
Esto nos obliga a que todos los dispositivos conectados al bus tengan que tener la misma velocidad.
No podemos tener lineas muy alargadas por que entonces existiría un desfase de las señales del reloj (clock skew)
🛤️
Bus asíncrono
La comunicación a través de este tipo de buses no utiliza ningún reloj si no que hace uso de un protocolo de handshaking, esto nos permite además tener lineas de mayor longitud y dispositivos conectados con distintas velocidades
🤝Handshaking
Este es un protocolo que toma una serie de pasos donde el emisor y el receptor avanzan solo al paso siguiente cuando ambos están de acuerdo. Este protocolo toma señales adicionales:
Data request (ReadReq) → Se activa cuando se produce una petición de lectura (la dirección se publica en el bus de direcciones)
Data ready (DataRdy) → Se activa cuando los datos han sido publicados en el bus de datos
Acknowledge (Ack) → Se activa cuando se han reconocido las señales anteriores (desactivando estas en el mismo instante)
Explicación del diagrama
Características del diagrama
🟠 Dispositivo E/S
⚫ Memoria
Se utiliza un bus de datos multiplexado (datos+direcciones)
Los rombos expresan que los datos son tamaño palabra
El resto de lineas transportan bits individuales (High/Low)
Las flechas expresan relación de causa y efecto
Los números expresan el paso actual y el flujo
Operación
Se pretende simular una lectura de memoria (receptor) a petición de un dispositivo E/S (emisor)
Pasos
El emisor activa el bit ReadReq , lo que significa que queremos leer un dato. A su vez, la dirección es publicada en el bus de datos (Data). Cuando el receptor se da por aludido, activa la señal Ack para hacer saber al emisor que se ha detectado la petición.
El receptor activar la señal Ack , esto hace que el emisor apage la señal ReadReq y Data liberando así el bus de datos.
Cuando el receptor detecta que ReadReq ha sido desactivada, entonces desactiva la señal Ack para dar por terminado el reconocimiento de la petición. Inmediatamente el receptor comenzará a procesar la operación correspondiente (lectura en memoria)
Cuando el receptor a completado la operación, activa la señal DataRdy y publica el resultado en el bus de datos (Data)
El emisor, al detectar que la señal DataRdy está activada, lee los datos del bus Data y activará la señal Ack cuando haya capturado los datos
El receptor, al detectar que Ack se activa, desactivará DataRdy y liberará el bus Data
Finalmente, el receptor detectará que DataRdy se desactivó, por lo que desactivará Ack para dar por finalizada la transmisión
🏁 Arbitraje del bus
📖
El arbitraje del bus es un protocolo que se encarga de gestionar que dispositivos y cuando tienen acceso al bus.
Normalmente hay uno de los dispositivos conectados al bus denominado maestro del bus (este suele ser el procesador)y que se encargará de coordinar al resto de dispositivos (esclavos)
Maestro único
ℹ️
Este es un esquema en el que el procesador es el maestro y el resto de dispositivos son esclavos, cuando estos quieren hacer uso del bus, envían una señal por un canal destinado para ello.
El dispositivo activa la señal correspondiente para solicitar al procesador acceso al bus
El procesador genera una señal para indicar al dispositivo que tiene acceso al bus
El dispositivos hace uso del bus
🔴 Este esquema es sencillo pero tiene la desventaja de que el procesador está involucrado en todas las peticiones y debe procesarlas él mismo.
Maestros múltiples
ℹ️
Este esquema es un poco más complejo, pero evita que se forme un cuello de botella en el procesador permitiendo que haya más de un maestro del bus. Cada uno de estos maestros tendrá la capacidad de iniciar una transacción
⚖️
Factores en la decisión de los maestros
Como ahora hay varios maestros, necesitaremos un nuevo dispositivo llamado Arbitro del Bus que se encargará de determinar cual es el siguiente maestro que puede usar el bus según los criterios de:
Prioridad
Dependiendo del dispositivo que ha solicitado acceso al bus, se decidirá si se le concede el bus a este, o a otro con mayor prioridad
Fairness
En caso de que un dispositivo tenga una prioridad baja, se tardará en concederle el bus, pero tarde o temprano tendrá que poder acceder a este
🚦
Señales adicionalesPetición de bus (bus request)
Los dispositivos que deseen acceso al bus, deberán comunicarlo al árbitro a través de este bus
Concesión de bus (bus grant)
El arbitro utilizará este bus para comunicar al dispositivo que se le ha concedido el bus. Este puede usar el bus inmediatamente
Liberación de bus (bus release)
Cuando ha terminado la operación, el dispositivo utiliza esta señal para comunicar al arbitro que ha terminado de usar el bus
⏰
Tiempo de arbitraje
Este tiempo es una sobrecarga que aumenta el tiempo de acceso al bus, por lo que deberá solaparse todo lo posible
Sistemas de arbitraje
Existen numerosos esquemas de arbitraje, entre ellos tenemos:
🌼
Arbitraje en serie (Daisy chain arbitration)
💡
En este esquema, la prioridad se determina según su posición en la cadena
Este esquema funciona de la siguiente manera:
1️⃣ Cuando un dispositivo solicita acceso
Cuando esto ocurre, el dispositivo activa la señal Request , dado que esta señal le llega al arbitro por un único cable, el arbitro no sabe que dispositivo ha solicitado el bus, solo sabe que alguien lo necesita
2️⃣ El arbitro concede acceso al bus
El arbitro activará la señal Grant , esta señal está conectada con el dispositivo con la mayor prioridad, si este no necesita el bus (no tiene la señal Request activada)entonces propagará la señal al siguiente dispositivo con mayor prioridad hasta llegar al dispositivo que solicitó el bus, deteniendo ahí la propagación de la señal
3️⃣ Liberación del bus
Cuando el dispositivo ha terminado de usar el bus, este activará la señal Release para indicar al arbitro que ha terminado de usar el bus. Al igual que la señal Request esta señal es compartida, por lo que el arbitro desconoce quién manda la señal, aunque en este caso no importa
🔴 Desventaja
No garantiza el fairnessdado que puede que los dispositivos del final de la cadena no consigan nunca el bus
La velocidad del bus está limitada
↔️
Arbitraje paralelo centralizado
💡
Este esquema, a diferencia del anterior, contiene tantas señales Request y Grant como dispositivos conectados.
1️⃣ Cuando un dispositivo solicita acceso
El dispositivo activará la señal Request que tiene una conexión directa y propia con el arbitro
2️⃣ El arbitro concede acceso
El arbitro determinará si el bus está libre, si si lo está, se lo notificará al dispositivo a través de su propia señal Grant . En este momento el dispositivo ya puede hacer uso del bus. Este debe mantener activa la señal BusBusy mientras está usando el bus
3️⃣ El dispositivo libera el bus
Cuando un dispositivo termina de usar el bus, desactivará la señal BusBusy (parecido al release del esquema anterior) lo que el arbitro interpretará como que ya puede ceder el bus a otro dispositivo
💡
Este esquema se usa en el Bus PCI (backplane)
✳️
Arbitraje distribuido por autoselección
En este esquema de arbitraje, todos los dispositivos tienen un código que escriben en el bus simultanemaente cuando estos desean obtener acceso al bus. Como resultado de esta escritura multiple, el bus ahora contiene la dirección del bus al que se le concede el acceso (más prioritario). Este forma no requiere que exista un arbitro central
💡
De esta forma fue como Apple creó el NuBusuno de los primero ejemplos de arquitectura plug-and-playen el Macintosh II. Esta arquitectura permitía que pudieran conectarse dispositivos sin necesidad de configurarlos
💥
Arbitraje distribuido por detección de colisión
En este esquema de arbitraje, los dispositivos solicitan el bus a través de una señal por un canal compartido. Cuando varios dispositivos solicitan el bus se conoce como colisión.
💥 Detección de colisión
Cuando este dispositivo detecta que el bus está vacío, entonces el dispositivo comienza a usarlo. El dispositivo comprobará que los datos que ha escrito no son los datos que hay en el bus por lo que determinará que hay una colosión y esperará un tiempo determinado antes de volver a intentarlo
⌛ Tiempo de espera
El tiempo de espera de cada dispositivo depende del fabricante
💡
La prioridad viene determinada por el menor tiempo de espera, dado que este le permite al dispositivo intentar acceder al bus más veces por segundo
🔴 Desventajas
El numero de dispositivos está limitado para evitar un exceso de colisiones
💡
Un ejemplo de uso es el protocolo Ethernet donde este esquema de arbitraje se llama CSMA/CD (Carrier-sense multiple access with collision detection)
🔌 Ejemplos de estándares de buses: PCI Express
📖
El Bus PCI
El PCI (Peripheral Component Interconnect)es bus de tipo backplane creado por Intel en los 90s.
Características del Bus PCI
Las transmisiones son simples o por ráfagas
Utiliza un bus miltiplexado
Los ciclos del bus tiene
Una primera fase en la que el master obtiene acceso al bus
Después se expecifica el tipo de transacción
Tipos de transacciones
Aceptación de interrupción
Ciclo especial
Lectura E/S
Escritura E/S
Lectura de memoria
Escritura de memoria
Lectura de línea de memoria
Lectura múltiple de memoria
Escritura en memoria con invalidación
Lectura de configuración
Escritura de configuración
Ciclo de doble dirección
Velocidad de transferencia (PCI 64-bits) → 1Gb/s
ℹ️
Existe un único bus PCI por procesador al que se conectan el resto de dispositivos y el resto de buses
ℹ️
El Bus PCI Express (PCIe)
Este bus aparece en 2003 para sustituir al PCI convencional y al resto de sus posteriores actualizaciones
Características
El nuevo PCIe sustituyó la configuración de bus paralelo para establecer conexiones punto a punto con comunicación serie
Es independiente del procesador (funciona con cualquier procesador)
Puede manejar una gran cantidad de datos
Puede realizar transferencias de forma concurrente
El sistema prioriza las conexiones según el tipo de transmisión
ℹ️
Existen diferentes versiones de el PCIe según el número de ranuras, donde a mayor número de ranura, mayor velocidad.
Además, el sistema de ranuras permite ubicar tarjetas con menos ranuras en slots para tarjetas más grandes
La comunicación entre dos dispositivos (enlace) (link) se hace a través de terminales llamados carriles (lanes), el puerto PCI puede tener un número de enlaces 2n. Cada uno de estos carriles consta de dos cable trenzados. El valor del bit transmitido por cada carril se calcula como la diferencia entre el potencial de los cables de este
Características
Comunicación full-duplex (cada carril permite cominicación en ambos sentidos)
Cada enlace cuenta con 1 carril o más
ℹ️
Funcionamiento del PCIe (Capas)
🔴 TL (Transaction Layer)
Esta capa se compone del software encargado de solicitar las peticiones de lectura/escritura al PCI junto con la dirección de enrrutamiento (dispositivo de destino)
✉️ Paquetes TLP
ℹ️
Estos paquetes se originan en la capa TL y van destinados a la capa TL del dispositivo de destino
El formato de estos mensajes consta de un conjunto de campos para cada una de las capas que se ubican como envolviendo los campos de las capas interiores
Campos de la capa TL
Cabecera → (12 ó 16 Bytes) Continen la información información necesaria para que el receptor procese el mensaje
Datos → (De 0 a 4096 Bytes) Información que deseamos transmitir
ECRC → (4 Bytes) Detección de errores
Campos de la capa DLL
Número de secuencia → (2 Bytes) Enumeración de paquetes
LCRC → (4 Bytes) Detección de errores
Campos de la capa PL
Código de inicio → (1 Byte) Se usa para sincronizar la transmisión antes de comenzar a transmitir datos
Código de fin → (1 Byte) Se encarga de indicar la finalización de la transmisión
🟡 DLL (Data Link Layer)
Esta capa es la responsable de la transmisión fiable y el control de flujo de los datos. Esta capa se encargará de enviar/solicitar de nuevo aquellos datos que hayan llegado corruptos
✉️ Paquetes DLLP
🟢
Si este mensaje se envía con el código ACK (acknowledge), indica la confirmación de que se ha recibido correctamente el paquete TLP.
Cuando el emisor recibe este paquete, elimina la copia temporal que tiene del paquete TLP por si acaso
🔴
Si este mensaje se envía con el código NAK (negative acknowledge), indica que la transmisión fue errónea. Esto quiere decir que se detectó un error que no se ha podido solucionar en el destino
Cuando el emisor recibe este paquete, vuelve a enviar la copia que tiene del TLP
🔵 PL (Phisical Layer)
Esta capa consta de la parte física del protocolo PCIe: Los enlaces, carriles, …; Así como la circuitería y la lógica necesaria para el envío y recepción de los datos
Paquetes TLP y DLLP
💡
Los mensajes se van envolviendo con headers (como una cebolla)y desenvolviendo en el destino por la capa correspondiente
💡
Adicionalmente, las capas TL y DLL, también se pueden enviar paquetes directamente a través de mensajes TLP y DLLP respectivamente
💡
Si el dispositivo que recibe un paquete TLP, pero este es solo un intermediario en la transmisión, reenvía el paquete al siguente dispositivo de la cadena
ℹ️
Funcionamiento del PCIe (carriles)
📖
Los bytes se reparten entre n carriles (para el ejemplo tenemos 4 carriles)según la técnica round-robin (como cuando se reparten cartas)
Los carriles se van llenando hasta que en cada uno de ellos tenemos un bloque de 16 Bytes
💡
El ancho de banda se mide en transferencias de unbit por segundo (T/s=b/s)
ℹ️
En la imagen aparece: 128b/130b , esto significa que por cada 128-bits de datos, se envían 2-bits adicionales como cabecera de sincronización, por lo que la velocidad real del bus es de factor 130128
Esto quiere decir que a la velocidad del bus hay que multiplicarla por el factor para hallar la velocidad de transferencia total
🕷️
Problemas de sincronización
El bus PCIe usa las transiciones entre 0’s y 1's para sincronizarse con el otro dispositivo, el problema puede surgir cuando se transmiten largas cadenas con el mismo valor 0000000...00 ó 11111111..11 , en este caso los dispositivos podrían desincronizarse al no tener un flanco de referencia
Para solucionar esto, se use el método de scrambling (aleatorización),este método utiliza un algorimo de que mapea los bits para simular una aleatoriedad que reduce la probabilidad de que se puedan juntar largas cadenas con el mismo valor