【发布时间】:2011-03-01 05:12:58
【问题描述】:
假设一个进程向内核请求读取一个块,操作系统通过直接映射内存向磁盘发出请求(不确定是否正确),最终由磁盘控制器读取并完成读取请求,如何磁盘向处理器发出读取请求完成的信号?它是否使用相同的直接映射内存? (在这种情况下,不需要轮询,这是低效的吗?)。
【问题讨论】:
标签: input operating-system io interrupt
假设一个进程向内核请求读取一个块,操作系统通过直接映射内存向磁盘发出请求(不确定是否正确),最终由磁盘控制器读取并完成读取请求,如何磁盘向处理器发出读取请求完成的信号?它是否使用相同的直接映射内存? (在这种情况下,不需要轮询,这是低效的吗?)。
【问题讨论】:
标签: input operating-system io interrupt
在非常高的级别上,磁盘 IO 在磁盘控制器和 DMA(直接内存访问)控制器之间异步处理。一旦数据传输完成,就会引发中断,表示操作完成。
【讨论】:
在 x86 上,您的标签建议正确答案。内存映射 I/O 意味着对物理内存中某些位置的写入被重定向到磁盘的控制寄存器。当读取准备好时,第一个字被写入数据寄存器,一旦收到硬件中断通知,操作系统就可以通过相同的方法访问数据寄存器。然后,操作系统将一次读取一个字,将其写入任何最终缓冲区需要它。在汇编级别,这看起来就像一系列内存到内存的移动操作,北桥透明地处理内存映射的细节。
不过,在 DMA 的情况下,南桥上有一个 DMA 控制器(我认为)它充当中介。 CPU 中的操作系统对 DMA 控制器进行编程以进行必要的读取,包括在主内存中为其提供一个真正的缓冲区(即,未映射到设备控制器中的内存)。然后 DMA 控制器进行逐字复制,只有在所有数据都复制到主存后才引发磁盘中断。
【讨论】:
控制器通常会触发一个中断来表示操作已完成。尤其是在现代计算机和磁盘控制器中,它们使用 DMA 将数据传输到 RAM,然后触发中断,从而使 CPU 几乎无需做任何事情。
【讨论】: