设备队列和等待队列之间有什么区别?

时间:2018-12-04 15:13:35

标签: operating-system scheduling

我的理解是,等待队列正在等待I / O请求,因此看来设备队列与等待队列相同还是它的子集?等待队列中有某些进程,但设备队列中没有吗?

1 个答案:

答案 0 :(得分:1)

  

设备队列和等待队列有什么区别?

我们假设(很有趣!)您有一个微内核和一个硬盘驱动器作为进程在用户空间中运行,其中特定的设备驱动程序维护某种数据结构(一个FIFO队列,一个不同的队列)对于每个IO优先级,都使用某种树...)来跟踪其设备的未决操作,并且此数据结构在设备驱动程序进程的虚拟地址空间中,以便设备驱动程序可以快速访问它。我可能会(如果它只是一个FIFO队列而不是什么好东西)会被称为“设备队列”。

我们还假设调度程序(在微内核内部)具有:

  • 某种数据结构,用于跟踪“准备运行”任务(正在等待CPU时间的任务)。我可能(如果这只是一个FIFO队列而不是什么好东西)很想将其称为“等待队列”,但是更有可能我将其称为“准备运行队列”。

  • 某种数据结构,用于跟踪等待时间过去的任务(例如,因为它们调用了sleep())。我可能也会(如果这只是一个排序列表而不是什么好东西)也很想将其称为“等待队列”,但是更有可能我将其称为“睡眠列表”。

请注意,内核没有理由拥有一个数据结构来跟踪正在等待消息的任务(从设备驱动程序或其他任何地方);只需为该情况做一个if(task->state == WAITING_FOR_MESSAGE) { unblock(task); }。以类似的方式,如果内核的页面错误处理程序需要让任务等待页面的数据被获取(例如,从交换空间获取),则它可以阻止任务(例如,将任务的状态设置为WAITING_FOR_PAGE_DATA),并且仅在数据到达时才需要取消阻止任务,也不需要数据结构来跟踪这些任务。