Un bus de sistema es un bus de computadora único que conecta los componentes principales de un sistema de computadora, combinando las funciones de un bus de datos para transportar información, un bus de direcciones para determinar desde dónde se debe enviar o leer y un bus de control para determinar su operación. La técnica se desarrolló para reducir costos y mejorar la modularidad y, aunque fue popular en las décadas de 1970 y 1980, las computadoras más modernas utilizan una variedad de buses separados adaptados a necesidades más específicas.
El bus a nivel del sistema (a diferencia de los buses de ruta de datos internos de una CPU ) conecta la CPU a la memoria y a los dispositivos de E/S. [1] Normalmente, un bus a nivel de sistema está diseñado para usarse como backplane . [2]
Muchas de las computadoras se basaron en el Primer Borrador de un Informe sobre el informe EDVAC publicado en 1945. En lo que se conoció como la arquitectura de Von Neumann , se creó una unidad de control central y una unidad lógica aritmética (ALU, a la que llamó parte aritmética central). se combinaron con la memoria de la computadora y funciones de entrada y salida para formar un programa almacenado en la computadora . [3] El Informe presentó una organización general y un modelo teórico de la computadora, sin embargo, no la implementación de ese modelo. [4] Pronto los diseños integraron la unidad de control y la ALU en lo que se conoció como la unidad central de procesamiento (CPU).
Las computadoras en las décadas de 1950 y 1960 generalmente se construían de manera ad hoc. Por ejemplo, las unidades de CPU, memoria y entrada/salida eran cada una de ellas uno o más gabinetes conectados mediante cables. Los ingenieros utilizaron técnicas comunes de haces de cables estandarizados y ampliaron el concepto a medida que se usaban placas posteriores para sostener placas de circuito impreso en estas primeras máquinas. El nombre "bus" ya se utilizaba para las " barras colectoras " que transportaban energía eléctrica a las distintas partes de las máquinas eléctricas, incluidas las primeras calculadoras mecánicas. [5] La llegada de los circuitos integrados redujo enormemente el tamaño de cada unidad de computadora y los autobuses se volvieron más estandarizados. [6] Los módulos estándar podían interconectarse de formas más uniformes y eran más fáciles de desarrollar y mantener.
Para proporcionar aún más modularidad con un costo reducido, los buses de memoria y E/S (y los buses de control y alimentación necesarios ) a veces se combinaban en un único bus de sistema unificado. [7] La modularidad y el costo se volvieron importantes a medida que las computadoras se volvieron lo suficientemente pequeñas como para caber en un solo gabinete (y los clientes esperaban reducciones de precios similares).Digital Equipment Corporation (DEC) redujo aún más el costo de las minicomputadoras producidas en masa y las E/S asignadas en memoria al bus de memoria, de modo que los dispositivos parecían ser ubicaciones de memoria. Esto se implementó en el Unibus del PDP-11 alrededor de 1969, eliminando la necesidad de un bus de E/S separado. [8] Incluso las computadoras como la PDP-8 sin E/S asignadas en memoria pronto se implementaron con un bus de sistema, que permitía conectar módulos en cualquier ranura. [9] Algunos autores llamaron a esto un nuevo "modelo" simplificado de arquitectura informática. [10]
Muchas de las primeras microcomputadoras (con una CPU generalmente en un solo circuito integrado ) se construyeron con un solo bus de sistema, comenzando con el bus S-100 en el sistema informático Altair 8800 alrededor de 1975. [11] La PC IBM usaba la arquitectura estándar de la industria (ISA) como bus del sistema en 1981. Los backplanes pasivos de los primeros modelos fueron reemplazados por el estándar de colocar la CPU y la RAM en una placa base , con solo placas secundarias o tarjetas de expansión opcionales en las ranuras del bus del sistema.
El Multibus se convirtió en un estándar del Instituto de Ingenieros Eléctricos y Electrónicos como estándar IEEE 796 en 1983. [12] Sun Microsystems desarrolló el SBus en 1989 para admitir tarjetas de expansión más pequeñas. [13] La forma más sencilla de implementar el multiprocesamiento simétrico era conectar más de una CPU al bus del sistema compartido, que se utilizó durante la década de 1980. Sin embargo, el autobús compartido rápidamente se convirtió en el cuello de botella y se exploraron técnicas de conexión más sofisticadas. [14]
Incluso en sistemas muy simples, en varios momentos el bus de datos es controlado por la memoria del programa, por la RAM y por los dispositivos de E/S. Para evitar la contención del bus de datos, en cualquier instante solo un dispositivo controla el bus de datos. En sistemas muy simples, sólo se requiere que el bus de datos sea bidireccional. En sistemas muy simples, el registro de direcciones de la memoria siempre controla el bus de direcciones, la unidad de control siempre controla el bus de control y un decodificador de direcciones selecciona qué dispositivo en particular puede controlar el bus de datos durante este ciclo de bus. En sistemas muy simples, cada ciclo de instrucción comienza con un ciclo de memoria LECTURA donde la memoria del programa dirige la instrucción al bus de datos mientras el registro de instrucciones bloquea esa instrucción del bus de datos. Algunas instrucciones continúan con un ciclo de memoria de ESCRITURA en el que el registro de datos de la memoria envía datos al bus de datos hacia la RAM o el dispositivo de E/S elegido. Otras instrucciones continúan con otro ciclo de memoria LECTURA donde la RAM, la memoria de programa o el dispositivo de E/S elegidos introducen datos en el bus de datos mientras el registro de datos de la memoria bloquea esos datos del bus de datos.
Los sistemas más complejos tienen un bus multimaestro : no solo tienen muchos dispositivos que controlan el bus de datos, sino que también tienen muchos buses maestros que controlan el bus de direcciones. Se requiere que el bus de direcciones, así como el bus de datos en los sistemas de vigilancia de bus , sean bidireccionales, a menudo implementados como un bus de tres estados . Para evitar la contención del bus en el bus de direcciones, un árbitro de bus selecciona qué maestro de bus en particular puede conducir el bus de direcciones durante este ciclo de bus.
Intel ha utilizado el término bus dual independiente (DIB) para dos propósitos diferentes. El primero se produjo cuando Intel cambió de un único bus local al DIB, utilizando el bus frontal externo para la memoria principal del sistema y los dispositivos de E/S, y el bus interno posterior para la caché de la CPU L2 . Esto se introdujo en el Pentium Pro en 1995. [15] [16] [17]
En 2005 y 2006, Intel introdujo los conjuntos de chips 8500 y 5000, donde DIB se refería a los dos buses frontales de un conjunto de chips, lo que duplica el ancho de banda del sistema en comparación con tener solo un FSB compartido por todas las CPU. Sin embargo, la información necesaria para garantizar la coherencia de la caché de los datos compartidos ubicados en diferentes cachés debe enviarse en difusión (snooped) para verificar el estado de la caché de las CPU del otro FSB, reduciendo el ancho de banda disponible. Para reducir el tráfico de coherencia, se incluyó un filtro de vigilancia en los conjuntos de chips de gama alta, para tener información del estado de la caché disponible en el conjunto de chips. En 2007, Intel amplió la idea de múltiples buses en el chipset 7300 con cuatro FSB independientes, llamándolos interconexiones dedicadas de alta velocidad (DHSI). [18]
El enfoque del bus del sistema está obsoleto en las computadoras personales y servidores modernas, que en su lugar utilizan tecnologías de interconexión de mayor rendimiento como HyperTransport e Intel QuickPath Interconnect , mientras que la arquitectura del bus del sistema continuó utilizándose en microprocesadores integrados más simples. El bus de sistemas puede incluso ser interno a un único circuito integrado, produciendo un sistema en un chip . Los ejemplos incluyen AMBA , CoreConnect y Wishbone . [19]
Direct Media Interface es un ejemplo de un bus de sistema (además de los carriles PCIE a los que se accede directamente ) implementado por Intel y conocido desde al menos 2004. Se utiliza principalmente para acceder a dispositivos de E/S asignados en memoria y comunicar la CPU al chipset .