Devices for communication between computers, such as modems and network cards, typically perform both input and output operations.
Any transfer of information to or from the CPU/memory combo, for example by reading data from a disk drive, is considered I/O.
An I/O algorithm is one designed to exploit locality and perform efficiently when exchanging data with a secondary storage device, such as a disk drive.
[clarification needed] A computer that uses memory-mapped I/O accesses hardware by reading and writing to specific memory locations, using the same assembly language instructions that computer would normally use to access memory.
[1] Both input and output devices have a data processing rate that can vary greatly.
[2] With some devices able to exchange data at very high speeds direct access to memory (DMA) without the continuous aid of a CPU is required.
[2] Higher-level operating system and programming facilities employ separate, more abstract I/O concepts and primitives.