Direct Memory Access (DMA) is frequently used to transfer
data between the main memory of a host computer and the interconnection
network, in order to free the host processor from the burden of the transfer.
DMA operations are traditionally initiated by the operating system
kernel, mainly to prevent one application from tampering
with another applications' data.
Recent architecture trends suggest that
interconnection networks get faster, while operating systems
get slower (compared to processor speeds).
These trends imply that the initiation of a DMA operation becomes slower
(due to operating system involvement),
while the DMA data transfer itself becomes faster with time.
Soon, the operating system overhead
associated with starting a DMA
will be larger than the data transfer itself, esp. for small data
transfers.
This paper proposes several algorithms that allow user-level applications
to start DMA operating without the involvement of the operating system.
Our algorithms allow user applications to have direct (but controlled) access
to the DMA engine registers.
Low overhead user-level DMA is achieved
without compromising protection, and without requiring
changes to the underlying operating system kernel.
Using our proposed algorithms, a DMA operation can be initiated in 2 to 5
assembly instructions. By comparison, operating system-based initiation
of DMA requires thousands of assembly instructions.