Un bus de sistema es un bus de computadora único que conecta los componentes principales de un sistema informático, combinando las funciones de un bus de datos para transportar información, un bus de direcciones para determinar dónde debe enviarse o leerse y un bus de control para determinar su funcionamiento. 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 de nivel de 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 de nivel de sistema está diseñado para usarse como placa base . [2]
Muchos de los ordenadores 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 , una unidad de control central y una unidad lógica aritmética (ALU, a la que llamó la parte aritmética central) se combinaron con la memoria de la computadora y las funciones de entrada y salida para formar una computadora con programa almacenado . [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).
En las décadas de 1950 y 1960, las computadoras se construían generalmente de manera ad hoc. Por ejemplo, la CPU, la memoria y las unidades de entrada/salida eran uno o más gabinetes conectados por cables. Los ingenieros utilizaron las técnicas comunes de manojos de cables estandarizados y extendieron el concepto a medida que se utilizaban placas base para sostener placas de circuitos impresos en estas primeras máquinas. El nombre "bus" ya se usaba para las " barras colectoras " que transportaban energía eléctrica a las diversas 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 buses se volvieron más estandarizados. [6] Los módulos estándar se podían interconectar de formas más uniformes y eran más fáciles de desarrollar y mantener.
Para proporcionar una mayor modularidad con un coste reducido, los buses de memoria y E/S (y los buses de control y alimentación necesarios ) se combinaban a veces en un único bus de sistema unificado. [7] La modularidad y el coste se volvieron importantes a medida que las computadoras se hicieron lo suficientemente pequeñas como para caber en un único gabinete (y los clientes esperaban reducciones de precio similares). Digital Equipment Corporation (DEC) redujo aún más el coste de las minicomputadoras producidas en masa y las E/S mapeadas en memoria en el bus de memoria, de modo que los dispositivos parecieran 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 el PDP-8 sin E/S mapeadas en memoria se implementaron pronto 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 en aproximadamente 1975. [11] La IBM PC usó el bus de Arquitectura Estándar de la Industria (ISA) como su bus de sistema en 1981. Las placas base pasivas de los primeros modelos fueron reemplazadas por el estándar de poner la CPU y la RAM en una placa base , con solo placas hijas opcionales o tarjetas de expansión 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 soportar tarjetas de expansión más pequeñas. [13] La forma más fácil de implementar el multiprocesamiento simétrico era conectar más de una CPU al bus de sistema compartido, que se utilizó durante la década de 1980. Sin embargo, el bus 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 de programa, por la RAM y por dispositivos de E/S. Para evitar la contención del bus en el bus de datos, en cualquier instante solo un dispositivo controla el bus de datos. En sistemas muy simples, solo se requiere que el bus de datos sea un bus bidireccional. En sistemas muy simples, el registro de dirección de memoria siempre controla el bus de dirección, 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 de LECTURA donde la memoria de programa controla la instrucción en el bus de datos mientras el registro de instrucción bloquea esa instrucción del bus de datos. Algunas instrucciones continúan con un ciclo de memoria de ESCRITURA donde el registro de datos de memoria controla los datos en el bus de datos en la RAM o dispositivo de E/S elegido. Otras instrucciones continúan con otro ciclo de memoria de LECTURA donde la RAM, la memoria de programa o el dispositivo de E/S elegido controla los datos en el bus de datos mientras el registro de datos de memoria bloquea esos datos del bus de datos.
Los sistemas más complejos tienen un bus multimaster : no solo tienen muchos dispositivos que controlan el bus de datos, sino que también tienen muchos masters de bus que controlan el bus de direcciones. El bus de direcciones, así como el bus de datos en los sistemas de espionaje de bus , deben ser un bus bidireccional, a menudo implementado como un bus de tres estados . Para evitar la contención del bus en el bus de direcciones, un árbitro de bus selecciona qué master de bus en particular tiene permitido controlar el bus de direcciones durante este ciclo de bus.
Intel ha utilizado el término Dual Independent Bus (DIB) con dos propósitos diferentes. El primero surgió 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 posterior interno para la caché L2 de la CPU . Esto se introdujo en el Pentium Pro en 1995. [15] [16] [17]
En 2005 y 2006 Intel introdujo los chipsets 8500 y 5000, donde DIB se refería a los dos buses frontales en un chipset, lo que duplica el ancho de banda del sistema en comparación con tener un solo 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 tiene que enviarse en difusión (snooped) para verificar el estado de la caché de las CPU de los otros FSB, lo que reduce el ancho de banda disponible. Para reducir el tráfico de coherencia, se incluyó un filtro snoop en los chipsets de gama alta, con el fin de tener información del estado de la caché disponible en el chipset. En 2007 Intel amplió la idea de múltiples buses en el chipset 7300 con cuatro FSB independientes, llamándolos interconexiones de alta velocidad dedicadas (DHSI). [18]
El enfoque del bus de 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 de sistema continuó utilizándose en microprocesadores integrados más simples. El bus de sistema puede incluso ser interno a un solo circuito integrado, produciendo un sistema en un chip . Algunos ejemplos incluyen AMBA , CoreConnect y Wishbone . [19]
Direct Media Interface es un ejemplo de un bus de sistema (además de los carriles PCIE de acceso directo ) implementado por Intel y conocido desde al menos 2004. Se utiliza principalmente para acceder a dispositivos de E/S mapeados en memoria y comunicar la CPU con el chipset .