It doesn't matter whether a central processing unit (CPU) does/doesn't have memory-mapped input/output, it needs the device controllers to exchange the data with them.
Central processing unit can request data from an input/output controller one byte at a time. But it wastes time on doing this, therefore a different way is used called as Direct Memory Access (DMA).
The OS can use direct memory access only if the hardware has a direct memory access controller.
The direct memory access controller can be integrated into disk/other controllers. But this type of design requires a separate direct memory access controller for each devices.
Generally, a single direct memory access (DMA) controller is available for regulating transfers to more than one devices or multiple devices, sometime at the same time.
It doesn't matter where the direct memory access controller is physically located, it has access to the system bus independent of the central processing unit as shown in the figure given below:
The direct memory access controller contains following several registers that can be written and read by the central processing unit:
Here the control register(s) specify the input/output port to use, the transfer direction, the transfer unit, and the byte numbers to transfer in one burst.