Modern processors are improving their speed at a very fast rate. Memory design technologies try to keep pace with rapid evolution of processors, and combined with caching techniques, they partly succeed. However, disk speed is not improving at the same rate. On the contrary, seek time, latency and bandwidth are almost the same as ten years ago, and there is no much hope for the future. To prevent I/O to become a significant slowdown in computer systems, alternative solutions must be found. The paper presents an overview of software and architectural techniques that try to overcome the I/O problem: disk arrays (RAID), external-memory algorithms, interconnection networks, parallel I/O, in their relation with uniprocessor and multiprocessor architectures.