流程调度问题

时间:2009-04-19 14:34:40

标签: unix kernel internals interrupt-handling

  

例如,一个等待的过程   磁盘I / O完成就会睡上了   缓冲区头的地址   对应于数据   转移。当中断   磁盘驱动程序的例程注意到   转移完成,它打电话   唤醒缓冲区头。的的   中断使用内核堆栈   无论发生什么过程   当时正在运行,而唤醒则是   从该系统流程完成。

请您解释我强调的段落的最后一行。它是关于唤醒一直等待某个事件发生的过程,因此已经睡了。这段是来自高尔文。顺便问一下,你可以为学习unix操作系统提供一些好的书或链接吗?

感谢。

4 个答案:

答案 0 :(得分:1)

在收到中断时有某些进程正在运行。内核不会转换到其他进程上下文来处理它 - 这需要时间 - 它只是在当前上下文中执行必要的操作,并让调度程序知道下次调度时,等待进程已准备就绪继续。

周围有许多好的内部书籍。我喜欢各种McKusick et al 书籍,如The Design and Implementation of the FreeBSD Operating System

答案 1 :(得分:1)

莫里斯·巴赫的Design of the Unix Operating System是关于这一主题的最着名和最全面的书。

答案 2 :(得分:0)

一旦磁盘发出传输结束信号,就会执行I / O完成中断。无论内核当前在做什么,都可以完成此操作。中断处理程序通常非常小并且是独立的。因此,重用当前运行时环境(堆栈,CPU状态等)而不是完全上下文切换到单独的线程更快。在不利方面,这意味着只允许中断处理程序执行非常有限的操作,例如在其他位置设置标志或者对工作项进行排队。此外,他们必须非常小心地进行清理,以免跑步过程受到干扰。

答案 3 :(得分:0)

应该阅读Eric Raymond的'The Art of Unix Programming'来理解Unix的哲学和文化。要真正了解并理解其设计背后的原因。