Tema 6 - Buses

📖 Introducción a los buses


📖
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/sbits/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)
 
notion image

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 nn 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)
notion image
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
  1. 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.
  1. 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.
  1. 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)
  1. Cuando el receptor a completado la operación, activa la señal DataRdy y publica el resultado en el bus de datos (Data)
  1. 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
  1. El receptor, al detectar que Ack se activa, desactivará DataRdy y liberará el bus Data
  1. 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.
  1. El dispositivo activa la señal correspondiente para solicitar al procesador acceso al bus
  1. El procesador genera una señal para indicar al dispositivo que tiene acceso al bus
  1. 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 adicionales
Petició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
notion image
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 fairness dado 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.
notion image
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
notion image
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 NuBus uno de los primero ejemplos de arquitectura plug-and-play en 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.
notion image
notion image
notion image
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/s1Gb/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
notion image
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
notion image
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 2n2^n. 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)
notion image
🔴 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
notion image
 
🟡 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
notion image
🟢
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)
notion image
📖
Los bytes se reparten entre nn 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 un bit por segundo (T/s=b/s)(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 128130\frac{128}{130}
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
notion image