As described in the page describing programmed I/O, that
method of transferring data between the hard disk and the rest of the system has a serious
flaw: it requires a fair bit of overhead, as well as the care and attention of the
system's CPU. Clearly, a better solution is to take the CPU out of the picture entirely,
and have the hard disk and system memory communicate directly. Direct memory access
or DMA is the generic term used to refer to a transfer protocol where a peripheral
device transfers information directly to or from memory, without the system processor
being required to perform the transaction. DMA has been used on the PC for years over the
ISA bus, for devices like sound cards and the floppy disk interface. Conventional DMA uses
regular DMA channels which are a standard system resource.
Several different DMA modes have been defined for the IDE/ATA interface; they are
grouped into two categories. The first set of modes are single word DMA modes.
When these modes are used, each transfer moves just a single word of data (a word is the techie term for two bytes, and
recall that the IDE/ATA interface is 16 bits wide). There are (or were!) three single word
DMA modes, all defined in the original ATA standard:
DMA Mode |
Cycle Time
(nanoseconds) |
Maximum Transfer
Rate (MB/s) |
Defining Standard |
Single Word Mode 0 |
960 |
2.1 |
ATA |
Single Word Mode 1 |
480 |
4.2 |
ATA |
Single Word Mode 2 |
240 |
8.3 |
ATA |
(As I discussed in the page on PIO, maximum transfer rate
is double the reciprocal of the specific cycle
time for each mode.) Obviously, these are not impressive transfer rate numbers by
today's standards. Further, performing transfers of a single word at a time is horribly
inefficient--each and every transfer requires overhead to set up the transfer. For that
reason, single word DMA modes were quickly supplanted by multiword DMA modes. As
the name implies, under these modes a "burst" of transfers occurs in rapid
succession, one word after the other, saving the overhead of setting up a separate
transfer for each word. Here are the multiword DMA transfer modes:
DMA Mode |
Cycle Time
(nanoseconds) |
Maximum Transfer
Rate (MB/s) |
Defining Standard |
Multiword
Mode 0 |
480 |
4.2 |
ATA |
Multiword
Mode 1 |
150 |
13.3 |
ATA-2 |
Multiword
Mode 2 |
120 |
16.7 |
ATA-2 |
Since multiword DMA transfers are more efficient, and also have higher maximum transfer
rates, single word DMA modes were quickly abandoned after ATA-2
was widely adopted--they were actually removed from the ATA standards in ATA-3. So all DMA accesses today (including Ultra DMA) are actually multiword; the term
"multiword" is now often assumed and no longer specifically mentioned.
Another important issue with DMA is that there are in fact two different ways of doing
DMA transfers. Conventional DMA is what is called third-party DMA, which means
that the DMA controllers on the motherboard coordinate the DMA transfers. (The "third
party" is the DMA controller.) Unfortunately, these DMA controllers are old and very
slow--they are basically unchanged since the earliest days of the PC. They are also pretty
much tied to the old ISA bus, which was abandoned for hard disk interfaces for performance
reasons. When multiword DMA modes 1 and 2 began to become popular, so did the use of the
high-speed PCI bus for IDE/ATA controller cards. At that point, the old way of doing DMA
transfers had to be changed.
Modern IDE/ATA hard disks use first-party DMA transfers. The term "first
party" means that the peripheral device itself does the work of transferring data to
and from memory, with no external DMA controller involved. This is also called bus mastering, because when such
transfers are occurring the device becomes the "master of the bus". Bus
mastering allows the hard disk and memory to work without relying on the old DMA
controller built into the system, or needing any support from the CPU. It requires the use
of the PCI bus--older buses like MCA
also supported bus mastering but are no longer in common use. Bus-mastering DMA allows for
the efficient transfer of data to and from the hard disk and system memory. Bus mastering
DMA keeps CPU utilization low, which is the amount of work the CPU must do during
a transfer.
Interestingly, despite the obvious advantages of bus mastering DMA, the use of
bus-mastering multiword DMA mode 2 never really caught on. There are several reasons for
this. The most important was the poor state of support for the technology for the first
couple of years. Using PIO required no work and was very simple; DMA was not supported by
the first version of Windows 95, so special drivers had to be used. Problems with
implementing bus mastering DMA on systems in the 1996 to 1998 time frame were numerous:
issues with buggy drivers, software the didn't work properly, CD-ROM drives that wouldn't
work with the drivers, and so on. In the face of these problems, DMA didn't offer much
incentive to make the switch. Sure, the lower CPU utilization was good, but since the
maximum DMA mode's speed was the same as that of the highest PIO mode (16.7 MB/s) there
wasn't a great perception that DMA offered much of an advantage over PIO. Given little
upside potential, many people (including this author) stayed away from using DMA, to avoid
the compatibility and stability problems that sometimes resulted.
Bus mastering DMA finally came into its own when the industry moved on to Ultra DMA.
Once Ultra DMA/33 doubled the interface transfer rate, DMA had an obvious speed advantage
over PIO in addition to its other efficiency improvements. Support for DMA was also
cleaned up and made native in Windows 9x, and most of the problems with the old drivers
were eliminated. Today, the use of Ultra DMA is the standard in the industry. See here for details on the Ultra DMA modes.
Next: Ultra DMA (UDMA) Modes