Computer bus
In computer architecture a bus is a subsystem that transfers data or power
between computer components inside a computer or between computers. Unlike a
point-to-point connection, a bus can logically connect several peripherals
over the same set of wires.
Early computer buses were literally parallel electrical buses with multiple
connections, but the term is now used for any physical arrangement that
provides the same logical functionality as a parallel electrical bus. Modern
computer buses can use both parallel and bit-serial connections, and can be
wired in either a multidrop (electrical parallel) or daisy-chain topology,
or connected by switched hubs, as in the case of USB.
History
Earlu computer busses were budles of wire that attached memory and
peripherals. They were named after eletrical busses, or busbars. Almost
always, there was one bus for memory, and another for peripherals, and these
were accessed by separate instructions, with completely different timings
and protocols.
One of the first complications was the use of interrupts. Early computers
performed I/O by waiting in a loop for the peripheral to become ready.
Engineers realized that this wasted large amounts of time, and arranged for
the peripherals to interrupt the CPU. The interrupts had to be prioritised,
because the CPU can only execute code for one peripheral at a time.
Some time after this, some computers (such as the RCA Spectra, running
Multics) began to share memory between several CPUs. On these computers,
access to the bus had to be prioritized, as well.
The classic, simple way to prioritize interrupts or bus access was with a
daisy chain.
DEC noted that having two busses seemed wasteful and expensive for small,
mass-produced computers, and mapped peripherals into the memory bus. At the
time, this was a very daring design. Cynics predicted failure.
Early microcomputer bus systems were essentially a backplane connected to
the pins of the CPU. Memory and other devices would be added to the bus
using the same address and data pins as the CPU itself used, connected in
parallel. In some instances, such as the PC, instructions still generated
signals at the CPU that could be used to implement a true I/O bus.
In many microcontrollers and embedded systems, an I/O bus still does not
exist. Communication is controlled by the CPU, which reads and writes data
from the devices as if they are blocks of memory (in most cases), all timed
by a central clock controlling the speed of the CPU. Devices ask for service
by signalling on other CPU pins, typically using some form of interrupt.
For instance, a disk drive controller would signal the CPU that new data was
ready to be read, at which point the CPU would move the data by reading the
memory that corresponded to the disk drive. Almost all early computers were
built in this fashion, starting with the S-100 bus in the Altair, and
continuing through the IBM PC in the 1980s.
These simple bus systems had a serious drawback for general-purpose
computers. All the equipment on the bus has to talk at the same speed, and
shares a single clock.
Increasing the speed of the CPU is not a simple matter, because the speed of
all the devices must increase as well. This often leads to odd situations
where very fast CPUs have to "slow down" in order to talk to other devices
in the computer. While acceptable in embedded systems, this problem is not
tolerated in commercial computers.
Another problem is that the CPU is required for all operations, so if it
becames busy with other tasks the real throughput of the bus could suffer dramatically.
Such bus systems are difficult to configure when contructed from mechant
equipment. Typically each added PC board requires many jumpers in order to
set memory addresses, I/O addresses, interrupt priorities, and interrupt numbers.
"Second generation" bus systems like NuBus addressed some these problems.
They typically separated the computer into two "worlds", the CPU and memory
on one side, and the various devices on the other, with a bus controller in
between. This allowed the CPU to increase in speed without affecting the
bus. This also moved much of the burden for moving the data out of the CPU
and into the the cards and controller, so devices on the bus could talk to
each other with no CPU intervention. This led to much better "real world"
performance, but also required the cards to be much more complex. These
buses also often addressed speed issues by being "bigger" in terms of the
size of the data path, moving from 8-bit parallel buses in the first
generation, to 16 or 32-bit in the second, as well as adding software setup
to supplant or replace the jumpers.
However these newer systems shared one quality with their earlier cousins,
in that everyone on the bus had to talk at the same speed. While the CPU was
now insulated and could increase speed without fear, CPUs and memory
continued to increase in speed much faster than they buses they talked to.
The result was that the bus speeds were now very much slower than what a
modern system needed, and the machines were left starved for data. A
particularly common example of this problem was that video cards quickly
outran even the newer bus systems like PCI, and now computers include the
AGP bus just to drive the video card.
During this period an increasing number of external devices started
employing their own bus systems as well. When disk drives were first
introduced they would be added to the machine with a card on the bus, which
is why computers have so many slots on the bus. But through the 1980s and
1990s new systems like SCSI and IDE were introduced to serve this need,
leaving most slots in modern systems empty. Today there are likely to be
about five different buses in the typical machine, supporting various
devices.
A useful differentiation then became popular, the concept of the local bus
as opposed to external bus. The former referred to bus systems that were
designed to be used with internal devices, such as graphics cards, and the
latter to buses designed to add external devices such as scanners. This
definition was always soft: IDE is an external bus in terms of how it is
used, but is almost always found inside the machine.
"Third generation" buses are now in the process of coming to market,
including HyperTransport and InfiniBand. They typically include features
that allow them to run at the very high speeds needed to support memory and
video cards, while also supporting lower speeds when talking to slower
devices such as disk drives. They also tend to be very flexible in terms of
their physical connections, allowing them to be used both as internal buses,
as well as connecting different machines together. This can lead to complex
problems when trying to service different requests, so much of the work on
these systems concerns software design, as opposed to the hardware itself.
In general these third generation buses tend to look more like a network
than the original concept of a bus, with a higher protocol overhead needed
than early systems, while also allowing multiple devices to use the bus at once.
Description
At one time "bus" meant an electrically parallel system, with electrical
conductors similar or identical to the pins on the CPU. This is no longer
the case, and modern systems are blurring the lines between buses and networks.
Buses can be parallel buses, which carry data words striped across multiple
wires, or serial buses, which carry data in bit-serial form. The addition of
extra power and control connections, differential drivers, and data
connections in each direction usually means that most serial buses have more
conductors than the minimum of two used in the I²C serial bus. As data
rates increase, the problems of timing skew across parallel buses become
more and more difficult to circumvent, to the point where a serial bus can
actually be operated at higher overall data rates than a parallel bus,
despite having fewer electrical connections. Multidrop connections do not
work well for fast serial buses, so most modern serial buses use daisy-chain
or hub designs.
Most computers have both internal and external buses. An internal bus
connects all the internal components of a computer to the motherboard (and
thus, the CPU and internal memory). These types of buses are also referred
to as a local bus, because they are intended to connect to local devices,
not to those in other machines or external to the computer. An external bus
connects external peripherals to the motherboard.
Network connections such as Ethernet are not generally regarded as buses,
although the difference is largely conceptual rather than practical. The
arrival of technologies such as InfiniBand and HyperTransport is further
blurring the boundaries between networks and buses. Even the lines between
internal and external are sometimes fuzzy, I²C can be used as both an
internal bus, or an external bus (where it is known as ACCESS.bus), and
InfiniBand is indended to replace both internal buses like PCI as well as
external ones like Fibre Channel.
This content from Wikipedia is licensed under the GNU Free Documentation License.
|
|