PCI Bus Demystified, Second Edition

A key feature of PCI that distinguishes it from earlier busses such as ISA is the ability to dynamically configure a system to avoid resource conflicts. This is known as Plug-and-Play configurability or, if you're less optimistic, Plug-and-Pray.
In the "old days," system configuration issues were generally handled by jumpers on each add-in card. The jumpers would select operating characteristics such as memory or I/O address space, interrupt vectors and perhaps a DMA channel. Configuring such a card correctly requires a fairly detailed knowledge of the system and its hardware.
Configure such a card wrong and it will likely conflict with something else. This often leads to bizarre system behavior that is difficult to diagnose. Your typical Silicon Valley geek can cope with these problems, but Aunt Martha, who only wants to surf the web, definitely can't. Just as the computer bus solved the problem of mass marketing minicomputers, Plug-and-Play configuration helped turn the PC into a consumer product.
In the PC world, various device types like serial controllers, video adapters and so on have a limited range of defined configurations. Software drivers for these devices expect that the card will be configured to one of the default settings. Information about the device's settings is typically conveyed by the command line that starts the driver.
In the world of Plug-and-Play, an add-in card tells the system what it needs how much memory or I/O space, does the device require an interrupt, and so on. Configuration software scans the system at...