当我们从磁盘发出read命令时会发生什么?

时间:2017-01-07 18:30:34

标签: linux io linux-kernel kernel dma

假设有一个进程向内核发出特定扇区的读命令。

  1. 现在内核将此读取命令发送到磁盘,并且请求这些特定扇区的进程休眠(被阻止)并且它在等待队列中。
  2. 现在内核将此命令发送到磁盘(这是我的理解)读取这些扇区并在将这些扇区读入缓冲区后,将这些字节/数据复制到此位置(并将此命令发送到DMA控制器)
  3. 现在磁盘控制器将这些字节/数据读入缓冲区后,借助DMA(它要求DMA控制器)将这些数据传输到内核指定的内存区域。
  4. 现在同时(公共汽车很忙),所以CPU忙于做一些不需要总线的计算(怀疑)。 现在,从磁盘传输数据完成后,磁盘会向CPU发出中断。
  5. CPU确认中断并调用中断服务程序,此ISR负责唤醒已提交到队列中的相关进程。
  6. 现在我已经阅读了stackoverflow上的一些答案,我知道ISR知道哪个进程准确唤醒,这让我感到困惑,因为此刻,我们不知道我们需要唤醒哪个进程我们甚至不知道哪个请求是通过磁盘I / O提供的。
  7. 我的问题是:

    • 处理器/ ISR如何找出唤醒哪个进程
    • DMA控制器什么时候开始运行(是处理器要求DMA控制器采取行动将字节从磁盘传输到内存,还是磁盘控制器负责询问DMA控制器的服务)
    • 如何填充源地址寄存器和目标地址寄存器等DMA字段???

0 个答案:

没有答案