The organization of "COMPUTER HARDWARE REVIEW" figure was used on minicomputers for years and also on the original IBM PC. Though, as processors and memories got faster, the ability of a single bus (and certainly the IBM PC bus) to handle all the traffic was constrained to the breaking point. Something had to give. As a result, extra buses were added, both for faster I/O devices and for CPU-to- memory traffic. As a consequence of this evolution, a large Pentium system currently looks something like the following figure.

The structure of a large Pentium system

This system has eight buses (cache, local, memory, PCI, SCSI, USB, IDE, and ISA), each with a different transfer rate and function. The operating system must be aware of all of them for configuration and management. The two main buses are the original IBM PC ISA (Industry Standard Architecture) bus and its successor, the PCI (Peripheral Component Interconnect) bus. The ISA bus, which was originally the IBM PC/AT bus, runs at 8.33 MHz and can transfer 2 bytes at once, for a maximum speed of 16.67 MB/sec. It is included for backward compatibility with old and slow I/O cards. Modem systems often leave it out and it is dying off. The PCI bus was invented by Intel as a successor to the ISA bus. It can run at 66 MHz and transfer 8 bytes at a time, for a data rate of 528 MB/sec. Most high-speed I/O devices use the PCI bus now. Even some non-Intel computers use the PCI bus due to the large number of I/O cards available for it. New computers are being brought out with an updated version of the PCI bus called PCI Express.

In this configuration, the CPU talks to the PCI bridge chip over the local bus, and the PCI bridge chip talks to the memory over a dedicated memory bus, often running at 100 MHz. Pentium systems have a level-1 cache on chip and a much larger level-2 cache off chip, joined to the CPU by the cache bus.

Furthermore, this system contains three specialized buses: IDE, USB, and SCSI. The IDE bus is for joining peripheral devices such as disks and CDROMs to the system. The IDE bus is an outgrowth of the disk controller interface on the PC/ AT and is now standard on nearly all Pentium-based systems for the hard disk and often the CD-ROM.

The USB (Universal Serial Bus) was invented to attach all the slow I/O devices, such as the keyboard and mouse, to the computer. It uses a small four-wire connector, two of which supply electrical power to the USB devices. USB is a centralized bus in which a root device polls the I/O devices every 1 msec to see if they have any traffic. USB 1.0 could handle an aggregate load of 1.5 MB/sec but the newer USB 2.0 bus can handle 60 MB/sec. All the USB devices share a single USB device driver, making it unnecessary to install a new driver for each new USB device. Therefore, USB devices can be added to the computer without the need to reboot.

The SCSI (Small Computer System Interface) bus is a high-performance bus intended for fast disks, scanners, and other devices requiring a lot of bandwidth. It can run at up to 160 MB/sec. It has been present on Macintosh systems since they were invented and is also popular on UNIX and some Intel-based systems.

Yet another bus (not shown in above figure) is IEEE 1394. Sometimes it is called FireWire, though strictly speaking, FireWire is the name Apple uses for its execution of 1394. Like USB, IEEE 1394 is bit serial but is designed for 4packet transfers at speeds up to 100 MB/sec, making it useful for connecting digital camcorders and alike multimedia devices to a computer. Unlike USB, IEEE 1394 does not have a central controller.

To work in an environment such as that of above figure, the operating system has to know what peripheral devices are joined to the computer and configure them. This requirement led Intel and Microsoft to design a PC system called plug and play, based on a similar concept first implemented in the Apple Macintosh. Before plug and play, each I/O card had a fixed interrupt request level and fixed addresses for its I/O registers. For example, the keyboard was interrupt 1 and used I/O addresses Ox60 to Ox64, the floppy disk controller was interrupt 6 and used I/O addresses Ox3FO to Ox3F7, and the printer was interrupt 7 and used I/O addresses Ox378 to Ox37 A, and so on.

So far, so good. The trouble came when the user bought a sound card and a modem card and both happened to use, say, interrupt 4. They would conflict and would not work together. The solution was to include DIP switches or jumpers on every I/O card and instruct the user to please set them to choose an interrupt level and I/O device addresses that did not conflict with any others in the user's system. Teenagers who devoted their lives to the intricacies of the PC hardware could sometimes do this without making errors. Unluckily, nobody else could, leading to chaos.

What plug and play does is have the system automatically collect information about the I/O devices, centrally assign interrupt levels and I/O addresses, and then tell each card what its numbers are. This work is closely related to booting the computer, so let us look at that. It is not completely unimportant.


operating system, memory, i/o devices