A bus is a subsystem that has the ability to transfer data from different computer components, whether in the same computer or two separate ones. Historically, the first computer buses were quite literally parallel electrical buses that had several connections. Today, however, the term bus can be used to describe any component of a computer that has a similar function or intent. A common example of a present day computer bus is a universal serial bus (USB).
Computer buses were first created by bundling wires together for the purpose of attaching memory and peripherals. Commonly, there was one bus for memory and another bus for peripherals that were each separately accessed with different timings and protocols. The first complication with buses came when interrupts were used. Early computer programs communicated by constantly checking to see if intended inputs were available, which wasted time. If the program had more than one task to perform and tried to perform a separate task while waiting for the input, it resulted in taking too long to check back on the input, causing data loss. To solve the problem, peripherals were instructed to interrupt the CPU to retrieve data quicker. Due to the fact that CPU can only execute a single code at a time, the interruptions were prioritized and some had priority over others. As time went on, computers started sharing common memory to more than one CPU. However, access to the memory bus still had to be prioritized using daisy chains.
The first microcomputer buses were circuit boards that connected to the pins of the CPU either directly or with the help of buffer amplifiers. This way, new memory could be added to the bus by using identical addresses and data pins to the CPU. However, the CPU was still interrupted by signals and separate CPU pins. The drawback to this was that everything on the bus had to communicate at the same speed due to being on the same clock. This makes it difficult to increase the speed of the CPU because it could increase the speed of everything else on the bus. It may not be practical for all devices on a bus to speed up, in which case the CPU would need to work slower or enter a waiting state. This created a problem for general purpose computer systems.
In an attempt to solve this problem, engineers created a bus controller, which accepted data that needed to be moved from the CPU to the peripherals. This successfully lifted the burden from the CPU and provided room for the CPU and memory to work separately from the bus. Also, the devices on the bus could now communicate without the CPU, which in turn made the processes faster and more efficient. The drawback, however, was that the cards now had to be more complex.
While most of the problems with the earlier buses were solved, one issue still remained: everyone on the bus had to talk at the same speed. The CPUs and memory could now increase in speed, often increasing much faster than the buses they were trying to communicate with. This caused the buses to be slower than ever and not up to par with the needs of a modern computer system.
Soon, disk drives were being added to computers by plugging cards into the bus, filling the many slots on the back of it. However, by the late 20th century, new systems were created which allowed many of the slots to be freed up. Presently, computers carry about five different buses to support it.
The introduction of third generation buses began at the start of the 21st century. They have flexible physical connections and are used not only as internal buses, but for establishing connections between different machines. They tend to look more like a network than a bus.
Modern-day buses no longer have a single, literal meaning. Parallel buses carry data on several parallel wires, while serial buses carry data in bit-serial form. With new power and control connections, most serial buses have multiple conductors. However, when data rates increase, power consumption, electromagnetic interference and crosstalk across buses becomes increasingly difficult to avoid. Double pumping the bus is one way to solve this problem.
Both internal and external buses are found on computers. Internal buses, also known as local buses, connect the components inside the computer to the motherboard and CPU. External buses connect external peripherals to the motherboard.
Master schedulers control data traffic in networks. When data needs to be transferred, the requesting computer sends a message to put a request into a queue. An identification code broadcasts to the nodes of the network, which in turn creates priorities to notify the receiver when the bus is available.