在早期计算机中,每个字节的读写都直接由CPU处理,没有DMA(直接内存访问,Direct Memory Access)的支持。这种组织方式对于多道程序设计的实现和性能有着重要的含义。让我们从技术背景和影响的角度逐步分析:
技术背景
在没有DMA的系统中,所有数据传输(例如从内存到外设,或外设到内存)都必须经过CPU。CPU需要执行指令来逐字节地读取或写入数据,这意味着:
数据传输完全占用CPU的计算周期。
CPU在处理I/O操作时无法执行其他计算任务。
对多道程序设计的含义
多道程序设计的核心目标是通过在某个程序等待时切换到其他程序执行,从而提高CPU利用率。然而,在没有DMA的早期系统中,这种组织方式对多道程序设计带来了以下影响:
CPU利用率受限
当一个程序发起I/O操作(如读取磁盘或打印数据)时,CPU必须全程参与数据传输,直到操作完成。
在这段时间内,CPU无法切换到其他程序执行计算任务,因为它被“绑定”在I/O处理上。这削弱了多道程序设计并发的效果,CPU的空闲时间减少幅度有限。
I/O密集型任务的瓶颈
如果多个程序同时需要频繁的I/O操作,CPU会花费大量时间在数据搬运上,而不是执行程序逻辑。
这种情况下,多道程序的优势无法充分发挥,因为系统整体性能受限于CPU处理I/O的速度,而非计算能力。
上下文切换的意义降低
多道程序依赖于在程序等待I/O时进行上下文切换。但如果CPU必须全程参与I/O,等待时间实际上变成了CPU的“忙等待”(busy waiting),而不是真正的空闲。
结果是,操作系统可能无法及时切换到其他就绪程序,降低了系统吞吐量。
程序设计的复杂性
程序员和操作系统设计者需要尽量减少I/O操作的频率,或优化数据传输的效率,以避免CPU被长时间占用。
例如,可能需要将数据分块处理,但这仍然无法完全摆脱CPU的直接参与。
与DMA的对比
DMA的出现解决了这一问题。DMA控制器可以独立于CPU处理数据传输,CPU只需发起I/O请求,然后就能释放出来执行其他任务。在多道程序设计中,DMA让CPU在程序等待I/O时真正“空闲”,从而可以切换到其他程序,提高了并发效率。而在没有DMA的早期系统中,这种理想状态难以实现。
实际影响的例子
假设有两个程序:
程序A:计算任务。
程序B:从磁盘读取数据。
在没有DMA的系统中,程序B发起磁盘读取时,CPU需要逐字节地将数据从磁盘控制器搬运到内存。假设读取1KB数据需要10万个CPU周期,这段时间内程序A无法运行。有了DMA,CPU只需发出读取指令(几百个周期),然后就能立即切换到程序A,DMA控制器在后台完成数据传输。
总结
在早期计算机中,每个字节的读写由CPU直接处理,这意味着多道程序设计的效率受到严重限制。CPU在I/O操作上的高占用率削弱了并发执行的优势,导致系统资源利用率提升有限。这也是后来DMA技术被引入的重要原因,它显著增强了多道程序设计的实际效果,推动了现代操作系统的发展。