当需要执行 I/O 操作时,可以说一个进程将处理器让给另一个进程。如果我需要执行 I/O 操作(例如,数据库查询或写入文件),我不明白为什么我需要将处理器交给另一个进程,而不仅仅是将其他进程放在处理器上. 那么究竟谁来执行这个 IO 操作呢?如果 IO 是对网络的请求,那么它或多或少是清晰和合乎逻辑的,因为这个请求会在另一台机器上执行。
当需要执行 I/O 操作时,可以说一个进程将处理器让给另一个进程。如果我需要执行 I/O 操作(例如,数据库查询或写入文件),我不明白为什么我需要将处理器交给另一个进程,而不仅仅是将其他进程放在处理器上. 那么究竟谁来执行这个 IO 操作呢?如果 IO 是对网络的请求,那么它或多或少是清晰和合乎逻辑的,因为这个请求会在另一台机器上执行。
所有 I/O 都由操作系统内核完成。如果无法立即获取数据(例如,从磁盘缓存中),则 OS 内核停止当前进程(如果它没有指示该操作是异步的)。并且在数据出现之前,该进程不会返回控制权。
请注意,处理器本身只能从 RAM 接收数据。如果您需要从硬盘驱动器或任何其他比 RAM 运行速度慢得多的输入/输出设备获取数据,则会发生以下情况: 1. 处理器向直接内存访问 (DMA) 控制器发出命令,告诉它“现在是硬盘驱动器会给你某某频道的数据,把它们放在内存中某某的地址。” 2、处理器指示硬盘控制器“将某某数据读入某某某DMA通道”。这样就完成了处理器接收数据的工作。就处理器而言,数据将花费很长时间。硬盘本身会读取数据,DMA 控制器会自己将数据放入内存,这将在不使用处理器的情况下发生。
一直以来,在没有处理器参与的情况下准备数据的同时,无论是在这台计算机的 I/O 设备上还是在网络上的某个地方,处理器都与一般无关。因此,使用处理器的权利将转移给现在需要它的进程。