If you’re the type that takes apart electronic things to see what’s inside, and if you’ve done that for the last 45 years or so, you’ve noticed a profound change in how electronic systems are built. Forty years ago and more, what you noticed first were the tubes, transformers, and other large components. Inside a box under those components were some other components and a whole lot of wires. Building anything this way took a lot of labor to screw things together, cut wires, and make connections, with a great deal of the labor simply in the process of connecting wires to terminals.
Not too much later, electronics manufacturers switched to using printed circuit boards, which are flat pieces of fiberglass or other stiff, non-conductive material. A printing and etching process places strips of copper (called traces) on and in the card, with areas at the end of the strips called pads to which the manufacturer attaches components. Printed circuits started out with traces on one side, but rapidly evolved to traces on both sides. Later versions laminated more than one card together, providing many layers to hold traces. The reason for adding layers to the boards was that the components had become more complex, with more connections, and simple one- and two-layer boards could not provide enough traces.
Every new layer on a printed circuit costs more money to design and build. As the cost to make connections grew, and as the number of connections outstripped even very expensive multilayer boards, designers started looking for ways to reduce the number of connections (and so the number of traces and layers). One very successful way has been to share wires among more than two devices. Attached image shows the idea, using the problem of connecting a processor to its memories as an example.
The most straightforward design for connecting a processor to its memories uses a separate wire for every connection (this is the drawing on the left in attached image). Suppose that every memory chip had its own set of wires to connect it to the processor. Using 512Mb (megabit) chips, a 1GB memory array needs 16 chips. Each chip has in excess of 60 pins, so to connect up every chip with its own wires, you need almost 1,000 wires. If you want to add memory, you need over 60 more wires for every chip. You need even more wires to connect to your disk, video, and other components. The processor talks to only a few of the memory chips at once, however, so most of these wires are doing nothing while a few do useful work. The wires are functional duplicates of one another, serving the same purpose (such as conveying data signals) except for the fact that they connect to different memory chips.
As connections became relatively more expensive and the cost of circuits built out of transistors became very much cheaper, changes in design to substitute cheap transistors for expensive wires became possible. The idea of a bus grew out of this substitution.
Instead of using point-to-point connections, suppose that every memory chip connects to the same set of wires (so you use the same 60 wires with all chips, not 60 for each chip). You have to add a few new wires to identify which chips should be active at any instant of time because the processor doesn’t talk to every memory at once. The drawing on the right side of attached image diagrams this scheme, called a bus. A wire carrying a data signal, for instance, connects to the processor and equally to all the memory chips. Using the same wire across all the memory chips means that only one can use the wire at a time, but because that’s how the processor works in the first place, there’s no interference.